From 8db264c512d03c7f65288c17f453fa515c596373 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Wed, 22 Dec 2021 22:54:01 +0100 Subject: [PATCH 001/276] =?UTF-8?q?=F0=9F=93=98=20Release=20notes=20(#1847?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update changelog and readme * Add build test to node backend test * Fix ephemeral hook for deletion * Fixed linebreak * Make mentions works even without the id * Update global indexes --- .github/workflows/backend.yml | 2 ++ .github/workflows/saas-update-backend.yml | 12 ++++---- .github/workflows/saas-update-front.yml | 6 ++-- README.md | 5 ++-- changelog.md | 23 +++++++++++++++ .../src/Twake/Core/Controller/Version.php | 6 ++-- .../src/services/console/clients/remote.ts | 2 +- .../src/services/console/web/controller.ts | 2 +- .../message-to-notifications/index.ts | 4 ++- .../messages/services/messages/service.ts | 4 ++- .../src/services/messages/services/utils.ts | 25 +++++++++++++++-- twake/backend/node/src/services/user/api.ts | 1 + .../node/src/services/user/entities/user.ts | 2 +- .../services/user/services/users/service.ts | 16 ++++++++--- twake/backend/node/src/version.ts | 6 ++-- twake/docker-compose.onpremise.mongo.yml | 28 +++++++++++++++++++ twake/frontend/src/app/environment/version.ts | 2 +- .../Apps/Messages/Message/Parts/Blocks.tsx | 4 ++- .../hooks/messages/useEphemeralMessages.ts | 12 +++++++- twake/update_version.js | 6 ++-- 20 files changed, 134 insertions(+), 34 deletions(-) create mode 100644 twake/docker-compose.onpremise.mongo.yml diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml index ca43515e8f..e3e556f942 100644 --- a/.github/workflows/backend.yml +++ b/.github/workflows/backend.yml @@ -12,6 +12,8 @@ jobs: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 + - name: build-test + run: cd twake && docker-compose -f docker-compose.tests.yml run -e NODE_OPTIONS=--unhandled-rejections=warn node npm run build - name: unit-test run: cd twake && docker-compose -f docker-compose.tests.yml run -e NODE_OPTIONS=--unhandled-rejections=warn node npm run test:unit - name: e2e-mongo-test diff --git a/.github/workflows/saas-update-backend.yml b/.github/workflows/saas-update-backend.yml index f943b10469..307824e60d 100644 --- a/.github/workflows/saas-update-backend.yml +++ b/.github/workflows/saas-update-backend.yml @@ -13,13 +13,13 @@ jobs: deploy-php: runs-on: ubuntu-20.04 steps: - - run: 'echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' @@ -40,13 +40,13 @@ jobs: deploy-node: runs-on: ubuntu-20.04 steps: - - run: 'echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' diff --git a/.github/workflows/saas-update-front.yml b/.github/workflows/saas-update-front.yml index bd287bb520..88649b43b3 100644 --- a/.github/workflows/saas-update-front.yml +++ b/.github/workflows/saas-update-front.yml @@ -48,13 +48,13 @@ jobs: runs-on: ubuntu-20.04 if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/qa' || github.ref == 'refs/heads/canary' steps: - - run: 'echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.846" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' diff --git a/README.md b/README.md index bcb21e9097..6d3d5223d7 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,7 @@ Or run your own local Twake instance with : cd twake sudo ./start.sh ``` + Twake will be running on http//localhost and by default redirect to https and uses a self-signed certificate. If you want to run http only then set SSL_CERTS=none at docker-compose.yml ## Documentation @@ -61,9 +62,9 @@ Everyone can contribute at their own level, even if they only give a few minutes Install Twake on your machine with docker-compose using the install documentation here : [doc.twake.app/installation](https://doc.twake.app/installation) -### Migration to 2021.Q1.385 +`cd twake; docker-compose -f docker-compose.onpremise.mongo.yml up -d` -If you migrate to the 2021.Q1 version for a 2020.Q4 version or earlier, please follow the documentation at https://github.com/Twake/Twake/tree/main/migration/2020Q3_to_2020Q4 +Twake will be available on port 3000. ## License diff --git a/changelog.md b/changelog.md index 29e46a333f..b25fa6726a 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,26 @@ +# Twake 2021.Q4.860 + +### Messages + +- Improved message top right menu +- Fixed message sending / edition / reaction / pinned etc, now instant ⚡️ +- User availability indicator 🟢 +- User is writing indicator + +### Workspace parameters + +- Improved integrations management page 🧹 +- Improved workspace users management page 🧹 +- Improved workspace preferences management page 🧹 + +### General + +- A lot of bug fixed, more to come on the 22 of January 🐞 +- Improved Twake loading time (still in progress) ⏰ +- New state management ( recoiljs.org ) on everything except channels and channels members +- Everything except Drive Tasks and Calendar was migrated to node backend 🧹 +- Twake is now working with a simplified docker-compose with only node + mongodb. Note that this works only with messages (no Drive, Calendar or Tasks yet) 🚀 + # Twake 2021.Q3.640 ### Messages diff --git a/twake/backend/core/src/Twake/Core/Controller/Version.php b/twake/backend/core/src/Twake/Core/Controller/Version.php index c544366535..c49ba8a603 100755 --- a/twake/backend/core/src/Twake/Core/Controller/Version.php +++ b/twake/backend/core/src/Twake/Core/Controller/Version.php @@ -49,10 +49,10 @@ function getVersion(Request $request) "auth_mode" => array_keys($auth), "auth" => $auth, "version" => [ - "current" => /* @VERSION_DETAIL */ "2021.Q4.846", + "current" => /* @VERSION_DETAIL */ "2021.Q4.860", "minimal" => [ - "web" => /* @MIN_VERSION_WEB */ "2021.Q4.846", - "mobile" => /* @MIN_VERSION_MOBILE */ "2021.Q4.846", + "web" => /* @MIN_VERSION_WEB */ "2021.Q4.860", + "mobile" => /* @MIN_VERSION_MOBILE */ "2021.Q4.860", ] ], "elastic_search_available" => !!$this->container->getParameter("es.host"), diff --git a/twake/backend/node/src/services/console/clients/remote.ts b/twake/backend/node/src/services/console/clients/remote.ts index bab92a765d..1730b66a1f 100644 --- a/twake/backend/node/src/services/console/clients/remote.ts +++ b/twake/backend/node/src/services/console/clients/remote.ts @@ -249,7 +249,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { } user = getInstance({}); - user.username_canonical = username; + user.username_canonical = (username || "").toLocaleLowerCase(); user.email_canonical = userDTO.email; user.deleted = false; } diff --git a/twake/backend/node/src/services/console/web/controller.ts b/twake/backend/node/src/services/console/web/controller.ts index d6c8dc0b78..bcb3122735 100644 --- a/twake/backend/node/src/services/console/web/controller.ts +++ b/twake/backend/node/src/services/console/web/controller.ts @@ -72,7 +72,7 @@ export class ConsoleController { first_name: request.body.first_name, last_name: request.body.last_name, email_canonical: email, - username_canonical: email.replace("@", "."), + username_canonical: (email.replace("@", ".") || "").toLocaleLowerCase(), }); const user = await this.userService.users.create(newUser); await this.userService.users.setPassword({ id: user.entity.id }, request.body.password); diff --git a/twake/backend/node/src/services/messages/services/engine/processors/message-to-notifications/index.ts b/twake/backend/node/src/services/messages/services/engine/processors/message-to-notifications/index.ts index 0d5adc3d72..13f6795fae 100644 --- a/twake/backend/node/src/services/messages/services/engine/processors/message-to-notifications/index.ts +++ b/twake/backend/node/src/services/messages/services/engine/processors/message-to-notifications/index.ts @@ -83,7 +83,9 @@ export class MessageToNotificationsProcessor { text = `${senderName}: ${text}`; } - const mentions = getMentions(messageResource); + const mentions = await getMentions(messageResource, async (username: string) => { + return await this.user.users.getByUsername(username); + }); const messageEvent: MessageNotification = { company_id: participant.company_id, diff --git a/twake/backend/node/src/services/messages/services/messages/service.ts b/twake/backend/node/src/services/messages/services/messages/service.ts index a71076edab..ae40b96e37 100644 --- a/twake/backend/node/src/services/messages/services/messages/service.ts +++ b/twake/backend/node/src/services/messages/services/messages/service.ts @@ -449,7 +449,9 @@ export class ThreadMessagesService implements MessageThreadMessagesServiceAPI { let ids: string[] = []; if (message.user_id) ids.push(message.user_id); if (message.pinned_info?.pinned_by) ids.push(message.pinned_info?.pinned_by); - const mentions = getMentions(message); + const mentions = await getMentions(message, async (username: string) => { + return await this.user.users.getByUsername(username); + }); for (const mentionedUser of mentions.users) { ids.push(mentionedUser); } diff --git a/twake/backend/node/src/services/messages/services/utils.ts b/twake/backend/node/src/services/messages/services/utils.ts index a3620bdfb0..99c001025f 100644 --- a/twake/backend/node/src/services/messages/services/utils.ts +++ b/twake/backend/node/src/services/messages/services/utils.ts @@ -2,6 +2,7 @@ import { FindOptions } from "../../../core/platform/services/database/services/o import { Pagination } from "../../../core/platform/framework/api/crud-service"; import { Message } from "../entities/messages"; import { specialMention } from "../types"; +import User from "../../../services/user/entities/user"; export const buildMessageListPagination = ( pagination: Pagination, @@ -16,14 +17,34 @@ export const buildMessageListPagination = ( }; }; -export const getMentions = (messageResource: Message) => { +export const getMentions = async ( + messageResource: Message, + findByUsername: (username: string) => Promise, +) => { + let idsFromUsernames = []; + try { + const usersNoIdOutput = (messageResource.text || "").match(/( |^)@[a-zA-Z0-9-_.]+/gm); + const usernames = (usersNoIdOutput || []).map(u => (u || "").trim().split("@").pop()); + for (const username of usernames) { + if (!"all|here|channel|everyone".split("|").includes(username)) { + const user = await findByUsername(username); + if (user) idsFromUsernames.push(user.id); + } + } + } catch (err) { + console.log(err); + } + const usersOutput = (messageResource.text || "").match(/@[^: ]+:([0-f-]{36})/gm); const globalOutput = (messageResource.text || "").match( /(^| )@(all|here|channel|everyone)([^a-z]|$)/gm, ); return { - users: (usersOutput || []).map(u => (u || "").trim().split(":").pop()), + users: [ + ...(usersOutput || []).map(u => (u || "").trim().split(":").pop()), + ...idsFromUsernames, + ], specials: (globalOutput || []).map(g => (g || "").trim().split("@").pop()) as specialMention[], }; }; diff --git a/twake/backend/node/src/services/user/api.ts b/twake/backend/node/src/services/user/api.ts index 3ef2bf9b70..2997e4f01c 100644 --- a/twake/backend/node/src/services/user/api.ts +++ b/twake/backend/node/src/services/user/api.ts @@ -52,6 +52,7 @@ export interface UsersServiceAPI context?: ExecutionContext, ): Promise>; + getByUsername(username: string): Promise; getByEmail(email: string): Promise; getByEmails(email: string[]): Promise; getByConsoleId(consoleUserId: string): Promise; diff --git a/twake/backend/node/src/services/user/entities/user.ts b/twake/backend/node/src/services/user/entities/user.ts index 34de074a24..d9ae913b1d 100644 --- a/twake/backend/node/src/services/user/entities/user.ts +++ b/twake/backend/node/src/services/user/entities/user.ts @@ -7,7 +7,7 @@ export const TYPE = "user"; @Entity(TYPE, { primaryKey: [["id"]], - globalIndexes: [["email_canonical"]], + globalIndexes: [["email_canonical"], ["username_canonical"]], type: TYPE, search, }) diff --git a/twake/backend/node/src/services/user/services/users/service.ts b/twake/backend/node/src/services/user/services/users/service.ts index dc0823b01d..49eda75a67 100644 --- a/twake/backend/node/src/services/user/services/users/service.ts +++ b/twake/backend/node/src/services/user/services/users/service.ts @@ -77,7 +77,9 @@ export class UserService implements UsersServiceAPI { if (user.identity_provider_id && !user.identity_provider) user.identity_provider = "console"; if (user.email_canonical) user.email_canonical = user.email_canonical.toLocaleLowerCase(); if (user.username_canonical) - user.username_canonical = user.username_canonical.toLocaleLowerCase(); + user.username_canonical = (user.username_canonical || "") + .toLocaleLowerCase() + .replace(/[^a-z0-9_-]/, ""); } async create(user: User): Promise> { @@ -204,6 +206,12 @@ export class UserService implements UsersServiceAPI { return await this.repository.findOne(pk); } + async getByUsername(username: string): Promise { + return await this.repository.findOne({ + username_canonical: (username || "").toLocaleLowerCase(), + }); + } + async getByConsoleId(id: string, service_id: string = "console"): Promise { const extUser = await this.extUserRepository.findOne({ service_id, external_id: id }); if (!extUser) { @@ -220,9 +228,9 @@ export class UserService implements UsersServiceAPI { return this.repository.findOne({ email_canonical: email }).then(user => Boolean(user)); } async getAvailableUsername(username: string): Promise { - const users = await this.repository.find({}).then(a => a.getEntities()); + const user = await this.getByUsername(username); - if (!users.find(user => user.username_canonical == username.toLocaleLowerCase())) { + if (!user) { return username; } @@ -230,7 +238,7 @@ export class UserService implements UsersServiceAPI { for (let i = 1; i < 1000; i++) { const dynamicUsername = username + i; - if (!users.find(user => user.username_canonical == dynamicUsername.toLocaleLowerCase())) { + if (!(await this.getByUsername(dynamicUsername.toLocaleLowerCase()))) { suitableUsername = dynamicUsername; break; } diff --git a/twake/backend/node/src/version.ts b/twake/backend/node/src/version.ts index 9e0dbdff2d..8f9fbf688f 100644 --- a/twake/backend/node/src/version.ts +++ b/twake/backend/node/src/version.ts @@ -1,7 +1,7 @@ export default { - current: /* @VERSION_DETAIL */ "2021.Q4.846", + current: /* @VERSION_DETAIL */ "2021.Q4.860", minimal: { - web: /* @MIN_VERSION_WEB */ "2021.Q4.846", - mobile: /* @MIN_VERSION_MOBILE */ "2021.Q4.846", + web: /* @MIN_VERSION_WEB */ "2021.Q4.860", + mobile: /* @MIN_VERSION_MOBILE */ "2021.Q4.860", }, }; diff --git a/twake/docker-compose.onpremise.mongo.yml b/twake/docker-compose.onpremise.mongo.yml new file mode 100644 index 0000000000..a4bf588285 --- /dev/null +++ b/twake/docker-compose.onpremise.mongo.yml @@ -0,0 +1,28 @@ +version: "3.4" + +services: + mongo: + container_name: mongo + image: mongo + volumes: + - ./docker-data/mongo:/data/db + + node: + image: twaketech/twake-node + ports: + - 3000:3000 + environment: + - DEV=production + - SEARCH_DRIVER=mongodb + - DB_DRIVER=mongodb + - PUBSUB_TYPE=local + build: + context: . + dockerfile: ./docker/twake-node/Dockerfile + target: development + volumes: + - ./docker-data/documents/:/storage/ + depends_on: + - mongo + links: + - mongo \ No newline at end of file diff --git a/twake/frontend/src/app/environment/version.ts b/twake/frontend/src/app/environment/version.ts index d36b4dd311..ec1bc99a61 100644 --- a/twake/frontend/src/app/environment/version.ts +++ b/twake/frontend/src/app/environment/version.ts @@ -1,5 +1,5 @@ export default { version: /* @VERSION */ '2021.Q4', - version_detail: /* @VERSION_DETAIL */ '2021.Q4.846', + version_detail: /* @VERSION_DETAIL */ '2021.Q4.860', version_name: /* @VERSION_NAME */ 'Albatros', }; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Blocks.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Blocks.tsx index 927f01cfa7..c30bcdb627 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Blocks.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Blocks.tsx @@ -48,7 +48,9 @@ export default React.memo((props: Props) => { }, }} > - {props.fallback} + {(props.fallback || '') + //Fix markdown simple line break + .replace(/\n/g, '  \n')} ) : ( diff --git a/twake/frontend/src/app/state/recoil/hooks/messages/useEphemeralMessages.ts b/twake/frontend/src/app/state/recoil/hooks/messages/useEphemeralMessages.ts index b32dd5bdc7..9cecfd1f65 100644 --- a/twake/frontend/src/app/state/recoil/hooks/messages/useEphemeralMessages.ts +++ b/twake/frontend/src/app/state/recoil/hooks/messages/useEphemeralMessages.ts @@ -4,11 +4,20 @@ import { useRealtimeRoom } from 'app/services/Realtime/useRealtime'; import CurrentUser from 'app/services/user/CurrentUser'; import _ from 'lodash'; import { useState } from 'react'; +import { atomFamily, useRecoilCallback, useRecoilState } from 'recoil'; import { AtomChannelKey } from '../../atoms/Messages'; import { useSetMessage } from './useMessage'; +const EphemeralMessageState = atomFamily({ + key: 'EphemeralMessageState', + default: key => null, +}); + export const useEphemeralMessages = (key: AtomChannelKey) => { - const [lastEphemeral, setLastEphemeral] = useState(null); + const [lastEphemeral, setLastEphemeral] = useRecoilState(EphemeralMessageState(key)); + const getLastEphemeral = useRecoilCallback(({ snapshot }) => (key: AtomChannelKey) => { + return snapshot.getLoadable(EphemeralMessageState(key)).valueMaybe(); + }); const setMessage = useSetMessage(key.companyId); useRealtimeRoom( @@ -17,6 +26,7 @@ export const useEphemeralMessages = (key: AtomChannelKey) => { async (action: string, event: any) => { if (action === 'created' || action === 'updated') { const message = event as NodeMessage; + const lastEphemeral = getLastEphemeral(key); if (message.ephemeral) { if ( message.subtype === 'deleted' && diff --git a/twake/update_version.js b/twake/update_version.js index eb15c580a6..35ab54e6ed 100755 --- a/twake/update_version.js +++ b/twake/update_version.js @@ -5,9 +5,9 @@ const versions = { VERSION_NAME: process.env.TWAKE_VERSION_NAME || "Albatros", VERSION: process.env.TWAKE_VERSION || "2021.Q4", - VERSION_DETAIL: process.env.TWAKE_VERSION_DETAIL || "2021.Q4.846", - MIN_VERSION_WEB: process.env.TWAKE_MIN_VERSION_WEB || "2021.Q4.846", - MIN_VERSION_MOBILE: process.env.TWAKE_MIN_VERSION_MOBILE || "2021.Q4.846", + VERSION_DETAIL: process.env.TWAKE_VERSION_DETAIL || "2021.Q4.860", + MIN_VERSION_WEB: process.env.TWAKE_MIN_VERSION_WEB || "2021.Q4.860", + MIN_VERSION_MOBILE: process.env.TWAKE_MIN_VERSION_MOBILE || "2021.Q4.860", }; const files = [ From 40e7c302d8f9ed67e63bca0549187b191e9f4815 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Thu, 23 Dec 2021 00:46:34 +0100 Subject: [PATCH 002/276] =?UTF-8?q?=F0=9F=9B=A0=20production=20patch=20(#1?= =?UTF-8?q?849)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix old drive files display * Minor fixes --- .../cli/cmds/migration_cmds/application.ts | 4 +- .../src/app/components/File/FileComponent.tsx | 40 +++++++++++++++++-- .../Twacode/PseudoMarkdownDictionary.tsx | 2 - .../MainView/Tabs/DefaultChannelTab.tsx | 2 +- .../Applications/CompanyApplicationsTable.tsx | 2 +- 5 files changed, 41 insertions(+), 9 deletions(-) diff --git a/twake/backend/node/src/cli/cmds/migration_cmds/application.ts b/twake/backend/node/src/cli/cmds/migration_cmds/application.ts index 744d84f936..c613da5108 100644 --- a/twake/backend/node/src/cli/cmds/migration_cmds/application.ts +++ b/twake/backend/node/src/cli/cmds/migration_cmds/application.ts @@ -197,9 +197,9 @@ export const importDepreciatedDisplayFields = ( : undefined; display.twake.configuration = []; - if (depreciatedDisplay.configuration?.can_configure_in_workspace) + if (depreciatedDisplay?.configuration?.can_configure_in_workspace) display.twake.configuration.push("global"); - if (depreciatedDisplay.configuration?.can_configure_in_channel) + if (depreciatedDisplay?.configuration?.can_configure_in_channel) display.twake.configuration.push("channel"); display.twake.direct = depreciatedDisplay?.member_app diff --git a/twake/frontend/src/app/components/File/FileComponent.tsx b/twake/frontend/src/app/components/File/FileComponent.tsx index 75a64e125d..b8f1119015 100644 --- a/twake/frontend/src/app/components/File/FileComponent.tsx +++ b/twake/frontend/src/app/components/File/FileComponent.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import classNames, { Argument } from 'classnames'; import { FileThumbnail, FileDetails, FileActions, FileProgress } from './parts'; @@ -15,6 +15,7 @@ import RouterService from 'app/services/RouterService'; import './File.scss'; import { PendingFileRecoilType } from 'app/models/File'; import Api from 'app/services/Api'; +import FileUploadAPIClient from '../FileUploads/FileUploadAPIClient'; type PropsType = { source: 'internal' | 'drive' | string; @@ -30,14 +31,15 @@ type PropsType = { export default ({ source, externalId, - file, + file: _file, className, context, progress, status, onRemove, }: PropsType) => { - const { companyId } = RouterService.getStateFromRoute(); + const { companyId, workspaceId } = RouterService.getStateFromRoute(); + const [file, setFile] = useState(_file); const classNameArguments: Argument[] = [ 'file-component', className, @@ -48,6 +50,34 @@ export default ({ }, ]; + useEffect(() => { + if (source === 'drive') { + (async () => { + if (typeof externalId === 'string') { + externalId = { id: externalId, workspace_id: workspaceId }; + } + + let driveFile = (await Api.post('/ajax/drive/v2/find', { + options: { + element_id: externalId?.id, + workspace_id: externalId?.workspace_id, + }, + })) as any; + driveFile = driveFile?.data || {}; + + setFile({ + ...file, + thumbnail: driveFile.preview_link, + name: driveFile.name, + size: driveFile.size, + type: FileUploadAPIClient.mimeToType( + FileUploadAPIClient.extensionToMime(driveFile.extension), + ), + }); + })(); + } + }, []); + const onClickFile = async (data: DataFileType, companyId: string) => { if (source === 'internal') { //Only if upload has ended @@ -63,6 +93,10 @@ export default ({ ); } if (source === 'drive') { + if (typeof externalId === 'string') { + externalId = { id: externalId, workspace_id: workspaceId }; + } + const file = (await Api.post('/ajax/drive/v2/find', { options: { element_id: externalId?.id, diff --git a/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.tsx b/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.tsx index 8b371a4784..c5837ea084 100644 --- a/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.tsx +++ b/twake/frontend/src/app/components/Twacode/PseudoMarkdownDictionary.tsx @@ -23,8 +23,6 @@ export const DynamicComponent = ({ eventContainer?: any; textTransform?: any; }) => { - console.log(type, child); - if (type === 'text_block_parent') { return {child}; } diff --git a/twake/frontend/src/app/scenes/Client/MainView/Tabs/DefaultChannelTab.tsx b/twake/frontend/src/app/scenes/Client/MainView/Tabs/DefaultChannelTab.tsx index f9e56aa857..c4c286cf5a 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/Tabs/DefaultChannelTab.tsx +++ b/twake/frontend/src/app/scenes/Client/MainView/Tabs/DefaultChannelTab.tsx @@ -96,7 +96,7 @@ export default ({ selected }: { selected: boolean }): JSX.Element => { reactElement: () => { const apps = getCompanyApplications(Groups.currentGroupId).filter( (app: Application) => - app?.display?.twake?.configuration?.includes('channel'), + (app?.display?.twake?.configuration || []).includes('channel'), ); if (apps.length) { diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx b/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx index a32b5eb954..c287d071db 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx +++ b/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx @@ -116,7 +116,7 @@ export default () => { const { key, ...application } = record; return (
- {!!application.display?.twake?.configuration?.includes('global') && ( + {!!(application.display?.twake?.configuration || []).includes('global') && (
)} diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.scss b/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.scss index cae7cc221b..8b60dc954b 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.scss +++ b/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.scss @@ -25,6 +25,9 @@ .board_name { line-height: 24px; height: 24px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } img.emojione { @@ -100,6 +103,9 @@ .board_name { line-height: 24px; height: 24px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } img.emojione { diff --git a/twake/frontend/src/app/services/Apps/Messages/clients/MessageAPIClient.ts b/twake/frontend/src/app/services/Apps/Messages/clients/MessageAPIClient.ts index 9c6d47e330..24fa0ba86f 100644 --- a/twake/frontend/src/app/services/Apps/Messages/clients/MessageAPIClient.ts +++ b/twake/frontend/src/app/services/Apps/Messages/clients/MessageAPIClient.ts @@ -29,7 +29,7 @@ class MessageAPIClient { }: { limit?: number; pageToken?: string; direction?: 'future' | 'history' } = {}, ) { const response = await Api.get<{ resources: NodeMessage[]; websockets: WebsocketRoom[] }>( - `${this.prefixUrl}/companies/${companyId}/threads/${threadId}/messages?limit=${limit}&page_token=${pageToken}&direction=${direction}`, + `${this.prefixUrl}/companies/${companyId}/threads/${threadId}/messages?limit=${limit}&include_users=1&page_token=${pageToken}&direction=${direction}`, ); this.realtime.set(threadId, response.websockets); return response.resources; @@ -37,7 +37,7 @@ class MessageAPIClient { async get(companyId: string, threadId: string, messageId: string) { const response = await Api.get<{ resource: MessageWithReplies }>( - `${this.prefixUrl}/companies/${companyId}/threads/${threadId}/messages/${messageId}`, + `${this.prefixUrl}/companies/${companyId}/threads/${threadId}/messages/${messageId}?include_users=1`, ); return response.resource; } diff --git a/twake/frontend/src/app/services/Apps/Messages/clients/MessageViewAPIClient.ts b/twake/frontend/src/app/services/Apps/Messages/clients/MessageViewAPIClient.ts index b293c15cbb..de3a5d1184 100644 --- a/twake/frontend/src/app/services/Apps/Messages/clients/MessageViewAPIClient.ts +++ b/twake/frontend/src/app/services/Apps/Messages/clients/MessageViewAPIClient.ts @@ -30,7 +30,7 @@ class MessageViewAPIClient { resources: MessageWithReplies[]; websockets: WebsocketRoom[]; }>( - `${this.prefixUrl}/companies/${companyId}/workspaces/${workspaceId}/channels/${channelId}/feed?replies_per_thread=${repliesPerThread}&limit=${limit}&page_token=${pageToken}&direction=${direction}&websockets=1`, + `${this.prefixUrl}/companies/${companyId}/workspaces/${workspaceId}/channels/${channelId}/feed?replies_per_thread=${repliesPerThread}&limit=${limit}&include_users=1&page_token=${pageToken}&direction=${direction}&websockets=1`, ); this.realtime.set('feed-' + channelId, response.websockets); return response.resources; From 644d860bfddbecf57f75dc4fad1b53957509df72 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Thu, 30 Dec 2021 15:59:21 +0100 Subject: [PATCH 005/276] =?UTF-8?q?=F0=9F=9B=A0=20Fix=20calendar=20change?= =?UTF-8?q?=20month=20issue=20(#1860)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix calendar change month issue * Fix Tasks props --- .../frontend/src/app/scenes/Apps/Calendar/CalendarContent.js | 4 ++-- .../frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js | 2 +- twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx | 3 +++ twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js | 2 +- .../src/app/scenes/Client/MainView/AppView/AppView.tsx | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/CalendarContent.js b/twake/frontend/src/app/scenes/Apps/Calendar/CalendarContent.js index a5250cc9bd..7ca23e38a7 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/CalendarContent.js +++ b/twake/frontend/src/app/scenes/Apps/Calendar/CalendarContent.js @@ -222,7 +222,7 @@ export default class Calendar extends Component { this.setLoadedRange('both', requested_min, requested_max); var calendar_list = Collections.get('calendars') - .findBy({ workspace_id: this.props.channel.data.workspace_id }) + .findBy({ workspace_id: RouterService.getStateFromRoute().workspaceId }) .map(cal => { return { calendar_id: cal.id, @@ -421,7 +421,7 @@ export default class Calendar extends Component { if (mode === 'both' || mode === 'workspace') { calendar_list = Collections.get('calendars') - .findBy({ workspace_id: this.props.channel.data.workspace_id }) + .findBy({ workspace_id: RouterService.getStateFromRoute().workspaceId }) .map(cal => { return { calendar_id: cal.id, diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js b/twake/frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js index e3d1326a63..8024f0245e 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js +++ b/twake/frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js @@ -31,7 +31,7 @@ export default class UnconfiguredTab extends Component { } render() { var calendar_list = Collections.get('calendars').findBy({ - workspace_id: this.props.channel.data.workspace_id, + workspace_id: RouterService.getStateFromRoute().workspaceId, }); return ( diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx b/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx index 37e23cdb75..f1c59084cc 100644 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx +++ b/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx @@ -1,9 +1,11 @@ +import { ChannelResource } from 'app/models/Channel'; import React from 'react'; import { ViewConfiguration } from '../../../services/AppView/AppViewService'; import { useTab } from '../../../state/recoil/hooks/useTabs'; import TasksContent from './TasksContent'; type Props = { + channel: ChannelResource; options: ViewConfiguration; }; @@ -15,6 +17,7 @@ export default (props: Props) => { { save({ ...tab, configuration }); }} diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js b/twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js index 6a2a18f6bf..ea59907572 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js +++ b/twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js @@ -36,7 +36,7 @@ export default class UnconfiguredTab extends Component { } this.creating = true; var board = Collections.get('boards').editCopy({}); - board.workspace_id = this.props.channel.data.workspace_id; + board.workspace_id = RouterService.getStateFromRoute().workspaceId; board.title = this.props.channel.data.name; board.emoji = this.props.channel.data.icon; Collections.get('boards').save(board, this.props.collectionKey, board => { diff --git a/twake/frontend/src/app/scenes/Client/MainView/AppView/AppView.tsx b/twake/frontend/src/app/scenes/Client/MainView/AppView/AppView.tsx index 3957c67858..e56ac0d921 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/AppView/AppView.tsx +++ b/twake/frontend/src/app/scenes/Client/MainView/AppView/AppView.tsx @@ -40,7 +40,7 @@ const AppView: FC = props => { case 'twake_calendar': return ; case 'twake_tasks': - return ; + return ; case 'messages': return ; default: From 906cb9d39a1d214777645974380b02c148398c12 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Mon, 3 Jan 2022 14:37:53 +0100 Subject: [PATCH 006/276] =?UTF-8?q?=F0=9F=A9=B9=20Patch=20January=203,=202?= =?UTF-8?q?022=20(#1862)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix rmq and frontend error * Fix useCompanyApplications * Improve onChangeCompanyApplications * Put back user images * Fix msg ack in rmq * Add logs --- .../node/src/core/platform/services/pubsub/api.ts | 7 ++++++- .../node/src/services/workspaces/web/routes.ts | 2 +- .../e2e/workspaces/workspace-pending-users.spec.ts | 11 ++++++----- twake/frontend/src/app/models/Message.ts | 4 ++++ twake/frontend/src/app/models/User.ts | 1 + .../src/app/scenes/Apps/Messages/ListBuilder.tsx | 2 -- .../Apps/Messages/Message/Parts/MessageHeader.tsx | 4 ++-- .../app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx | 6 +----- .../Pages/WorkspacePartnerTabs/Pending.tsx | 2 +- twake/frontend/src/app/services/user/UserService.ts | 6 +++--- .../src/app/state/recoil/atoms/CompanyApplications.ts | 6 ++++-- .../app/state/recoil/hooks/useCompanyApplications.ts | 6 ++++-- 12 files changed, 33 insertions(+), 24 deletions(-) diff --git a/twake/backend/node/src/core/platform/services/pubsub/api.ts b/twake/backend/node/src/core/platform/services/pubsub/api.ts index da43faf125..0876c68f98 100644 --- a/twake/backend/node/src/core/platform/services/pubsub/api.ts +++ b/twake/backend/node/src/core/platform/services/pubsub/api.ts @@ -226,13 +226,15 @@ export class PubsubServiceProcessor `PubsubServiceProcessor.handler.${this.handler.name}:${message.id} - Message is invalid`, ); + //Validate rabbitmq message, we will not process it again + if (this.handler?.options?.ack && message?.ack) message?.ack(); return; } } try { const result = await this.process(message); - if (this.handler?.options?.ack) { + if (this.handler?.options?.ack && message?.ack) { logger.debug( `PubsubServiceProcessor.handler.${this.handler.name}:${message.id} - Acknowledging message %o`, message, @@ -245,6 +247,9 @@ export class PubsubServiceProcessor } } catch (error) { this.handleError(message, error); + + //Fixme Validate message because we don't have max retry handler + if (this.handler?.options?.ack && message?.ack) message?.ack(); } } diff --git a/twake/backend/node/src/services/workspaces/web/routes.ts b/twake/backend/node/src/services/workspaces/web/routes.ts index af65419545..4ab542ab61 100644 --- a/twake/backend/node/src/services/workspaces/web/routes.ts +++ b/twake/backend/node/src/services/workspaces/web/routes.ts @@ -243,7 +243,7 @@ const routes: FastifyPluginCallback<{ fastify.route({ method: "GET", - url: `${workspacePendingUsersUrl}/:email`, + url: `${workspacePendingUsersUrl}`, preHandler: [accessControl, companyCheck, checkUserIsWorkspaceAdmin], preValidation: [fastify.authenticate], schema: getWorkspacePendingUsersSchema, diff --git a/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts b/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts index f5760cf6d2..e57c94bcce 100644 --- a/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts +++ b/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts @@ -336,7 +336,7 @@ describe("The /workspace/pending users API", () => { const response = await platform.app.inject({ method: "GET", - url: `${url}/companies/${companyId}/workspaces/${nonExistentId}/pending/${email}`, + url: `${url}/companies/${companyId}/workspaces/${nonExistentId}/pending`, }); expect(response.statusCode).toBe(401); done(); @@ -351,7 +351,7 @@ describe("The /workspace/pending users API", () => { const jwtToken = await platform.auth.getJWTToken({ sub: userId }); const response = await platform.app.inject({ method: "GET", - url: `${url}/companies/${companyId}/workspaces/${nonExistentId}/pending/${email}`, + url: `${url}/companies/${companyId}/workspaces/${nonExistentId}/pending`, headers: { authorization: `Bearer ${jwtToken}` }, }); @@ -369,7 +369,7 @@ describe("The /workspace/pending users API", () => { const response = await platform.app.inject({ method: "GET", - url: `${url}/companies/${companyId}/workspaces/${workspaceId}/pending/${email}`, + url: `${url}/companies/${companyId}/workspaces/${workspaceId}/pending`, headers: { authorization: `Bearer ${jwtToken}` }, }); @@ -381,18 +381,18 @@ describe("The /workspace/pending users API", () => { const companyId = testDbService.company.id; const workspaceId = testDbService.workspaces[0].workspace.id; const userId = testDbService.workspaces[0].users[0].id; - const email = "first@test-user.com"; const jwtToken = await platform.auth.getJWTToken({ sub: userId }); const response = await platform.app.inject({ method: "GET", - url: `${url}/companies/${companyId}/workspaces/${workspaceId}/pending/${email}`, + url: `${url}/companies/${companyId}/workspaces/${workspaceId}/pending`, headers: { authorization: `Bearer ${jwtToken}` }, }); expect(response.statusCode).toBe(200); const resources = response.json()["resources"]; + console.log("resources A: ", resources); expect(resources.length).toBe(2); expect(resources[0]).toMatchObject({ @@ -427,6 +427,7 @@ describe("The /workspace/pending users API", () => { const resources = response.json()["resources"]; + console.log("resources B: ", resources); expect(resources.find((a: any) => a.user.email === emailForExistedUser)).toBeDefined(); done(); diff --git a/twake/frontend/src/app/models/Message.ts b/twake/frontend/src/app/models/Message.ts index 06a723ca10..3377fa1f54 100644 --- a/twake/frontend/src/app/models/Message.ts +++ b/twake/frontend/src/app/models/Message.ts @@ -1,3 +1,5 @@ +import { UserType } from './User'; + export type ReactionType = { name: string; count: number; users: string[] }; export type ThumbnailType = { @@ -184,6 +186,8 @@ export type NodeMessage = { ephemeral: EphemeralMessage | null; //Used for non-persisted messages (like interractive messages) + users?: UserType[]; + //Used to display loader _status?: 'sending' | 'failed' | 'sent' | 'cancelled'; diff --git a/twake/frontend/src/app/models/User.ts b/twake/frontend/src/app/models/User.ts index 2c535eeac5..3019289d48 100644 --- a/twake/frontend/src/app/models/User.ts +++ b/twake/frontend/src/app/models/User.ts @@ -21,6 +21,7 @@ export type UserType = { notifications_preferences?: any; status?: string; status_icon?: string[]; + picture?: string; thumbnail?: string; timezone_offset?: string; tutorial_status?: any; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx b/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx index 09f9578a5a..6b81dc5d0b 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx @@ -46,8 +46,6 @@ export default React.memo( firstItemId.current = itemId(items[0]); } - (window as any).globalThis.VIRTUOSO_LOG_LEVEL = LogLevel.DEBUG; - if (items.length === 0) { return
{initiated ? emptyListComponent || <> : <>}
; } diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageHeader.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageHeader.tsx index df3e57fb4b..6ef5d4f5fd 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageHeader.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageHeader.tsx @@ -42,7 +42,7 @@ export default (props: Props) => { let { message } = useMessage(context); let parentMessage: NodeMessage | null = useMessage({ ...context, id: message.thread_id }).message; - let user = useUser(message.user_id); + let user = (message.users || []).find(u => u.id === message.user_id); const companyApplications = useRecoilState(CompanyApplicationsStateFamily(context.companyId))[0] || []; let application = companyApplications.find(a => a.id === message.application_id); @@ -86,7 +86,7 @@ export default (props: Props) => { }; const icon = user?.status ? user.status.split(' ')[0] : undefined; - const status = user?.status ? user.status.split(' ').splice(1).join(" ") : undefined; + const status = user?.status ? user.status.split(' ').splice(1).join(' ') : undefined; return (
{ const context = useContext(MessageContext); let { message } = useMessage(context); - let user = useUser(message.user_id); + let user = (message.users || []).find(u => u.id === message.user_id); const companyApplications = useRecoilState(CompanyApplicationsStateFamily(context.companyId))[0] || []; let application = companyApplications.find(a => a.id === message.application_id); diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx b/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx index dffe741fc6..78f05622cc 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx +++ b/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx @@ -42,7 +42,7 @@ export default (props: { filter: string }) => { }, [props.filter, data]); const refreshPendingEmails = async () => { - const pendingEmailRoute = `${prefixRoute}/companies/${companyId}/workspaces/${workspaceId}/pending/email`; + const pendingEmailRoute = `${prefixRoute}/companies/${companyId}/workspaces/${workspaceId}/pending`; try { setLoading(true); diff --git a/twake/frontend/src/app/services/user/UserService.ts b/twake/frontend/src/app/services/user/UserService.ts index 7dd7df1bf8..ef9254cb4f 100755 --- a/twake/frontend/src/app/services/user/UserService.ts +++ b/twake/frontend/src/app/services/user/UserService.ts @@ -65,7 +65,9 @@ class User { return thumbnail; } - if (!user || !user.thumbnail || user.thumbnail === '') { + if (user && (user.thumbnail || user.picture)) { + thumbnail = addApiUrlIfNeeded(user.picture || user.thumbnail || ''); + } else { let output = 0; const string = user?.id || ''; for (let i = 0; i < string.length; i++) { @@ -73,8 +75,6 @@ class User { } const i = output % 100; thumbnail = getAsFrontUrl(`/public/identicon/${i}.png`); - } else { - thumbnail = addApiUrlIfNeeded(user.thumbnail); } if (user.deleted) { diff --git a/twake/frontend/src/app/state/recoil/atoms/CompanyApplications.ts b/twake/frontend/src/app/state/recoil/atoms/CompanyApplications.ts index 8f02f9c2c4..961718489d 100644 --- a/twake/frontend/src/app/state/recoil/atoms/CompanyApplications.ts +++ b/twake/frontend/src/app/state/recoil/atoms/CompanyApplications.ts @@ -21,8 +21,10 @@ export const onChangeCompanyApplications = (companyId: string, _applications: Ap const applications = _.cloneDeep(_applications); companyApplicationsMap.set(companyId, applications); (applications || []).forEach(a => { - companyApplicationMap.set(a.id, a); - Collections.get('applications').updateObject(a); + if (!_.isEqual(a, companyApplicationMap.get(a.id))) { + companyApplicationMap.set(a.id, a); + Collections.get('applications').updateObject(a); + } }); }; //Ends retro compatibility diff --git a/twake/frontend/src/app/state/recoil/hooks/useCompanyApplications.ts b/twake/frontend/src/app/state/recoil/hooks/useCompanyApplications.ts index 456921083f..f53db63f86 100644 --- a/twake/frontend/src/app/state/recoil/hooks/useCompanyApplications.ts +++ b/twake/frontend/src/app/state/recoil/hooks/useCompanyApplications.ts @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import { useEffect, useState } from 'react'; import { useRecoilState } from 'recoil'; import Logger from 'app/services/Logger'; import Languages from 'services/languages/languages'; @@ -26,7 +26,9 @@ export function useCompanyApplications(companyId: string = '') { const [applications, setApplications] = useRecoilState(CompanyApplicationsStateFamily(companyId)); const [loading, setLoading] = useState(false); - onChangeCompanyApplications(companyId, applications); + useEffect(() => { + onChangeCompanyApplications(companyId, applications); + }, [applications]); const refresh = async () => { try { From 2ceb585b66cb4221bc3212ab824980e85f49c8a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Vieira?= <36481167+stephanevieira75@users.noreply.github.com> Date: Mon, 3 Jan 2022 13:38:32 +0000 Subject: [PATCH 007/276] =?UTF-8?q?=F0=9F=9B=A0=20#1615=20Fix=20input=20is?= =?UTF-8?q?sues=20(#1841)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #1615 Fix input shortcuts Shift+Enter/Enter * #1615 Handle pasted text / Fix tab indentation while using list / Start implementing tab indentation for unstyled/code blocks * #1815 Use primary background for active EditorToolbar buttons * #1615 Improve suggestion list * #1615 Improve russian translations --- twake/frontend/public/locales/en.json | 6 +- twake/frontend/public/locales/es.json | 6 +- twake/frontend/public/locales/fr.json | 6 +- twake/frontend/public/locales/ru.json | 6 +- .../app/components/RichTextEditor/Editor.tsx | 63 ++++++-- .../RichTextEditor/EditorToolbar.scss | 2 +- .../components/RichTextEditor/EditorUtils.ts | 92 +++++++----- .../plugins/suggestion/SuggestionList.tsx | 140 ++++++++++++------ .../plugins/suggestion/utils.ts | 15 ++ 9 files changed, 239 insertions(+), 97 deletions(-) create mode 100644 twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/utils.ts diff --git a/twake/frontend/public/locales/en.json b/twake/frontend/public/locales/en.json index 92f8aeb391..0543d1a7c0 100644 --- a/twake/frontend/public/locales/en.json +++ b/twake/frontend/public/locales/en.json @@ -859,5 +859,9 @@ "scenes.join.twake_description": "Twake is an open-source digital workspace built to improve your team productivity", "scenes.join.login_first_button": "Log in or create an account first", "scenes.join.join_the_team_button": "Join the team", - "scenes.app.channelsbar.currentuser.reset": "Reset" + "scenes.app.channelsbar.currentuser.reset": "Reset", + "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Write at least three letters to display users", + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "No user found", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"No emoji found", + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No command found" } diff --git a/twake/frontend/public/locales/es.json b/twake/frontend/public/locales/es.json index b3ba8801f4..ba4a8d3485 100644 --- a/twake/frontend/public/locales/es.json +++ b/twake/frontend/public/locales/es.json @@ -827,5 +827,9 @@ "components.emoji_picker.categories.activity": "Actividad", "scenes.client.main_view.main_header.search_input": "Buscar", "general.pause": "Pausa", - "scenes.apps.messages.input.replied_to": "respondió a " + "scenes.apps.messages.input.replied_to": "respondió a ", + "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Escriba al menos tres letras para mostrar los usuarios", + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "No se han encontrado usuarios", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"No se han encontrado emojis", + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No se han encontrado comandos" } diff --git a/twake/frontend/public/locales/fr.json b/twake/frontend/public/locales/fr.json index 73009b0d71..5d914ff4d9 100644 --- a/twake/frontend/public/locales/fr.json +++ b/twake/frontend/public/locales/fr.json @@ -847,5 +847,9 @@ "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.bad_format": "Mauvais format, seuls les png, gif et jpg sont autorisés", "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.unknown": "Erreur inconnue", "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.prefix": "Erreur", - "scenes.app.channelsbar.currentuser.reset": "Réinitialiser" + "scenes.app.channelsbar.currentuser.reset": "Réinitialiser", + "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Écrivez au moins trois lettres pour afficher des utilisateurs", + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "Aucun utilisateur trouvé", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"Aucun emoji trouvé", + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Aucune commande trouvé" } diff --git a/twake/frontend/public/locales/ru.json b/twake/frontend/public/locales/ru.json index 228b5f4c87..30c372c20a 100644 --- a/twake/frontend/public/locales/ru.json +++ b/twake/frontend/public/locales/ru.json @@ -674,5 +674,9 @@ "scenes.app.integrations_parameters.company_applications_table.title": "Установлен в вашей компании", "app.state.recoil.hooks.use_current_company_applications.toaster_delete" : "Успешно удалил {{$1}} из вашей компании", "app.state.recoil.hooks.use_current_company_applications.toaster_add" : "{{$1}} успешно добавлен в вашу компанию", - "scenes.apps.messages.input.replied_to" : "ответил " + "scenes.apps.messages.input.replied_to" : "ответил ", + "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Введите минимум три символа для отображения пользователей", + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "Пользователь не найден", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"Не найдено ни одного эмодзи", + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Команда не найдена" } \ No newline at end of file diff --git a/twake/frontend/src/app/components/RichTextEditor/Editor.tsx b/twake/frontend/src/app/components/RichTextEditor/Editor.tsx index 178e161a55..2cf25e6a9d 100644 --- a/twake/frontend/src/app/components/RichTextEditor/Editor.tsx +++ b/twake/frontend/src/app/components/RichTextEditor/Editor.tsx @@ -20,7 +20,9 @@ import { getCaretCoordinates, getCurrentBlock, getTextToMatch, + insertText, isMatching, + replaceText, resetBlockWithType, splitBlockWithType, } from './EditorUtils'; @@ -29,6 +31,7 @@ import './Editor.scss'; import { TextCountService } from 'app/components/RichTextEditor/TextCount'; import useOnScreen from 'app/services/hooks/useOnScreen'; import Logger from 'app/services/Logger'; +import 'draft-js/dist/Draft.css'; const { isSoftNewlineEvent } = KeyBindingUtil; @@ -186,11 +189,6 @@ export class EditorView extends React.Component { * Handle return before a new block is added to the editor state */ handleReturn(e: SyntheticKeyboardEvent, editorState: EditorState): DraftHandleValue { - // Shift+Enter adds a soft new line - if (this._handleReturnSoftNewline(e, editorState)) { - return 'handled'; - } - // when displaying suggestion, enter will select the current one if (this.isDisplayingSuggestions()) { const result = this.onSuggestionSelected( @@ -207,16 +205,25 @@ export class EditorView extends React.Component { const currentBlock = getCurrentBlock(editorState); const blockType = currentBlock.getType(); - // When on a list, pressing Enter 2 times will add a new unstyled block - if (currentBlock.getLength() === 0) { - if (['unordered-list-item', 'ordered-list-item'].includes(blockType)) { - // Update the current block as unstyled one - this.onChange(resetBlockWithType(editorState, 'unstyled')); - return 'handled'; + // When on a list, if the current block length is 0 while pressing Shift+Enter 2 times will + // add a new unstyled block otherwise, we split the block with the current style type + // Pressing Enter will submit the message + if (['unordered-list-item', 'ordered-list-item'].includes(blockType)) { + if (e.shiftKey) { + this.onChange( + currentBlock.getText().length === 0 + ? resetBlockWithType(editorState, 'unstyled') + : splitBlockWithType(editorState, blockType, selection.getStartOffset(), false), + ); } else { this.submit(editorState); - return 'handled'; } + return 'handled'; + } + + // Shift+Enter adds a soft new line + if (this._handleReturnSoftNewline(e, editorState)) { + return 'handled'; } if (selection.isCollapsed()) { @@ -344,7 +351,7 @@ export class EditorView extends React.Component { return false; }); - if (triggered && this.state.activeSuggestion?.items.length) { + if (triggered) { this.setState({ displaySuggestion: true }); } else { this.resetState(); @@ -462,6 +469,8 @@ export class EditorView extends React.Component { onTab(e: SyntheticKeyboardEvent): void { e.preventDefault(); + this.changeIndent(e, e.shiftKey ? 'decrease' : 'increase'); + if (this.isDisplayingSuggestions()) { const result = this.onSuggestionSelected( this.state.activeSuggestion?.items[this.state.suggestionIndex], @@ -475,6 +484,27 @@ export class EditorView extends React.Component { this.props.onTab && this.props.onTab(); } + changeIndent = (e: SyntheticKeyboardEvent, indentDirection: 'increase' | 'decrease') => { + const currentBlockType = RichUtils.getCurrentBlockType(this.props.editorState); + const tabChar = '\u2003'; + const isBlockListType = + currentBlockType === 'ordered-list-item' || currentBlockType === 'unordered-list-item'; + const maxDepth = 4; + + if (!isBlockListType) { + if (indentDirection === 'increase') { + this.onChange(insertText(tabChar, this.props.editorState)); + } + + if (indentDirection === 'decrease') { + // FIX ME find a way to decrease unstyled/code-block block indentation + this.onChange(replaceText('', this.props.editorState)); + } + } else { + this.onChange(RichUtils.onTab(e, this.props.editorState, maxDepth)); + } + }; + handlePastedFiles(files: Blob[]): DraftHandleValue { if (this.props.onFilePaste) { this.props.onFilePaste(files); @@ -605,6 +635,11 @@ export class EditorView extends React.Component { }); } + handlePastedText(text: string, _html: string, editorState: EditorState) { + this.onChange(replaceText(text, editorState)); + return text ? 'handled' : 'not-handled'; + } + render() { return ( <> @@ -622,6 +657,7 @@ export class EditorView extends React.Component { onChange={this.onChange} handleKeyCommand={this.handleKeyCommand} handleReturn={this.handleReturn} + handlePastedText={this.handlePastedText} handleBeforeInput={this.handleBeforeInput} onDownArrow={this.onDownArrow} onUpArrow={this.onUpArrow} @@ -635,6 +671,7 @@ export class EditorView extends React.Component {
{this.state.isVisible && this.state.displaySuggestion && this.state.suggestionType && ( + suggestionType={this.state.suggestionType} id={this.state.activeSuggestion?.id || ''} search={this.state.activeSuggestion?.searchText || ''} list={this.state.activeSuggestion?.items} diff --git a/twake/frontend/src/app/components/RichTextEditor/EditorToolbar.scss b/twake/frontend/src/app/components/RichTextEditor/EditorToolbar.scss index fc0801b52a..d58d705fa6 100644 --- a/twake/frontend/src/app/components/RichTextEditor/EditorToolbar.scss +++ b/twake/frontend/src/app/components/RichTextEditor/EditorToolbar.scss @@ -15,7 +15,7 @@ &.active { color: var(--black); - background: var(--grey-background); + background: var(--primary-background); } } diff --git a/twake/frontend/src/app/components/RichTextEditor/EditorUtils.ts b/twake/frontend/src/app/components/RichTextEditor/EditorUtils.ts index 204e046e36..db0984efeb 100644 --- a/twake/frontend/src/app/components/RichTextEditor/EditorUtils.ts +++ b/twake/frontend/src/app/components/RichTextEditor/EditorUtils.ts @@ -1,5 +1,5 @@ -import { ContentBlock, EditorState, Modifier } from "draft-js"; -import { getSelectedBlock, getSelectionEntity, getEntityRange } from "draftjs-utils"; +import { ContentBlock, EditorState, Modifier } from 'draft-js'; +import { getSelectedBlock, getSelectionEntity, getEntityRange } from 'draftjs-utils'; export type SearchMatchType = { // the input text we searched in @@ -16,16 +16,21 @@ export type SearchMatchType = { export function getCurrentBlock(editorState: EditorState): ContentBlock { return editorState.getCurrentContent().getBlockForKey(editorState.getSelection().getStartKey()); -}; +} /** * Add a block after the current one with given type and initial content * * @param editorState - * @param newType - * @param initialContent + * @param newType + * @param initialContent */ -export const splitBlockWithType = (editorState: EditorState, type = "unstyled", splitOffset: number, deleteAfter: boolean): EditorState => { +export const splitBlockWithType = ( + editorState: EditorState, + type = 'unstyled', + splitOffset: number, + deleteAfter: boolean, +): EditorState => { let contentState = editorState.getCurrentContent(); const selection = editorState.getSelection(); let updatedSelection = selection.merge({ @@ -36,8 +41,8 @@ export const splitBlockWithType = (editorState: EditorState, type = "unstyled", let newEditorState = EditorState.acceptSelection(editorState, updatedSelection); contentState = Modifier.splitBlock(contentState, updatedSelection); - newEditorState = EditorState.push(editorState, contentState, "split-block"); - newEditorState = resetBlockWithType(newEditorState, type, ""); + newEditorState = EditorState.push(editorState, contentState, 'split-block'); + newEditorState = resetBlockWithType(newEditorState, type, ''); if (deleteAfter) { let contentState = newEditorState.getCurrentContent(); @@ -51,7 +56,7 @@ export const splitBlockWithType = (editorState: EditorState, type = "unstyled", contentState = Modifier.replaceText( newEditorState.getCurrentContent(), updatedSelection, - "", + '', newEditorState.getCurrentInlineStyle(), ); @@ -65,12 +70,16 @@ export const splitBlockWithType = (editorState: EditorState, type = "unstyled", * Will reset the current block with the given type and the initial content * Note that it will remove all the text already existing * - * @param editorState - * @param newType - * @param initialContent - * @returns + * @param editorState + * @param newType + * @param initialContent + * @returns */ -export const resetBlockWithType = (editorState: EditorState, newType = "unstyled", initialContent = ""): EditorState => { +export const resetBlockWithType = ( + editorState: EditorState, + newType = 'unstyled', + initialContent = '', +): EditorState => { let contentState = editorState.getCurrentContent(); const focusOffset = editorState.getSelection().getFocusOffset(); const updatedSelection = editorState.getSelection().merge({ @@ -90,9 +99,8 @@ export const resetBlockWithType = (editorState: EditorState, newType = "unstyled return EditorState.push(editorState, contentState, 'change-block-type'); }; - -export function isMatching(trigger: string | RegExp, textToMatch: string | null) { - if (typeof trigger === "string") { +export function isMatching(trigger: string | RegExp, textToMatch: string | null) { + if (typeof trigger === 'string') { return getTriggerRange(trigger, textToMatch); } else if (trigger instanceof RegExp) { return getTriggerMatchRange(trigger, textToMatch); @@ -116,8 +124,7 @@ export function getTriggerMatchRange(regexp: RegExp, text: string | null) { } export function getTriggerRange(term: string, text: string | null) { - if (!text || /\s+$/.test(text)) - return null; + if (!text || /\s+$/.test(text)) return null; const start = text.lastIndexOf(term); if (start === -1) { @@ -129,7 +136,11 @@ export function getTriggerRange(term: string, text: string | null) { }; } -export function getTextToMatch(editorState: EditorState, separator: string = " ", returnFullTextForEntitiesTypes: Array = []): SearchMatchType | undefined { +export function getTextToMatch( + editorState: EditorState, + separator: string = ' ', + returnFullTextForEntitiesTypes: Array = [], +): SearchMatchType | undefined { const selection = editorState.getSelection(); const selectedBlock: ContentBlock = getSelectedBlock(editorState); const entity = getSelectionEntity(editorState); @@ -141,7 +152,12 @@ export function getTextToMatch(editorState: EditorState, separator: string = " " focusOffset: 0, }; - if (entity && returnFullTextForEntitiesTypes.includes(editorState.getCurrentContent().getEntity(entity).getType())) { + if ( + entity && + returnFullTextForEntitiesTypes.includes( + editorState.getCurrentContent().getEntity(entity).getType(), + ) + ) { result = { input: getEntityRange(editorState, entity).text, text: getEntityRange(editorState, entity).text, @@ -155,13 +171,13 @@ export function getTextToMatch(editorState: EditorState, separator: string = " " // get the index of the previous separator before the focusOffset (ie before the current cursor position) let previousSeparator = selectedBlockText.lastIndexOf(separator, focusOffset); - let softLineIndex = selectedBlockText.lastIndexOf("\n", focusOffset); + let softLineIndex = selectedBlockText.lastIndexOf('\n', focusOffset); previousSeparator = softLineIndex >= previousSeparator ? softLineIndex : previousSeparator; // get the index of the next separator after the focusOffset (ie after the current cirsor position) let endOfTextIndex = 0; let nextSeparator = selectedBlockText.indexOf(separator, focusOffset); - softLineIndex = selectedBlockText.indexOf("\n", focusOffset); + softLineIndex = selectedBlockText.indexOf('\n', focusOffset); if (nextSeparator === -1 && softLineIndex === -1) { // can not find separator nor soft line: this is the end of the string @@ -178,7 +194,10 @@ export function getTextToMatch(editorState: EditorState, separator: string = " " endOfTextIndex = softLineIndex >= nextSeparator ? nextSeparator : softLineIndex; } - const text = selectedBlockText.substring(previousSeparator === -1 ? 0 : previousSeparator, endOfTextIndex); + const text = selectedBlockText.substring( + previousSeparator === -1 ? 0 : previousSeparator, + endOfTextIndex, + ); result = { input: selectedBlockText, @@ -192,7 +211,10 @@ export function getTextToMatch(editorState: EditorState, separator: string = " " return result; } -export function getInsertRange(editorState: EditorState, firstCharacter: string): { start: number, end: number } { +export function getInsertRange( + editorState: EditorState, + firstCharacter: string, +): { start: number; end: number } { const selection = editorState.getSelection(); const content = editorState.getCurrentContent(); const anchorKey = selection.getAnchorKey(); @@ -207,8 +229,8 @@ export function getInsertRange(editorState: EditorState, firstCharacter: string) }; } -export const getSelection = (root: Window = window): Selection | null => { - let selection: Selection | null = null; +export const getSelection = (root: Window = window): Selection | null => { + let selection: Selection | null = null; if (root.getSelection) { selection = root.getSelection(); } else if (root.document.getSelection) { @@ -244,11 +266,15 @@ export function getCaretCoordinates(): DOMRect | null { export function insertText(text: string, editorState: EditorState): EditorState { const selection = editorState.getSelection(); const cs = Modifier.insertText(editorState.getCurrentContent(), selection, text); - const newEditorState = EditorState.push( - editorState, - cs, - 'insert-characters' - ); + const newEditorState = EditorState.push(editorState, cs, 'insert-characters'); return newEditorState; -} \ No newline at end of file +} + +export function replaceText(text: string, editorState: EditorState): EditorState { + const selection = editorState.getSelection(); + const cs = Modifier.replaceText(editorState.getCurrentContent(), selection, text); + const newEditorState = EditorState.push(editorState, cs, 'insert-characters'); + + return newEditorState; +} diff --git a/twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/SuggestionList.tsx b/twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/SuggestionList.tsx index 1a3556d579..a6a56c5a7c 100644 --- a/twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/SuggestionList.tsx +++ b/twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/SuggestionList.tsx @@ -1,11 +1,16 @@ -import React, { useState, CSSProperties, useEffect } from "react"; -import classNames from "classnames"; +import React, { useState, CSSProperties, useEffect } from 'react'; +import classNames from 'classnames'; +import { Row, Typography } from 'antd'; +import { Frown, Terminal, Search, X } from 'react-feather'; -import "./SuggestionList.scss"; +import { isCommandType, isEmojiType, isMentionType } from './utils'; +import Languages from 'services/languages/languages'; + +import './SuggestionList.scss'; type Props = { id: string; - list: Array | undefined; + list: Array | undefined; search: string; renderItem: (item: T) => any; onSelected: (item: T) => void; @@ -15,61 +20,67 @@ type Props = { editorPosition: DOMRect | null; suggestionWitdh?: number; suggestionMargin?: number; -} + suggestionType?: string; +}; const DEFAULT_SUGGESTION_WIDTH = 400; const DEFAULT_SUGGESTION_MARGIN = 20; const DEFAULT_SUGGESTION_PADDING = 5; -export const SuggestionList = (props: Props): JSX.Element => { - const suggestionWidth = props.suggestionWitdh || DEFAULT_SUGGESTION_WIDTH; +export const SuggestionList = (props: Props): JSX.Element => { + const suggestionWidth = props.suggestionWitdh || DEFAULT_SUGGESTION_WIDTH; const suggestionMargin = props.suggestionMargin || DEFAULT_SUGGESTION_MARGIN; const [isFocused] = useState(false); const [position, setPosition] = useState({ x: 0, y: 0 }); const [x, setX] = useState(0); - const [id, setId] = useState(""); + const [id, setId] = useState(''); const [cssPosition, setCssPosition] = useState(() => ({ maxWidth: suggestionWidth, minWidth: suggestionWidth, - top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING, - position: "fixed", + top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING, + position: 'fixed', })); // update the position when ID changes useEffect(() => { setPosition({ x: props.position?.x || 0, - y: props.position?.y || 0, + y: props.position?.y || 0, }); - }, [props.position, props.id]); // keep the first X value until Y changes so the suggestion does not move left/right when typing useEffect(() => { if (props.id !== id) { // this is a new search, we can update the X - setX(props.position?.x || 0); + setX(props.position?.x || 0); setId(props.id); } }, [props.position, position, props.id, id]); useEffect(() => { - console.debug("Text which has been used for search:", `"${props.search}"`); + console.debug('Text which has been used for search:', `"${props.search}"`); }, [props.search]); useEffect(() => { const totalWidth = window.document.body.offsetWidth; - if ((x + suggestionWidth) < (totalWidth - suggestionMargin)) { + if (x + suggestionWidth < totalWidth - suggestionMargin) { // keep the position just over the cursor setCssPosition(cssPosition => { - const style = {...cssPosition, ...{ left: x, top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING }}; + const style = { + ...cssPosition, + ...{ left: x, top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING }, + }; delete style.right; return style; }); - } else if ((x - suggestionWidth) > 0) { + } else if (x - suggestionWidth > 0) { // align the end of the suggestion over the cursor setCssPosition(cssPosition => { - const style = {...cssPosition, ...{ right: (totalWidth - x), top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING }}; + const style = { + ...cssPosition, + ...{ right: totalWidth - x, top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING }, + }; delete style.left; return style; }); @@ -79,47 +90,84 @@ export const SuggestionList = (props: Props): JSX.Element => { const padding = (totalWidth - suggestionWidth) / 2; const style = { ...cssPosition, - ...{ right: padding, left: padding, top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING } + ...{ + right: padding, + left: padding, + top: (props.position?.y || 0) - DEFAULT_SUGGESTION_PADDING, + }, }; return style; }); } - }, [props.position?.y, x, suggestionMargin, suggestionWidth]); const select = (item: T) => { item && props.onSelected(item); }; + const buildSuggestionDefaultMessage = () => { + let text: string = ''; + let icon: JSX.Element =
; + + if (props.suggestionType) { + if (isMentionType(props.suggestionType)) { + text = + props.search.length < 3 && props?.list?.length === 0 + ? 'components.rich_text_editor.plugins.suggestions.default_message.display_results' + : 'components.rich_text_editor.plugins.suggestions.default_message.no_user_found'; + + icon = + props.search.length < 3 && props?.list?.length === 0 ? ( + + ) : ( + + ); + } + + if (isEmojiType(props.suggestionType)) { + text = 'components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found'; + icon = ; + } + + if (isCommandType(props.suggestionType)) { + text = 'components.rich_text_editor.plugins.suggestions.default_message.no_command_found'; + icon = ; + } + } + + return ( + + {icon} + {Languages.t(text)} + + ); + }; + return ( -
+
- {props.list?.map((item, index) => { - return ( -
select(item)} - onMouseDown={() => select(item)} - onFocus={() => console.log("FOCUS", item)} - > - { item && props.renderItem(item) } -
- ); + className={classNames(['menu-list', 'as_frame', 'inline', 'top'], { + fade_in: isFocused && props.list?.length, })} + > + {props?.list && props.list.length > 0 + ? props.list.map((item, index) => { + return ( +
select(item)} + onMouseDown={() => select(item)} + onFocus={() => console.log('FOCUS', item)} + > + {item && props.renderItem(item)} +
+ ); + }) + : buildSuggestionDefaultMessage()}
); diff --git a/twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/utils.ts b/twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/utils.ts new file mode 100644 index 0000000000..6d15cbce41 --- /dev/null +++ b/twake/frontend/src/app/components/RichTextEditor/plugins/suggestion/utils.ts @@ -0,0 +1,15 @@ +import { CommandResourceType } from '../commands'; +import { EmojiResourceType } from '../emoji'; +import { MENTION_TYPE } from '../mentions'; + +export const isMentionType = (suggestionType: string): boolean => { + return suggestionType === MENTION_TYPE; +}; + +export const isEmojiType = (suggestionType: string): boolean => { + return suggestionType === EmojiResourceType; +}; + +export const isCommandType = (suggestionType: string): boolean => { + return suggestionType === CommandResourceType; +}; From 3c3494fdfd893119c1ac0012b3ac05cd5576eaec Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Mon, 3 Jan 2022 14:46:45 +0100 Subject: [PATCH 008/276] =?UTF-8?q?=F0=9F=8C=8E=20=20Weblate=20translation?= =?UTF-8?q?s=20(#1863)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🌍Update translation files Updated by "Remove blank strings" hook in Weblate. 🌍Translated using Weblate (Sinhala) Currently translated at 79.7% (677 of 849 strings) 🌍Translated using Weblate (French) Currently translated at 100.0% (849 of 849 strings) 🌍Translated using Weblate (German) Currently translated at 100.0% (849 of 849 strings) 🌍Translated using Weblate (French) Currently translated at 99.2% (843 of 849 strings) Merge remote-tracking branch 'origin/develop' into develop Merge remote-tracking branch 'origin/develop' into develop Merge remote-tracking branch 'origin/develop' into develop 🌍Translated using Weblate (Vietnamese) Currently translated at 94.2% (793 of 841 strings) Co-authored-by: HelaBasa Co-authored-by: Hosted Weblate Co-authored-by: J. Lavoie Co-authored-by: Pham Tuan Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/de/ Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/fr/ Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/si/ Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/vi/ Translation: Linagora/Twake Chat Web * 🌍Translated using Weblate (Russian) Currently translated at 79.1% (672 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Russian) Currently translated at 79.1% (672 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Russian) Currently translated at 80.0% (680 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Finnish) Currently translated at 50.4% (428 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/fi/ * 🌍Translated using Weblate (Sinhala) Currently translated at 79.7% (677 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/si/ * 🌍Translated using Weblate (Spanish) Currently translated at 98.1% (833 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/es/ * 🌍Translated using Weblate (Japanese) Currently translated at 12.7% (108 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ja/ * 🌍Translated using Weblate (Russian) Currently translated at 80.0% (680 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Vietnamese) Currently translated at 93.4% (793 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/vi/ * 🌍Translated using Weblate (Basque) Currently translated at 1.0% (9 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/eu/ * 🌍Translated using Weblate (Turkish) Currently translated at 8.1% (69 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/tr/ * 🌍Translated using Weblate (Norwegian Bokmål) Currently translated at 11.4% (97 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/nb_NO/ * 🌍Translated using Weblate (Chinese (Simplified)) Currently translated at 8.2% (70 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/zh_Hans/ * 🌍Translated using Weblate (Sinhala) Currently translated at 97.7% (830 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/si/ * 🌍Translated using Weblate (Sinhala) Currently translated at 82.9% (704 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/si/ * 🌍Translated using Weblate (Sinhala) Currently translated at 82.9% (704 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/si/ * 🌍Translated using Weblate (Russian) Currently translated at 80.3% (682 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Russian) Currently translated at 84.2% (715 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Russian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Russian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Added translation using Weblate (Italian) * 🌍Translated using Weblate (Russian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Italian) Currently translated at 0.4% (4 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (English) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/en/ * 🌍Translated using Weblate (Basque) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/eu/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (Russian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/ru/ * 🌍Translated using Weblate (Sinhala) Currently translated at 99.4% (844 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/si/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (German) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/de/ * 🌍Translated using Weblate (French) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/fr/ * 🌍Translated using Weblate (Sinhala) Currently translated at 99.4% (844 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/si/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * 🌍Translated using Weblate (Italian) Currently translated at 100.0% (849 of 849 strings) Translation: Linagora/Twake Chat Web Translate-URL: https://hosted.weblate.org/projects/linagora/twake-chat-web/it/ * Add missing translations Co-authored-by: Hosted Weblate Co-authored-by: HelaBasa Co-authored-by: J. Lavoie Co-authored-by: Pham Tuan Co-authored-by: Taisiya Prudentova Co-authored-by: Anonymous Co-authored-by: නිම්නය <5mcqy9@cyberfear.com> --- twake/frontend/public/locales/de.json | 14 +- twake/frontend/public/locales/en.json | 12 +- twake/frontend/public/locales/es.json | 22 +- twake/frontend/public/locales/eu.json | 848 ++++++++++++++++- twake/frontend/public/locales/fi.json | 425 ++++++++- twake/frontend/public/locales/fr.json | 18 +- twake/frontend/public/locales/it.json | 851 ++++++++++++++++++ twake/frontend/public/locales/ja.json | 743 ++++++++++++++- twake/frontend/public/locales/nb_NO.json | 756 +++++++++++++++- twake/frontend/public/locales/ru.json | 619 ++++++++----- twake/frontend/public/locales/si.json | 401 ++++++++- twake/frontend/public/locales/tr.json | 784 +++++++++++++++- twake/frontend/public/locales/vi.json | 74 +- twake/frontend/public/locales/zh_Hans.json | 783 +++++++++++++++- .../src/app/services/languages/languages.ts | 17 +- 15 files changed, 6114 insertions(+), 253 deletions(-) create mode 100644 twake/frontend/public/locales/it.json diff --git a/twake/frontend/public/locales/de.json b/twake/frontend/public/locales/de.json index 00a1c730d6..dec1dae7ba 100644 --- a/twake/frontend/public/locales/de.json +++ b/twake/frontend/public/locales/de.json @@ -835,5 +835,17 @@ "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Erfolgreich in die Zwischenablage kopiert", "scenes.app.popup.adduser.magiclinks.genrator_info": "Einladungslink zum Arbeitsbereich", "scenes.app.popup.adduser.magiclinks.action_copy": "Kopieren", - "scenes.app.popup.adduser.magiclinks.action_generate": "Generieren" + "scenes.app.popup.adduser.magiclinks.action_generate": "Generieren", + "scenes.join.loading": "Wird geladen …", + "scenes.join.wrong_link_title": "Dieser Link ist nicht mehr verfügbar", + "scenes.join.wrong_link_description": "Bitten Sie die Person, die Sie eingeladen hat, diesem Unternehmen beizutreten, um einen neuen Link oder gründen Sie Ihr eigenes Unternehmen", + "scenes.join.join_workspace_from_company": "Treten Sie {{$1}} von {{$2}} bei!", + "scenes.join.twake_description": "Twake ist ein digitaler quelloffener Arbeitsbereich, der die Produktivität Ihres Teams verbessert", + "scenes.join.login_first_button": "Melden Sie sich an oder erstellen Sie zunächst ein Konto", + "scenes.join.join_the_team_button": "Treten Sie dem Team bei", + "scenes.join.create_the_company_button": "Das Unternehmen erstellen", + "\"": "\"", + "login.login_error": "Fehler bei der Anmeldung", + "'": "'", + "login.create_account": "Konto erstellen" } diff --git a/twake/frontend/public/locales/en.json b/twake/frontend/public/locales/en.json index 0543d1a7c0..53a2c96aeb 100644 --- a/twake/frontend/public/locales/en.json +++ b/twake/frontend/public/locales/en.json @@ -564,10 +564,10 @@ "services.apps.messages.no_command_possible": "We can not execute the command '{{$1}}' because '{{$2}}' does not exist or does not allow to create commands.", "services.user.notification_parameters_update_alert": "The notification settings have been updated.", "services.user.update_password_alert": "Your password has been updated.", - "'": "", - "\"": "", - "login.create_account": "", - "login.login_error": "", + "'": "'", + "\"": "\"", + "login.create_account": "Create account", + "login.login_error": "Error during login", "scenes.app.workspaces.components.skip": "Skip", "scenes.apps.calendar.unconfigured_tab": "This tab is not configured yet.", "scenes.apps.drive.trash": "Trash", @@ -861,7 +861,7 @@ "scenes.join.join_the_team_button": "Join the team", "scenes.app.channelsbar.currentuser.reset": "Reset", "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Write at least three letters to display users", - "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "No user found", - "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"No emoji found", + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found": "No user found", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found": "No emoji found", "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No command found" } diff --git a/twake/frontend/public/locales/es.json b/twake/frontend/public/locales/es.json index ba4a8d3485..1cd3324e67 100644 --- a/twake/frontend/public/locales/es.json +++ b/twake/frontend/public/locales/es.json @@ -829,7 +829,23 @@ "general.pause": "Pausa", "scenes.apps.messages.input.replied_to": "respondió a ", "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Escriba al menos tres letras para mostrar los usuarios", - "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "No se han encontrado usuarios", - "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"No se han encontrado emojis", - "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No se han encontrado comandos" + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found": "No se han encontrado usuarios", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found": "No se han encontrado emojis", + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No se han encontrado comandos", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Copiado correctamente al portapapeles", + "scenes.app.popup.adduser.magiclinks.action_copy": "Dupdo", + "scenes.app.popup.adduser.magiclinks.action_generate": "Generar", + "scenes.join.login_first_button": "Inicie sesión o cree una cuenta primero", + "scenes.join.join_the_team_button": "Únete al equipo", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Enlace de invitación al espacio de trabajo", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Nuevo enlace generado", + "scenes.join.loading": "Cargando…", + "scenes.join.wrong_link_title": "Este enlace ya no está disponible.", + "scenes.join.wrong_link_description": "Pídale a la persona que lo invitó a unirse a esta empresa un nuevo enlace o cree su propia empresa", + "scenes.join.create_the_company_button": "Crea la empresa", + "scenes.join.join_workspace_from_company": "¡Únase a {{$1}} desde {{$2}}!", + "scenes.join.twake_description": "Twake es un espacio de trabajo digital de código abierto creado para mejorar la productividad de su equipo", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Número de mensajes", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "En la versión gratuita de Twake, no puede acceder a más mensajes que {{$1}} más recientes.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Mostrar más planes" } diff --git a/twake/frontend/public/locales/eu.json b/twake/frontend/public/locales/eu.json index 2f3b67c86f..a0ddd6c48b 100644 --- a/twake/frontend/public/locales/eu.json +++ b/twake/frontend/public/locales/eu.json @@ -3,5 +3,849 @@ "general.create": "Sortu", "general.cancel": "Ezeztatu", "general.save": "Gorde", - "general.close": "Itxi" -} \ No newline at end of file + "general.close": "Itxi", + "scenes.app.popup.appsparameters.pages.error_check_needed": "Akats bat gertatu da; egiaztatu zure informazioa.", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "Joan dokumentaziora zure konfigurazioa JSON formatuan sortzeko.", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "Hurrengo Ekitaldian bidaliko diren datu pasiboak", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "Ezarri mugikorreko jakinarazpenen maiztasuna.", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "Jakinarazpenen maiztasuna", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "Nabarmendu gako-hitz hauek:", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "Ezarri posta elektronikoko jakinarazpenen maiztasuna.", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "Aukeratu jakinarazpenak jasotzen ez dituzun epe bat.", + "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "Ez molestatu gauez", + "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "Integrazioak", + "scenes.app.popup.workspaceparameter.pages.company_name_description": "Aldatu enpresa honen izena", + "scenes.apps.calendar.export_view_menu": "Esportatu ikuspegia...", + "scenes.apps.calendar.ics_subscription_menu": "Lortu ICS harpidetza esteka", + "scenes.apps.calendar.modals.event_title_placeholder": "Izenburua", + "scenes.apps.calendar.modals.modify_event_button": "Editatu gertaera", + "scenes.apps.calendar.modals.part.participants": "Parte hartzaileak", + "scenes.apps.calendar.modals.participants_event": "Parte hartzaileak", + "scenes.apps.calendar.modals.reminders": "Oroigarriak", + "scenes.apps.calendar.modals.remove_button": "Ezabatu", + "scenes.apps.calendar.modals.remove_event_button": "Ezabatu gertaera", + "scenes.apps.calendar.modify_calendar_menu": "Editatu egutegia", + "scenes.apps.calendar.month_option": "Hilabetea", + "scenes.apps.calendar.my_calendar": "Nire egutegia", + "scenes.apps.calendar.my_calendar_menu": "Nire egutegia", + "scenes.apps.drive.add_button": "Gehitu", + "scenes.apps.drive.message_added_file": "{{$1}} {{$2}} bidali du.", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}} hainbat fitxategi bidali ditu.", + "scenes.apps.drive.message_added_file_no_name": "{{$1}} fitxategi bat bidali du.", + "scenes.apps.drive.choose_folder_button": "Aukeratu direktorio bat", + "scenes.apps.drive.go_trash_menu": "Joan zaborrontzira", + "scenes.apps.drive.import_from_computer_menu": "Ordenagailutik kargatu", + "scenes.apps.drive.new_file_menu": "Fitxategi berria", + "scenes.apps.drive.new_file_title": "Fitxategi berria", + "scenes.apps.drive.new_external_storage": "Kanpoko biltegiratze berria", + "scenes.apps.drive.new_folder_title": "Karpeta berria", + "scenes.apps.drive.no_file_alert": "Ez duzu fitxategi bat sortzeko aukera ematen duen aplikaziorik.", + "scenes.apps.drive.no_storage_app_alert": "Ez duzu kanpoko biltegia gehitzeko aukera ematen duen aplikaziorik.", + "scenes.apps.drive.remove_definitely_menu": "Ezabatu betiko", + "scenes.apps.drive.restore_menu": "Berreskuratu", + "scenes.apps.drive.throw_menu": "Bidali zakarrontzira", + "scenes.apps.drive.trash_empty_menu": "Zaborrontzia hustu", + "scenes.apps.drive.unconfigured_tab": "Fitxa hau ez dago konfiguratuta oraindik.", + "scenes.apps.drive.viewer.loading_preview_message": "Kargatzen...", + "scenes.apps.drive.viewer.no_preview_message": "Ezin da fitxategi mota hau ikusi.", + "scenes.apps.messages.input.emoji": "Emojia", + "scenes.apps.messages.input.hide_formatting": "Ezkutatu formatua", + "scenes.apps.tasks.board.tasks.add_subtask": "Gehitu azpizeregin bat", + "scenes.apps.tasks.board.tasks.use_deadline": "Erabili epea", + "scenes.apps.tasks.board.tasks.use_starttime": "Erabili hasiera-ordua", + "scenes.apps.tasks.board.tasks.in_list": "Zerrendan", + "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "Utzi gonbidapena", + "scenes.apps.account.account.fullname": "Izen osoa", + "login.email_login": "Posta elektronikoa / Saioa hasi", + "scenes.apps.account.account.password_for_user": "Zure erabiltzailearen pasahitza", + "scenes.apps.account.account.send_info": "Bidali kredentzial-informazio hau zure erabiltzaileari.", + "components.listmanager.filter": "Iragazkia", + "components.upload.drop_files": "Jaregin zure fitxategiak hemen", + "components.workspace.list_manager.no_workspace": "Lan-esparrurik ez", + "components.searchpopup.loading": "Emaitza gehiago kargatzen", + "components.searchpopup.filter_ws": "Iragazi lan-eremuak", + "components.searchpopup.tags": "Etiketak", + "components.searchpopup.sender": "Bidaltzailea", + "components.searchpopup.mentions": "Aipamenak", + "scenes.apps.drive.used": "karpeta honetan erabiltzen da", + "components.reminder.notification": "Jakinarazpena", + "components.reminder.hours_bef": "orduak lehenago", + "scenes.app.mainview.discussion": "Eztabaida", + "components.attachmentpicker.from_twake": "Twake Documents-etik", + "components.attachmentpicker.remove_attach": "Kendu eranskina", + "scenes.apps.drive.remove_attachs": "Kendu eranskinak", + "components.drive.elements.see": "Ikusi", + "scenes.client.channelbar.channelmemberslist.title": "Erabiltzaileak {{$1}}", + "scenes.client.channelbar.channelmemberslist.loader": "Gehiago kargatu", + "scenes.client.channelbar.channelmemberslist.autocomplete": "Gehitu edo bilatu erabiltzailea", + "scenes.client.channelbar.channelmemberslist.menu.option_2": "Kendu kanaletik", + "components.leftbar.channel.workspaceschannels.menu.option_2": "Sartu kanal batean", + "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "Aplikazio", + "scenes.client.channelbar.channelmemberslist.no_members": "Kanal honetan ez dago erabiltzailerik, Gehitu erabiltzaileak sakatuta gonbida ditzakezu.", + "scenes.app.channelsbar.hide_discussion_leaving.menu": "Ezkutatu eztabaida", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} mezu elektronikoak gehituko dira", + "components.newversion.new_version_component.row.part_1": "Twake bertsio zaharkitua exekutatzen ari zara", + "components.newversion.new_version_component.row.part_2": "aplikazioa berriro kargatzea eta gure funtzio berriez gozatzea gomendatzen dizugu!", + "components.newversion.new_version_component.link": "Egin klik hemen berriro kargatzeko", + "components.newversion.new_version_modal.title": "Eguneratze berria eskuragarri!", + "components.inputs.input_with_select.input.placeholder": "Kanalaren izena", + "components.inputs.input_with_select.select.placeholder": "Atalaren izena", + "components.inputs.input_with_select.select.no_sections": "Hasi zure lehen kanalaren atalaren izena idazten.", + "components.inputs.input_with_select.button.tooltip": "Ezarri kanal atal bat", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}}-k {{$2}} gehitu du kanalean", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} konektore bat kendu du {{$2}}", + "components.alert.leave_private_channel.title": "Ziur kanala utzi nahi duzula?", + "components.alert.leave_private_channel.description": "Ezingo zara berriro sartu kanal pribatu honetan norbaitek gonbidatzen zaituen artean.", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.tag": "Ez zara kide", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "Gehiago kargatu", + "components.unverified_account.verification_details": "Honi egiaztatzeko xehetasunak bidali dizkiogu", + "components.account_verification_status_sentence": "Zure kontuaren egoera hau da: {{$1}}", + "components.account_verication_status_unverified": "Egiaztatu gabe", + "components.account_verication_status_blocked": "Blokeatua", + "components.unverified_account.re_send_email": "Ez al duzu mezu elektronikoa jaso?", + "components.blocked_account.trial_period_over": "Zure proba-aldia amaitu da. Zure kontua desblokeatzeko eta funtzio guztietarako sarbidea lortzeko, egiaztatu zure kontua posta elektronikoaren berrespenaren bidez", + "components.add_mails_workspace.button": "Hasi Twake erabiltzen", + "components.add_mails_workspace.title_1": "Gehitu erabiltzaile batzuk", + "components.add_mails_workspace.title_2": "Twake talde lankidetzarako tresna bat da, beraz, gonbidatu erabiltzaile batzuk zuretzat sortu dugun lan-eremu bat probatzera.", + "components.add_mails_workspace.text_area_placeholder": "Sartu zure erabiltzaileen helbide elektronikoak*", + "components.verify_mail.title_1": "Zorionak", + "components.verify_mail.title_2": "Twake-ren erabiltzaile ofiziala zara orain!", + "components.verify_mail.button": "Gehitu erabiltzailea", + "services.console_services.toaster.success_verify_email": "Egiaztapen-esteka bat bidali da zure posta-kontura", + "scenes.app.popup.workspaceparameter.pages.table_title": "Izena", + "scenes.client.main_view.main_header.search_input": "Bilatu", + "scenes.apps.drive.new_link_title": "Esteka berria", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "Enpresatik kendu", + "scenes.app.integrations_parameters.company_applications_table.name": "Izena", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "Behar bezala gehitu da {{$1}} zure enpresan", + "scenes.apps.messages.input.replied_to": "erantzun zion ", + "scenes.app.workspaces.create_company.group_data.group_size.50_100": "50 - 99 erabiltzaile", + "components.locked_features.locked_only_office_popup.title": "Ezin duzu fitxategi hau editatu", + "components.drive.new_versions": "Gehitu bertsio berri bat", + "scenes.apps.parameters.group_sections.workspaces": "Lan-eremuak", + "scenes.apps.calendar.my_calendar_label": "Nire egutegia", + "general.help.documentation": "Dokumentazioa", + "general.send": "Mezua bidali", + "general.help.support": "Laguntza", + "scenes.apps.parameters.workspace_sections.members.pending": "Zain dauden mezu elektronikoak", + "scenes.app.workspacesbar.components.grp_parameters": "{{$1}} ezarpenak", + "components.leftbar.channel.workspaceschannels.menu.option_1": "Sortu kanal bat", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} kendu du {{$2}} fitxa {{$3}}", + "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}, {{$2}} eta {{$3}}", + "scenes.login.create_account.firstname": "Izena", + "scenes.apps.tasks.board.ends": "Egin beharrekoa", + "general.user.role.company.member": "Kide", + "scenes.apps.messages.input.send_message": "Mezua bidali", + "components.locked_features.locked_workspace_popup.subtitle": "Doako bertsioan, lan-eremu bakarra izan dezakezu zure enpresan.", + "general.unarchive": "Desartxiboa", + "components.users_picker.add_me": "Gehitu nazazu", + "general.retry": "Saiatu berriro", + "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "Bilatu aplikazioak...", + "scenes.app.popup.workspaceparameter.pages.show_button": "Bistaratzea", + "components.workspace.list_manager.current_company": "Egungo enpresa", + "scenes.app.workspaces.create_company.group_data.group_size.1000_5000": "1000 - 4999 erabiltzaile", + "scenes.login.create_account.fill_in_email": "Zure posta elektronikoa mezu elektroniko zuzen batekin bete behar duzu", + "scenes.apps.calendar.modals.remove_event_text": "Gertaera ezabatu?", + "scenes.app.workspaces.create_company.group_data.group_main_activity.transport_logistics": "Garraioa / Logistika", + "scenes.apps.account.account.password_modal.old_password": "Oraingo pasahitza", + "scenes.apps.messages.messageslist.go_last_message_button": "Joan azken mezura", + "general.add": "Gehitu", + "scenes.app.workspaces.create_company.group_data.group_size.500_1000": "500 - 999 erabiltzaile", + "scenes.app.workspaces.create_company.group_data.group_main_activity.chemistry": "Kimika", + "scenes.app.workspaces.create_company.group_data.group_main_activity.textile_clothing_shoes": "Ehungintza / Arropa / Oinetakoak", + "general.archive": "Artxiboa", + "scenes.login.forgot_password.mail_doesnt_exist": "E-mail hau ez da existitzen", + "scenes.app.popup.userparameter.personnal_workspaces_title": "Zure lan-eremuak", + "scenes.app.popup.workspaceparameter.pages.name_label": "Lan-eremuaren izena", + "scenes.apps.drive.open_link": "Ireki esteka leiho berri batean", + "scenes.app.workspaces.create_company.group_data.group_main_activity.publishing_communication_multimedia": "Argitalpena / Komunikazioa / Multimedia", + "components.application.messages": "Mezuak", + "scenes.app.workspaces.create_company.group_data.group_main_activity.education": "Hezkuntza", + "scenes.apps.board.kanban": "Kanban", + "scenes.login.forgot_password.password": "Pasahitza", + "components.unverified_account.typography_text_danger": "{{$1}} egun geratzen zaizu proba-aldian. Probako kontua 7 egun igaro ondoren blokeatuko da eta behin betiko ezabatuko da erregistratu eta hilabete igaro ondoren. Zure kontua egiazta dezakezu bidali dizugun egiaztapen-mezuan dagoen \"Egiaztatu nire kontua\" botoian klik eginez.", + "scenes.app.popup.workspaceparameter.pages.title": "Laneko eremuaren ezarpenak", + "scenes.app.popup.workspaceparameter.pages.install_button": "Instalatu", + "scenes.app.channelsbar.currentuser.workspace_parameters": "Laneko eremuaren ezarpenak", + "scenes.app.channelsbar.currentuser.disable_notifications": "Desgaitu", + "general.delete": "Ezabatu", + "general.continue": "Jarraitu", + "components.user_picker.modal_no_result": "Ez da emaitzarik aurkitu", + "scenes.app.workspaces.create_company.group_data.group_type.public_organization": "Erakunde publikoa", + "scenes.app.workspaces.create_company.group_data.group_type.society_club_charity": "Elkartea, kluba edo ongintza", + "scenes.app.workspaces.create_company.group_data.group_type.other_group": "Bestela", + "scenes.app.workspaces.create_company.group_data.group_size": "Taldearen tamaina", + "scenes.app.workspaces.create_company.group_data.group_size.less_3": "4 erabiltzaile baino gutxiago", + "scenes.app.workspaces.create_company.group_data.group_size.4_10": "4-10 erabiltzaile", + "scenes.app.workspaces.create_company.group_data.group_size.5000_more": "5000 erabiltzaile baino gehiago", + "scenes.app.workspaces.create_company.group_data.group_main_activity": "Jarduera nagusia", + "scenes.app.workspaces.create_company.group_data.group_main_activity.food": "Janari", + "scenes.app.workspaces.create_company.group_data.group_main_activity.bank": "Bankua / Aseguruak", + "scenes.app.workspaces.create_company.group_data.group_main_activity.construction_building": "Eraikuntza / Materiales de construcción", + "scenes.app.workspaces.create_company.group_data.group_main_activity.real_estate": "Higiezinak", + "scenes.app.workspaces.create_company.group_data.group_main_activity.materials": "Materialak", + "scenes.app.workspaces.create_company.group_data.group_main_activity.trade_commerce_distribution": "Merkataritza / Merkataritza / Banaketa", + "scenes.app.workspaces.create_company.group_data.group_main_activity.studies_and_advice": "Ikasketak eta aholkularitza", + "scenes.app.workspaces.create_company.group_data.group_main_activity.pharmaceutical_industry": "Industria farmazeutikoa", + "scenes.app.workspaces.create_company.group_data.group_main_activity.it_telecom": "Informatika / Telekomunikazioa", + "scenes.app.workspaces.create_company.group_data.group_main_activity.business_services": "Enpresa zerbitzuak", + "scenes.app.workspaces.create_company.group_data.group_main_activity.entertainment": "Entretenimendua", + "scenes.app.workspaces.create_company.group_data.group_main_activity.research": "Ikerketa", + "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Administrazioa", + "scenes.app.workspaces.create_company.group_data.group_main_activity.other": "Bestela", + "scenes.app.workspaces.create_company.invitations.title": "Konfiguratu zure lan-eremua.", + "scenes.app.header.disconnected": "Deskonektatuta zaude", + "scenes.app.header.disconnected.reload": "Berriz kargatu", + "scenes.app.header.alt_notifications": "Jakinarazpenak", + "scenes.apps.calendar.calendar.list_btn": "Zerrenda", + "scenes.apps.calendar.event_edition.deadline_tag": "Epemuga", + "scenes.apps.calendar.event_edition.checkbox_all_day": "Egun osoan", + "scenes.apps.calendar.event_edition.title_confidentiality": "Konfidentzialtasuna", + "scenes.apps.calendar.event_view.article_until": "to", + "scenes.apps.calendar.calendar_modal.participants": "Parte hartzaileak", + "scenes.apps.calendar.calendar_modal.placeholder": "Izena", + "scenes.apps.calendar.left.calendars": "Egutegiak", + "scenes.apps.drive.left.search": "Bilatu", + "scenes.apps.drive.navigators.navigator_content.directory_name": "Direktorioaren izena", + "scenes.apps.drive.navigators.navigator_labels.title": "Etiketak", + "scenes.apps.drive.navigators.new_file.untitled": "Izenbururik gabe", + "scenes.apps.drive.navigators.new_file.create_file.type": "Mota", + "scenes.apps.drive.navigators.new_file": "Fitxategi berria", + "scenes.apps.drive.preview_bloc.operations_download": "Deskargatu", + "scenes.apps.drive.preview_bloc.error_file": "Fitxategia ez da aurkitu", + "scenes.apps.drive.right_preview.operations_restore": "Berreskuratu", + "scenes.apps.drive.right_preview.operations_delete": "Eraman zaborrontzira", + "scenes.apps.drive.right_preview.public_link": "Esteka publikoa", + "scenes.apps.messages.messages": "Mezuak", + "scenes.apps.messages.chatbox.chat.delete_message": "Ezabatu mezu hau", + "scenes.apps.messages.chatbox.chat.delete_message_btn": "Ezabatu mezua", + "scenes.apps.messages.left_bar.stream_modal.placeholder_name": "Izena", + "scenes.apps.messages.left_bar.stream.add_to_favorites": "Gehitu gogokoetara", + "scenes.apps.messages.left_bar.stream.notifications": "Jakinarazpenak...", + "scenes.apps.messages.left_bar.stream.notifications.all": "Edozein mezu", + "scenes.apps.messages.left_bar.stream.notifications.never": "Ezer ez", + "scenes.apps.parameters.workspace_sections.workspace": "Langunea", + "scenes.apps.parameters.workspace_sections.members": "Parte hartzaileak", + "scenes.apps.parameters.group_sections.apps": "Aplikazioak", + "scenes.apps.account.title": "Kontuaren parametroak", + "scenes.apps.account.account.menu_title": "Kontua", + "scenes.apps.account.languages.menu_title": "Hizkuntza", + "scenes.apps.account.account.firstname": "Izena", + "scenes.apps.account.account.lastname": "Abizena", + "scenes.apps.account.account.username": "Erabiltzaile izena", + "scenes.apps.account.account.change_username": "Aldatu zure erabiltzaile-izen berezia.", + "scenes.apps.account.account.email_add": "Gehitu e-mail berria", + "scenes.apps.account.account.email_add_modal.invalid_code": "Kode hau baliogabea da", + "scenes.apps.account.account.password": "Pasahitza", + "scenes.apps.account.account.password_modal.password": "Pasahitz berria", + "scenes.apps.account.account.password_modal.bad_old_password": "Pasahitz zaharra ez da zuzena.", + "scenes.apps.account.account.password_modal.bad_password": "Zure pasahitzak ez datoz bat edo laburregiak dira. Mesedez, idatzi gutxienez 8 karaktere dituen pasahitza.", + "scenes.apps.account.account.logout": "Saioa amaitu", + "scenes.apps.account.languages.text": "Aldatu Twake hizkuntza.", + "scenes.apps.account.notifications.title": "Jakinarazpenak", + "scenes.apps.account.notifications.keywords_subtitle": "Gako-hitzak", + "scenes.apps.account.notifications.keywords_placeholder": "garatzailea, wifia, kodea, ...", + "scenes.apps.account.notifications.disturb_option_a": "Ez bidali push jakinarazpen artean ", + "scenes.apps.account.notifications.disturb_option_b": " eta ", + "scenes.apps.account.notifications.disturb_option_c": " (tokiko ordu-eremua)", + "scenes.apps.account.notifications.devices_subtitle": "Gailuaren jakinarazpenak", + "scenes.apps.account.notifications.devices_option_ever": "Bidali beti push jakinarazpenak", + "scenes.apps.account.notifications.devices_option_inactive": "Bidali push jakinarazpenak mahaigainean inaktibo nagoenean", + "scenes.apps.account.notifications.devices_option_never": "Inoiz ez bidali push jakinarazpenik", + "scenes.apps.account.notifications.privacy_subtitle": "Pribatutasuna", + "scenes.apps.account.notifications.mail_subtitle": "Posta elektroniko bidezko jakinarazpenak", + "scenes.apps.parameters.group_sections.apps.badge_extension": "Luzapena", + "scenes.apps.parameters.workspace_sections.members.members": "Erabiltzaileak", + "scenes.apps.parameters.workspace_sections.members.invite": "Gonbidatu erabiltzaile berria", + "scenes.apps.parameters.workspace_sections.members.invite_btn": "Gehitu erabiltzailea", + "scenes.apps.tasks.boards": "Oholak", + "scenes.apps.tasks.connectors_search_menu": "Bilatu konektoreak...", + "scenes.apps.tasks.no_connectors_menu_text": "Ez duzu egutegi batera konektatu daitekeen konektorerik.", + "scenes.apps.tasks.unconfigured_tab": "Fitxa hau ez dago konfiguratuta oraindik.", + "scenes.apps.tasks.choose_board_button": "Aukeratu taula bat", + "scenes.apps.tasks.new_board.title": "Taula berria", + "scenes.apps.tasks.new_board.edit_title": "Editatu taula", + "scenes.apps.tasks.task": "Zeregin", + "scenes.apps.tasks.no_tasks": "Zereginik ez", + "scenes.apps.tasks.task_status.todo": "Egin", + "scenes.apps.tasks.task_status.current": "Oraingoa", + "scenes.apps.tasks.task_status.done": "Eginda", + "scenes.apps.tasks.task.description": "Deskribapena", + "scenes.apps.tasks.task.assignees": "Esleipendunak", + "scenes.apps.tasks.task.edit.dates": "Datak", + "scenes.apps.tasks.list_modal.modify_list": "Aldatu zerrenda", + "scenes.apps.tasks.list_modal.new_list": "Zerrenda berria", + "scenes.apps.tasks.list_modal.remove": "Kendu zerrenda eta zereginak", + "scenes.apps.tasks.list_modal.predefined_participants": "Aurrez zehaztutako parte-hartzaileak", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "Kendu artxibatutako zereginak ({{$1}})", + "scenes.login.footer.go_to_twake": "Joan twakeapp.com helbidera", + "scenes.login.footer.branding": "{{$1}} ({{$2}}) Twake zerbitzari pribatu batean zaude. ", + "scenes.login.create_account.title": "Sortu kontu berri bat", + "scenes.login.create_account.email": "Posta elektronikoa", + "scenes.login.create_account.email_used": "Posta elektroniko hau dagoeneko erabiltzen ari da.", + "scenes.login.create_account.username_already_exist": "Erabiltzaile-izen hau dagoeneko erabiltzen ari da", + "scenes.login.create_account.fill_in_username": "Zure erabiltzaile-izena bete behar duzu", + "scenes.login.create_account.too_short_password": "Zure pasahitzak 8 karaktere izan behar ditu gutxienez.", + "scenes.login.create_account.newsletter": "Jaso Twake-ri buruzko informazioa", + "scenes.login.create_account.lastname": "Abizena", + "scenes.login.forgot_password.title": "Pasahitza ahaztua?", + "scenes.login.forgot_password.text": "9 digituko kode bat jasoko duzu posta elektronikoz zure nortasuna egiaztatzeko.", + "scenes.login.forgot_password.email_to_recover": "Posta elektronikoa berreskuratzeko", + "scenes.login.forgot_password.invalid_code": "Kode honek ez du balio.", + "scenes.login.forgot_password.text3": "Sartu pasahitz berri bat zure konturako.", + "scenes.login.forgot_password.password2": "Pasahitza baieztatu", + "scenes.login.forgot_password.password_dont_match": "Zure pasahitzak ez datoz bat edo laburregiak dira. Mesedez, idatzi gutxienez 8 karaktere dituen pasahitza.", + "scenes.login.home.subtitle": "Pozik zu ikusteaz", + "scenes.login.home.unable_to_connect": "Kredentzialak baliogabeak", + "scenes.login.home.password": "Pasahitza", + "scenes.login.home.login_btn": "Saioa hasi", + "scenes.login.home.lost_password": "Pasahitza ahaztua?", + "scenes.login.home.create_account": "Kontu bat sortu", + "scenes.login.create_account.password": "Pasahitza", + "scenes.login.create_account.step_1_subtitle": "Ezin da sinpleagoa izan; informazio pixka bat besterik ez dugu behar.", + "scenes.login.create_account.step_2_subtitle_a": "Gehitu zure izen osoa beste erabiltzaileek zu ezagutu dezaten.", + "scenes.login.create_account.step_2_subtitle_b": "Zure telefono-zenbakiak pribatua izaten jarraitzen du.", + "scenes.login.create_account.step_3_mail_sent": "Posta elektronikoz aktibatzeko esteka bidali dizugu.", + "scenes.login.create_account.step_3_subtitle": "Azken urratsa: robot bat ez zarela egiaztatu behar dugu!", + "scenes.app.workspaces.create_company.company_name.placeholder": "Enpresaren izena", + "scenes.app.workspaces.create_company.company_name.title_1": "Hasi,", + "scenes.app.workspaces.create_company.company_name.title_2": "adierazi zure enpresaren izena.", + "scenes.app.workspaces.create_company.default_workspace_name": "Nagusia", + "scenes.app.workspaces.create_company.importations.title_1": "Dagoeneko tresna digitalekin lan egiten duzu? Inportatu edo integratu zure tresnak orain!", + "scenes.app.workspaces.create_company.importations.title_2": "Ez kezkatu, geroago egin dezakezu!", + "scenes.app.workspaces.create_company.invitations.title_2": "Gehitu erabiltzaileak zure taldean.", + "scenes.app.workspaces.create_company.title": "Sortu nire enpresa", + "scenes.app.workspaces.welcome_page.add_secondary_emails": "Gehitu bigarren mailako mezu elektroniko bat", + "scenes.app.workspaces.welcome_page.added_to_company": "Gonbidatu zaituzte ", + "scenes.app.workspaces.welcome_page.create_my_company": "Sortu nire enpresa", + "scenes.app.workspaces.welcome_page.lets_go": "Goazen!", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "Beste helbide elektroniko bat erabilita gonbidatu zaituzte?", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "A, tira... Badirudi oraindik inork ez zaituela gonbidatu lan gune batera.", + "scenes.app.workspaces.welcome_page.ready_to_work": "Lan egiteko prest zaude orain.", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Hainbat helbide elektroniko lotu ditzakezu zure kontuarekin; helbide bakarra erabiliko da jakinarazpenak bidaltzeko.", + "scenes.app.workspaces.welcome_page.main_mail_title": "Helbide nagusia", + "scenes.app.workspaces.welcome_page.other_mail_title": "Bigarren mailako helbideak", + "scenes.app.workspaces.welcome_page.add_new_email": "Gehitu e-mail bat", + "scenes.app.workspaces.welcome_page.code_verification": "Egiaztapen-kodea", + "scenes.app.workspaces.welcome_page.new_email": "Gehitu bigarren mailako mezu elektroniko bat", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "Egiaztapen-kode bat bidali dizugu {{$1}} bidez", + "scenes.app.workspaces.welcome_page.done": "bukatu dut", + "scenes.login.forgot_password.finished": "Zure pasahitza behar bezala eguneratu da.", + "scenes.apps.account.account.description_main": "Zure helbide nagusia da Twake-k zure jakinarazpenak bidaltzen dituena. Zure bigarren mailako helbideak haiek erabiltzen dituzten lan-eremuetara automatikoki gonbidatzeko aukera ematen dute.", + "scenes.apps.account.account.emails.description": "Kudeatu zure helbide elektroniko desberdinak.", + "scenes.apps.account.account.make_main": "Ezarri nagusia", + "scenes.apps.account.account.password.description": "Aldatu pasahitza.", + "scenes.apps.account.identity": "Identitatea", + "scenes.apps.account.identity.description": "Aldatu zure izena, abizena eta profilaren irudia Twake-ko beste erabiltzaileek ikusgai.", + "scenes.apps.account.preference": "Hobespenak", + "general.open": "Ireki", + "scenes.apps.account.thumbnail.max_weight": "Gehienezko tamaina 5 MB", + "scenes.apps.account.account.email_add_modal.confirm": "Berretsi e-mail hau", + "app.name.twake_calendar": "Egutegia", + "app.name.twake_drive": "Dokumentuak", + "app.name.twake_tasks": "Zereginak", + "components.calendar.repetition.everyday": "Egunero", + "components.calendar.repetition.does_not_repeat": "Ez da errepikatzen", + "components.calendar.repetition.weekly_on": "Astero {{$1}}", + "components.calendar.repetition.monthly_on": "Hilero {{$1}} {{$2}}", + "components.calendar.repetition.monthly_on_day": "Hilero egunean {{$1}}", + "components.calendar.repetition.annually_on": "Urtero {{$1}}", + "components.calendar.repetition.every_weekday": "Astegunero (astelehenetik ostiralera)", + "components.calendar.repetition.custom": "Pertsonalizatua...", + "components.calendar.repetition.repeat": "Errepikatu bakoitzean", + "components.calendar.repetition.ends": "Amaierak", + "components.calendar.repetition.never": "Inoiz ez", + "components.calendar.repetition.repeat_on": "Errepikatu", + "scenes.app.channelsbar.currentuser.add_apps": "Bilatu aplikazioak", + "scenes.app.channelsbar.currentuser.change_my_status": "Aldatu nire egoera", + "scenes.app.channelsbar.currentuser.create_workspace_page": "Sortu lan-eremu bat", + "scenes.app.channelsbar.currentuser.invited_status": "Gonbidatua zara.", + "scenes.app.channelsbar.currentuser.title": "Kontu ezarpenak", + "scenes.app.channelsbar.currentuser.logout": "Amaitu saioa", + "scenes.app.channelsbar.currentuser.update": "Eguneratu", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "Desgaitu 9:00ak arte. bihar", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "Berriz aktibatu", + "scenes.app.channelsbar.currentuser.user_parameter": "Jakinarazpen-ezarpenak", + "scenes.app.channelsbar.initial_instructions_tutorial": "Aukeratu izen bat, izena eta profileko argazki bat.", + "scenes.app.channelsbar.installation_desktop_tutorial": "Instalatu mahaigaineko aplikazioa", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "Gonbidatu erabiltzaileak zure laneko gunera.", + "scenes.app.channelsbar.public_channel_label": "Publiko", + "scenes.app.channelsbar.private_channel_label": "Pribatua", + "scenes.app.channelsbar.sending_message_instruction": "Bidali zure lehen mezua eztabaida batean", + "scenes.app.channelsbar.tutorial_alert": "Ez duzu inoiz marko hau berriro erakutsi?", + "scenes.app.channelsbar.welcome": "Ongi etorri Twake-ra", + "scenes.app.channelsbar.welcoming_message_subtitle": "Egin zaitez Twake-ko profesional bat klik gutxitan!", + "scenes.app.mainview.instruction_current_tab": "Hasi zure ezkerreko kanal bat hautatuz.", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Ez duzu kanal batera konektatzeko moduko konektorerik.", + "scenes.app.mainview.tabs.rename": "Aldatu izena", + "scenes.app.mainview.tabs.searching_connectors": "Bilatu konektoreak...", + "scenes.app.popup.adduser.adresses_message": "Mesedez, bereizi helbideak koma edo zuriune batekin. Gogoratu Twake-k zure harpidetzaren arabera gonbidapen kopurua muga dezakeela.", + "scenes.app.popup.appsparameters.pages._app_identity": "Aplikazioaren identitatea", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Probatu zure Twacode mezuen itxura", + "scenes.app.popup.appsparameters.pages.alert_published_app": "Zure aplikazioa argitaratu da, ezin duzu editatu.", + "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Erabili * garapenean IP helbide guztiak baimentzeko.", + "scenes.app.popup.appsparameters.pages.amazing_app_name": "Nire aplikazio harrigarria", + "scenes.app.popup.appsparameters.pages.api_data_description": "Twake APIrako datu erabilgarriak.", + "components.locked_features.locked_only_office_popup.subtitle": "Doako bertsioan, ezin duzu bulegoa bakarrik erabili.", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Lanerako gonbidapenaren esteka", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Esteka berria sortu da", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Behar bezala kopiatu da arbelean", + "scenes.app.popup.adduser.magiclinks.action_copy": "Kopiatu", + "scenes.app.popup.adduser.magiclinks.action_generate": "Sortu", + "scenes.app.popup.appsparameters.pages.error_message": "Izen hau beste aplikazio batek erabiltzen du jada; mesedez aukeratu beste bat.", + "scenes.app.popup.appsparameters.pages.filter_information": "Iragazki honek zure API gakoaren erabilera zure konektoreko zerbitzarietara mugatzen du.", + "scenes.app.popup.appsparameters.pages.go_back": "Itzuli", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "Izen hau beste aplikazio batek erabiltzen du dagoeneko. Mesedez, aukeratu beste bat.", + "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "Izen sinplifikatua", + "scenes.app.popup.appsparameters.pages.installation": "Instalatu.", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "Hasi zure mezua JSON formatuan idazten.", + "scenes.app.popup.appsparameters.pages.interne_availability_application": "Barne aplikazioa", + "scenes.app.popup.appsparameters.pages.loading": "Kargatzen...", + "scenes.app.popup.appsparameters.pages.modify_public_data": "Editatu zure aplikazioaren datu publikoak.", + "scenes.app.popup.appsparameters.pages.new_app_title": "Aplikazio berria", + "scenes.app.popup.createworkspacepage.placeholder_name": "Lan-eremuaren izena", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "Gonbidatu erabiltzaileak", + "scenes.app.popup.workspaceparameter.pages.collaborateurs": "Erabiltzaileak", + "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "Enpresak garatutako aplikazioak", + "scenes.app.popup.workspaceparameter.pages.company_identity_title": "Enpresaren identitatea", + "scenes.app.popup.workspaceparameter.pages.company_name_label": "Enpresaren izena", + "scenes.app.popup.workspaceparameter.pages.configuration_notif": "konfigurazioa", + "scenes.app.popup.workspaceparameter.pages.configure_button": "Konfiguratu", + "scenes.app.popup.workspaceparameter.pages.description": "Deskribapena", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "Bistaratu hobespenak", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "Instalatu aplikazioa lan eremu honetan.", + "scenes.app.popup.workspaceparameter.pages.your_apps_label": "Zure aplikazioak", + "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "Ordainketak eta harpidetzak", + "scenes.app.workspacesbar.components.change_company_title": "Enpresa aldatu", + "scenes.app.workspacesbar.components.create_company_menu": "Enpresa bat sortu", + "scenes.apps.calendar.add_calendar_menu": "Gehitu egutegi bat", + "scenes.apps.calendar.connectors_menu": "Konektoreak...", + "scenes.apps.calendar.connectors_search_menu": "Bilatu konektoreak...", + "scenes.apps.calendar.create_calendar_title": "Sortu egutegi bat", + "scenes.apps.calendar.day_option": "Eguna", + "scenes.apps.calendar.edit_calendar_title": "Editatu egutegia", + "scenes.apps.calendar.export_title": "Esportatu", + "scenes.apps.calendar.modals.advanced_options": "Aukera aurreratuak", + "scenes.apps.calendar.modals.description_placeholder": "Deskribapena", + "scenes.apps.calendar.modals.details_title": "Xehetasunak", + "scenes.apps.calendar.modals.event_adresse_placeholder": "Helbidea", + "scenes.apps.calendar.modals.event_description_placeholder": "Deskribapena", + "scenes.apps.calendar.no_calendar_text": "Ez duzu egutegirik ezarri lan-eremu honetarako.", + "scenes.apps.calendar.no_connectors_menu_text": "Ez duzu egutegi batera konektatu daitekeen konektorerik.", + "scenes.apps.calendar.remove_calendar_confirmation": "Egutegia eta bere gertaerak betiko ezabatu nahi dituzu?", + "scenes.apps.calendar.today_menu": "Gaur", + "scenes.apps.calendar.week_option": "Astea", + "scenes.apps.calendar.workspace": "Langunea", + "scenes.apps.calendar.workspace_label": "Lan eremu hau", + "scenes.apps.calendar.workspace_menu": "Langunea", + "scenes.apps.drive.choose_file_button": "Hautatu fitxategi bat", + "scenes.apps.drive.create_folder_button": "Sortu", + "scenes.apps.drive.download_button": "Deskargatu", + "scenes.apps.drive.files_subtitle": "Fitxategiak", + "scenes.apps.drive.folder_subtitle": "Karpetak", + "scenes.apps.drive.go_out_trash_menu": "Utzi zaborra", + "scenes.apps.drive.move_text": "Mugitu", + "scenes.apps.drive.viewer.open_with_button": "Ireki...", + "scenes.apps.messages.input.placeholder": "Idatzi mezu bat. Erabili @ erabiltzaile bat aipatzeko.", + "scenes.apps.messages.input.edited": "Editatua", + "scenes.apps.messages.just_you": "Zuretzat bakarrik ikusgai", + "scenes.apps.messages.message.new_messages_bar": "Mezu berriak", + "scenes.apps.messages.message.cancel_button": "Utzi", + "scenes.apps.messages.message.modify_button": "Editatu", + "scenes.apps.messages.input.show_formatting": "Erakutsi formatua", + "scenes.tell_us": "Mesedez, esaiguzu zertan ari zinen:", + "scenes.apps.drive.viewer.download_desktop": "Deskargatu Twake Desktop aplikazioan aurreikusteko", + "scenes.apps.tasks.my_tasks": "Nire zereginak", + "scenes.apps.tasks.board.place_holder": "Kontseiluaren izena", + "scenes.apps.tasks.board.tasks.subtask": "Azpizeregin", + "scenes.apps.tasks.board.starts": "hasten da", + "scenes.apps.tasks.board.list_name": "Zerrendaren izena", + "scenes.app.popup.sync_calendar": "Sinkronizatu zure egutegiak.", + "scenes.apps.parameters.workspace_sections.workspace.logo_company": "Enpresaren logotipoa", + "scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "Editatu enpresaren irudia ", + "components.workspace.list_manager.add": "Gehitu lan-eremuak", + "components.workspace.list_manager.current_space": "Egungo lan-espazioa", + "components.workspace.list_manager.all": "Denak", + "components.workspace.calendar.invalid": "Baliogabea", + "components.searchpopup.enter_text": "Sartu testu bat Twake bilatzeko.", + "components.searchpopup.size": "Tamaina", + "components.searchpopup.creation": "Sorkuntza", + "components.searchpopup.update_search": "Eguneratu bilaketa", + "components.searchpopup.last_modif": "Azken aldaketa", + "components.reminder.days_bef": "egun lehenago", + "components.reminder.weeks_bef": "aste lehenago", + "components.reminder.by_email": "Posta elektronikoa", + "scenes.apps.calendar.reminders": "abisua(k)", + "scenes.apps.calendar.video_link": "Egin klik esteka irekitzeko", + "components.tagpicker.notag": "Etiketarik ez", + "scenes.apps.tasks.modals.attachments": "Eranskinak", + "components.calendar.calendarselector.from": "Bertatik", + "scenes.apps.drive.move_text2": "Mugitu", + "components.attachmentpicker.from_computer": "Zure gailutik", + "components.attachmentpicker.file": "Fitxategia", + "components.drive.elements.current_name": "Egungo izena: ", + "scenes.apps.drive.right_preview.public": "Sarbide publikoa", + "components.drive.elements.configurate_mod": "Konfiguratu mod...", + "components.drive.elements.manage_version": "Kudeatu bertsioak", + "scenes.app.popup.createcompany.try_again": "Saiatu berriro mesedez.", + "scenes.app.popup.workspace.edit_temp": "Editatu aldi baterako kontua", + "scenes.apps.tasks.active_tasks": "zeregin aktiboak", + "scenes.apps.drive.right_preview.versions": "Bertsioak", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Kudeatu zure aplikazioak eta konektoreak.", + "scenes.app.popup.appsparameters.pages.icon": "Ikonoa", + "scenes.app.popup.appsparameters.pages.title_informations": "Oinarrizko informazioa", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "Aplikazioen kudeaketarekin lotutako informazioa", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "Uneko erabiltzailearen IDa", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "Uneko lan-eremuaren ID", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "Uneko taldearen IDa", + "scenes.app.mainview.channel_description": "Deskribatu kanala", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "Gonbidatu automatikoki lan-eremuko erabiltzaile guztiak kanal honetara", + "components.channelworkspacelist.title": "Kanalak", + "scenes.client.channelbar.workspacechannellist.autocomplete": "Bilatu kanala, erabiltzailea edo zuzeneko mezuak", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "Sortu fitxa berri bat", + "components.notifications.hidden_notifications_button.children": "Mezu berriak", + "scenes.apps.drive.download_all_button": "Deskargatu guztiak", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}}-k {{$2}} kendu du kanaletik", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}} deskribapena aldatu du", + "scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}} kanalari izena aldatu dio {{$2}}", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} konektore berri bat gehitu du {{$2}}", + "components.verify_mail.text": "Lehenik eta behin, zure helbide elektronikoa egiaztatu behar duzu. Hona egiaztapen-esteka bat bidali dugu", + "components.verify_mail.paragraph": "Geroago egin dezakezu nahi baduzu, baina egiaztatu gabeko kontuek Twake-ren bertsio mugatu baterako sarbidea dute", + "services.console_services.toaster.add_emails_error": "Errore bat gertatu da mezu elektronikoak gehitzean", + "services.console_services.toaster.add_email_error_message": "Errore bat gertatu da {{$1}} gehitzean", + "scenes.apps.drive.default_link_name": "Izenbururik gabe", + "components.emoji_picker.input_search_placeholder": "Bilatu", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}} - Ezin duzu {{$2}} fitxategi baino gehiago gehitu mezu batean", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "Mezu hau ezabatu duzu", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "Bertsioa", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "Erakutsi", + "scenes.app.integrations_parameters.company_applications_table.title": "Zure enpresan instalatuta", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "Behar bezala ezabatu da {{$1}} zure enpresatik", + "scenes.apps.account.account.emails": "Posta elektronikoak", + "scenes.apps.account.account.main_email": "Posta elektroniko nagusia", + "scenes.apps.account.notifications.sound": "Soinu jakinarazpena", + "scenes.app.popup.appsparameters.pages.application_title": "Aplikazio", + "scenes.app.popup.appsparameters.pages.danger_zone_label": "Zona arriskutsua", + "scenes.app.popup.appsparameters.pages.description_label": "Deskribapena", + "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "Enpresak garatutako aplikazioak", + "scenes.app.popup.appsparameters.pages.string_information": "Kate honek zure aplikazioa identifikatzen du eta mezuen komandoetan erabiliko da.", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "Lan-eremuaren administratzailea zara.", + "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "Enpresak garatutako aplikazioak", + "scenes.apps.drive.viewer.edit_with_button": "Editatu {{$1}}", + "services.apps.calendar.move_icon": "Mugitu", + "scenes.apps.board.display_as": "Erakutsi gisa", + "scenes.app.popup.workspace.create_temp": "Sortu aldi baterako kontua", + "general.re_send": "Berriz bidali", + "general.verify": "Egiaztatu", + "scenes.app.popup.workspaceparameter.edit_from_console": "Ikusi Kontsolan", + "scenes.apps.calendar.modals.title_placeholder": "Izenburua", + "scenes.apps.account.message_temporary": "Aldi baterako kontu batek Twake-ko kontu arrunt baten moduan funtzionatzen du, baina pasahitza sortzen duzu eta behar izanez gero berrezarri ahal izango duzu.", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "Ezin duzu aplikazio hau ezabatu argitaratzen bada.", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Zure aplikazioaren izen sinplifikatua beste aplikazio batek erabiltzen du dagoeneko. Mesedez, aldatu.", + "scenes.app.workspaces.welcome_page.see_you_soon": "Laster arte!", + "scenes.app.workspaces.welcome_page.try_again": "Saiatu berriro", + "scenes.app.workspaces.welcome_page.twake_team": "Esnatu", + "scenes.app.workspaces.welcome_page.welcome_header": "Ongi etorri Twake-ra!", + "scenes.app.popup.userparameter.pages.private_message_content.hide": "Ezkutatu mezu pribatuen edukia", + "scenes.no_panic": "Ez zaitez izutu! Besterik gabe, kargatu orri hau Twake konpontzeko.", + "scenes.app.workspaces.components.skip": "Saltatu", + "components.on_boarding.company_billing_banner.link": "enpresaren harpidetza plana", + "components.on_boarding.popups.blocked_company.title": "Zure enpresa blokeatuta dago ordainketa-arazo bat dela eta", + "scenes.app.channelsbar.currentuser.disabling_notifications": "Desgaitu 1 orduz", + "scenes.app.popup.appsparameters.pages.app_update": "Eguneratu aplikazioa {{$1}} (aplikazioa {{$2}} aldiz erabiltzen da).", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "Kendu lan-eremutik", + "scenes.app.popup.appsparameters.pages.show_button": "Erakutsi", + "scenes.client.channelbar.channelmemberslist.tag": "Zuk", + "scenes.join.loading": "Kargatzen…", + "scenes.join.wrong_link_title": "Esteka hau jada ez dago erabilgarri", + "scenes.join.wrong_link_description": "Eskatu enpresa honetan sartzera gonbidatu zaituenari esteka berri bat edo sortu zure enpresa", + "scenes.join.create_the_company_button": "Sortu enpresa", + "scenes.join.join_workspace_from_company": "Sartu {{$1}} {{$2}}-tik!", + "scenes.join.twake_description": "Twake zure taldearen produktibitatea hobetzeko kode irekiko lan-espazio digitala da", + "scenes.join.login_first_button": "Hasi saioa edo sortu kontu bat lehenik", + "scenes.join.join_the_team_button": "Sartu taldean", + "scenes.apps.tasks.connectors_menu": "Konektoreak...", + "scenes.app.workspaces.create_company.group_data.group_size.10_50": "11 - 49 erabiltzaile", + "scenes.app.popup.userparameter.pages.private_message_content.show": "Erakutsi mezu pribatuen edukia", + "scenes.app.workspaces.create_company.group_data.group_main_activity.printing_paper": "Inprimaketa / Papera", + "scenes.app.workspaces.create_company.group_data.group_type.university_school": "Unibertsitatea edo eskola", + "scenes.apps.messages.left_bar.stream.remove_from_favorites": "Kendu gogokoetatik", + "scenes.app.popup.appsparameters.pages.remove_app": "Ezabatu {{$1}} aplikazioa betiko.", + "scenes.apps.calendar.ics_download_menu": "Deskargatu ICS fitxategi bat", + "general.help": "Laguntza", + "scenes.apps.messages.left_bar.stream.notifications.me": "{{$1}} soilik", + "scenes.apps.drive.navigators.navigator_content.files": "Fitxategiak", + "scenes.app.popup.workspaceparameter.pages.access_apps": "Sartu zure aplikazio eta konektoreak", + "scenes.apps.calendar.calendar.week_btn": "Astea", + "general.update": "Eguneratu", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} {{$2}} fitxa berri bat gehitu du {{$3}}", + "components.calendar.repetition.custom_recurrence": "Errepikapen pertsonalizatua", + "general.confirm": "Berretsi", + "general.connexion_status.connected": "Sarean zaude", + "scenes.apps.tasks.list_modal.archive_all_tasks": "Zeregin guztiak artxibatu", + "scenes.login.forgot_password.text2": "9 digituko kodea jasoko duzu. Mesedez, sartu beheko eremuan jarraitzeko.", + "general.back": "Itzuli", + "general.remove": "Kendu", + "general.connexion_status.connecting": "Berriro konektatzen…", + "scenes.app.workspaces.create_company.group_data.group_main_activity.machinery_automotive": "Makineria / Automozioa", + "scenes.apps.drive.trash": "Zaborrontzia", + "components.locked_features.locked_guests_popup.title": "Gonbidatuen funtzioa blokeatuta dago", + "scenes.app.workspaces.create_company.group_data.group_size.100_500": "100 - 499 erabiltzaile", + "components.drive_dropzone.uploading": "Kargatzen...", + "scenes.app.workspaces.create_company.group_data.group_main_activity.electronics_electricity_energy": "Elektronika / Elektrizitatea / Energia", + "scenes.login.create_account.username": "Erabiltzaile izena", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_edition": "Aldatu izena {{$1}}", + "components.connectorslistmanager.add_connectors": "Gehitu konektoreak", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "Laneko eremu honetan instalatutako aplikazioak {{$1}}", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "Utzi lan-eremu hau", + "scenes.app.popup.appsparameters.pages.publication_description": "Zehaztu zure aplikazioaren ikusgarritasuna.", + "scenes.app.popup.appsparameters.pages.event_subtitle": "Gertaerak", + "scenes.app.channelsbar.modify_channel_menu": "Editatu kanala", + "scenes.app.channelsbar.read_sign": "Markatu irakurritako gisa", + "scenes.app.channelsbar.currentuser.collaborateurs": "Erabiltzaileak", + "scenes.app.channelsbar.currentuser.workspace_info": "{{$2}} taldeko {{$1}} lan eremuan zaude", + "scenes.login.home.email": "Posta elektronikoa", + "general.connexion_status.disconnected": "Lineaz kanpo zaude", + "scenes.login.home.title": "Hasi saioa Twake-n", + "scenes.app.integrations_parameters.title": "Integrazioak", + "scenes.app.integrations_parameters.applications_table.name": "Izena", + "scenes.app.integrations_parameters.applications_table.title": "Beste integrazio batzuk", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "Bilatu aplikazioa", + "scenes.app.integrations_parameters.company_application_popup.tag": "Instalatua", + "scenes.app.integrations_parameters.company_application_popup.btn": "Instalatu", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "Informazioak", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "Deskribapena", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "Webgunea", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "Sortze data", + "application.load.longer": "Zerbitzariak uste baino denbora gehiago behar du erantzuteko, mesedez itxaron edo berriro kargatu orria...", + "scenes.app.side_app.messages_thread_title": "{{$1}} • Mezuen haria", + "scenes.app.workspaces.create_company.group_data": "Konfiguratu zure talde berria", + "scenes.app.workspaces.create_company.group_data.group_type": "Talde mota", + "scenes.app.workspaces.create_company.group_data.group_type.company": "Enpresa edo enpresa saila", + "components.calendar.repetition.on": "On", + "components.calendar.repetition.after": "Ondoren", + "components.calendar.repetition.days": "eguna(k)", + "components.calendar.repetition.weeks": "astea(k)", + "components.calendar.repetition.months": "hilabetea(k)", + "components.calendar.repetition.years": "urtea(k)", + "components.calendar.repetition.occurrence": "Gertaera(k)", + "scenes.app.workspaces.create_company.group_data.title": "Azkar ibiliko gara; informazio estatistiko bat besterik ez dugu behar.", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Mezuen zenbakia", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "Twake-ren doako bertsioan, ezin duzu {{$1}} mezu berriagoak baino gehiago sartu.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Erakutsi plan gehiago", + "scenes.app.channelsbar.channelsuser.new_private_discussion": "Eztabaida pribatu berria", + "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Ez dago mezu pribaturik. Gonbidatu erabiltzaileak!", + "scenes.app.channelsbar.channelsuser.private_messages": "Mezu zuzenak", + "scenes.app.channelsbar.channelsworkspace.channel_title": "KANALAK", + "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "GOGOKOOAK", + "scenes.app.channelsbar.channelsworkspace.create_channel": "Sortu kanal bat", + "scenes.app.channelsbar.channelsworkspace.no_channel": "Oraindik ez zara sartu inongo kanalean", + "scenes.app.channelsbar.guest_management": "Gonbidatuen kudeaketa", + "scenes.app.channelsbar.unread_sign": "Markatu irakurri gabeko gisa", + "scenes.app.channelsbar.channel_leaving": "Irten kanala", + "scenes.app.channelsbar.channel_removing": "Ezabatu kanala", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "Kanal hauek zure negoziora inporta ditzakezu antolatuta egoteko marko honetan klik eginez.", + "scenes.app.channelsbar.company_invitation_alert_title": "Enpresara gonbidatuta zaude ", + "scenes.app.popup.appsparameters.pages.api_parameters_label": "API ezarpenak", + "scenes.app.popup.appsparameters.pages.app_name_label": "Aplikazioaren izena", + "scenes.app.popup.appsparameters.pages.app_modification_right": "Enpresa honetako kudeatzaile guztiek aplikazio hau editatu ahal izango dute.", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "Definitu zure aplikazioak zer edita eta irakur dezakeen.", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "Aplikazio-pribilegioak", + "scenes.app.popup.appsparameters.pages.apps_title": "Zure aplikazioak eta konektoreak", + "scenes.app.popup.appsparameters.pages.automatique_label": "Automatikoa", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "'Automatiko' aktibatzen baduzu, aplikazio hau automatikoki gehituko da enpresa honen hurrengo lan-eremuetan.", + "scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Baimendutako IP helbideak", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "Zure aplikazioaren argitalpena Twake taldeak baliozkotzeko zain dago.", + "scenes.app.popup.appsparameters.pages.button_force": "Indarra enpresa osoan", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "'{{$1}}' eta '{{$2}}' id motako gertaera '{{$3}}' pasiboekin", + "scenes.app.popup.appsparameters.pages.company_label": "Enpresaren jabea", + "scenes.app.popup.appsparameters.pages.configuration_label": "Konfigurazioa", + "scenes.app.popup.appsparameters.pages.create_app_button": "Sortu aplikazio bat", + "scenes.app.popup.appsparameters.pages.create_my_app": "Sortu nire aplikazioa", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "Oraindik ez duzu aplikaziorik sortu. Aplikazio edo konektore bat sortu aurretik, ziurtatu ez dagoela gure aplikazioen merkatuan.", + "scenes.app.popup.appsparameters.pages.danger_zone_description": "Ezabatu aplikazioa", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "Zure aplikazioa non ikusgai egongo den definitzeko aukera ematen du.", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "Bistaratzeko ezarpenak", + "scenes.app.popup.appsparameters.pages.error_user_code": "akatsa", + "scenes.app.popup.appsparameters.pages.ok_user_code": "Ados", + "scenes.app.popup.appsparameters.pages.optimal_format": "Formatu optimoa: 48x48px.", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Argitaratu gabeko aplikazioak zure enpresan bakarrik funtzionatuko du. Twake-ren erabiltzaile guztientzat erabilgarri jarri nahi baduzu, aktibatu aukera hau.", + "scenes.app.popup.appsparameters.pages.public_availability_application": "Eskaera publikoa", + "scenes.app.popup.appsparameters.pages.public_login_label": "Identifikatzaile publikoa", + "scenes.app.popup.appsparameters.pages.publication_label": "Argitalpena", + "scenes.app.popup.appsparameters.pages.publish_app_label": "Argitaratu aplikazioa", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "Irakurri pribilegioak", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "Kendu enpresa osotik", + "scenes.app.popup.appsparameters.pages.status_tilte": "Estatu", + "scenes.app.popup.appsparameters.pages.title_tester": "Twakecode probatzailea", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "Gertaeren harreraren URLa", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "Zain...", + "scenes.app.popup.appsparameters.pages.website_label": "Webgunea", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "Idatzi pribilegioak", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "Errore bat gertatu da aplikazioa eguneratzean.", + "scenes.app.popup.appsparameters.pages.remove_app_button": "Ezabatu aplikazioa", + "scenes.app.popup.appsparameters.pages.update_button": "Eguneratu", + "scenes.app.popup.createworkspacepage.add_subtitle": "Leku gehiago behar duzu?", + "scenes.app.popup.createworkspacepage.create_new_workspace": "Sortu lan-eremu berri bat", + "scenes.app.popup.userparameter.pages.notif_content_label": "Jakinarazpenen edukia", + "scenes.app.mainview.quick_search_placeholder": "Bilaketa azkarra", + "scenes.app.popup.workspaceparameter.admin_current_status": "Administratzailea zara.", + "scenes.app.popup.workspaceparameter.manager_current_status": "Enpresaren administratzailea zara.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "Ezabatu lan-eremua", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "Laneko eremuan bakarrik egon behar zara kentzeko. Kendu kolaboratzaileak eta saiatu berriro.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "Lan-eremu hau ezabatu nahi duzula berresteko, idatzi beheko izena eta sakatu Ezabatu.", + "scenes.app.popup.workspaceparameter.pages.enter": "Sartu ", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "Laneko moderatzailea", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "Ezin duzu lan-eremutik irten, azken administratzailea zarelako. Administratzaile berri bat defini dezakezu edo lan-eremu hau ezabatu/artxibatu dezakezu.", + "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "Aplikazio guztiak", + "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "Zure enpresaren aplikazioak", + "scenes.app.popup.workspaceparameter.pages.apps_research_title": "Bilatu aplikazioak", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "Lan-eremu honen aplikazioak", + "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "Itzuli bilaketara", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "Enpresako beste eremu batzuetan instalatutako aplikazioak {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_subtitle": "Instalatutako aplikazioak", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "Errore bat gertatu da erabiltzaile hauek gonbidatzean: ", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "Egiaztatu erabilitako erabiltzaile-izena edo posta elektronikoa baliozkoa dela.", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "Editatu lan-eremu honen irudia", + "scenes.app.popup.workspaceparameter.pages.logo_subtitle": "Logotipoa", + "scenes.app.popup.workspaceparameter.pages.name_description": "Aldatu lan-eremu honen izena", + "scenes.app.popup.workspaceparameter.pages.no_access": "Sarbiderik ez.", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "Ez duzu aplikaziorik lan-eremu honetan", + "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "Irakurtzeko sarbidea", + "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "Kendu enpresa osotik", + "scenes.app.popup.workspaceparameter.pages.research_by": "Bilatu aplikazioak izenaren eta kategorien arabera", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "Webhooketarako sarbidea", + "scenes.app.popup.workspaceparameter.pages.weight_max_small_text": "Gehienezko tamaina 5 MB.", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "Kendu lan-eremu honetatik", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "lan-eremua", + "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "Idazteko sarbidea", + "scenes.apps.messages.message.pin_button": "Ainguratu mezua", + "scenes.apps.messages.message.unpin_button": "Kendu mezua", + "scenes.apps.messages.message.copy_link": "Kopiatu esteka mezurako", + "scenes.apps.messages.message.pinned": "Ainguratuta", + "scenes.apps.messages.message.remove_button": "Ezabatu", + "scenes.apps.messages.message.reply_button": "Erantzun", + "scenes.apps.messages.message.save_button": "Gorde", + "scenes.apps.messages.message.show_button": "Bistaratzea", + "scenes.apps.messages.message.show_responses_button": "Ikusi erantzun guztiak", + "scenes.apps.messages.message.types.first_channel_message_text": "Hau da kanalaren lehen mezua", + "scenes.apps.messages.message.types.first_message_text": "Hau da lehen mezua", + "scenes.apps.messages.messageslist.get_writing_user": "idazten ari da...", + "scenes.apps.messages.messageslist.get_writing_users": "idazten ari dira...", + "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "Mezu berriak", + "scenes.error_on_twake": "\"Houston arazo bat dugu\"", + "scenes.help_us": "Hala ere, errore hau konpontzen lagundu nahi badiguzu, bidali mezu bat behean: ", + "scenes.login.verifymail.alert": "Zure e-maila egiaztatzen ari gara!", + "scenes.login.verifymail.error_message": "Akats bat gertatu da", + "scenes.login.verifymail.signin_button": "Saioa hasi", + "scenes.login.verifymail.success": "Zure e-posta behar bezala egiaztatu da!", + "scenes.login.verifymail.verification_waiting": "Egiaztapenaren zain...", + "services.apps.calendar.deadline_icon": "Epemuga", + "services.apps.calendar.event_icon": "Gertaera", + "services.apps.calendar.reminder_icon": "Oroigarria", + "services.apps.messages.no_app": "Aplikazio hau ez da existitzen.", + "services.apps.messages.no_command_possible": "Ezin dugu '{{$1}}' komandoa exekutatu '{{$2}}' ez delako existitzen edo ez duelako komandoak sortzeko aukera ematen.", + "services.user.notification_parameters_update_alert": "Jakinarazpenen ezarpenak eguneratu dira.", + "services.user.update_password_alert": "Zure pasahitza eguneratu da.", + "scenes.apps.calendar.unconfigured_tab": "Fitxa hau ez dago konfiguratuta oraindik.", + "scenes.apps.drive.top_menu_more": "Gehiago", + "scenes.apps.drive.top_menu_no_items": "{{$1}} elementuak", + "scenes.apps.messages.new_thread": "Hasi eztabaida berri bat", + "scenes.apps.account.account.save": "Gorde kontua", + "scenes.apps.account.message_user_signin": "Zure erabiltzaileak edonoiz hasi dezake saioa e-posta bera erabiliz eta behin-behineko kontua kontu arrunt batera alda dezake.", + "scenes.app.mainview.link_expired": "Esteka publiko hau baliogabea da edo iraungi egin da.", + "scenes.app.mainview.create_account": "Sortu zure lan-eremua doan ", + "scenes.apps.calendar.modals.reminder_add": "Gehitu abisua", + "scenes.apps.parameters.workspace_sections.members.invite_all": "Gonbidatu guztiak", + "scenes.app.taskpicker.select": "Hautatu", + "scenes.apps.tasks.no_connector": "Ez dago konektorerik", + "components.attachmentpicker.add_attachment": "Gehitu eranskinak", + "components.input.copied": "Kopiatua", + "components.drive.navigators.directory_not_found": "Direktorioa ez da aurkitu.", + "components.drive.right_preview.suppress_link": "Ezabatu esteka", + "components.drive.right_preview.create_link": "Sortu sarbide-esteka bat", + "components.drive.moove_here": "Mugitu hona", + "components.drive.modify_uslist": "Erabiltzaileen zerrenda aldatu", + "components.tagpicker.tag_name": "Etiketa izena", + "components.searchpopup.only_pinned": "Ainguratutako mezuak soilik", + "components.alert.confirm": "Berretsi zure ekintza", + "components.alert.confirm_click": "Berretsi zure ekintza Ados sakatuz.", + "components.searchpopup.tasks": "Zereginak", + "scenes.app.mainview.advanced_search_placeholder": "Bilaketa aurreratua", + "components.searchpopup.hide_filters": "iragazkiak ezkutatu", + "components.searchpopup.show_filters": "iragazkiak erakutsi", + "components.searchpopup.load_more": "Kargatu emaitza gehiago", + "general.more": "Gehiago", + "scenes.apps.board.archived_tasks": "Artxibatutako zereginak ({{$1}})", + "scenes.apps.board.active_tasks": "Zeregin aktiboak", + "scenes.apps.board.new_task": "+ Zeregin berria", + "scenes.apps.board.all_boards": "Batzorde guztiak", + "components.userlistmanager.no_users": "Erabiltzailerik ez.", + "components.reminder.minutes_bef": "minutu lehenago", + "services.console_services.toaster.success_invite_emails": "Gehitu dira {{$1}} erabiltzaile(k)", + "scenes.client.channels_bar.modals.guest_management.title": "Kudeatu gonbidatuak {{$1}}-n", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "Bilatu gonbidatuak edo zain dauden mezu elektronikoak", + "scenes.client.channels_bar.modals.guest_management.tips": "Hasi mezu elektronikoak gehitzen edo bilatzen goiko sarrera erabiliz", + "scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "Bidalitako posta", + "general.user.role.company.admin": "Enpresako administratzailea", + "general.user.role.company.guest": "Gonbidatua", + "general.user.deleted": "Ezabatutako kontua", + "components.richtexteditor.toolbar.bold": "Lodia", + "components.richtexteditor.toolbar.underline": "Azpimarratu", + "components.richtexteditor.toolbar.italic": "Etzana", + "components.richtexteditor.toolbar.strikethrough": "Markatua", + "components.richtexteditor.toolbar.code": "Kodea", + "components.richtexteditor.toolbar.unordered-list": "Buletaren zerrenda", + "components.richtexteditor.toolbar.ordered-list": "Zerrenda ordenatua", + "components.richtexteditor.toolbar.blockquote": "Blokeoa", + "components.richtexteditor.toolbar.code-block": "Kode blokea", + "components.locked_features.locked_history_banner.title": "Mezuen mugara iritsi berri zara", + "components.locked_features.locked_history_banner.description": "Zure enpresak mezu asko ditu! Berritu orain zure mezuen historia guztia atzitzeko.", + "components.locked_features.locked_history_banner.button": "Gehiago ikasi", + "components.locked_features.locked_guests_popup.subtitle": "Ezaugarri hau ez dago eskuragarri Twake doako bertsioan", + "components.locked_features.locked_guests_popup.description": "Aupa!! Kanpoko erabiltzaileak zure laneko gunera gonbidatu nahi dituzula dirudi. Baliteke zure plana berritzea kontuan hartu nahi izatea gonbidatuekin eta kanpoko bazkideekin elkarlanean aritu nahi baduzu. Arakatu gure prezio-aukerak eta hautatu aukerarik onena zure taldeko lankidetza-beharretarako.", + "components.locked_features.locked_guests_popup.learn_more_button": "Gehiago ikasi", + "components.locked_features.locked_guests_popup.skip_for_now_button": "Saltatu orain", + "components.locked_features.locked_guests_popup.or": "Edo", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "Arazo bat dago zure enpresaren harpidetzarekin. Mesedez, begiratu zureari", + "components.on_boarding.company_billing_banner.guest_or_member_text": "Arazo bat dago zure enpresaren harpidetzarekin. Mesedez, jarri harremanetan enpresaren jabearekin edo administratzailearekin!", + "components.on_boarding.popups.blocked_company.description": "Twake-rako harpidetza iraungi da. Mesedez, jarri harremanetan zure enpresaren jabearekin edo administratzailearekin hura berritzeko eta zure taldearekin berriro komunikatu ahal izateko!", + "components.on_boarding.popups.blocked_company.learn_more_text": "Enpresen harpidetza-planari buruz gehiago jakin nahi duzu?", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Klikatu hemen", + "components.on_boarding.popups.blocked_company.or": "Edo", + "components.on_boarding.popups.blocked_company.company_selector": "Aldatu beste enpresa batera", + "scenes.apps.tasks.select_user_button": "Ikusi beste erabiltzaile baten zereginak", + "scenes.apps.tasks.select_user": "Bilatu erabiltzailea", + "scenes.apps.messages.input.attach_file.from_computer": "Ordenagailutik", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}}-ek bere mezua ezabatu du", + "components.member.user_parts.and_more_user_text": " eta {{$1}} erabiltzaile gehiago", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "Sortu kanal pribatu bat", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " horren ordez", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "Ezin duzu 10 erabiltzaile baino gehiago gehitu", + "general.uploading": "Kargatzen", + "components.upload.drop_files.toaster.error": "Ezin duzu {{$1}} fitxategi baino gehiago kargatu", + "components.emoji_picker.categories.frequently_used": "Maiz erabiltzen da", + "components.emoji_picker.categories.smileys_and_people": "Irribarreak eta jendea", + "components.emoji_picker.categories.animals_and_nature": "Animaliak eta Natura", + "components.emoji_picker.categories.food_and_drink": "Janaria eta edaria", + "components.emoji_picker.categories.activity": "Jarduera", + "components.emoji_picker.categories.travel_and_places": "Bidaiak eta Lekuak", + "components.emoji_picker.categories.objects": "Objektuak", + "components.emoji_picker.categories.symbols": "Sinboloak", + "components.emoji_picker.categories.flags": "Banderak", + "components.emoji_picker.categories.search_result": "Bilaketa-emaitzak", + "components.emoji_picker.categories.not_found": "Ez da emojirik aurkitu", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "Rola", + "general.email": "Posta elektronikoa", + "components.locked_features.locked_workspace_popup.title": "Ezin duzu lan-eremu gehiago sortu", + "components.locked_features.locked_workspace_popup.text": "Aupa!! Zure enpresan lan-eremu berri bat sortu nahi duzu? Baliteke plana berritzea kontuan hartu nahi izatea. Arakatu gure prezio-aukerak eta hautatu aukerarik onena zure taldeko lankidetza-beharretarako.", + "components.locked_features.locked_only_office_popup.text": "Aupa!! Twake-tik fitxategia editatu nahi duzula dirudi. Baliteke zure plana berritzea kontuan hartu nahi izatea bulegoko fitxategien inguruan elkarlanean aritu nahi baduzu. Arakatu gure prezio-aukerak eta hautatu aukerarik onena zure taldeko lankidetza-beharretarako.", + "components.locked_features.locked_drive_popup.title": "Gidatzeko mugara iritsi berri zara", + "components.locked_features.locked_drive_popup.subtitle": "Doako bertsioan, 6GB bakarrik gorde ditzakezu.", + "general.resume": "Jarraitu", + "general.pause": "Etenaldia", + "\"": "\"", + "login.create_account": "Kontua sortu", + "login.login_error": "Errorea saioa hastean", + "'": "'" +} diff --git a/twake/frontend/public/locales/fi.json b/twake/frontend/public/locales/fi.json index bd5a295f1a..97ebd45caa 100644 --- a/twake/frontend/public/locales/fi.json +++ b/twake/frontend/public/locales/fi.json @@ -422,5 +422,426 @@ "components.emoji_picker.categories.food_and_drink": "Ruoka ja juoma", "general.user.role.company.admin": "Yrityksen ylläpitäjä", "components.emoji_picker.categories.search_result": "Hakutulokset", - "components.emoji_picker.categories.not_found": "Emojia ei löytynyt" -} \ No newline at end of file + "components.emoji_picker.categories.not_found": "Emojia ei löytynyt", + "scenes.app.popup.adduser.magiclinks.action_generate": "Tuottaa", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "Et ole vielä luonut sovellusta. Ennen kuin luot sovelluksen tai liittimen, varmista, ettei sitä ole jo olemassa sovellusmarkkinoillamme.", + "scenes.app.popup.appsparameters.pages.publication_description": "Määritä sovelluksesi näkyvyys.", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "Poista koko yrityksestä", + "scenes.app.popup.appsparameters.pages.show_button": "Näytä", + "scenes.app.popup.appsparameters.pages.status_tilte": "Osavaltio", + "scenes.app.popup.appsparameters.pages.string_information": "Tämä merkkijono identifioi sovelluksesi ja sitä käytetään viestikomennoissa.", + "scenes.app.popup.appsparameters.pages.title_tester": "Twakecode-testeri", + "scenes.app.integrations_parameters.applications_table.name": "Nimi", + "scenes.app.integrations_parameters.applications_table.title": "Muut integraatiot", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "Hakusovellus", + "scenes.app.integrations_parameters.company_application_popup.tag": "Asennettu", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "Verkkosivusto", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "Luomispäivä", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "Versio", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "Näytä", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "Poista yhtiöstä", + "scenes.app.integrations_parameters.company_applications_table.name": "Nimi", + "scenes.apps.messages.input.replied_to": "vastasi ", + "scenes.app.workspaces.create_company.group_data.group_main_activity.real_estate": "Kiinteistöt", + "scenes.app.workspaces.create_company.group_data.group_main_activity.chemistry": "Kemia", + "scenes.app.workspaces.create_company.group_data.group_main_activity.trade_commerce_distribution": "Kauppa / Kauppa / Jakelu", + "scenes.app.workspaces.create_company.group_data.group_main_activity.publishing_communication_multimedia": "Kustannustoiminta / Viestintä / Multimedia", + "scenes.app.workspaces.create_company.group_data.group_main_activity.electronics_electricity_energy": "Elektroniikka / Sähkö / Energia", + "scenes.app.workspaces.create_company.group_data.group_main_activity.studies_and_advice": "Opintoja ja neuvoja", + "scenes.app.workspaces.create_company.group_data.group_main_activity.pharmaceutical_industry": "Lääketeollisuus", + "scenes.app.workspaces.create_company.group_data.group_main_activity.it_telecom": "IT / Telecom", + "scenes.app.workspaces.create_company.group_data.group_main_activity.machinery_automotive": "Koneet / Autot", + "scenes.app.workspaces.create_company.group_data.group_main_activity.business_services": "Liikepalveluja", + "scenes.app.workspaces.create_company.group_data.group_main_activity.entertainment": "Viihde", + "scenes.app.workspaces.create_company.group_data.group_main_activity.textile_clothing_shoes": "Tekstiilit / Vaatteet / Kengät", + "scenes.app.workspaces.create_company.group_data.group_main_activity.transport_logistics": "Kuljetus / Logistiikka", + "scenes.app.workspaces.create_company.group_data.group_main_activity.research": "Tutkimus", + "scenes.app.workspaces.create_company.group_data.group_main_activity.education": "koulutus", + "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Hallinto", + "scenes.app.workspaces.create_company.group_data.group_main_activity.other": "muu", + "scenes.apps.tasks.list_modal.modify_list": "Muokkaa listaa", + "scenes.apps.tasks.list_modal.new_list": "Uusi lista", + "scenes.apps.tasks.list_modal.remove": "Poista luettelo ja tehtävät", + "scenes.apps.tasks.list_modal.predefined_participants": "Ennalta määrätyt osallistujat", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "Poista arkistoidut tehtävät ({{$1}})", + "scenes.app.workspaces.welcome_page.create_my_company": "Luo yritykseni", + "scenes.app.workspaces.welcome_page.lets_go": "Mennään!", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "Kutsuttiinko sinut toisella sähköpostiosoitteella?", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "Voi, no... Näyttää siltä, ettei kukaan ole vielä kutsunut sinua työtilaan.", + "scenes.app.workspaces.welcome_page.ready_to_work": "Olet nyt valmis työskentelemään.", + "components.calendar.repetition.months": "kuukaudet)", + "components.calendar.repetition.years": "vuosi(t)", + "components.calendar.repetition.custom_recurrence": "Mukautettu toistuminen", + "components.calendar.repetition.occurrence": "Tapahtuma(t)", + "components.calendar.repetition.repeat_on": "Toista", + "scenes.app.channelsbar.currentuser.add_apps": "Hae sovelluksia", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "Vahvista, että haluat poistaa tämän työtilan, kirjoita nimi alle ja paina Poista.", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Kutsulinkki työtilaan", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Uusi linkki luotu", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Kopiointi leikepöydälle onnistui", + "scenes.app.popup.adduser.magiclinks.action_copy": "Kopio", + "scenes.app.popup.appsparameters.pages.publication_label": "Julkaisu", + "scenes.app.popup.appsparameters.pages.publish_app_label": "Julkaise hakemus", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "Lukuoikeudet", + "scenes.app.popup.appsparameters.pages.remove_app": "Poista sovellus {{$1}} pysyvästi.", + "components.drive.moove_here": "Muuta tänne", + "components.drive.modify_uslist": "Muokkaa käyttäjäluetteloa", + "components.tagpicker.tag_name": "Merkin nimi", + "components.searchpopup.only_pinned": "Vain kiinnitetyt viestit", + "components.searchpopup.tasks": "Tehtävät", + "scenes.app.mainview.advanced_search_placeholder": "Tarkennettu Haku", + "scenes.app.integrations_parameters.title": "Integraatiot", + "scenes.app.integrations_parameters.company_application_popup.btn": "Asentaa", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "Tiedot", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "Kuvaus", + "scenes.app.integrations_parameters.company_applications_table.title": "Asennettu yritykseesi", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "{{$1}} poistettiin onnistuneesti yrityksestäsi", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "{{$1}} lisätty yritykseesi", + "scenes.join.loading": "Ladataan…", + "scenes.join.wrong_link_title": "Tämä linkki ei ole enää saatavilla", + "scenes.join.wrong_link_description": "Pyydä henkilöltä, joka kutsui sinut tähän yritykseen, uusi linkki tai luo oma yritys", + "scenes.join.create_the_company_button": "Luo yritys", + "scenes.join.join_workspace_from_company": "Liity {{$1}}:ään {{$2}}:stä!", + "scenes.join.twake_description": "Twake on avoimen lähdekoodin digitaalinen työtila, joka on suunniteltu parantamaan tiimisi tuottavuutta", + "scenes.join.login_first_button": "Kirjaudu sisään tai luo ensin tili", + "scenes.join.join_the_team_button": "Liity joukkueeseen", + "general.archive": "Arkisto", + "general.unarchive": "Poista arkistosta", + "application.load.longer": "Palvelimella kestää odotettua kauemmin vastata, odota tai lataa sivu uudelleen...", + "scenes.app.side_app.messages_thread_title": "{{$1}} • Viestiketju", + "scenes.app.workspaces.create_company.group_data.group_type.company": "Yritys tai yrityksen osasto", + "scenes.app.workspaces.create_company.group_data.group_type.society_club_charity": "Seura, klubi tai hyväntekeväisyysjärjestö", + "scenes.app.workspaces.create_company.group_data.group_main_activity": "Pääaktiviteetti", + "scenes.app.workspaces.create_company.group_data.group_main_activity.food": "Ruokaa", + "scenes.app.workspaces.create_company.group_data.group_main_activity.bank": "Pankki / vakuutus", + "scenes.app.workspaces.create_company.group_data.group_main_activity.printing_paper": "Tulostus / Paperi", + "scenes.app.workspaces.create_company.group_data.group_main_activity.construction_building": "Rakentaminen / Rakennusmateriaalit", + "scenes.apps.calendar.calendar.list_btn": "Lista", + "scenes.apps.calendar.event_edition.title_confidentiality": "Luottamuksellisuus", + "scenes.apps.calendar.event_view.article_until": "kohtaan", + "scenes.apps.drive.navigators.navigator_labels.title": "Tarrat", + "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}, {{$2}} ja {{$3}}", + "scenes.apps.messages.left_bar.stream.notifications.me": "Vain {{$1}}", + "scenes.apps.account.title": "Tilin parametrit", + "scenes.apps.account.notifications.keywords_placeholder": "kehittäjä, wifi, koodi, ...", + "scenes.apps.account.notifications.disturb_option_a": "Älä lähetä minulle push-ilmoituksia välillä ", + "scenes.apps.account.notifications.disturb_option_b": " ja ", + "scenes.apps.account.notifications.disturb_option_c": " (paikallinen aikavyöhyke)", + "scenes.apps.account.notifications.devices_option_ever": "Lähetä minulle aina push-ilmoituksia", + "scenes.apps.account.notifications.devices_option_inactive": "Lähetä minulle push-ilmoituksia, kun en ole aktiivinen työpöydällä", + "scenes.apps.account.notifications.devices_option_never": "Älä koskaan lähetä minulle push-ilmoituksia", + "scenes.apps.parameters.group_sections.apps.badge_extension": "Laajennus", + "scenes.apps.parameters.workspace_sections.members.pending": "Odottavat sähköpostit", + "scenes.apps.tasks.no_connectors_menu_text": "Sinulla ei ole liittimiä, jotka voisivat muodostaa yhteyden kalenteriin.", + "scenes.apps.tasks.boards": "Taulut", + "scenes.apps.tasks.connectors_menu": "Liittimet...", + "scenes.apps.tasks.connectors_search_menu": "Hae liittimiä...", + "scenes.apps.tasks.unconfigured_tab": "Tätä välilehteä ei ole vielä määritetty.", + "scenes.apps.tasks.choose_board_button": "Valitse taulu", + "scenes.apps.tasks.new_board.title": "Uusi lauta", + "scenes.apps.tasks.new_board.edit_title": "Muokkaa taulua", + "scenes.apps.tasks.task": "Tehtävä", + "scenes.apps.tasks.task_status.todo": "Tehdä", + "scenes.apps.tasks.task_status.current": "Nykyinen", + "scenes.apps.tasks.task_status.done": "Tehty", + "scenes.apps.tasks.task.assignees": "Valtuutetut", + "scenes.apps.tasks.task.edit.dates": "Päivämäärät", + "scenes.login.footer.go_to_twake": "Siirry osoitteeseen twakeapp.com", + "scenes.login.footer.branding": "Olet {{$1}} ({{$2}}) yksityisellä Twake-palvelimella. ", + "scenes.login.create_account.fill_in_email": "Sinun tulee täyttää sähköpostisi oikealla sähköpostiosoitteella", + "scenes.login.forgot_password.text2": "Saat 9-numeroisen koodin. Kirjoita se alla olevaan kenttään jatkaaksesi.", + "scenes.login.forgot_password.password_dont_match": "Salasanasi eivät täsmää tai ne ovat liian lyhyitä. Kirjoita salasana, jossa on vähintään 8 merkkiä.", + "scenes.app.workspaces.create_company.company_name.title_1": "Aloittaa,", + "scenes.app.workspaces.create_company.company_name.title_2": "ilmoittaa yrityksesi nimi.", + "scenes.app.workspaces.create_company.default_workspace_name": "Main", + "scenes.app.workspaces.create_company.importations.title_1": "Työskenteletkö jo digitaalisten työkalujen kanssa? Tuo tai integroi työkalusi nyt!", + "scenes.app.workspaces.create_company.importations.title_2": "Ei hätää, voit tehdä tämän myöhemmin!", + "scenes.app.workspaces.welcome_page.added_to_company": "Sinut on kutsuttu ", + "scenes.app.workspaces.create_company.group_data.title": "Toimimme nopeasti – tarvitsemme vain tilastotietoja.", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "Lähetimme sinulle vahvistuskoodin {{$1}}:n kautta", + "scenes.apps.account.account.description_main": "Pääosoitteesi on paikka, johon Twake lähettää ilmoituksesi. Toissijaisten osoitteiden avulla sinut kutsutaan automaattisesti niitä käyttäviin työtiloihin.", + "scenes.apps.account.identity.description": "Muuta etunimesi, sukunimesi ja profiilikuvasi, joka näkyy muille Twaken käyttäjille.", + "components.calendar.repetition.weekly_on": "Viikoittain {{$1}}", + "components.calendar.repetition.monthly_on": "Kuukausittain {{$1}} {{$2}}", + "components.calendar.repetition.monthly_on_day": "Kuukausittain päivänä {{$1}}", + "components.calendar.repetition.annually_on": "Vuosittain {{$1}}", + "components.calendar.repetition.every_weekday": "Joka arkipäivä (ma-pe)", + "components.calendar.repetition.repeat": "Toista joka", + "components.calendar.repetition.on": "Päällä", + "components.calendar.repetition.after": "Jälkeen", + "components.calendar.repetition.days": "päivä(t)", + "components.calendar.repetition.weeks": "viikko(t)", + "scenes.app.channelsbar.currentuser.workspace_info": "Olet työtilassa {{$1}} ryhmästä {{$2}}", + "scenes.app.channelsbar.currentuser.update": "Päivittää", + "scenes.app.channelsbar.currentuser.disable_notifications": "Poista käytöstä", + "scenes.app.channelsbar.currentuser.disabling_notifications": "Pois käytöstä 1h", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "Pois käytöstä klo 9 asti. huomenna", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "Aktivoi uudelleen", + "scenes.app.channelsbar.channelsuser.private_messages": "Suorat viestit", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "Voit tuoda nämä kanavat yritykseesi pysyäksesi järjestyksessä napsauttamalla tätä kehystä.", + "scenes.app.channelsbar.initial_instructions_tutorial": "Valitse etunimi, nimi ja profiilikuva.", + "scenes.app.channelsbar.welcoming_message_subtitle": "Ryhdy Twake-ammattilaiseksi muutamalla napsautuksella!", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Sinulla ei ole liitintä, joka voi muodostaa yhteyden kanavaan.", + "scenes.app.popup.adduser.adresses_message": "Erota osoitteet pilkulla tai välilyönnillä. Muista, että Twake voi rajoittaa kutsujen määrää tilauksesi perusteella.", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Testaa Twacode-viestiesi ulkoasua", + "scenes.app.channelsbar.company_invitation_alert_title": "Sinut on kutsuttu yritykseen ", + "scenes.app.popup.appsparameters.pages.app_modification_right": "Kaikki tämän yrityksen johtajat voivat muokata tätä sovellusta.", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "Määritä, mitä sovelluksesi voi muokata ja lukea.", + "scenes.app.popup.appsparameters.pages.app_update": "Päivitä sovellus {{$1}} (sovellusta käytetään {{$2}} kertaa.)", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "Jos aktivoit \"Automaattinen\", tämä sovellus lisätään automaattisesti tämän yrityksen seuraaviin työtiloihin.", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "Hakemuksesi julkaisu odottaa tällä hetkellä Twake-tiimin vahvistusta.", + "scenes.app.popup.appsparameters.pages.button_force": "Voimia koko yrityksessä", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "Tapahtuman tyyppi {{$1}} ja tunnus {{$2}} passiivisilla merkinnöillä {{$3}}", + "scenes.app.popup.appsparameters.pages.installation": "Asentaa.", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "Aloita kirjoittamalla viestisi JSON-muodossa.", + "scenes.app.popup.appsparameters.pages.interne_availability_application": "Sisäinen sovellus", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "Siirry dokumentaatioon luodaksesi määritykset JSON-muodossa.", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "Passiivinen data, joka lähetetään seuraavassa tapahtumassa", + "scenes.app.popup.appsparameters.pages.modify_public_data": "Muokkaa sovelluksesi julkisia tietoja.", + "scenes.app.popup.appsparameters.pages.ok_user_code": "okei", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "Aseta mobiili-ilmoitusten tiheys.", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "Ilmoitusten tiheys", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "Korosta seuraavat avainsanat:", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "Aseta sähköposti-ilmoitusten tiheys.", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "Valitse ajanjakso, jonka aikana et saa ilmoituksia.", + "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "Älä häiritse yöllä", + "scenes.app.popup.userparameter.pages.notif_content_label": "Ilmoitusten sisältö", + "scenes.app.popup.workspaceparameter.pages.company_name_description": "Muuta tämän yrityksen nimi", + "scenes.app.popup.workspaceparameter.pages.show_button": "Näyttö", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "Pääsy webhookeihin", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "Poista tästä työtilasta", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "työtila", + "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "Kirjoitusoikeus", + "scenes.app.popup.workspaceparameter.pages.your_apps_label": "Sinun sovelluksesi", + "scenes.app.workspacesbar.components.change_company_title": "Vaihda yritystä", + "scenes.app.workspacesbar.components.create_company_menu": "Luo yritys", + "scenes.app.workspacesbar.components.grp_parameters": "{{$1}} asetukset", + "scenes.apps.calendar.connectors_search_menu": "Hae liittimiä...", + "scenes.apps.calendar.no_calendar_text": "Et ole asettanut kalentereita tälle työtilalle.", + "scenes.apps.calendar.no_connectors_menu_text": "Sinulla ei ole liittimiä, jotka voisivat muodostaa yhteyden kalenteriin.", + "scenes.apps.calendar.remove_calendar_confirmation": "Poistetaanko kalenteri ja sen tapahtumat pysyvästi?", + "scenes.apps.drive.no_file_alert": "Sinulla ei ole sovelluksia, joiden avulla voit luoda tiedoston.", + "scenes.apps.drive.no_storage_app_alert": "Sinulla ei ole sovelluksia, joiden avulla voit lisätä ulkoista tallennustilaa.", + "scenes.apps.drive.trash_empty_menu": "Tyhjennä roskakori", + "scenes.apps.drive.unconfigured_tab": "Tätä välilehteä ei ole vielä määritetty.", + "scenes.apps.drive.viewer.edit_with_button": "Muokkaa käyttämällä {{$1}}", + "scenes.apps.messages.input.placeholder": "Kirjoittaa viestin. Käytä @ lainataksesi käyttäjää.", + "scenes.apps.messages.message.show_button": "Näyttö", + "scenes.apps.messages.message.show_responses_button": "Katso kaikki vastaukset", + "scenes.apps.messages.messageslist.get_writing_user": "kirjoittaa...", + "scenes.apps.messages.messageslist.get_writing_users": "kirjoittavat...", + "scenes.apps.messages.messageslist.go_last_message_button": "Siirry viimeiseen viestiin", + "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "Uusia viestejä", + "scenes.error_on_twake": "\"Houston, meillä on ongelma\"", + "scenes.help_us": "Jos kuitenkin haluat auttaa meitä korjaamaan tämän virheen, lähetä meille viesti alla: ", + "scenes.login.verifymail.alert": "Tarkistamme sähköpostisi!", + "scenes.no_panic": "Älä panikoi! Korjaa Twake lataamalla tämä sivu uudelleen.", + "services.apps.calendar.reminder_icon": "Muistutus", + "services.apps.messages.no_app": "Tätä sovellusta ei ole olemassa.", + "services.apps.messages.no_command_possible": "Emme voi suorittaa komentoa \"{{$1}}\", koska \"{{$2}}\" ei ole olemassa tai se ei salli komentojen luomista.", + "scenes.apps.calendar.unconfigured_tab": "Tätä välilehteä ei ole vielä määritetty.", + "scenes.tell_us": "Kerro meille mitä olit tekemässä:", + "scenes.apps.drive.viewer.download_desktop": "Lataa Twake Desktop esikatsellaksesi sovelluksessa", + "scenes.apps.tasks.my_tasks": "Minun tehtäväni", + "scenes.apps.tasks.board.place_holder": "Hallituksen nimi", + "scenes.apps.tasks.board.tasks.use_deadline": "Käytä määräaikaa", + "scenes.apps.tasks.board.tasks.use_starttime": "Käytä aloitusaikaa", + "scenes.apps.tasks.board.tasks.in_list": "Luettelossa", + "scenes.apps.tasks.board.starts": "Aloittaa", + "scenes.apps.tasks.board.ends": "Tehtävää varten", + "scenes.apps.tasks.board.list_name": "Listanimi", + "scenes.app.popup.sync_calendar": "Synkronoi kalenterisi.", + "components.searchpopup.filter_ws": "Suodata työtilat", + "components.searchpopup.tags": "Tunnisteet", + "components.searchpopup.update_search": "Päivitä haku", + "scenes.apps.drive.remove_attachs": "Poista liitteet", + "components.drive.elements.see": "Katso", + "scenes.apps.drive.right_preview.public": "Julkinen pääsy", + "components.drive.elements.configurate_mod": "Määritä mode...", + "components.drive.elements.manage_version": "Hallitse versioita", + "scenes.apps.tasks.active_tasks": "aktiivisia tehtäviä", + "scenes.apps.drive.right_preview.versions": "Versiot", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Hallitse sovelluksiasi ja liittimiäsi.", + "scenes.app.popup.appsparameters.pages.icon": "Kuvake", + "scenes.app.popup.appsparameters.pages.title_informations": "Perustiedot", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "Sovellusten hallintaan liittyvät tiedot", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} sähköpostiosoitetta lisätään", + "components.newversion.new_version_component.row.part_2": "Suosittelemme lataamaan sovelluksen uudelleen ja nauttimaan uusista ominaisuuksistamme!", + "components.newversion.new_version_component.link": "Napsauta tätä ladataksesi uudelleen", + "components.inputs.input_with_select.select.placeholder": "Osion nimi", + "components.inputs.input_with_select.select.no_sections": "Aloita ensimmäisen kanavaosiosi nimen kirjoittaminen.", + "components.inputs.input_with_select.button.tooltip": "Aseta kanavaosio", + "components.add_mails_workspace.button": "Aloita Twaken käyttö", + "components.add_mails_workspace.title_1": "Lisää käyttäjiä", + "components.add_mails_workspace.title_2": "Twake on tiimin yhteistyötyökalu, joten kutsu joitain käyttäjiä testaamaan sinulle luomaamme työtilaa.", + "components.locked_features.locked_guests_popup.skip_for_now_button": "Ohita nyt", + "components.locked_features.locked_guests_popup.or": "Tai", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "Yrityksesi tilauksessa on ongelma. Ole hyvä ja katso omaasi", + "components.on_boarding.company_billing_banner.guest_or_member_text": "Yrityksesi tilauksessa on ongelma. Ota yhteyttä yrityksen omistajaan tai ylläpitäjään!", + "components.on_boarding.company_billing_banner.link": "yrityksen tilaussuunnitelma", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Klikkaa tästä", + "components.locked_features.locked_only_office_popup.title": "Et voi muokata tätä tiedostoa", + "scenes.app.workspaces.create_company.group_data.group_main_activity.materials": "Materiaalit", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Viestien numero", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "Twaken ilmaisessa versiossa et voi käyttää enempää kuin {{$1}} uudempia viestejä.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Näytä lisää suunnitelmia", + "scenes.app.popup.appsparameters.pages.alert_published_app": "Hakemuksesi on julkaistu, et voi muokata sitä.", + "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Käytä * kehitysvaiheessa salliaksesi kaikki IP-osoitteet.", + "scenes.app.popup.appsparameters.pages.amazing_app_name": "Minun hämmästyttävä sovellus", + "scenes.app.popup.appsparameters.pages.api_data_description": "Hyödyllistä tietoa Twake API:lle.", + "scenes.app.popup.appsparameters.pages.company_label": "Yrityksen omistaja", + "scenes.app.popup.appsparameters.pages.configuration_label": "Kokoonpano", + "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "Yrityksen kehittämät sovellukset", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "Voit määrittää, missä sovelluksesi näkyy.", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "Näyttöasetukset", + "scenes.app.popup.appsparameters.pages.error_check_needed": "Tapahtui virhe; tarkista tietosi.", + "scenes.app.popup.appsparameters.pages.error_message": "Tämä nimi on jo toisen sovelluksen käytössä; ole hyvä ja valitse toinen.", + "scenes.app.popup.appsparameters.pages.error_user_code": "virhe", + "scenes.app.popup.appsparameters.pages.event_subtitle": "Tapahtumat", + "scenes.app.popup.appsparameters.pages.filter_information": "Tämä suodatin rajoittaa API-avaimesi käytön vain liittimessäsi oleviin palvelimiin.", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "Tämä nimi on jo toisen sovelluksen käytössä. Valitse toinen.", + "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "Yksinkertaistettu nimi", + "scenes.app.popup.appsparameters.pages.optimal_format": "Optimaalinen muoto: 48x48px.", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Julkaisematon sovellus toimii vain yrityksessäsi. Jos haluat asettaa sen kaikkien Twaken käyttäjien saataville, aktivoi tämä vaihtoehto.", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "Tapahtuman vastaanoton URL-osoite", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "Odotetaan...", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "Kirjoitusoikeudet", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "Et voi poistaa tätä sovellusta, jos se on julkaistu.", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Sovelluksesi yksinkertaistettu nimi on jo toisen sovelluksen käytössä. Vaihda se.", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "Sovellusta päivitettäessä tapahtui virhe.", + "scenes.app.mainview.quick_search_placeholder": "Pikahaku", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "Sinun on oltava yksin työtilassa, jotta voit poistaa sen. Poista yhteiskäyttäjät ja yritä uudelleen.", + "scenes.app.popup.workspaceparameter.pages.enter": "Tulla sisään ", + "scenes.app.popup.workspaceparameter.pages.access_apps": "Käytä sovelluksiasi ja liittimiäsi", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "Työtilan moderaattori", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "Et voi poistua työtilasta, koska olet viimeinen järjestelmänvalvoja. Voit määrittää uuden järjestelmänvalvojan tai poistaa/arkistoida tämän työtilan.", + "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "Kaikki sovellukset", + "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "Yrityksesi sovellukset", + "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "Integraatiot", + "scenes.app.popup.workspaceparameter.pages.apps_research_title": "Hae sovelluksia", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "Tämän työtilan sovellukset", + "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "Yrityksen kehittämät sovellukset", + "scenes.app.popup.workspaceparameter.pages.company_identity_title": "Yrityksen identiteetti", + "scenes.app.popup.workspaceparameter.pages.configuration_notif": "kokoonpano", + "scenes.app.popup.workspaceparameter.pages.configure_button": "Määritä", + "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "Yrityksen kehittämät sovellukset", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "Näyttöasetukset", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "Asenna sovellus tähän työtilaan.", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "Tähän työtilaan asennetut sovellukset {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "Yrityksen muille alueille asennetut sovellukset {{$1}}", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "Seuraavia käyttäjiä kutsuttaessa tapahtui virhe: ", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "Tarkista, että käyttämäsi käyttäjätunnus tai sähköpostiosoite on oikea.", + "scenes.app.popup.workspaceparameter.pages.name_description": "Muuta tämän työtilan nimeä", + "scenes.app.popup.workspaceparameter.pages.no_access": "Ei pääsyä.", + "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "Lukuoikeus", + "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "Poista koko yrityksestä", + "scenes.app.popup.workspaceparameter.pages.research_by": "Hae sovelluksia nimen ja luokkien mukaan", + "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "Hae sovelluksia...", + "scenes.apps.calendar.day_option": "Päivä", + "scenes.apps.messages.input.edited": "Muokattu", + "services.apps.calendar.deadline_icon": "Takaraja", + "services.apps.calendar.event_icon": "Tapahtuma", + "services.apps.calendar.move_icon": "Liikkua", + "scenes.apps.account.account.send_info": "Lähetä nämä tunnistetiedot käyttäjällesi.", + "scenes.apps.account.message_temporary": "Väliaikainen tili toimii kuten tavallinen Twake-tili, mutta sinä luot salasanan ja voit nollata sen tarvittaessa.", + "scenes.apps.account.message_user_signin": "Käyttäjäsi voi kirjautua sisään milloin tahansa tällä samalla sähköpostilla ja vaihtaa väliaikaisen tilin tavalliseksi tiliksi.", + "scenes.app.mainview.create_account": "Luo työtilasi ilmaiseksi osoitteessa ", + "scenes.apps.calendar.modals.reminder_add": "Lisää muistutus", + "scenes.apps.tasks.no_connector": "Ei liitintä", + "components.attachmentpicker.add_attachment": "Lisää liitteitä", + "components.input.copied": "Kopioitu", + "components.drive.navigators.directory_not_found": "Hakemistoa ei löydy.", + "components.drive.right_preview.suppress_link": "Sulje linkki", + "components.drive.right_preview.create_link": "Luo pääsylinkki", + "scenes.apps.board.active_tasks": "Aktiiviset tehtävät", + "scenes.apps.board.display_as": "Näytä muodossa", + "scenes.apps.drive.used": "käytetään tässä kansiossa", + "scenes.apps.calendar.reminders": "muistutus", + "components.tagpicker.notag": "Ei tagia", + "components.calendar.calendarselector.from": "From", + "scenes.apps.drive.move_text2": "Liikkua", + "components.attachmentpicker.from_computer": "laitteestasi", + "components.attachmentpicker.from_twake": "Twake Documentsista", + "components.attachmentpicker.file": "Tiedosto", + "components.attachmentpicker.remove_attach": "Poista liite", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "Nykyinen käyttäjätunnus", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "Nykyinen työtilan tunnus", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "Nykyisen ryhmän tunnus", + "scenes.app.mainview.channel_description": "Kuvaile kanavaa", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "Kutsu kaikki työtilan käyttäjät automaattisesti tälle kanavalle", + "scenes.client.channelbar.channelmemberslist.title": "Käyttäjät kohteessa {{$1}}", + "components.notifications.hidden_notifications_button.children": "Uusia viestejä", + "scenes.client.channelbar.channelmemberslist.no_members": "Tällä kanavalla ei ole käyttäjiä, voit kutsua heidät napsauttamalla Lisää käyttäjiä.", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} lisäsi uuden {{$2}}-välilehden {{$3}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} poisti välilehden {{$2}} {{$3}}", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} lisäsi uuden liittimen {{$2}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} poisti liittimen {{$2}}", + "scenes.client.channelbar.channelmemberslist.tag": "Sinä", + "general.verify": "Vahvista", + "components.unverified_account.typography_text_danger": "Sinulla on {{$1}} päivää jäljellä kokeilujaksoa. Kokeilutili estetään 7 päivän kuluttua ja poistetaan pysyvästi 1 kuukauden rekisteröinnin jälkeen. Voit vahvistaa tilisi napsauttamalla \"Vahvista tilini\" -painiketta sinulle lähettämässämme vahvistussähköpostissa.", + "components.unverified_account.verification_details": "Olemme lähettäneet vahvistustiedot osoitteeseen", + "components.blocked_account.trial_period_over": "Kokeilujaksosi on ohi. Avaa tilisi lukitus ja pääset käyttämään kaikkia toimintoja vahvistamalla tilisi sähköpostivahvistuksella", + "components.add_mails_workspace.text_area_placeholder": "Anna käyttäjiesi sähköpostiosoitteet*", + "components.verify_mail.title_1": "Onnittelut", + "components.verify_mail.title_2": "Olet nyt virallinen Twaken käyttäjä!", + "components.verify_mail.button": "Lisää käyttäjä", + "components.verify_mail.text": "Ensinnäkin sinun on vahvistettava sähköpostiosoitteesi. Olemme lähettäneet vahvistuslinkin osoitteeseen", + "components.verify_mail.paragraph": "Voit tehdä sen myöhemmin, jos haluat, mutta vahvistamattomilla tileillä on pääsy vain rajoitettuun Twaken versioon", + "services.console_services.toaster.add_emails_error": "Virhe lisättäessä sähköposteja", + "services.console_services.toaster.add_email_error_message": "Virhe lisättäessä {{$1}}", + "services.console_services.toaster.success_verify_email": "Vahvistuslinkki on lähetetty sähköpostitilillesi", + "scenes.app.popup.workspaceparameter.edit_from_console": "Katso konsolista", + "services.console_services.toaster.success_invite_emails": "{{$1}} käyttäjän lisäys onnistui", + "scenes.client.channels_bar.modals.guest_management.title": "Hallinnoi vieraita kohteessa {{$1}}", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "Hae vieraita tai odottavia sähköposteja", + "scenes.client.channels_bar.modals.guest_management.tips": "Aloita sähköpostin lisääminen tai etsiminen käyttämällä yllä olevaa syötettä", + "components.richtexteditor.toolbar.bold": "Lihavoitu", + "components.richtexteditor.toolbar.underline": "Korostaa", + "components.richtexteditor.toolbar.italic": "Kursiivi", + "components.richtexteditor.toolbar.strikethrough": "Yliviivattu", + "components.richtexteditor.toolbar.code": "Koodi", + "components.richtexteditor.toolbar.unordered-list": "Ranskalaiset viivat", + "components.richtexteditor.toolbar.ordered-list": "Tilattu lista", + "components.richtexteditor.toolbar.blockquote": "Lohkolainaus", + "components.richtexteditor.toolbar.code-block": "Koodilohko", + "components.locked_features.locked_history_banner.title": "Olet juuri saavuttanut viestirajan", + "components.locked_features.locked_history_banner.description": "Yritykselläsi on paljon viestejä! Päivitä nyt, niin pääset käyttämään kaikkea viestihistoriaasi.", + "components.locked_features.locked_history_banner.button": "Lue lisää", + "components.locked_features.locked_guests_popup.title": "Vieraat-ominaisuus on lukittu", + "components.locked_features.locked_guests_popup.subtitle": "Tämä ominaisuus ei ole käytettävissä Twaken ilmaisessa versiossa", + "components.locked_features.locked_guests_popup.description": "Oho!! Vaikuttaa siltä, että haluat kutsua ulkoisia käyttäjiä työtilaan. Sinun kannattaa harkita suunnitelmasi päivittämistä, jos haluat tehdä yhteistyötä vieraiden ja ulkoisten kumppaneiden kanssa. Tutustu hinnoitteluvaihtoehtoihimme ja valitse tiimisi yhteistyötarpeisiisi paras vaihtoehto.", + "components.locked_features.locked_guests_popup.learn_more_button": "Lue lisää", + "components.on_boarding.popups.blocked_company.title": "Yrityksesi on lukittu maksuongelman vuoksi", + "components.on_boarding.popups.blocked_company.description": "Twake-tilauksesi on vanhentunut. Ota yhteyttä yrityksesi omistajaan tai järjestelmänvalvojaan uusitaksesi sen ja pystyt kommunikoimaan tiimisi kanssa uudelleen!", + "components.on_boarding.popups.blocked_company.learn_more_text": "Haluatko tietää lisää yritysten tilaussuunnitelmasta?", + "components.on_boarding.popups.blocked_company.or": "Tai", + "components.on_boarding.popups.blocked_company.company_selector": "Vaihda toiseen yritykseen", + "scenes.apps.tasks.select_user_button": "Tarkastele toisen käyttäjän tehtäviä", + "scenes.apps.tasks.select_user": "Etsi käyttäjä", + "scenes.apps.messages.input.attach_file.from_computer": "Tietokoneelta", + "scenes.app.popup.workspaceparameter.pages.table_title": "Nimi", + "scenes.client.main_view.main_header.search_input": "Hae", + "scenes.apps.drive.new_link_title": "Uusi linkki", + "scenes.apps.drive.default_link_name": "Nimetön", + "components.emoji_picker.input_search_placeholder": "Hae", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}} - Et voi lisätä viestiin enempää kuin {{$2}} tiedostoa", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "Poistit tämän viestin", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} poisti viestinsä", + "components.member.user_parts.and_more_user_text": " ja {{$1}} enemmän käyttäjiä", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "Luo yksityinen kanava", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " sen sijaan", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "Et voi lisätä enempää kuin 10 käyttäjää", + "general.uploading": "Lähetetään", + "components.upload.drop_files.toaster.error": "Et voi lähettää enempää kuin {{$1}} tiedostoa", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "Rooli", + "general.email": "Sähköposti", + "components.locked_features.locked_workspace_popup.title": "Et voi luoda lisää työtiloja", + "components.locked_features.locked_workspace_popup.subtitle": "Ilmaisessa versiossa sinulla voi olla vain yksi työtila yrityksessäsi.", + "components.locked_features.locked_workspace_popup.text": "Oho!! Haluatko luoda uuden työtilan yritykseesi? Sinun kannattaa harkita suunnitelmasi päivittämistä. Tutustu hinnoitteluvaihtoehtoihimme ja valitse paras vaihtoehto tiimin yhteistyötarpeisiisi.", + "components.locked_features.locked_only_office_popup.subtitle": "Ilmaisessa versiossa et voi käyttää onlyofficea.", + "components.locked_features.locked_only_office_popup.text": "Oho!! Vaikuttaa siltä, että haluat muokata Twaken tiedostoa. Sinun kannattaa harkita suunnitelmasi päivittämistä, jos haluat tehdä yhteistyötä Office-tiedostojen parissa. Tutustu hinnoitteluvaihtoehtoihimme ja valitse tiimisi yhteistyötarpeisiisi paras vaihtoehto.", + "components.locked_features.locked_drive_popup.title": "Olet juuri saavuttanut ajorajan", + "components.locked_features.locked_drive_popup.subtitle": "Ilmaisessa versiossa voit tallentaa vain 6 Gt.", + "general.resume": "Jatkaa", + "general.pause": "Tauko" +} diff --git a/twake/frontend/public/locales/fr.json b/twake/frontend/public/locales/fr.json index 5d914ff4d9..87b5f10429 100644 --- a/twake/frontend/public/locales/fr.json +++ b/twake/frontend/public/locales/fr.json @@ -849,7 +849,19 @@ "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.prefix": "Erreur", "scenes.app.channelsbar.currentuser.reset": "Réinitialiser", "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Écrivez au moins trois lettres pour afficher des utilisateurs", - "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "Aucun utilisateur trouvé", - "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"Aucun emoji trouvé", - "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Aucune commande trouvé" + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found": "Aucun utilisateur trouvé", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found": "Aucun emoji trouvé", + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Aucune commande trouvé", + "scenes.join.loading": "Chargement…", + "scenes.join.wrong_link_title": "Ce lien n'est plus disponible", + "scenes.join.twake_description": "Twake est un espace de travail numérique à code ouvert conçu pour améliorer la productivité de votre équipe", + "scenes.join.login_first_button": "Connectez-vous ou créez d'abord un compte", + "scenes.join.wrong_link_description": "Demandez à la personne qui vous a invité(e) de rejoindre cette entreprise par un nouveau lien ou créez votre propre entreprise", + "scenes.join.join_the_team_button": "Rejoindre l'équipe", + "scenes.join.create_the_company_button": "Créer l'entreprise", + "scenes.join.join_workspace_from_company": "Rejoignez {{$1}} à partir de {{$2}} !", + "\"": "\"", + "'": "'", + "login.create_account": "Créer un compte", + "login.login_error": "Erreur lors de la connexion" } diff --git a/twake/frontend/public/locales/it.json b/twake/frontend/public/locales/it.json new file mode 100644 index 0000000000..dd6cb36151 --- /dev/null +++ b/twake/frontend/public/locales/it.json @@ -0,0 +1,851 @@ +{ + "general.save": "Salva", + "scenes.login.create_account.email_used": "Questa posta elettronica è già in uso.", + "scenes.login.create_account.username": "Nome utente", + "scenes.login.create_account.username_already_exist": "Questo nome utente è già in uso", + "scenes.login.create_account.fill_in_username": "Devi inserire il tuo nome utente", + "scenes.login.forgot_password.invalid_code": "Questo codice non è valido.", + "scenes.login.forgot_password.text3": "Inserisci una nuova password per il tuo account.", + "scenes.login.forgot_password.password": "Password", + "scenes.login.forgot_password.password2": "Conferma password", + "scenes.login.forgot_password.password_dont_match": "Le tue password non corrispondono o sono troppo corte. Si prega di digitare una password con almeno 8 caratteri.", + "scenes.login.home.title": "Accedi a Twake", + "scenes.login.create_account.step_1_subtitle": "Non potrebbe essere più semplice: abbiamo solo bisogno di alcune informazioni.", + "scenes.login.create_account.step_2_subtitle_a": "Aggiungi il tuo nome completo per consentire agli altri utenti di riconoscerti.", + "scenes.app.workspaces.welcome_page.twake_team": "Twake", + "scenes.app.workspaces.welcome_page.welcome_header": "Benvenuto a Twake!", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Puoi collegare più indirizzi e-mail al tuo account; verrà utilizzato un solo indirizzo per inviarti le notifiche.", + "scenes.app.workspaces.welcome_page.main_mail_title": "Indirizzo principale", + "scenes.app.workspaces.welcome_page.other_mail_title": "Indirizzi secondari", + "general.open": "Aprire", + "scenes.app.channelsbar.read_sign": "Segna come letto", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Nuovo link generato", + "scenes.app.popup.appsparameters.pages.alert_published_app": "La tua domanda è pubblicata, non puoi modificarla.", + "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Utilizzare * in fase di sviluppo per consentire tutti gli indirizzi IP.", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "Privilegi dell'applicazione", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "La pubblicazione della tua domanda è attualmente in attesa di convalida da parte del team Twake.", + "scenes.app.popup.appsparameters.pages.button_force": "Forza in tutta l'azienda", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "Evento di tipo '{{$1}}' e id '{{$2}}' con passivi '{{$3}}'", + "scenes.app.popup.appsparameters.pages.company_label": "Proprietario della compagnia", + "scenes.app.popup.appsparameters.pages.configuration_label": "Configurazione", + "scenes.app.popup.appsparameters.pages.go_back": "Indietro", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "Questo nome è già utilizzato da un'altra applicazione. Si prega di sceglierne un altro.", + "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "Nome semplificato", + "scenes.app.popup.appsparameters.pages.installation": "Installare.", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "Inizia scrivendo il tuo messaggio in formato JSON.", + "scenes.app.popup.appsparameters.pages.interne_availability_application": "Applicazione interna", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "Vai alla documentazione per generare la tua configurazione in formato JSON.", + "scenes.app.popup.appsparameters.pages.loading": "Caricamento in corso...", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "Dati passivi che verranno inviati al prossimo Evento", + "scenes.app.popup.appsparameters.pages.modify_public_data": "Modifica i dati pubblici della tua applicazione.", + "scenes.app.popup.appsparameters.pages.optimal_format": "Formato ottimale: 48x48px.", + "scenes.app.popup.appsparameters.pages.public_availability_application": "Applicazione pubblica", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "Devi essere il solo partecipante nello spazio di lavoro per rimuoverlo. Rimuovi i tuoi collaboratori e riprova.", + "scenes.app.popup.workspaceparameter.pages.enter": "Entrare ", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "Moderatore dello spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "Non puoi lasciare lo spazio di lavoro, perché sei l'ultimo amministratore. Puoi definire un nuovo amministratore o cancellare/archiviare questo spazio di lavoro.", + "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "Tutte le applicazioni", + "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "Le applicazioni della tua azienda", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "Installa l'applicazione in questo spazio di lavoro.", + "scenes.app.popup.workspaceparameter.pages.name_label": "Nome dello spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "Accesso di scrittura", + "scenes.app.popup.workspaceparameter.pages.your_apps_label": "Le tue applicazioni", + "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "Pagamenti e abbonamenti", + "scenes.app.workspacesbar.components.change_company_title": "Cambia azienda", + "scenes.apps.calendar.day_option": "Giorno", + "scenes.apps.calendar.modals.description_placeholder": "Descrizione", + "scenes.apps.calendar.modals.details_title": "Particolari", + "scenes.apps.calendar.modals.event_adresse_placeholder": "Indirizzo", + "scenes.apps.calendar.modals.event_description_placeholder": "Descrizione", + "components.searchpopup.loading": "Caricamento di più risultati", + "components.searchpopup.filter_ws": "Filtra le aree di lavoro", + "components.searchpopup.tags": "tag", + "components.searchpopup.size": "Misurare", + "components.searchpopup.creation": "Creazione", + "components.searchpopup.update_search": "Aggiorna ricerca", + "components.searchpopup.last_modif": "Ultima modifica", + "components.searchpopup.sender": "Mittente", + "components.searchpopup.mentions": "menzioni", + "components.searchpopup.only_pinned": "Solo messaggi appuntati", + "components.alert.confirm": "Conferma la tua azione", + "components.alert.confirm_click": "Conferma la tua azione facendo clic su OK.", + "components.searchpopup.tasks": "Compiti", + "scenes.app.mainview.advanced_search_placeholder": "Ricerca Avanzata", + "scenes.apps.drive.right_preview.public": "Accesso pubblico", + "components.drive.elements.configurate_mod": "Configura la modalità...", + "components.drive.elements.manage_version": "Gestisci versioni", + "scenes.client.channelbar.workspacechannellist.autocomplete": "Cerca canale, utente o messaggi diretti", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "Crea una nuova scheda", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_edition": "Rinomina {{$1}}", + "components.connectorslistmanager.add_connectors": "Aggiungi connettori", + "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "Applicazione", + "scenes.client.channelbar.channelmemberslist.no_members": "Non ci sono utenti in questo canale, puoi invitarli facendo clic su Aggiungi utenti.", + "scenes.app.channelsbar.hide_discussion_leaving.menu": "Nascondi discussione", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} email verranno aggiunte", + "components.newversion.new_version_component.row.part_2": "ti consigliamo di ricaricare l'app e goderti le nostre nuove funzionalità!", + "components.newversion.new_version_component.link": "Clicca qui per ricaricare", + "components.newversion.new_version_modal.title": "Nuovo aggiornamento disponibile !", + "scenes.apps.drive.download_all_button": "Scarica tutto", + "components.inputs.input_with_select.input.placeholder": "Nome del canale", + "components.inputs.input_with_select.select.placeholder": "Nome della sezione", + "components.inputs.input_with_select.select.no_sections": "Inizia a scrivere il nome della tua prima sezione del canale.", + "components.inputs.input_with_select.button.tooltip": "Imposta una sezione del canale", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}} ha aggiunto {{$2}} al canale", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}} ha rimosso {{$2}} dal canale", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}} ha cambiato la descrizione", + "scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}} ha rinominato il canale in {{$2}}", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} ha aggiunto una nuova scheda {{$2}} {{$3}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} rimosso scheda {{$2}} {{$3}}", + "scenes.client.channelbar.channelmemberslist.tag": "Voi", + "general.re_send": "Invia di nuovo", + "components.unverified_account.verification_details": "Abbiamo inviato i dettagli di verifica a", + "components.account_verification_status_sentence": "Lo stato del tuo account è: {{$1}}", + "components.account_verication_status_unverified": "Non verificato", + "components.account_verication_status_blocked": "bloccato", + "components.unverified_account.re_send_email": "Non hai ricevuto l'e-mail?", + "components.verify_mail.title_1": "Congratulazioni", + "components.richtexteditor.toolbar.code": "Codice", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Clicca qui", + "components.on_boarding.popups.blocked_company.or": "o", + "components.on_boarding.popups.blocked_company.company_selector": "Passa a un'altra azienda", + "scenes.apps.tasks.select_user": "Cerca utente", + "components.locked_features.locked_only_office_popup.text": "Ops!! Sembra che tu voglia modificare il file da Twake. Potresti prendere in considerazione l'aggiornamento del tuo piano se desideri collaborare sui file dell'ufficio. Esplora le nostre opzioni di prezzo e seleziona l'opzione migliore per le esigenze di collaborazione del tuo team.", + "components.locked_features.locked_drive_popup.title": "Hai appena raggiunto il limite di unità", + "components.locked_features.locked_drive_popup.subtitle": "Nella versione gratuita, puoi archiviare solo 6 GB.", + "general.resume": "Riprendere", + "general.pause": "Pausa", + "scenes.app.integrations_parameters.title": "integrazioni", + "scenes.app.integrations_parameters.applications_table.name": "Nome", + "scenes.app.integrations_parameters.applications_table.title": "Altre integrazioni", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "Cerca applicazione", + "scenes.join.wrong_link_title": "Questo link non è più disponibile", + "scenes.join.wrong_link_description": "Chiedi alla persona che ti ha invitato a entrare a far parte di questa azienda un nuovo collegamento o crea la tua azienda", + "scenes.join.create_the_company_button": "Crea l'azienda", + "scenes.join.join_workspace_from_company": "Unisciti a {{$1}} da {{$2}}!", + "scenes.join.twake_description": "Twake è uno spazio di lavoro digitale open source creato per migliorare la produttività del tuo team", + "scenes.join.login_first_button": "Accedi o crea un account prima", + "scenes.join.join_the_team_button": "Unisciti alla squadra", + "general.close": "Vicino", + "general.cancel": "Annulla", + "general.retry": "Riprova", + "general.create": "Crea", + "general.edit": "Modifica", + "general.continue": "Continua", + "general.back": "Indietro", + "general.confirm": "Conferma", + "general.delete": "Eliminare", + "general.archive": "Archivio", + "general.unarchive": "Annulla archiviazione", + "general.help": "Aiuto", + "general.help.support": "Supporto", + "general.help.documentation": "Documentazione", + "general.send": "Invia messaggio", + "general.update": "Aggiorna", + "general.remove": "Rimuovi", + "general.add": "Aggiungi", + "general.connexion_status.disconnected": "Sei offline", + "general.connexion_status.connected": "Sei online", + "general.connexion_status.connecting": "Riconnessione in corso…", + "application.load.longer": "Il server impiega più tempo del previsto per rispondere, attendere o ricaricare la pagina...", + "scenes.app.side_app.messages_thread_title": "{{$1}} • Thread dei messaggi", + "scenes.app.workspaces.create_company.group_data": "Configura il tuo nuovo gruppo", + "scenes.app.workspaces.create_company.group_data.group_type": "Tipo di gruppo", + "scenes.app.workspaces.create_company.group_data.group_type.company": "Azienda o dipartimento aziendale", + "scenes.app.workspaces.create_company.group_data.group_type.public_organization": "Organizzazione pubblica", + "scenes.app.workspaces.create_company.group_data.group_type.university_school": "Università o scuola", + "scenes.app.workspaces.create_company.group_data.group_type.society_club_charity": "Società, club o beneficenza", + "scenes.app.workspaces.create_company.group_data.group_type.other_group": "Altro", + "scenes.app.workspaces.create_company.group_data.group_size": "Dimensione del gruppo", + "scenes.app.workspaces.create_company.group_data.group_size.less_3": "Meno di 4 utenti", + "scenes.app.workspaces.create_company.group_data.group_size.4_10": "4 - 10 utenti", + "scenes.app.workspaces.create_company.group_data.group_size.10_50": "11 - 49 utenti", + "scenes.app.workspaces.create_company.group_data.group_size.50_100": "50 - 99 utenti", + "scenes.app.workspaces.create_company.group_data.group_size.100_500": "100 - 499 utenti", + "scenes.app.workspaces.create_company.group_data.group_size.500_1000": "500 - 999 utenti", + "scenes.app.workspaces.create_company.group_data.group_size.1000_5000": "1000 - 4999 utenti", + "scenes.app.workspaces.create_company.group_data.group_size.5000_more": "Più di 5000 utenti", + "scenes.app.workspaces.create_company.group_data.group_main_activity": "Attività principale", + "scenes.app.workspaces.create_company.group_data.group_main_activity.food": "Cibo", + "scenes.app.workspaces.create_company.group_data.group_main_activity.bank": "Banca / Assicurazione", + "scenes.app.workspaces.create_company.group_data.group_main_activity.printing_paper": "Stampa / Carta", + "scenes.app.workspaces.create_company.group_data.group_main_activity.construction_building": "Edilizia / Materiali da costruzione", + "scenes.app.workspaces.create_company.group_data.group_main_activity.real_estate": "Immobiliare", + "scenes.app.workspaces.create_company.group_data.group_main_activity.materials": "Materiali", + "scenes.app.workspaces.create_company.group_data.group_main_activity.chemistry": "Chimica", + "scenes.app.workspaces.create_company.group_data.group_main_activity.trade_commerce_distribution": "Vendita/Commercio/Distribuzione", + "scenes.app.workspaces.create_company.group_data.group_main_activity.publishing_communication_multimedia": "Editoria / Comunicazione / Multimedia", + "scenes.app.workspaces.create_company.group_data.group_main_activity.electronics_electricity_energy": "Elettronica/Elettricità/Energia", + "scenes.app.workspaces.create_company.group_data.group_main_activity.studies_and_advice": "Studi e consigli", + "scenes.app.workspaces.create_company.group_data.group_main_activity.pharmaceutical_industry": "Industria farmaceutica", + "scenes.app.workspaces.create_company.group_data.group_main_activity.it_telecom": "IT / Telecomunicazioni", + "scenes.app.workspaces.create_company.group_data.group_main_activity.machinery_automotive": "Macchinari / Automotive", + "scenes.app.workspaces.create_company.group_data.group_main_activity.business_services": "Servizi per gli affari", + "scenes.app.workspaces.create_company.group_data.group_main_activity.entertainment": "Divertimento", + "scenes.app.workspaces.create_company.group_data.group_main_activity.textile_clothing_shoes": "Tessile / Abbigliamento / Scarpe", + "scenes.app.workspaces.create_company.group_data.group_main_activity.transport_logistics": "Trasporti / Logistica", + "scenes.app.workspaces.create_company.group_data.group_main_activity.research": "Ricerca", + "scenes.app.workspaces.create_company.group_data.group_main_activity.education": "Formazione scolastica", + "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Amministrazione", + "scenes.app.workspaces.create_company.group_data.group_main_activity.other": "Altro", + "components.application.messages": "Messaggi", + "components.drive_dropzone.uploading": "Caricamento in corso...", + "components.user_picker.modal_no_result": "Nessun risultato trovato", + "components.users_picker.add_me": "Aggiungimi", + "scenes.app.workspaces.create_company.invitations.title": "Configura il tuo spazio di lavoro.", + "scenes.app.header.disconnected": "Sei disconnesso", + "scenes.app.header.disconnected.reload": "Ricarica", + "scenes.app.header.alt_notifications": "Notifiche", + "scenes.apps.calendar.calendar.week_btn": "Settimana", + "scenes.apps.calendar.calendar.list_btn": "Elenco", + "scenes.apps.calendar.event_edition.deadline_tag": "Scadenza", + "scenes.apps.calendar.event_edition.checkbox_all_day": "Tutto il giorno", + "scenes.apps.calendar.event_edition.title_confidentiality": "Riservatezza", + "scenes.apps.calendar.event_view.article_until": "a", + "scenes.apps.calendar.calendar_modal.participants": "partecipanti", + "scenes.apps.calendar.calendar_modal.placeholder": "Nome", + "scenes.apps.calendar.left.calendars": "Calendari", + "scenes.apps.drive.left.search": "Ricerca", + "scenes.apps.drive.navigators.navigator_content.directory_name": "Nome della directory", + "scenes.apps.drive.navigators.navigator_content.files": "File", + "scenes.apps.drive.navigators.navigator_labels.title": "Etichette", + "scenes.apps.drive.navigators.new_file.untitled": "Senza titolo", + "scenes.apps.drive.navigators.new_file.create_file.type": "Tipo", + "scenes.apps.drive.navigators.new_file": "Nuovo file", + "scenes.apps.drive.preview_bloc.operations_download": "Scarica", + "scenes.apps.drive.preview_bloc.error_file": "File non trovato", + "scenes.apps.drive.right_preview.operations_restore": "Ristabilire", + "scenes.apps.drive.right_preview.operations_delete": "Sposta nel cestino", + "scenes.apps.drive.right_preview.public_link": "Link pubblico", + "scenes.apps.messages.messages": "Messaggi", + "scenes.apps.messages.chatbox.chat.delete_message": "Elimina questo messaggio", + "scenes.apps.messages.chatbox.chat.delete_message_btn": "Elimina il messaggio", + "scenes.apps.messages.left_bar.stream_modal.placeholder_name": "Nome", + "scenes.apps.messages.left_bar.stream.add_to_favorites": "Aggiungi ai preferiti", + "scenes.apps.messages.left_bar.stream.remove_from_favorites": "Rimuovi dai preferiti", + "scenes.apps.messages.left_bar.stream.notifications": "Notifiche...", + "scenes.apps.messages.left_bar.stream.notifications.all": "Qualsiasi messaggio", + "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}, {{$2}} e {{$3}}", + "scenes.apps.messages.left_bar.stream.notifications.me": "Solo {{$1}}", + "scenes.apps.messages.left_bar.stream.notifications.never": "Niente", + "scenes.apps.parameters.workspace_sections.workspace": "Spazio di lavoro", + "scenes.apps.parameters.workspace_sections.members": "Partecipanti", + "scenes.apps.parameters.group_sections.workspaces": "Spazi di lavoro", + "scenes.apps.parameters.group_sections.apps": "App", + "scenes.apps.account.title": "Parametri dell'account", + "scenes.apps.account.account.menu_title": "Account", + "scenes.apps.account.languages.menu_title": "Lingua", + "scenes.apps.account.account.firstname": "Nome", + "scenes.apps.account.account.lastname": "Cognome", + "scenes.apps.account.account.username": "Nome utente", + "scenes.apps.account.account.change_username": "Cambia il tuo nome utente univoco.", + "scenes.apps.account.account.emails": "E-mail", + "scenes.apps.account.account.main_email": "E-mail principale", + "scenes.apps.account.account.email_add": "Aggiungi una nuova e-mail", + "scenes.apps.account.account.email_add_modal.invalid_code": "Questo codice non è valido", + "scenes.apps.account.account.password": "Password", + "scenes.apps.account.account.password_modal.old_password": "Password attuale", + "scenes.apps.account.account.password_modal.password": "Nuova password", + "scenes.apps.account.account.password_modal.bad_old_password": "La vecchia password non è corretta.", + "scenes.apps.account.account.password_modal.bad_password": "Le tue password non corrispondono o sono troppo corte. Si prega di digitare una password con almeno 8 caratteri.", + "scenes.apps.account.account.logout": "Disconnettersi", + "scenes.apps.account.languages.text": "Cambia la lingua di Twake.", + "scenes.apps.account.notifications.title": "Notifiche", + "scenes.apps.account.notifications.keywords_subtitle": "Parole chiave", + "scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, codice, ...", + "scenes.apps.account.notifications.disturb_option_a": "Non inviarmi notifiche push tra ", + "scenes.apps.account.notifications.disturb_option_b": " e ", + "scenes.apps.account.notifications.disturb_option_c": " (fuso orario locale)", + "scenes.apps.account.notifications.devices_subtitle": "Notifiche del dispositivo", + "scenes.apps.account.notifications.devices_option_ever": "Inviami sempre notifiche push", + "scenes.apps.account.notifications.devices_option_inactive": "Inviami notifiche push quando sono inattivo sul desktop", + "scenes.apps.account.notifications.devices_option_never": "Non inviarmi notifiche push mai", + "scenes.apps.account.notifications.privacy_subtitle": "Riservatezza", + "scenes.apps.account.notifications.mail_subtitle": "Notifiche di posta elettronica", + "scenes.apps.account.notifications.sound": "Notifica sonora", + "scenes.apps.parameters.group_sections.apps.badge_extension": "Estensione", + "scenes.apps.parameters.workspace_sections.members.members": "Utenti", + "scenes.apps.parameters.workspace_sections.members.pending": "Email in attesa", + "scenes.apps.parameters.workspace_sections.members.invite": "Invita nuovo utente", + "scenes.apps.parameters.workspace_sections.members.invite_btn": "Aggiungi utente", + "scenes.apps.tasks.boards": "Tavole", + "scenes.apps.tasks.connectors_menu": "Connettori...", + "scenes.apps.tasks.connectors_search_menu": "Cerchiamo connettori...", + "scenes.apps.tasks.no_connectors_menu_text": "Non disponi di connettori che possono connettersi a un calendario.", + "scenes.apps.tasks.unconfigured_tab": "Questa scheda non è ancora configurata.", + "scenes.apps.tasks.choose_board_button": "Scegli una tavola", + "scenes.apps.tasks.new_board.title": "Nuova tavola", + "scenes.apps.tasks.new_board.edit_title": "Modifica la tavola", + "scenes.apps.tasks.task": "Compito", + "scenes.apps.tasks.no_tasks": "Nessun compito", + "scenes.apps.tasks.task_status.todo": "Da fare", + "scenes.apps.tasks.task_status.current": "Attuale", + "scenes.apps.tasks.task_status.done": "Fatto", + "scenes.apps.tasks.task.description": "Descrizione", + "scenes.apps.tasks.task.assignees": "Assegnatari", + "scenes.apps.tasks.task.edit.dates": "Date", + "scenes.apps.tasks.list_modal.modify_list": "Modifica l'elenco", + "scenes.apps.tasks.list_modal.new_list": "Nuovo elenco", + "scenes.apps.tasks.list_modal.remove": "Rimuovi l'elenco ed i compiti", + "scenes.apps.tasks.list_modal.predefined_participants": "Partecipanti predefiniti", + "scenes.apps.tasks.list_modal.archive_all_tasks": "Archivia tutti i compiti", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "Rimuovi i compiti archiviati ({{$1}})", + "scenes.login.footer.go_to_twake": "Vai su twakeapp.com", + "scenes.login.footer.branding": "Sei su un server Twake privato {{$1}} ({{$2}}). ", + "scenes.login.create_account.title": "Crea un nuovo account", + "scenes.login.create_account.email": "Posta elettronica", + "scenes.login.create_account.fill_in_email": "Devi compilare la tua email con una email corretta", + "scenes.login.create_account.too_short_password": "La tua password deve contenere almeno 8 caratteri.", + "scenes.login.create_account.firstname": "Nome", + "scenes.login.create_account.newsletter": "Ricevere informazioni su Twake", + "scenes.login.create_account.lastname": "Cognome", + "scenes.login.forgot_password.title": "Hai dimenticato la password?", + "scenes.login.forgot_password.text": "Riceverai un codice di 9 cifre via e-mail per verificare la tua identità.", + "scenes.login.forgot_password.email_to_recover": "E-mail da recuperare", + "scenes.login.forgot_password.mail_doesnt_exist": "Questa e-mail non esiste", + "scenes.login.forgot_password.text2": "Riceverai un codice di 9 cifre. Inseriscilo nel campo sottostante per continuare.", + "scenes.login.home.subtitle": "Benvenuto", + "scenes.login.home.email": "E-mail", + "scenes.login.home.unable_to_connect": "Credenziali non valide", + "scenes.login.home.password": "Password", + "scenes.login.home.login_btn": "Accedi", + "scenes.login.home.lost_password": "Hai dimenticato la password?", + "scenes.login.home.create_account": "Crea un account", + "scenes.login.create_account.password": "Password", + "scenes.login.create_account.step_2_subtitle_b": "Il tuo numero di telefono rimane privato.", + "scenes.login.create_account.step_3_mail_sent": "Ti abbiamo inviato un link di attivazione via e-mail.", + "scenes.login.create_account.step_3_subtitle": "Ultimo passaggio: dobbiamo verificare che non sei un robot!", + "scenes.app.workspaces.create_company.company_name.placeholder": "Nome dell'azienda", + "scenes.app.workspaces.create_company.company_name.title_1": "Per iniziare,", + "scenes.app.workspaces.create_company.company_name.title_2": "indica il nome della tua azienda.", + "scenes.app.workspaces.create_company.default_workspace_name": "Principale", + "scenes.app.workspaces.create_company.group_data.title": "Saremo veloci: abbiamo solo bisogno di alcune informazioni statistiche.", + "scenes.app.workspaces.create_company.importations.title_1": "Lavori già con strumenti digitali? Importa o integra subito i tuoi strumenti!", + "scenes.app.workspaces.create_company.importations.title_2": "Non preoccuparti, puoi farlo più tardi!", + "scenes.app.workspaces.create_company.invitations.title_2": "Aggiungi utenti al tuo team.", + "scenes.app.workspaces.create_company.title": "Crea la mia azienda", + "scenes.app.workspaces.welcome_page.add_secondary_emails": "Aggiungi un'email secondaria", + "scenes.app.workspaces.welcome_page.added_to_company": "Sei stato invitato a ", + "scenes.app.workspaces.welcome_page.create_my_company": "Crea la mia azienda", + "scenes.app.workspaces.welcome_page.lets_go": "Andiamo!", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "Sei stato invitato utilizzando un altro email?", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "Oh, beh... Sembra che nessuno ti abbia ancora invitato in uno spazio di lavoro.", + "scenes.app.workspaces.welcome_page.ready_to_work": "Ora sei pronto a lavorare.", + "scenes.app.workspaces.welcome_page.see_you_soon": "A presto!", + "scenes.app.workspaces.welcome_page.try_again": "Riprova", + "scenes.app.workspaces.welcome_page.add_new_email": "Aggiungi una e-mail", + "scenes.app.workspaces.welcome_page.code_verification": "Codice di verifica", + "scenes.app.workspaces.welcome_page.new_email": "Aggiungi un'e-mail secondaria", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "Ti abbiamo inviato un codice di verifica tramite {{$1}}", + "scenes.app.workspaces.welcome_page.done": "Ho finito", + "scenes.login.forgot_password.finished": "La tua password è stata aggiornata con successo.", + "scenes.apps.account.account.description_main": "Il tuo indirizzo principale è dove Twake invia le tue notifiche. I tuoi indirizzi secondari ti consentono di essere invitato automaticamente agli spazi di lavoro che li utilizzano.", + "scenes.apps.account.account.emails.description": "Gestisci i tuoi diversi indirizzi e-mail.", + "scenes.apps.account.account.make_main": "Imposta la e-mail principale", + "scenes.apps.account.account.password.description": "Cambia la tua password.", + "scenes.apps.account.identity": "Identità", + "scenes.apps.account.identity.description": "Modifica il tuo nome, cognome e immagine del profilo visibile agli altri utenti di Twake.", + "scenes.apps.account.preference": "Preferenze", + "scenes.apps.account.thumbnail.max_weight": "Dimensione massima 5 MB", + "scenes.apps.account.account.email_add_modal.confirm": "Conferma questa e-mail", + "app.name.twake_calendar": "Calendario", + "app.name.twake_drive": "Documenti", + "app.name.twake_tasks": "Compiti", + "components.calendar.repetition.everyday": "Quotidiano", + "components.calendar.repetition.does_not_repeat": "Non si ripete", + "components.calendar.repetition.weekly_on": "Settimanale il {{$1}}", + "components.calendar.repetition.monthly_on": "Mensile il {{$1}} {{$2}}", + "components.calendar.repetition.monthly_on_day": "Mensile il giorno {{$1}}", + "components.calendar.repetition.annually_on": "Annualmente il {{$1}}", + "components.calendar.repetition.every_weekday": "Tutti i giorni feriali (dal lunedì al venerdì)", + "components.calendar.repetition.custom": "Personalizzato...", + "components.calendar.repetition.repeat": "Ripetere ogni", + "components.calendar.repetition.ends": "Finisce", + "components.calendar.repetition.never": "Mai", + "components.calendar.repetition.on": "Il", + "components.calendar.repetition.after": "Dopo", + "components.calendar.repetition.days": "giorno/i", + "components.calendar.repetition.weeks": "settimana(e)", + "components.calendar.repetition.months": "mese(i)", + "components.calendar.repetition.years": "anno(i)", + "components.calendar.repetition.custom_recurrence": "Ricorrenza personalizzata", + "components.calendar.repetition.occurrence": "Evento(i)", + "components.calendar.repetition.repeat_on": "Ripetere il", + "scenes.app.channelsbar.currentuser.add_apps": "Cerchiamo applicazioni", + "scenes.app.channelsbar.currentuser.change_my_status": "Cambiare il mio stato", + "scenes.app.channelsbar.currentuser.collaborateurs": "Utenti", + "scenes.app.channelsbar.currentuser.create_workspace_page": "Crea uno spazio di lavoro", + "scenes.app.channelsbar.currentuser.invited_status": "Sei un ospite.", + "scenes.app.channelsbar.currentuser.title": "Impostazioni dell 'account", + "scenes.app.channelsbar.currentuser.workspace_info": "Sei nello spazio di lavoro {{$1}} dal gruppo {{$2}}", + "scenes.app.channelsbar.currentuser.workspace_parameters": "Impostazioni dello spazio di lavoro", + "scenes.app.channelsbar.currentuser.logout": "Esci", + "scenes.app.channelsbar.currentuser.update": "Aggiornare", + "scenes.app.channelsbar.currentuser.disable_notifications": "Disattivare", + "scenes.app.channelsbar.currentuser.disabling_notifications": "Disattivare per 1h", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "Disattivare fino alle 9:00 Domani", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "Riattivare", + "scenes.app.channelsbar.currentuser.user_parameter": "Impostazioni di notifica", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Numero di messaggi", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "Nella versione gratuita di Twake, non è possibile accedere a più di {{$1}} messaggi più recenti.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Mostra più piani", + "scenes.app.channelsbar.channelsuser.new_private_discussion": "Nuova discussione privata", + "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Nessun messaggio privato. Invita gli utenti!", + "scenes.app.channelsbar.channelsuser.private_messages": "Messaggi diretti", + "scenes.app.channelsbar.channelsworkspace.channel_title": "CANALI", + "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "PREFERITI", + "scenes.app.channelsbar.channelsworkspace.create_channel": "Crea un canale", + "scenes.app.channelsbar.channelsworkspace.no_channel": "Non ti sei ancora iscritto a nessun canale", + "scenes.app.channelsbar.modify_channel_menu": "Modifica canale", + "scenes.app.channelsbar.guest_management": "Gestione degli ospiti", + "scenes.app.channelsbar.unread_sign": "Segna come non letto", + "scenes.app.channelsbar.channel_leaving": "Lasciare il canale", + "scenes.app.channelsbar.channel_removing": "Eliminare il canale", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "Puoi importare questi canali nella tua attività per rimanere organizzato facendo clic su questo riquadro.", + "scenes.app.channelsbar.company_invitation_alert_title": "Sei invitato in azienda ", + "scenes.app.channelsbar.initial_instructions_tutorial": "Scegli un nome, un cognome ed un'immagine del profilo.", + "scenes.app.channelsbar.installation_desktop_tutorial": "Installa l'applicazione desktop", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "Invita gli utenti nel tuo spazio di lavoro.", + "scenes.app.channelsbar.public_channel_label": "Pubblico", + "scenes.app.channelsbar.private_channel_label": "Privato", + "scenes.app.channelsbar.sending_message_instruction": "Invia il tuo primo messaggio in una discussione", + "scenes.app.channelsbar.tutorial_alert": "Non mostrare più questa cornice mai?", + "scenes.app.channelsbar.welcome": "Benvenuto a Twake", + "scenes.app.channelsbar.welcoming_message_subtitle": "Diventa un professionista di Twake in pochi clic!", + "scenes.app.mainview.instruction_current_tab": "Inizia selezionando un canale alla tua sinistra.", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Non hai un connettore in grado di connettersi a un canale.", + "scenes.app.mainview.tabs.rename": "Rinominare", + "scenes.app.mainview.tabs.searching_connectors": "Cerchiamo di connettori...", + "scenes.app.popup.adduser.adresses_message": "Si prega di separare gli indirizzi con una virgola o uno spazio. Ricorda che Twake può limitare il numero di inviti in base al tuo abbonamento.", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Link di invito allo spazio di lavoro", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Copiato negli appunti con successo", + "scenes.app.popup.adduser.magiclinks.action_copy": "Copiare", + "scenes.app.popup.adduser.magiclinks.action_generate": "Creare", + "scenes.app.popup.appsparameters.pages._app_identity": "Identità dell'applicazione", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Prova l'aspetto dei tuoi messaggi Twacode", + "scenes.app.popup.appsparameters.pages.amazing_app_name": "La mia fantastica app", + "scenes.app.popup.appsparameters.pages.api_data_description": "Dati utili per l'API Twake.", + "scenes.app.popup.appsparameters.pages.api_parameters_label": "Impostazioni API", + "scenes.app.popup.appsparameters.pages.app_name_label": "Nome dell'applicazione", + "scenes.app.popup.appsparameters.pages.app_modification_right": "Tutti i manager di questa azienda potranno modificare questa applicazione.", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "Definisci cosa può modificare e leggere la tua applicazione.", + "scenes.app.popup.appsparameters.pages.app_update": "Aggiorna l'app {{$1}} (l'app viene utilizzata {{$2}} volte).", + "scenes.app.popup.appsparameters.pages.application_title": "Applicazione", + "scenes.app.popup.appsparameters.pages.apps_title": "Le tue applicazioni e connettori", + "scenes.app.popup.appsparameters.pages.automatique_label": "Automatico", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "Se attivi 'Automatico', questa applicazione verrà automaticamente aggiunta ai prossimi spazi di lavoro di questa azienda.", + "scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Indirizzi IP consentiti", + "scenes.app.popup.appsparameters.pages.create_app_button": "Crea un'applicazione", + "scenes.app.popup.appsparameters.pages.create_my_app": "Crea la mia applicazione", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "Non hai ancora creato un'app. Prima di creare un'applicazione o un connettore, assicurati che non esista già nel nostro mercato delle applicazioni.", + "scenes.app.popup.appsparameters.pages.danger_zone_description": "Elimina l'applicazione", + "scenes.app.popup.appsparameters.pages.danger_zone_label": "Zona pericolosa", + "scenes.app.popup.appsparameters.pages.description_label": "Descrizione", + "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "Applicazioni sviluppate dall'azienda", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "Ti consente di definire dove sarà visibile la tua applicazione.", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "Impostazioni di visualizzazione", + "scenes.app.popup.appsparameters.pages.error_check_needed": "C'è stato un errore; controlla le tue informazioni.", + "scenes.app.popup.appsparameters.pages.error_message": "Questo nome è già utilizzato da un'altra applicazione; per favore scegline un altro.", + "scenes.app.popup.appsparameters.pages.error_user_code": "errore", + "scenes.app.popup.appsparameters.pages.event_subtitle": "Eventi", + "scenes.app.popup.appsparameters.pages.filter_information": "Questo filtro limita l'uso della tua chiave API ai soli server nel tuo connettore.", + "scenes.app.popup.appsparameters.pages.new_app_title": "Nuova applicazione", + "scenes.app.popup.appsparameters.pages.ok_user_code": "ok", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "L'applicazione non pubblicata funzionerà solo nella tua azienda. Se vuoi renderlo disponibile a tutti gli utenti Twake, attiva questa opzione.", + "scenes.app.popup.appsparameters.pages.public_login_label": "Identificatore pubblico", + "scenes.app.popup.appsparameters.pages.publication_description": "Determina la visibilità della tua applicazione.", + "scenes.app.popup.appsparameters.pages.publication_label": "Pubblicazione", + "scenes.app.popup.appsparameters.pages.publish_app_label": "Pubblica l'applicazione", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "Privilegi di lettura", + "scenes.app.popup.appsparameters.pages.remove_app": "Eliminare l'applicazione {{$1}} in modo permanente.", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "Rimuovere da tutta l'azienda", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "Rimuovi dallo spazio di lavoro", + "scenes.app.popup.appsparameters.pages.show_button": "Mostra", + "scenes.app.popup.appsparameters.pages.status_tilte": "Stato", + "scenes.app.popup.appsparameters.pages.string_information": "Questa stringa identifica la tua applicazione e verrà utilizzata nei comandi dei messaggi.", + "scenes.app.popup.appsparameters.pages.title_tester": "Tester di Twakecode", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "URL della ricezione degli eventi", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "In attesa...", + "scenes.app.popup.appsparameters.pages.website_label": "Sito web", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "Privilegi di scrittura", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "Non puoi eliminare questa app se è pubblicata.", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Il nome semplificato della tua applicazione è già utilizzato da un'altra applicazione. Per favore cambialo.", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "Si è verificato un errore durante l'aggiornamento dell'applicazione.", + "scenes.app.popup.appsparameters.pages.remove_app_button": "Elimina l'applicazione", + "scenes.app.popup.appsparameters.pages.update_button": "Aggiornare", + "scenes.app.popup.createworkspacepage.add_subtitle": "Bisogno di più spazio?", + "scenes.app.popup.createworkspacepage.create_new_workspace": "Crea un nuovo spazio di lavoro", + "scenes.app.popup.createworkspacepage.placeholder_name": "Nome dello spazio di lavoro", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "Imposta la frequenza delle notifiche mobili.", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "Frequenza delle notifiche", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "Evidenzia le seguenti parole chiave:", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "Imposta la frequenza delle notifiche e-mail.", + "scenes.app.popup.userparameter.pages.private_message_content.show": "Mostra il contenuto dei messaggi privati", + "scenes.app.popup.userparameter.pages.private_message_content.hide": "Nascondi il contenuto dei messaggi privati", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "Scegli un periodo durante il quale non ricevi notifiche.", + "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "Non disturbare di notte", + "scenes.app.popup.userparameter.pages.notif_content_label": "Contenuto delle notifiche", + "scenes.app.mainview.quick_search_placeholder": "Ricerca rapida", + "scenes.app.popup.userparameter.personnal_workspaces_title": "I tuoi spazi di lavoro", + "scenes.app.popup.workspaceparameter.admin_current_status": "Sei un amministratore.", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "Sei un amministratore dello spazio di lavoro.", + "scenes.app.popup.workspaceparameter.manager_current_status": "Sei un amministratore dell'azienda.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "Elimina lo spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "Per confermare che desideri eliminare questo spazio di lavoro, digita il nome qui sotto e premi Elimina.", + "scenes.app.popup.workspaceparameter.pages.access_apps": "Accedi alle tue applicazioni e ai tuoi connettori", + "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "Integrazioni", + "scenes.app.popup.workspaceparameter.pages.apps_research_title": "Cerchiamo di applicazioni", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "Applicazioni di questo spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "Torna alla ricerca", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "Invita utenti", + "scenes.app.popup.workspaceparameter.pages.collaborateurs": "Utenti", + "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "Applicazioni sviluppate dall'azienda", + "scenes.app.popup.workspaceparameter.pages.company_identity_title": "Identità dell'azienda", + "scenes.app.popup.workspaceparameter.pages.company_name_description": "Cambia il nome di questa azienda", + "scenes.app.popup.workspaceparameter.pages.company_name_label": "Nome dell 'azienda", + "scenes.app.popup.workspaceparameter.pages.configuration_notif": "configurazione", + "scenes.app.popup.workspaceparameter.pages.configure_button": "Configura", + "scenes.app.popup.workspaceparameter.pages.description": "Descrizione", + "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "Applicazioni sviluppate dall'azienda", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "Preferenze di visualizzazione", + "scenes.app.popup.workspaceparameter.pages.install_button": "Installare", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "Applicazioni installate in questo spazio di lavoro {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "Applicazioni installate in altre aree dell'azienda {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_subtitle": "Applicazioni installate", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "Si è verificato un errore durante l'invito ai seguenti utenti: ", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "Verifica che il nome utente o l'e-mail utilizzati siano validi.", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "Modifica l'immagine di questo spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.logo_subtitle": "Logo", + "scenes.app.popup.workspaceparameter.pages.name_description": "Cambia il nome di questo spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.no_access": "Nessun accesso.", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "Non hai applicazioni in questo spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "Lascia questo spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "Accesso in lettura", + "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "Rimuovere da tutta l'azienda", + "scenes.app.popup.workspaceparameter.pages.research_by": "Cerca applicazioni per nome e categorie", + "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "Cerchiamo di applicazioni...", + "scenes.app.popup.workspaceparameter.pages.show_button": "Schermo", + "scenes.app.popup.workspaceparameter.pages.title": "Impostazioni dello spazio di lavoro", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "Accesso ai webhook", + "scenes.app.popup.workspaceparameter.pages.weight_max_small_text": "Dimensione massima 5 MB.", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "Rimuovi da questo spazio di lavoro", + "scenes.app.workspacesbar.components.create_company_menu": "Creare un'azienda", + "scenes.app.workspacesbar.components.grp_parameters": "{{$1}} impostazioni", + "scenes.apps.calendar.add_calendar_menu": "Aggiungi un calendario", + "scenes.apps.calendar.connectors_menu": "Connettori...", + "scenes.apps.calendar.connectors_search_menu": "Cerchiamo di connettori...", + "scenes.apps.calendar.create_calendar_title": "Crea un calendario", + "scenes.apps.calendar.edit_calendar_title": "Modifica il calendario", + "scenes.apps.calendar.export_title": "Esportazione", + "scenes.apps.calendar.export_view_menu": "Esporta la vista...", + "scenes.apps.calendar.ics_download_menu": "Scarica un file ICS", + "scenes.apps.calendar.ics_subscription_menu": "Ottieni un link di abbonamento ICS", + "scenes.apps.calendar.modals.advanced_options": "Opzioni avanzate", + "scenes.apps.calendar.modals.event_title_placeholder": "Titolo", + "scenes.apps.calendar.modals.modify_event_button": "Modifica evento", + "scenes.apps.calendar.modals.part.participants": "Partecipanti", + "scenes.apps.calendar.modals.participants_event": "Partecipanti", + "scenes.apps.calendar.modals.reminders": "Promemoria", + "scenes.apps.calendar.modals.remove_button": "Eliminare", + "scenes.apps.calendar.modals.remove_event_button": "Elimina evento", + "scenes.apps.calendar.modals.remove_event_text": "Eliminare l'evento?", + "scenes.apps.calendar.modals.title_placeholder": "Titolo", + "scenes.apps.calendar.modify_calendar_menu": "Modifica il calendario", + "scenes.apps.calendar.month_option": "Mese", + "scenes.apps.calendar.my_calendar": "Il mio calendario", + "scenes.apps.calendar.my_calendar_label": "Il mio calendario", + "scenes.apps.calendar.my_calendar_menu": "Il mio calendario", + "scenes.apps.calendar.no_calendar_text": "Non hai impostato alcun calendario per questo spazio di lavoro.", + "scenes.apps.calendar.no_connectors_menu_text": "Non disponi di connettori che possono connettersi a un calendario.", + "scenes.apps.calendar.remove_calendar_confirmation": "Eliminare il calendario e i suoi eventi in modo permanente?", + "scenes.apps.calendar.today_menu": "Oggi", + "scenes.apps.calendar.week_option": "Settimana", + "scenes.apps.calendar.workspace": "Spazio di lavoro", + "scenes.apps.calendar.workspace_label": "Questo spazio di lavoro", + "scenes.apps.calendar.workspace_menu": "Spazio di lavoro", + "scenes.apps.drive.add_button": "Aggiungere", + "scenes.apps.drive.message_added_file": "{{$1}} ha inviato {{$2}}.", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}} ha inviato più file.", + "scenes.apps.drive.message_added_file_no_name": "{{$1}} ha inviato un file.", + "scenes.apps.drive.choose_folder_button": "Scegli una directory", + "scenes.apps.drive.choose_file_button": "Seleziona un file", + "scenes.apps.drive.create_folder_button": "Creare", + "scenes.apps.drive.download_button": "Scarica", + "scenes.apps.drive.open_link": "Aprire il link in una nuova finestra", + "scenes.apps.drive.files_subtitle": "File", + "scenes.apps.drive.folder_subtitle": "Cartelle", + "scenes.apps.drive.go_out_trash_menu": "Lascia il cestino", + "scenes.apps.drive.go_trash_menu": "Vai nel cestino", + "scenes.apps.drive.import_from_computer_menu": "Caricare dal computer", + "scenes.apps.drive.move_text": "Mossa", + "scenes.apps.drive.new_file_menu": "Nuovo file", + "scenes.apps.drive.new_file_title": "Nuovo file", + "scenes.apps.drive.new_external_storage": "Nuova memoria esterna", + "scenes.apps.drive.new_folder_title": "Nuova cartella", + "scenes.apps.drive.no_file_alert": "Non hai applicazioni che ti consentono di creare un file.", + "scenes.apps.drive.no_storage_app_alert": "Non hai applicazioni che ti consentono di aggiungere spazio di archiviazione esterno.", + "scenes.apps.drive.remove_definitely_menu": "Elimina definitivamente", + "scenes.apps.drive.restore_menu": "Ristabilire", + "scenes.apps.drive.throw_menu": "Invia nel cestino", + "scenes.apps.drive.trash_empty_menu": "Svuota il cestino", + "scenes.apps.drive.unconfigured_tab": "Questa scheda non è ancora configurata.", + "scenes.apps.drive.viewer.edit_with_button": "Modifica con {{$1}}", + "scenes.apps.drive.viewer.loading_preview_message": "Caricamento in corso...", + "scenes.apps.drive.viewer.no_preview_message": "Impossibile visualizzare questo tipo di file.", + "scenes.apps.drive.viewer.open_with_button": "Aperta con...", + "scenes.apps.messages.input.placeholder": "Scrivi un messaggio. Usa @ per citare un utente.", + "scenes.apps.messages.input.edited": "Modificato", + "scenes.apps.messages.just_you": "Visibile solo a te", + "scenes.apps.messages.message.new_messages_bar": "Nuovo messaggio", + "scenes.apps.messages.message.cancel_button": "Annulla", + "scenes.apps.messages.message.modify_button": "Modificare", + "scenes.apps.messages.message.pin_button": "Pin messaggio", + "scenes.apps.messages.message.unpin_button": "Sblocca messaggio", + "scenes.apps.messages.message.copy_link": "Copia il link al messaggio", + "scenes.apps.messages.message.pinned": "appuntato", + "scenes.apps.messages.message.remove_button": "Eliminare", + "scenes.apps.messages.message.reply_button": "Rispondere", + "scenes.apps.messages.message.save_button": "Salva", + "scenes.apps.messages.message.show_button": "Schermo", + "scenes.apps.messages.message.show_responses_button": "Visualizza tutte le risposte", + "scenes.apps.messages.message.types.first_channel_message_text": "Questo è il primo messaggio del canale", + "scenes.apps.messages.message.types.first_message_text": "Questo è il primo messaggio", + "scenes.apps.messages.messageslist.get_writing_user": "Sta scrivendo...", + "scenes.apps.messages.messageslist.get_writing_users": "stanno scrivendo...", + "scenes.apps.messages.messageslist.go_last_message_button": "Vai all'ultimo messaggio", + "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "Nuovo messaggio", + "scenes.error_on_twake": "\"Houston abbiamo un problema\"", + "scenes.help_us": "Tuttavia, se desideri aiutarci a correggere questo errore, inviaci un messaggio di seguito: ", + "scenes.login.verifymail.alert": "Stiamo controllando la tua posta elettronica!", + "scenes.login.verifymail.error_message": "Si è verificato un errore", + "scenes.login.verifymail.signin_button": "Accesso", + "scenes.login.verifymail.success": "La tua e-mail è stata verificata con successo!", + "scenes.login.verifymail.verification_waiting": "In attesa di verifica...", + "scenes.no_panic": "Niente panico! Basta ricaricare questa pagina per correggere Twake.", + "services.apps.calendar.deadline_icon": "Scadenza", + "services.apps.calendar.event_icon": "Evento", + "services.apps.calendar.move_icon": "Mossa", + "services.apps.calendar.reminder_icon": "Promemoria", + "services.apps.messages.no_app": "Questa applicazione non esiste.", + "services.apps.messages.no_command_possible": "Non possiamo eseguire il comando '{{$1}}' perché '{{$2}}' non esiste o non consente di creare comandi.", + "services.user.notification_parameters_update_alert": "Le impostazioni di notifica sono state aggiornate.", + "services.user.update_password_alert": "La tua password è stata aggiornata.", + "scenes.app.workspaces.components.skip": "Saltare", + "scenes.apps.calendar.unconfigured_tab": "Questa scheda non è ancora configurata.", + "scenes.apps.drive.trash": "Spazzatura", + "scenes.apps.drive.top_menu_more": "Di più", + "scenes.apps.drive.top_menu_no_items": "{{$1}} elementi", + "scenes.apps.messages.new_thread": "Inizia una nuova discussione", + "scenes.apps.messages.input.send_message": "Invia messaggio", + "scenes.apps.messages.input.emoji": "emoji", + "scenes.apps.messages.input.hide_formatting": "Nascondi formattazione", + "scenes.apps.messages.input.show_formatting": "Mostra formattazione", + "scenes.tell_us": "Per favore dicci cosa stavi facendo a:", + "scenes.apps.drive.viewer.download_desktop": "Scarica Twak Desktop per l'anteprima nell'app", + "scenes.apps.tasks.my_tasks": "I miei compiti", + "scenes.apps.tasks.board.place_holder": "Nome del consiglio", + "scenes.apps.tasks.board.tasks.subtask": "Sottoattività", + "scenes.apps.tasks.board.tasks.add_subtask": "Aggiungi un'attività secondaria", + "scenes.apps.tasks.board.tasks.use_deadline": "Usa scadenza", + "scenes.apps.tasks.board.tasks.use_starttime": "Usa l'ora di inizio", + "scenes.apps.tasks.board.tasks.in_list": "nella lista", + "scenes.apps.tasks.board.starts": "inizia il", + "scenes.apps.tasks.board.ends": "Da fare per il", + "scenes.apps.tasks.board.list_name": "Lista nome", + "scenes.app.popup.sync_calendar": "Sincronizza i tuoi calendari.", + "scenes.apps.parameters.workspace_sections.workspace.logo_company": "Logo dell'azienda", + "scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "Modifica l'immagine dell'azienda ", + "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "Annulla l'invito", + "scenes.apps.account.account.fullname": "Nome e cognome", + "login.email_login": "E-mail / Login", + "scenes.apps.account.account.password_for_user": "Password per il tuo utente", + "scenes.apps.account.account.send_info": "Invia queste informazioni sulle credenziali al tuo utente.", + "scenes.apps.account.account.save": "Salva account", + "scenes.apps.account.message_temporary": "Un account temporaneo funziona come un normale account Twake, ma crei la password e potrai reimpostarla se necessario.", + "scenes.apps.account.message_user_signin": "Il tuo utente può accedere in qualsiasi momento utilizzando la stessa e-mail e modificare l'account temporaneo in un account normale.", + "scenes.app.mainview.link_expired": "Questo collegamento pubblico non è valido o è scaduto.", + "scenes.app.mainview.create_account": "Crea il tuo spazio di lavoro gratuitamente su ", + "scenes.apps.calendar.modals.reminder_add": "Aggiungi un promemoria", + "scenes.apps.parameters.workspace_sections.members.invite_all": "Invita tutti", + "scenes.app.taskpicker.select": "Selezionare", + "components.listmanager.filter": "Filtro", + "scenes.apps.tasks.no_connector": "Nessun connettore", + "components.attachmentpicker.add_attachment": "Aggiungi allegati", + "components.input.copied": "copiato", + "components.drive.new_versions": "Aggiungi una nuova versione", + "components.drive.navigators.directory_not_found": "Directory non trovata.", + "components.drive.right_preview.suppress_link": "Sopprimere il collegamento", + "components.drive.right_preview.create_link": "Crea un link di accesso", + "components.drive.moove_here": "Vieni qui", + "components.drive.modify_uslist": "Modifica elenco utenti", + "components.tagpicker.tag_name": "Nome del tag", + "components.upload.drop_files": "Trascina qui i tuoi file", + "components.workspace.list_manager.no_workspace": "Nessuno spazio di lavoro", + "components.workspace.list_manager.add": "Aggiungi aree di lavoro", + "components.workspace.list_manager.current_space": "Area di lavoro attuale", + "components.workspace.list_manager.current_company": "Compagnia corrente", + "components.workspace.list_manager.all": "Tutto", + "components.workspace.calendar.invalid": "Non valido", + "components.searchpopup.enter_text": "Inserisci del testo per cercare Twak.", + "components.searchpopup.hide_filters": "nascondi filtri", + "components.searchpopup.show_filters": "mostra filtri", + "components.searchpopup.load_more": "Carica più risultati", + "general.more": "Di più", + "scenes.apps.board.archived_tasks": "Attività archiviate ({{$1}})", + "scenes.apps.board.active_tasks": "Compiti attivi", + "scenes.apps.board.kanban": "Kanban", + "scenes.apps.board.display_as": "Mostra come", + "scenes.apps.board.new_task": "+ Nuova attività", + "scenes.apps.board.all_boards": "Tutte le schede", + "components.userlistmanager.no_users": "Nessun utente.", + "scenes.apps.drive.used": "usato in questa cartella", + "components.reminder.notification": "Notifica", + "components.reminder.minutes_bef": "minuti prima", + "components.reminder.hours_bef": "ore prima", + "components.reminder.days_bef": "giorni prima", + "components.reminder.weeks_bef": "settimane prima", + "components.reminder.by_email": "E-mail", + "scenes.apps.calendar.reminders": "promemoria", + "scenes.apps.calendar.video_link": "Clicca per aprire il link", + "scenes.app.mainview.discussion": "Discussione", + "components.tagpicker.notag": "Nessun tag", + "scenes.apps.tasks.modals.attachments": "Allegati", + "components.calendar.calendarselector.from": "A partire dal", + "scenes.apps.drive.move_text2": "Mossa", + "components.attachmentpicker.from_computer": "Dal tuo dispositivo", + "components.attachmentpicker.from_twake": "Dai documenti Twak", + "components.attachmentpicker.file": "File", + "components.attachmentpicker.remove_attach": "Rimuovi allegato", + "scenes.apps.drive.remove_attachs": "Rimuovi allegati", + "components.drive.elements.see": "Vedere", + "components.drive.elements.current_name": "Nome corrente: ", + "scenes.app.popup.createcompany.try_again": "Per favore riprova.", + "scenes.app.popup.workspace.edit_temp": "Modifica account temporaneo", + "scenes.app.popup.workspace.create_temp": "Crea un account temporaneo", + "scenes.apps.tasks.active_tasks": "compiti attivi", + "scenes.apps.drive.right_preview.versions": "versioni", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Gestisci le tue applicazioni e i tuoi connettori.", + "scenes.app.popup.appsparameters.pages.icon": "Icona", + "scenes.app.popup.appsparameters.pages.title_informations": "Informazioni di base", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "Informazioni relative alla gestione delle applicazioni", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "ID utente corrente", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "ID area di lavoro corrente", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "ID gruppo corrente", + "scenes.app.mainview.channel_description": "Descrivi il canale", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "Invita automaticamente tutti gli utenti dell'area di lavoro a questo canale", + "scenes.client.channelbar.channelmemberslist.title": "Utenti in {{$1}}", + "scenes.client.channelbar.channelmemberslist.loader": "Carica di più", + "scenes.client.channelbar.channelmemberslist.autocomplete": "Aggiungi o cerca utente", + "scenes.client.channelbar.channelmemberslist.menu.option_2": "Rimuovi dal canale", + "components.leftbar.channel.workspaceschannels.menu.option_1": "Crea un canale", + "components.leftbar.channel.workspaceschannels.menu.option_2": "Unisciti a un canale", + "components.channelworkspacelist.title": "Canali", + "components.notifications.hidden_notifications_button.children": "Nuovo messaggio", + "components.newversion.new_version_component.row.part_1": "Stai utilizzando una versione Twake obsoleta", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} ha aggiunto un nuovo connettore {{$2}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} ha rimosso un connettore {{$2}}", + "components.alert.leave_private_channel.title": "Sei sicuro di voler lasciare il canale?", + "components.alert.leave_private_channel.description": "Non potrai più unirti a questo canale privato a meno che qualcuno non ti inviti.", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.tag": "Non sei un membro", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "Carica di più", + "general.verify": "Verificare", + "components.unverified_account.typography_text_danger": "Hai ancora {{$1}} giorno(i) nel periodo di prova. L'account di prova verrà bloccato dopo 7 giorni e cancellato definitivamente dopo 1 mese dalla registrazione. Puoi verificare il tuo account facendo clic sul pulsante \"Verifica il mio account\" nell'e-mail di verifica che ti abbiamo inviato.", + "components.blocked_account.trial_period_over": "Il tuo periodo di prova è terminato. Per sbloccare il tuo account e ottenere l'accesso a tutte le funzionalità, verifica il tuo account tramite e-mail di conferma", + "components.add_mails_workspace.button": "Inizia a usare Twake", + "components.add_mails_workspace.title_1": "Aggiungi alcuni utenti", + "components.add_mails_workspace.title_2": "Twake è uno strumento di collaborazione in team, quindi invita alcuni utenti a testare uno spazio di lavoro che abbiamo creato per te.", + "components.add_mails_workspace.text_area_placeholder": "Inserisci le email dei tuoi utenti*", + "components.verify_mail.title_2": "Ora sei un utente ufficiale di Twake!", + "components.verify_mail.button": "Aggiungi utente", + "components.verify_mail.text": "Prima di tutto, devi verificare il tuo indirizzo email. Abbiamo inviato un link di verifica a", + "components.verify_mail.paragraph": "Puoi farlo in seguito, se lo desideri, ma gli account non verificati hanno accesso solo a una versione limitata di Twake", + "services.console_services.toaster.add_emails_error": "Errore durante l'aggiunta di email", + "services.console_services.toaster.add_email_error_message": "Errore durante l'aggiunta di {{$1}}", + "services.console_services.toaster.success_verify_email": "È stato inviato un collegamento di verifica al tuo account di posta elettronica", + "scenes.app.popup.workspaceparameter.edit_from_console": "Vedi in Console", + "services.console_services.toaster.success_invite_emails": "Utenti {{$1}} aggiunti con successo", + "scenes.client.channels_bar.modals.guest_management.title": "Gestisci gli ospiti in {{$1}}", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "Cerca ospiti o email in attesa", + "scenes.client.channels_bar.modals.guest_management.tips": "Inizia ad aggiungere o cercare e-mail utilizzando l'input sopra", + "scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "Posta inviata", + "general.user.role.company.admin": "amministratore dell'azienda", + "general.user.role.company.member": "Membro", + "general.user.role.company.guest": "Ospite", + "general.user.deleted": "Account cancellato", + "components.richtexteditor.toolbar.bold": "Grassetto", + "components.richtexteditor.toolbar.underline": "Sottolineare", + "components.richtexteditor.toolbar.italic": "Corsivo", + "components.richtexteditor.toolbar.strikethrough": "barrato", + "components.richtexteditor.toolbar.unordered-list": "Elenco puntato", + "components.richtexteditor.toolbar.ordered-list": "Lista ordinata", + "components.richtexteditor.toolbar.blockquote": "citazione", + "components.richtexteditor.toolbar.code-block": "Blocco codice", + "components.locked_features.locked_history_banner.title": "Hai appena raggiunto il limite di messaggi", + "components.locked_features.locked_history_banner.description": "La tua azienda ha molti messaggi! Esegui l'upgrade ora per accedere a tutta la cronologia dei tuoi messaggi.", + "components.locked_features.locked_history_banner.button": "Scopri di più", + "components.locked_features.locked_guests_popup.title": "La funzione Ospiti è bloccata", + "components.locked_features.locked_guests_popup.subtitle": "Questa funzione non è disponibile nella versione gratuita di Twake", + "components.locked_features.locked_guests_popup.description": "Ops!! Sembra che tu voglia invitare utenti esterni nel tuo spazio di lavoro. Potresti prendere in considerazione l'upgrade del tuo piano se desideri collaborare con ospiti e partner esterni. Esplora le nostre opzioni di prezzo e seleziona l'opzione migliore per le esigenze di collaborazione del tuo team.", + "components.locked_features.locked_guests_popup.learn_more_button": "Scopri di più", + "components.locked_features.locked_guests_popup.skip_for_now_button": "Salta per ora", + "components.locked_features.locked_guests_popup.or": "o", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "Si è verificato un problema con l'abbonamento aziendale. Per favore, dai un'occhiata al tuo", + "components.on_boarding.company_billing_banner.guest_or_member_text": "Si è verificato un problema con l'abbonamento aziendale. Si prega di contattare il proprietario o l'amministratore dell'azienda!", + "components.on_boarding.company_billing_banner.link": "piano di abbonamento aziendale", + "components.on_boarding.popups.blocked_company.title": "La tua azienda è bloccata a causa di un problema di pagamento", + "components.on_boarding.popups.blocked_company.description": "Il tuo abbonamento a Twake è scaduto. Contatta il proprietario o l'amministratore della tua azienda per rinnovarla ed essere in grado di comunicare nuovamente con il tuo team!", + "components.on_boarding.popups.blocked_company.learn_more_text": "Vuoi saperne di più sul piano di abbonamento delle aziende?", + "scenes.apps.tasks.select_user_button": "Visualizza le attività di un altro utente", + "scenes.apps.messages.input.attach_file.from_computer": "Dal computer", + "scenes.app.popup.workspaceparameter.pages.table_title": "Nome", + "scenes.client.main_view.main_header.search_input": "Ricerca", + "scenes.apps.drive.new_link_title": "Nuovo collegamento", + "scenes.apps.drive.default_link_name": "Senza titolo", + "components.emoji_picker.input_search_placeholder": "Ricerca", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}} - Non puoi aggiungere più di {{$2}} file in un messaggio", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "Hai cancellato questo messaggio", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} ha cancellato il suo messaggio", + "components.member.user_parts.and_more_user_text": " e {{$1}} più utenti", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "Crea un canale privato", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " invece", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "Non puoi aggiungere più di 10 utenti", + "general.uploading": "Caricamento", + "components.upload.drop_files.toaster.error": "Non puoi caricare più di {{$1}} file", + "components.emoji_picker.categories.frequently_used": "Usato frequentemente", + "components.emoji_picker.categories.smileys_and_people": "Faccine e persone", + "components.emoji_picker.categories.animals_and_nature": "Animali e natura", + "components.emoji_picker.categories.food_and_drink": "Cibo bevanda", + "components.emoji_picker.categories.activity": "Attività", + "components.emoji_picker.categories.travel_and_places": "Viaggi e luoghi", + "components.emoji_picker.categories.objects": "oggetti", + "components.emoji_picker.categories.symbols": "Simboli", + "components.emoji_picker.categories.flags": "bandiere", + "components.emoji_picker.categories.search_result": "risultati di ricerca", + "components.emoji_picker.categories.not_found": "Nessun emoji trovato", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "Ruolo", + "general.email": "E-mail", + "components.locked_features.locked_workspace_popup.title": "Non puoi creare più spazi di lavoro", + "components.locked_features.locked_workspace_popup.subtitle": "Nella versione gratuita, puoi avere un solo spazio di lavoro nella tua azienda.", + "components.locked_features.locked_workspace_popup.text": "Ops!! Vuoi creare un nuovo spazio di lavoro nella tua azienda? Potresti prendere in considerazione l'aggiornamento del tuo piano. Esplora le nostre opzioni di prezzo e seleziona la scelta migliore per le esigenze di collaborazione del tuo team.", + "components.locked_features.locked_only_office_popup.title": "Non puoi modificare questo file", + "components.locked_features.locked_only_office_popup.subtitle": "Nella versione gratuita, non puoi usare solooffice.", + "scenes.app.integrations_parameters.company_application_popup.tag": "Installato", + "scenes.app.integrations_parameters.company_application_popup.btn": "Installare", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "Informazioni", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "Descrizione", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "Sito web", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "Data di creazione", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "Versione", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "Spettacolo", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "Rimuovere dall'azienda", + "scenes.app.integrations_parameters.company_applications_table.name": "Nome", + "scenes.app.integrations_parameters.company_applications_table.title": "Installato nella tua azienda", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "Eliminato con successo {{$1}} dalla tua azienda", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "Aggiunto con successo {{$1}} nella tua azienda", + "scenes.apps.messages.input.replied_to": "risposto a ", + "scenes.join.loading": "Caricamento in corso…", + "\"": "\"", + "login.create_account": "Creare un account", + "login.login_error": "Errore durante l'accesso", + "'": "'" +} diff --git a/twake/frontend/public/locales/ja.json b/twake/frontend/public/locales/ja.json index 32b7938b88..b08617794a 100644 --- a/twake/frontend/public/locales/ja.json +++ b/twake/frontend/public/locales/ja.json @@ -104,5 +104,744 @@ "scenes.login.home.login_btn": "ログイン", "scenes.login.home.lost_password": "パスワードをお忘れですか", "scenes.login.home.create_account": "アカウントを作成する", - "scenes.app.popup.appsparameters.pages.icon": "アイコン" -} \ No newline at end of file + "scenes.app.popup.appsparameters.pages.icon": "アイコン", + "scenes.apps.account.notifications.mail_subtitle": "電子メール通知", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "アプリケーションが編集および読み取りできるものを定義します。", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "次のイベントで送信されるパッシブデータ", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "未公開のアプリケーションは、あなたの会社でのみ機能します。すべてのTwakeユーザーが利用できるようにする場合は、このオプションを有効にします。", + "scenes.app.popup.appsparameters.pages.public_login_label": "公開識別子", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "公開されている場合、このアプリを削除することはできません。", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "アプリケーションの簡略名は、すでに別のアプリケーションで使用されています。変更してください。", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "アプリケーションの更新中にエラーが発生しました。", + "scenes.app.popup.createworkspacepage.placeholder_name": "ワークスペースの名前", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "モバイル通知の頻度を設定します。", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "通知の頻度", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "次のキーワードを強調表示します。", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "電子メール通知の頻度を設定します。", + "scenes.app.popup.userparameter.pages.private_message_content.show": "プライベートメッセージのコンテンツを表示する", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "通知を受け取らない期間を選択してください。", + "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "夜は邪魔しないでください", + "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "検索に戻る", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "ユーザーを招待する", + "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "会社が開発したアプリケーション", + "scenes.app.popup.workspaceparameter.pages.company_identity_title": "会社のアイデンティティ", + "scenes.app.popup.workspaceparameter.pages.company_name_description": "この会社の名前を変更します", + "scenes.app.popup.workspaceparameter.pages.company_name_label": "会社名", + "scenes.app.popup.workspaceparameter.pages.configuration_notif": "構成", + "scenes.app.popup.workspaceparameter.pages.configure_button": "構成、設定", + "scenes.app.popup.workspaceparameter.pages.description": "説明", + "scenes.app.popup.workspaceparameter.pages.name_label": "ワークスペースの名前", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "このワークスペースから削除します", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "ワークスペース", + "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "書き込みアクセス", + "scenes.app.popup.workspaceparameter.pages.your_apps_label": "アプリケーション", + "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "支払いとサブスクリプション", + "scenes.app.workspacesbar.components.change_company_title": "会社を変更する", + "scenes.app.workspacesbar.components.create_company_menu": "会社を作る", + "scenes.app.workspacesbar.components.grp_parameters": "{{$1}}設定", + "scenes.apps.calendar.connectors_menu": "コネクタ..。", + "scenes.apps.drive.new_file_menu": "新しいファイル", + "scenes.apps.drive.new_file_title": "新しいファイル", + "scenes.apps.drive.new_external_storage": "新しい外部ストレージ", + "scenes.apps.drive.new_folder_title": "新しいフォルダ", + "scenes.apps.drive.no_file_alert": "ファイルを作成できるアプリケーションはありません。", + "scenes.apps.drive.no_storage_app_alert": "外部ストレージを追加できるアプリケーションはありません。", + "scenes.apps.drive.remove_definitely_menu": "完全に削除する", + "scenes.apps.drive.restore_menu": "戻す", + "scenes.apps.drive.throw_menu": "ゴミ箱に送る", + "scenes.apps.drive.trash_empty_menu": "ゴミ箱を空にする", + "scenes.apps.drive.unconfigured_tab": "このタブはまだ構成されていません。", + "scenes.apps.messages.message.unpin_button": "メッセージの固定を解除する", + "scenes.apps.messages.message.copy_link": "メッセージへのリンクをコピー", + "scenes.no_panic": "慌てる必要はありません!このページをリロードするだけでTwakeを修正できます。", + "services.apps.calendar.event_icon": "イベント", + "services.apps.calendar.move_icon": "動く", + "services.apps.calendar.reminder_icon": "リマインダー", + "services.apps.messages.no_app": "このアプリケーションは存在しません。", + "services.apps.messages.no_command_possible": "'{{$2}}'が存在しないか、コマンドの作成が許可されていないため、コマンド '{{$1}}'を実行できません。", + "services.user.notification_parameters_update_alert": "通知設定が更新されました。", + "services.user.update_password_alert": "パスワードが更新されました。", + "scenes.app.workspaces.components.skip": "スキップ", + "scenes.apps.calendar.unconfigured_tab": "このタブはまだ構成されていません。", + "scenes.apps.drive.trash": "ごみ", + "components.add_mails_workspace.title_1": "一部のユーザーを追加", + "components.add_mails_workspace.title_2": "Twakeはチームコラボレーションツールなので、私たちが作成したワークスペースをテストするために何人かのユーザーを招待します。", + "components.add_mails_workspace.text_area_placeholder": "ユーザーのメールアドレスを入力してください*", + "components.verify_mail.title_1": "おめでとう", + "components.verify_mail.title_2": "あなたは今、Twakeの公式ユーザーです!", + "services.console_services.toaster.add_emails_error": "メールの追加中にエラーが発生しました", + "services.console_services.toaster.add_email_error_message": "{{$1}}の追加中にエラーが発生しました", + "components.richtexteditor.toolbar.code-block": "コードブロック", + "components.locked_features.locked_history_banner.title": "メッセージ制限に達しました", + "components.locked_features.locked_history_banner.button": "もっと詳しく知る", + "components.locked_features.locked_guests_popup.title": "ゲスト機能はロックされています", + "components.locked_features.locked_guests_popup.subtitle": "この機能は、Twake無料バージョンでは使用できません", + "components.locked_features.locked_guests_popup.description": "おっと!外部ユーザーをワークスペースに招待したいようです。ゲストや外部パートナーとコラボレーションしたい場合は、プランのアップグレードを検討することをお勧めします。価格設定オプションを調べて、チームコラボレーションのニーズに最適なオプションを選択してください。", + "components.locked_features.locked_guests_popup.learn_more_button": "もっと詳しく知る", + "components.locked_features.locked_guests_popup.skip_for_now_button": "今すぐスキップ", + "components.locked_features.locked_guests_popup.or": "または", + "components.on_boarding.popups.blocked_company.company_selector": "別の会社に切り替える", + "scenes.apps.tasks.select_user_button": "他のユーザーのタスクを表示する", + "scenes.apps.messages.input.attach_file.from_computer": "コンピューターから", + "scenes.app.popup.workspaceparameter.pages.table_title": "名前", + "scenes.client.main_view.main_header.search_input": "検索", + "scenes.apps.drive.new_link_title": "新しいリンク", + "scenes.apps.drive.default_link_name": "無題", + "components.emoji_picker.input_search_placeholder": "検索", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}}-メッセージに{{$2}}を超えるファイルを追加することはできません", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "このメッセージを削除しました", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}}は彼のメッセージを削除しました", + "components.member.user_parts.and_more_user_text": " および{{$1}}より多くのユーザー", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "プライベートチャネルを作成する", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " 代わりは", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "10人を超えるユーザーを追加することはできません", + "general.uploading": "アップロード", + "components.upload.drop_files.toaster.error": "{{$1}}を超えるファイルをアップロードすることはできません", + "components.emoji_picker.categories.frequently_used": "よく使う", + "components.emoji_picker.categories.animals_and_nature": "動物と自然", + "components.emoji_picker.categories.food_and_drink": "食べ物飲み物", + "components.locked_features.locked_workspace_popup.text": "おっと!会社に新しいワークスペースを作成しますか?計画のアップグレードを検討することをお勧めします。価格設定オプションを調べて、チームコラボレーションのニーズに最適な選択肢を選択してください。", + "components.locked_features.locked_only_office_popup.text": "おっと! Twakeからファイルを編集したいようです。 Officeファイルを中心に共同作業を行う場合は、プランのアップグレードを検討することをお勧めします。価格設定オプションを調べて、チームコラボレーションのニーズに最適なオプションを選択してください。", + "components.locked_features.locked_drive_popup.title": "ドライブ制限に達しました", + "components.locked_features.locked_drive_popup.subtitle": "無料版では、6GBしか保存できません。", + "scenes.app.integrations_parameters.title": "統合", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "見せる", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "会社から削除する", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "再アクティブ化", + "scenes.join.login_first_button": "最初にログインするか、アカウントを作成してください", + "scenes.join.join_the_team_button": "チームに参加する", + "scenes.apps.account.account.save": "アカウントを保存", + "scenes.apps.tasks.board.list_name": "リスト名", + "scenes.apps.calendar.workspace_label": "このワークスペース", + "scenes.app.popup.appsparameters.pages.update_button": "アップデート", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "使用したユーザー名または電子メールが有効であることを確認してください。", + "components.calendar.repetition.occurrence": "発生(s)", + "general.retry": "リトライ", + "scenes.app.popup.appsparameters.pages.show_button": "見せる", + "scenes.apps.calendar.no_connectors_menu_text": "カレンダーに接続できるコネクタがありません。", + "components.emoji_picker.categories.smileys_and_people": "Smileys&People", + "components.locked_features.locked_history_banner.description": "あなたの会社にはたくさんのメッセージがあります!今すぐアップグレードして、すべてのメッセージ履歴にアクセスしてください。", + "scenes.app.workspaces.create_company.title": "私の会社を作る", + "scenes.app.popup.workspaceparameter.pages.collaborateurs": "ユーザー", + "scenes.app.popup.appsparameters.pages.app_name_label": "アプリケーション名", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}}はチャネルから{{$2}}を削除しました", + "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}、{{$2}}、{{$3}}", + "components.searchpopup.tags": "タグ", + "scenes.app.workspaces.create_company.group_data.group_main_activity.machinery_automotive": "機械/自動車", + "general.help.documentation": "ドキュメンテーション", + "general.connexion_status.connected": "あなたはオンラインです", + "general.update": "アップデート", + "general.send": "メッセージを送る", + "general.unarchive": "アーカイブ解除", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "アプリケーション特権", + "scenes.login.create_account.step_2_subtitle_b": "あなたの電話番号は非公開のままです。", + "scenes.login.create_account.step_3_mail_sent": "アクティベーションリンクをメールでお送りしました。", + "general.add": "追加", + "scenes.app.workspaces.create_company.group_data.group_main_activity.bank": "銀行/保険", + "scenes.app.workspaces.create_company.group_data.group_main_activity.it_telecom": "IT /テレコム", + "scenes.app.workspaces.create_company.group_data.group_main_activity.studies_and_advice": "研究とアドバイス", + "general.connexion_status.disconnected": "オフラインです", + "components.locked_features.locked_workspace_popup.subtitle": "無料版では、会社にワークスペースを1つだけ含めることができます。", + "application.load.longer": "サーバーが応答するのに予想よりも時間がかかります。しばらく待つか、ページをリロードしてください...", + "scenes.app.workspaces.create_company.group_data": "新しいグループを構成します", + "scenes.app.workspaces.create_company.group_data.group_type": "グループタイプ", + "scenes.app.workspaces.create_company.group_data.group_type.company": "会社または会社の部門", + "scenes.app.workspaces.create_company.group_data.group_type.public_organization": "公的機関", + "scenes.app.workspaces.create_company.group_data.group_type.society_club_charity": "社会、クラブまたは慈善団体", + "scenes.app.workspaces.create_company.group_data.group_type.other_group": "他の", + "scenes.app.workspaces.create_company.group_data.group_size": "グループサイズ", + "scenes.app.workspaces.create_company.group_data.group_size.less_3": "4人未満のユーザー", + "scenes.app.workspaces.create_company.group_data.group_size.4_10": "4〜10人のユーザー", + "scenes.app.workspaces.create_company.group_data.group_size.10_50": "11〜49人のユーザー", + "scenes.app.workspaces.create_company.group_data.group_size.50_100": "50〜99人のユーザー", + "scenes.app.workspaces.create_company.group_data.group_size.100_500": "100〜499ユーザー", + "scenes.app.workspaces.create_company.group_data.group_size.500_1000": "500〜999ユーザー", + "scenes.app.workspaces.create_company.group_data.group_size.1000_5000": "1000〜4999ユーザー", + "scenes.app.workspaces.create_company.group_data.group_size.5000_more": "5000人以上のユーザー", + "scenes.app.workspaces.create_company.group_data.group_main_activity": "主な活動", + "scenes.app.workspaces.create_company.group_data.group_main_activity.food": "食べ物", + "scenes.app.workspaces.create_company.group_data.group_main_activity.printing_paper": "印刷/紙", + "scenes.app.workspaces.create_company.group_data.group_main_activity.construction_building": "建設/建材", + "scenes.app.workspaces.create_company.group_data.group_main_activity.real_estate": "不動産", + "scenes.app.workspaces.create_company.group_data.group_main_activity.chemistry": "化学", + "scenes.app.workspaces.create_company.group_data.group_main_activity.trade_commerce_distribution": "貿易/商取引/流通", + "scenes.app.workspaces.create_company.group_data.group_main_activity.publishing_communication_multimedia": "出版/コミュニケーション/マルチメディア", + "scenes.app.workspaces.create_company.group_data.group_main_activity.pharmaceutical_industry": "製薬業界", + "scenes.app.workspaces.create_company.group_data.group_main_activity.business_services": "ビジネスサービス", + "scenes.app.workspaces.create_company.group_data.group_main_activity.entertainment": "エンターテイメント", + "scenes.app.workspaces.create_company.group_data.group_main_activity.textile_clothing_shoes": "テキスタイル/衣類/靴", + "scenes.app.workspaces.create_company.group_data.group_main_activity.transport_logistics": "輸送/ロジスティクス", + "scenes.app.workspaces.create_company.group_data.group_main_activity.research": "リサーチ", + "scenes.app.workspaces.create_company.group_data.group_main_activity.education": "教育", + "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "管理", + "scenes.app.workspaces.create_company.invitations.title": "ワークスペースを構成します。", + "scenes.apps.messages.left_bar.stream.remove_from_favorites": "お気に入りから削除", + "scenes.apps.messages.left_bar.stream.notifications": "通知...", + "scenes.apps.messages.left_bar.stream.notifications.all": "メッセージ", + "scenes.apps.messages.left_bar.stream.notifications.me": "{{$1}}のみ", + "scenes.apps.messages.left_bar.stream.notifications.never": "何もない", + "scenes.apps.account.notifications.sound": "音声通知", + "scenes.apps.tasks.connectors_menu": "コネクタ..。", + "scenes.apps.tasks.connectors_search_menu": "コネクタを検索...", + "scenes.apps.tasks.no_connectors_menu_text": "カレンダーに接続できるコネクタがありません。", + "scenes.apps.tasks.unconfigured_tab": "このタブはまだ構成されていません。", + "scenes.apps.tasks.choose_board_button": "ボードを選択してください", + "scenes.apps.tasks.new_board.title": "新しいボード", + "scenes.apps.tasks.new_board.edit_title": "ボードを編集", + "scenes.apps.tasks.task_status.todo": "する", + "scenes.apps.tasks.task_status.done": "終わり", + "scenes.apps.tasks.task.description": "説明", + "scenes.apps.tasks.task.assignees": "譲受人", + "scenes.apps.tasks.task.edit.dates": "日付", + "scenes.apps.tasks.list_modal.modify_list": "リストを変更", + "scenes.apps.tasks.list_modal.new_list": "新しいリスト", + "scenes.apps.tasks.list_modal.remove": "リストとタスクを削除する", + "scenes.apps.tasks.list_modal.predefined_participants": "事前定義された参加者", + "scenes.apps.tasks.list_modal.archive_all_tasks": "すべてのタスクをアーカイブする", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "アーカイブされたタスクを削除する({{$1}})", + "scenes.login.footer.branding": "{{$1}}({{$2}})プライベートTwakeサーバーを使用しています。 ", + "scenes.login.create_account.newsletter": "Twakeに関する情報を受け取る", + "scenes.login.home.subtitle": "お会いできて嬉しいです", + "scenes.login.create_account.password": "パスワード", + "scenes.login.create_account.step_1_subtitle": "これ以上簡単なことはありません—必要なのはいくつかの情報だけです。", + "scenes.login.create_account.step_2_subtitle_a": "他のユーザーがあなたを認識できるように、フルネームを追加します。", + "scenes.login.create_account.step_3_subtitle": "最後のステップ—あなたがロボットではないことを確認する必要があります!", + "scenes.app.workspaces.create_company.company_name.placeholder": "会社名", + "scenes.app.workspaces.create_company.company_name.title_2": "あなたの会社の名前を示してください。", + "scenes.app.workspaces.create_company.default_workspace_name": "主要", + "scenes.app.workspaces.create_company.importations.title_1": "すでにデジタルツールを使用していますか?今すぐツールをインポートまたは統合してください!", + "scenes.app.workspaces.create_company.importations.title_2": "心配ありません。後でこれを行うことができます。", + "scenes.app.workspaces.create_company.invitations.title_2": "チームにユーザーを追加します。", + "scenes.app.workspaces.welcome_page.add_secondary_emails": "予備のメールを追加する", + "scenes.app.workspaces.welcome_page.added_to_company": "あなたはに招待されました ", + "scenes.app.workspaces.welcome_page.create_my_company": "私の会社を作る", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "別のメールアドレスを使用して招待されましたか?", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "ああ、まあ...まだ誰もあなたをワークスペースに招待していないようです。", + "scenes.app.workspaces.welcome_page.ready_to_work": "これで作業する準備が整いました。", + "scenes.app.workspaces.welcome_page.try_again": "再試行", + "scenes.app.workspaces.welcome_page.twake_team": "トウェイク", + "scenes.app.workspaces.welcome_page.welcome_header": "Twakeへようこそ!", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "複数の電子メールアドレスをアカウントにリンクできます。通知の送信に使用されるアドレスは1つだけです。", + "scenes.app.workspaces.welcome_page.main_mail_title": "メインアドレス", + "scenes.app.workspaces.welcome_page.other_mail_title": "セカンダリアドレス", + "scenes.app.workspaces.welcome_page.add_new_email": "電子メールを追加する", + "scenes.app.workspaces.welcome_page.code_verification": "検証コード", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "{{$1}}経由で確認コードをお送りしました", + "scenes.login.forgot_password.finished": "パスワードは正常に更新されました。", + "scenes.apps.account.account.description_main": "メインアドレスは、Twakeが通知を送信する場所です。セカンダリアドレスを使用すると、それらを使用するワークスペースに自動的に招待されます。", + "scenes.apps.account.account.emails.description": "さまざまな電子メールアドレスを管理します。", + "scenes.apps.account.account.password.description": "パスワードを変更してください。", + "scenes.apps.account.identity.description": "他のTwakeユーザーに表示される名前、名前、プロフィール画像を変更します。", + "scenes.apps.account.preference": "環境設定", + "general.open": "開ける", + "scenes.apps.account.thumbnail.max_weight": "最大サイズ5MB", + "scenes.apps.account.account.email_add_modal.confirm": "このメールを確認してください", + "app.name.twake_calendar": "カレンダー", + "app.name.twake_drive": "ドキュメント", + "app.name.twake_tasks": "タスク", + "components.calendar.repetition.everyday": "毎日", + "components.calendar.repetition.does_not_repeat": "繰り返さない", + "components.calendar.repetition.weekly_on": "毎週{{$1}}", + "components.calendar.repetition.monthly_on": "{{$1}} {{$2}}で毎月", + "components.calendar.repetition.annually_on": "毎年{{$1}}", + "components.calendar.repetition.every_weekday": "平日(月〜金)", + "components.calendar.repetition.custom": "カスタム...", + "components.calendar.repetition.repeat": "毎回繰り返す", + "components.calendar.repetition.never": "一度もない", + "components.calendar.repetition.on": "オン", + "components.calendar.repetition.after": "後", + "components.calendar.repetition.months": "月", + "components.calendar.repetition.years": "年", + "components.calendar.repetition.custom_recurrence": "カスタム再発", + "components.calendar.repetition.repeat_on": "繰り返します", + "scenes.app.channelsbar.currentuser.add_apps": "アプリケーションの検索", + "scenes.app.channelsbar.currentuser.change_my_status": "ステータスを変更する", + "scenes.app.channelsbar.currentuser.collaborateurs": "ユーザー", + "scenes.app.channelsbar.currentuser.create_workspace_page": "ワークスペースを作成する", + "scenes.app.channelsbar.currentuser.invited_status": "あなたはゲストです。", + "scenes.app.channelsbar.currentuser.workspace_info": "グループ{{$2}}のワークスペース{{$1}}にいます", + "scenes.app.channelsbar.currentuser.workspace_parameters": "ワークスペース設定", + "scenes.app.channelsbar.currentuser.logout": "サインアウト", + "scenes.app.channelsbar.currentuser.update": "アップデート", + "scenes.app.channelsbar.currentuser.disable_notifications": "無効にする", + "scenes.app.channelsbar.currentuser.disabling_notifications": "1時間無効にする", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "午前9時まで無効にする明日", + "scenes.app.channelsbar.currentuser.user_parameter": "通知設定", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "書き込み権限", + "scenes.app.channelsbar.company_invitation_alert_title": "あなたは会社に招待されています ", + "scenes.app.channelsbar.initial_instructions_tutorial": "名、名前、プロフィール写真を選択します。", + "scenes.app.channelsbar.installation_desktop_tutorial": "デスクトップアプリケーションをインストールします", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "ユーザーをワークスペースに招待します。", + "scenes.app.channelsbar.public_channel_label": "公衆", + "scenes.app.channelsbar.sending_message_instruction": "ディスカッションで最初のメッセージを送信する", + "scenes.app.channelsbar.tutorial_alert": "このフレームを二度と表示しませんか?", + "scenes.app.channelsbar.welcome": "Twakeへようこそ", + "scenes.app.channelsbar.welcoming_message_subtitle": "数回クリックするだけでTwakeプロになりましょう!", + "scenes.app.mainview.instruction_current_tab": "左側のチャンネルを選択することから始めます。", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "チャネルに接続できるコネクタがありません。", + "scenes.app.mainview.tabs.rename": "名前を変更", + "scenes.app.mainview.tabs.searching_connectors": "コネクタを検索...", + "scenes.app.popup.adduser.adresses_message": "アドレスはカンマまたはスペースで区切ります。 Twakeは、サブスクリプションに基づいて招待の数を制限できることに注意してください。", + "scenes.app.popup.appsparameters.pages._app_identity": "アプリケーションのID", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Twacodeメッセージの外観をテストします", + "scenes.app.popup.appsparameters.pages.alert_published_app": "アプリケーションは公開されています。編集することはできません。", + "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "開発時に*を使用して、すべてのIPアドレスを許可します。", + "scenes.app.popup.appsparameters.pages.amazing_app_name": "私の素晴らしいアプリ", + "scenes.app.popup.appsparameters.pages.api_data_description": "TwakeAPIに役立つデータ。", + "scenes.apps.calendar.no_calendar_text": "このワークスペースにカレンダーを設定していません。", + "scenes.apps.calendar.remove_calendar_confirmation": "カレンダーとそのイベントを完全に削除しますか?", + "scenes.app.mainview.advanced_search_placeholder": "高度な検索", + "components.searchpopup.hide_filters": "フィルタを非表示にする", + "components.searchpopup.show_filters": "フィルタを表示", + "components.searchpopup.load_more": "より多くの結果をロードする", + "general.more": "もっと", + "scenes.app.popup.adduser.magiclinks.genrator_info": "ワークスペースへの招待リンク", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "新しいリンクが生成されました", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "クリップボードに正常にコピーされました", + "scenes.app.popup.adduser.magiclinks.action_copy": "コピー", + "scenes.app.popup.adduser.magiclinks.action_generate": "生成", + "scenes.app.popup.appsparameters.pages.api_parameters_label": "API設定", + "scenes.app.popup.appsparameters.pages.app_modification_right": "この会社のすべてのマネージャーは、このアプリケーションを編集できます。", + "scenes.app.popup.appsparameters.pages.filter_information": "このフィルターは、APIキーの使用をコネクター内のサーバーのみに制限します。", + "scenes.app.popup.appsparameters.pages.installation": "インストール。", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "まず、メッセージをJSON形式で記述します。", + "scenes.app.popup.appsparameters.pages.interne_availability_application": "内部アプリケーション", + "scenes.app.popup.appsparameters.pages.loading": "読み込んでいます...", + "scenes.app.popup.appsparameters.pages.modify_public_data": "アプリケーションの公開データを編集します。", + "scenes.app.popup.appsparameters.pages.new_app_title": "新しいアプリ", + "scenes.app.popup.appsparameters.pages.ok_user_code": "わかった", + "scenes.app.popup.appsparameters.pages.optimal_format": "最適なフォーマット:48x48px。", + "scenes.app.popup.appsparameters.pages.public_availability_application": "公開アプリケーション", + "scenes.app.popup.appsparameters.pages.remove_app_button": "アプリケーションを削除する", + "scenes.app.popup.createworkspacepage.add_subtitle": "より多くのスペースが必要ですか?", + "scenes.app.popup.createworkspacepage.create_new_workspace": "新しいワークスペースを作成します", + "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "統合", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "表示設定", + "scenes.app.popup.workspaceparameter.pages.logo_subtitle": "ロゴ", + "scenes.app.popup.workspaceparameter.pages.name_description": "このワークスペースの名前を変更します", + "scenes.apps.drive.viewer.edit_with_button": "{{$1}}で編集", + "scenes.apps.drive.viewer.loading_preview_message": "読み込んでいます...", + "scenes.apps.messages.message.new_messages_bar": "新しいメッセージ", + "scenes.apps.messages.message.cancel_button": "キャンセル", + "scenes.apps.messages.message.modify_button": "編集", + "scenes.apps.messages.message.pin_button": "ピンメッセージ", + "components.verify_mail.text": "まず、メールアドレスを確認する必要があります。に確認リンクを送信しました", + "components.verify_mail.paragraph": "必要に応じて後で行うことができますが、未確認のアカウントは限定バージョンのTwakeにしかアクセスできません", + "components.richtexteditor.toolbar.blockquote": "ブロッククォート", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "会社のサブスクリプションに問題があります。どうぞ、あなたの", + "components.on_boarding.company_billing_banner.guest_or_member_text": "会社のサブスクリプションに問題があります。会社の所有者または管理者に連絡してください!", + "components.on_boarding.company_billing_banner.link": "会社のサブスクリプションプラン", + "components.on_boarding.popups.blocked_company.description": "Twakeのサブスクリプションの有効期限が切れています。会社の所有者または管理者に連絡して更新し、チームと再度連絡できるようにしてください。", + "components.on_boarding.popups.blocked_company.learn_more_text": "企業のサブスクリプションプランについてもっと知りたいですか?", + "components.on_boarding.popups.blocked_company.or": "または", + "scenes.apps.tasks.select_user": "ユーザーを検索", + "components.emoji_picker.categories.activity": "アクティビティ", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "役割", + "general.email": "Eメール", + "components.locked_features.locked_only_office_popup.title": "このファイルは編集できません", + "components.locked_features.locked_only_office_popup.subtitle": "無料版では、officeのみは使用できません。", + "scenes.app.integrations_parameters.applications_table.name": "名前", + "scenes.app.integrations_parameters.applications_table.title": "その他の統合", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "検索アプリケーション", + "scenes.app.integrations_parameters.company_application_popup.tag": "インストール済み", + "scenes.app.integrations_parameters.company_application_popup.btn": "インストール", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "情報", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "説明", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "Webサイト", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "作成日", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "バージョン", + "scenes.app.integrations_parameters.company_applications_table.name": "名前", + "scenes.app.integrations_parameters.company_applications_table.title": "あなたの会社にインストールされています", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "会社から{{$1}}を正常に削除しました", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "あなたの会社に{{$1}}が正常に追加されました", + "scenes.apps.messages.input.replied_to": "に返信 ", + "components.workspace.list_manager.all": "全て", + "general.help": "ヘルプ", + "scenes.apps.drive.go_out_trash_menu": "ゴミを残す", + "components.account_verification_status_sentence": "アカウントのステータスは次のとおりです:{{$1}}", + "scenes.apps.tasks.no_tasks": "聞かない", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "この名前は、別のアプリケーションですでに使用されています。別のものを選択してください。", + "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "簡略名", + "scenes.apps.messages.message.pinned": "固定", + "general.user.role.company.member": "メンバー", + "scenes.app.popup.userparameter.pages.private_message_content.hide": "プライベートメッセージのコンテンツを非表示にする", + "scenes.apps.messages.message.show_button": "画面", + "scenes.apps.messages.messageslist.get_writing_users": "書いています...", + "login.email_login": "Eメール/ログイン", + "scenes.app.channelsbar.unread_sign": "未読としてマーク", + "scenes.app.popup.userparameter.personnal_workspaces_title": "あなたのワークスペース", + "scenes.apps.calendar.add_calendar_menu": "カレンダーを追加する", + "scenes.apps.drive.top_menu_more": "もっと", + "scenes.apps.drive.top_menu_no_items": "【X0X】アイテム", + "scenes.join.loading": "読み込んでいます…", + "scenes.join.wrong_link_title": "このリンクはもう利用できません", + "scenes.join.wrong_link_description": "あなたをこの会社に招待した人に新しいリンクを求めるか、あなた自身の会社を作りましょう", + "scenes.join.create_the_company_button": "会社を作る", + "scenes.join.join_workspace_from_company": "{{$2}}から{{$1}}に参加しましょう!", + "scenes.join.twake_description": "Twakeは、チームの生産性を向上させるために構築されたオープンソースのデジタルワークスペースです。", + "scenes.app.workspaces.create_company.company_name.title_1": "始める、", + "scenes.apps.account.account.make_main": "メインを設定", + "components.verify_mail.button": "ユーザーを追加する", + "services.apps.calendar.deadline_icon": "締め切り", + "components.calendar.repetition.days": "日々)", + "scenes.app.workspaces.welcome_page.see_you_soon": "また近いうちにお会いしましょう!", + "scenes.app.workspaces.welcome_page.new_email": "予備の電子メールを追加する", + "components.calendar.repetition.ends": "終了", + "components.on_boarding.popups.blocked_company.title": "あなたの会社は支払いの問題のためにロックされています", + "scenes.app.popup.workspaceparameter.pages.no_access": "アクセスなし。", + "components.users_picker.add_me": "私を追加してください", + "scenes.apps.drive.right_preview.public": "パブリック・アクセス", + "scenes.apps.calendar.modals.event_description_placeholder": "説明", + "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "会社が開発したアプリケーション", + "scenes.apps.drive.right_preview.public_link": "パブリックリンク", + "scenes.apps.account.identity": "身元", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "アプリケーションとコネクタを管理します。", + "scenes.app.channelsbar.currentuser.title": "アカウント設定", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "ドキュメントに移動して、JSON形式で構成を生成します。", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "あなたはワークスペース管理者です。", + "scenes.app.channelsbar.private_channel_label": "プライベート", + "scenes.app.workspaces.welcome_page.lets_go": "さあ行こう!", + "scenes.apps.tasks.task_status.current": "現在", + "scenes.apps.tasks.board.tasks.in_list": "リストに", + "components.calendar.repetition.weeks": "週", + "scenes.apps.drive.go_trash_menu": "ゴミ箱に行く", + "scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "許可されたIPアドレス", + "scenes.apps.calendar.video_link": "クリックしてリンクを開く", + "components.calendar.repetition.monthly_on_day": "毎月当日{{$1}}", + "general.connexion_status.connecting": "再接続しています…", + "scenes.app.workspaces.create_company.group_data.group_main_activity.materials": "材料", + "scenes.apps.tasks.boards": "ボード", + "general.remove": "削除する", + "scenes.app.side_app.messages_thread_title": "{{$1}}•メッセージスレッド", + "scenes.app.workspaces.create_company.group_data.group_type.university_school": "大学または学校", + "general.help.support": "サポート", + "general.archive": "アーカイブ", + "scenes.app.workspaces.create_company.group_data.group_main_activity.electronics_electricity_energy": "エレクトロニクス/電気/エネルギー", + "scenes.apps.messages.left_bar.stream.add_to_favorites": "お気に入りに追加", + "scenes.app.workspaces.create_company.group_data.group_main_activity.other": "他の", + "components.locked_features.locked_workspace_popup.title": "これ以上ワークスペースを作成することはできません", + "components.searchpopup.size": "サイズ", + "general.resume": "履歴書", + "general.pause": "一時停止", + "scenes.app.workspaces.welcome_page.done": "私はこれで終わりです", + "scenes.apps.tasks.task": "タスク", + "scenes.app.workspaces.create_company.group_data.title": "迅速に対応します—必要なのは統計情報だけです。", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "メッセージ番号", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "無料版のTwakeでは、{{$1}}より新しいメッセージにアクセスすることはできません。", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "より多くの計画を表示する", + "scenes.app.channelsbar.channelsuser.new_private_discussion": "新しいプライベートディスカッション", + "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "プライベートメッセージはありません。ユーザーを招待しましょう!", + "scenes.app.channelsbar.channelsuser.private_messages": "ダイレクトメッセージ", + "scenes.app.channelsbar.channelsworkspace.channel_title": "チャンネル", + "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "お気に入り", + "scenes.app.channelsbar.channelsworkspace.create_channel": "チャネルを作成する", + "scenes.app.channelsbar.channelsworkspace.no_channel": "まだどのチャンネルにも参加していません", + "scenes.app.channelsbar.modify_channel_menu": "チャンネルを編集", + "scenes.app.channelsbar.guest_management": "ゲスト管理", + "scenes.app.channelsbar.read_sign": "既読にする", + "scenes.app.channelsbar.channel_leaving": "チャネルを離れる", + "scenes.app.channelsbar.channel_removing": "チャネルを削除", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "このフレームをクリックすると、これらのチャネルをビジネスにインポートして、整理された状態を保つことができます。", + "scenes.app.popup.appsparameters.pages.app_update": "アプリを{{$1}}更新します(アプリは{{$2}}回使用されます)。", + "scenes.app.popup.appsparameters.pages.application_title": "応用", + "scenes.app.popup.appsparameters.pages.apps_title": "アプリケーションとコネクタ", + "scenes.app.popup.appsparameters.pages.automatique_label": "自動", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "「自動」を有効にすると、このアプリケーションはこの会社の次のワークスペースに自動的に追加されます。", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "アプリケーションの公開は現在、Twakeチームによる検証を待っています。", + "scenes.app.popup.appsparameters.pages.button_force": "会社全体の力", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "タイプ '{{$1}}'およびID '{{$2}}'のイベントとパッシブ '{{$3}}'", + "scenes.app.popup.appsparameters.pages.company_label": "会社のオーナー", + "scenes.app.popup.appsparameters.pages.configuration_label": "構成", + "scenes.app.popup.appsparameters.pages.create_app_button": "アプリケーションを作成する", + "scenes.app.popup.appsparameters.pages.create_my_app": "アプリケーションを作成する", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "まだアプリを作成していません。アプリケーションまたはコネクタを作成する前に、それらがアプリケーション市場にまだ存在していないことを確認してください。", + "scenes.app.popup.appsparameters.pages.danger_zone_description": "アプリケーションを削除する", + "scenes.app.popup.appsparameters.pages.danger_zone_label": "危険地帯", + "scenes.app.popup.appsparameters.pages.description_label": "説明", + "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "会社が開発したアプリケーション", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "アプリケーションを表示する場所を定義できます。", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "ディスプレイの設定", + "scenes.app.popup.appsparameters.pages.error_check_needed": "エラーが発生しました;あなたの情報を確認してください。", + "scenes.app.popup.appsparameters.pages.error_message": "この名前はすでに別のアプリケーションで使用されています。別のものを選択してください。", + "scenes.app.popup.appsparameters.pages.error_user_code": "エラー", + "scenes.app.popup.appsparameters.pages.event_subtitle": "イベント", + "scenes.app.popup.appsparameters.pages.go_back": "戻る", + "scenes.app.popup.appsparameters.pages.publication_description": "アプリケーションの可視性を判断します。", + "scenes.app.popup.appsparameters.pages.publication_label": "出版物", + "scenes.app.popup.appsparameters.pages.publish_app_label": "アプリケーションを公開する", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "読み取り権限", + "scenes.app.popup.appsparameters.pages.remove_app": "アプリケーション{{$1}}を完全に削除します。", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "会社全体から削除する", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "ワークスペースから削除", + "scenes.app.popup.appsparameters.pages.status_tilte": "州", + "scenes.app.popup.appsparameters.pages.string_information": "この文字列はアプリケーションを識別し、メッセージコマンドで使用されます。", + "scenes.app.popup.appsparameters.pages.title_tester": "Twakecodeテスター", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "イベントレセプションのURL", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "待っています...", + "scenes.app.popup.appsparameters.pages.website_label": "Webサイト", + "scenes.app.popup.userparameter.pages.notif_content_label": "通知の内容", + "scenes.app.mainview.quick_search_placeholder": "クイック検索", + "scenes.app.popup.workspaceparameter.admin_current_status": "あなたは管理者です。", + "scenes.app.popup.workspaceparameter.manager_current_status": "あなたは会社の管理者です。", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "ワークスペースを削除する", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "ワークスペースを削除するには、ワークスペースに一人でいる必要があります。共同編集者を削除して、再試行してください。", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "このワークスペースを削除することを確認するには、以下に名前を入力して[削除]をクリックしてください。", + "scenes.app.popup.workspaceparameter.pages.enter": "入力 ", + "scenes.app.popup.workspaceparameter.pages.access_apps": "アプリケーションとコネクタにアクセスする", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "ワークスペースモデレーター", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "あなたが最後の管理者であるため、ワークスペースを離れることはできません。新しい管理者を定義するか、このワークスペースを削除/アーカイブできます。", + "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "すべてのアプリケーション", + "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "あなたの会社のアプリケーション", + "scenes.app.popup.workspaceparameter.pages.apps_research_title": "アプリケーションの検索", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "このワークスペースのアプリケーション", + "scenes.app.popup.workspaceparameter.pages.install_button": "インストール", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "このワークスペースにアプリケーションをインストールします。", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "このワークスペースにインストールされているアプリケーション{{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "会社の他の領域にインストールされているアプリケーション{{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_subtitle": "インストールされているアプリケーション", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "次のユーザーを招待しているときにエラーが発生しました。 ", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "このワークスペースの画像を編集します", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "このワークスペースにはアプリケーションがありません", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "このワークスペースを離れる", + "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "読み取りアクセス", + "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "会社全体から削除する", + "scenes.app.popup.workspaceparameter.pages.research_by": "名前とカテゴリでアプリケーションを検索する", + "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "アプリケーションの検索...", + "scenes.app.popup.workspaceparameter.pages.show_button": "画面", + "scenes.app.popup.workspaceparameter.pages.title": "ワークスペース設定", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "Webhookへのアクセス", + "scenes.app.popup.workspaceparameter.pages.weight_max_small_text": "最大サイズは5MBです。", + "scenes.apps.calendar.connectors_search_menu": "コネクタを検索...", + "scenes.apps.calendar.create_calendar_title": "カレンダーを作成する", + "scenes.apps.calendar.day_option": "日", + "scenes.apps.calendar.edit_calendar_title": "カレンダーを編集する", + "scenes.apps.calendar.export_title": "書き出す", + "scenes.apps.calendar.export_view_menu": "ビューをエクスポート...", + "scenes.apps.calendar.ics_download_menu": "ICSファイルをダウンロードする", + "scenes.apps.calendar.ics_subscription_menu": "ICSサブスクリプションリンクを取得する", + "scenes.apps.calendar.modals.advanced_options": "高度なオプション", + "scenes.apps.calendar.modals.description_placeholder": "説明", + "scenes.apps.calendar.modals.details_title": "詳細", + "scenes.apps.calendar.modals.event_adresse_placeholder": "住所", + "scenes.apps.calendar.modals.event_title_placeholder": "題名", + "scenes.apps.calendar.modals.modify_event_button": "イベントの編集", + "scenes.apps.calendar.modals.part.participants": "参加者", + "scenes.apps.calendar.modals.participants_event": "参加者", + "scenes.apps.calendar.modals.reminders": "リマインダー", + "scenes.apps.calendar.modals.remove_button": "消去", + "scenes.apps.calendar.modals.remove_event_button": "イベントを削除", + "scenes.apps.calendar.modals.remove_event_text": "イベントを削除しますか?", + "scenes.apps.calendar.modals.title_placeholder": "題名", + "scenes.apps.calendar.modify_calendar_menu": "カレンダーを編集する", + "scenes.apps.calendar.month_option": "月", + "scenes.apps.calendar.my_calendar": "私のカレンダー", + "scenes.apps.calendar.my_calendar_label": "私のカレンダー", + "scenes.apps.calendar.my_calendar_menu": "私のカレンダー", + "scenes.apps.calendar.today_menu": "今日", + "scenes.apps.calendar.week_option": "週", + "scenes.apps.calendar.workspace": "ワークスペース", + "scenes.apps.calendar.workspace_menu": "ワークスペース", + "scenes.apps.drive.add_button": "追加", + "scenes.apps.drive.message_added_file": "{{$1}}は{{$2}}を送信しました。", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}}は複数のファイルを送信しました。", + "scenes.apps.drive.message_added_file_no_name": "{{$1}}はファイルを送信しました。", + "scenes.apps.drive.choose_folder_button": "ディレクトリを選択してください", + "scenes.apps.drive.choose_file_button": "ファイルを選択", + "scenes.apps.drive.create_folder_button": "作成", + "scenes.apps.drive.download_button": "ダウンロード", + "scenes.apps.drive.open_link": "新しいウィンドウでリンクを開く", + "scenes.apps.drive.files_subtitle": "ファイル", + "scenes.apps.drive.folder_subtitle": "フォルダー", + "scenes.apps.drive.import_from_computer_menu": "コンピュータからアップロード", + "scenes.apps.drive.move_text": "動く", + "scenes.apps.drive.viewer.no_preview_message": "この種のファイルは表示できません。", + "scenes.apps.drive.viewer.open_with_button": "で開く...", + "scenes.apps.messages.input.placeholder": "メッセージを書く。 @を使用してユーザーを引用します。", + "scenes.apps.messages.input.edited": "編集済み", + "scenes.apps.messages.just_you": "あなただけに見える", + "scenes.apps.messages.message.remove_button": "消去", + "scenes.apps.messages.message.reply_button": "返事", + "scenes.apps.messages.message.save_button": "保存する", + "scenes.apps.messages.message.show_responses_button": "すべての回答を表示", + "scenes.apps.messages.message.types.first_channel_message_text": "これはチャンネルの最初のメッセージです", + "scenes.apps.messages.message.types.first_message_text": "これが最初のメッセージです", + "scenes.apps.messages.messageslist.get_writing_user": "書いています...", + "scenes.apps.messages.messageslist.go_last_message_button": "最後のメッセージに移動", + "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "新しいメッセージ", + "scenes.error_on_twake": "「ヒューストン、私たちは問題を抱えています」", + "scenes.help_us": "ただし、このエラーの修正を支援したい場合は、以下のメッセージを送信してください。 ", + "scenes.login.verifymail.alert": "私たちはあなたの電子メールをチェックしています!", + "scenes.login.verifymail.error_message": "エラーが発生しました", + "scenes.login.verifymail.signin_button": "ログイン", + "scenes.login.verifymail.success": "あなたの電子メールは正常に確認されました!", + "scenes.login.verifymail.verification_waiting": "確認を待っています...", + "scenes.apps.messages.new_thread": "新しいディスカッションを開始します", + "scenes.apps.messages.input.send_message": "メッセージを送る", + "scenes.apps.messages.input.emoji": "絵文字", + "scenes.apps.messages.input.hide_formatting": "フォーマットを非表示", + "scenes.apps.messages.input.show_formatting": "フォーマットを表示", + "scenes.tell_us": "あなたが何をしていたか教えてください:", + "scenes.apps.drive.viewer.download_desktop": "アプリでプレビューするには、Twakeデスクトップをダウンロードしてください", + "scenes.apps.tasks.my_tasks": "私のタスク", + "scenes.apps.tasks.board.place_holder": "ボード名", + "scenes.apps.tasks.board.tasks.subtask": "サブタスク", + "scenes.apps.tasks.board.tasks.add_subtask": "サブタスクを追加する", + "scenes.apps.tasks.board.tasks.use_deadline": "期限を使用する", + "scenes.apps.tasks.board.tasks.use_starttime": "開始時間を使用する", + "scenes.apps.tasks.board.starts": "を開始します", + "scenes.apps.tasks.board.ends": "のために行われる", + "scenes.app.popup.sync_calendar": "カレンダーを同期します。", + "scenes.apps.parameters.workspace_sections.workspace.logo_company": "会社のロゴ", + "scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "会社の画像を編集する ", + "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "招待をキャンセルする", + "scenes.apps.account.account.fullname": "フルネーム", + "scenes.apps.account.account.password_for_user": "ユーザーのパスワード", + "scenes.apps.account.account.send_info": "この資格情報をユーザーに送信します。", + "scenes.apps.account.message_temporary": "一時アカウントは通常のTwakeアカウントと同じように機能しますが、パスワードを作成すると、必要に応じてパスワードをリセットできます。", + "scenes.apps.account.message_user_signin": "ユーザーは、この同じ電子メールを使用していつでもサインインし、一時アカウントを通常のアカウントに変更できます。", + "scenes.app.mainview.link_expired": "このパブリックリンクは無効であるか、有効期限が切れています。", + "scenes.app.mainview.create_account": "で無料でワークスペースを作成する ", + "scenes.apps.calendar.modals.reminder_add": "リマインダーを追加する", + "scenes.apps.parameters.workspace_sections.members.invite_all": "すべてを招待する", + "scenes.app.taskpicker.select": "選択する", + "components.listmanager.filter": "フィルター", + "scenes.apps.tasks.no_connector": "コネクタなし", + "components.attachmentpicker.add_attachment": "添付ファイルを追加する", + "components.input.copied": "コピー", + "components.drive.new_versions": "新しいバージョンを追加する", + "components.drive.navigators.directory_not_found": "ディレクトリが見つかりません。", + "components.drive.right_preview.suppress_link": "リンクを抑制します", + "components.drive.right_preview.create_link": "アクセスリンクを作成する", + "components.drive.moove_here": "ここに移動", + "components.drive.modify_uslist": "ユーザーリストを変更する", + "components.tagpicker.tag_name": "タグ名", + "components.upload.drop_files": "ここにファイルをドロップします", + "components.workspace.list_manager.no_workspace": "ワークスペースなし", + "components.workspace.list_manager.add": "ワークスペースを追加する", + "components.workspace.list_manager.current_space": "現在のワークスペース", + "components.workspace.list_manager.current_company": "現在の会社", + "components.workspace.calendar.invalid": "無効", + "components.searchpopup.enter_text": "Twakeを検索するためのテキストを入力します。", + "components.searchpopup.loading": "より多くの結果をロードする", + "components.searchpopup.filter_ws": "ワークスペースをフィルタリングする", + "components.searchpopup.creation": "創造", + "components.searchpopup.update_search": "検索を更新", + "components.searchpopup.last_modif": "最終変更", + "components.searchpopup.sender": "送信者", + "components.searchpopup.mentions": "言及", + "components.searchpopup.only_pinned": "固定されたメッセージのみ", + "components.alert.confirm": "アクションを確認する", + "components.alert.confirm_click": "[OK]をクリックしてアクションを確認します。", + "components.searchpopup.tasks": "タスク", + "scenes.apps.board.archived_tasks": "アーカイブされたタスク({{$1}})", + "scenes.apps.board.active_tasks": "アクティブなタスク", + "scenes.apps.board.kanban": "かんばん", + "scenes.apps.board.display_as": "表示", + "scenes.apps.board.new_task": "+新しいタスク", + "scenes.apps.board.all_boards": "すべてのボード", + "components.userlistmanager.no_users": "ユーザーはいません。", + "scenes.apps.drive.used": "このフォルダで使用されます", + "components.reminder.notification": "通知", + "components.reminder.minutes_bef": "数分前", + "components.reminder.hours_bef": "数時間前", + "components.reminder.days_bef": "前日", + "components.reminder.weeks_bef": "数週間前", + "components.reminder.by_email": "Eメール", + "scenes.apps.calendar.reminders": "リマインダー", + "scenes.app.mainview.discussion": "議論", + "components.tagpicker.notag": "タグなし", + "scenes.apps.tasks.modals.attachments": "添付ファイル", + "components.calendar.calendarselector.from": "から", + "scenes.apps.drive.move_text2": "動く", + "components.attachmentpicker.from_computer": "お使いのデバイスから", + "components.attachmentpicker.from_twake": "Twakeドキュメントから", + "components.attachmentpicker.file": "ファイル", + "components.attachmentpicker.remove_attach": "添付ファイルを削除します", + "scenes.apps.drive.remove_attachs": "添付ファイルを削除します", + "components.drive.elements.see": "見る", + "components.drive.elements.current_name": "現在の名前: ", + "components.drive.elements.configurate_mod": "modを設定します...", + "components.drive.elements.manage_version": "バージョンを管理する", + "scenes.app.popup.createcompany.try_again": "もう一度やり直してください。", + "scenes.app.popup.workspace.edit_temp": "一時的なアカウントを編集する", + "scenes.app.popup.workspace.create_temp": "一時的なアカウントを作成する", + "scenes.apps.tasks.active_tasks": "アクティブなタスク", + "scenes.apps.drive.right_preview.versions": "バージョン", + "scenes.app.popup.appsparameters.pages.title_informations": "基本情報", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "アプリケーション管理に関する情報", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "現在のユーザーID", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "現在のワークスペースID", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "現在のグループID", + "scenes.app.mainview.channel_description": "チャネルについて説明する", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "すべてのワークスペースユーザーをこのチャネルに自動的に招待します", + "scenes.client.channelbar.channelmemberslist.title": "{{$1}}のユーザー", + "scenes.client.channelbar.channelmemberslist.loader": "もっと読み込む", + "scenes.client.channelbar.channelmemberslist.autocomplete": "ユーザーを追加または検索する", + "scenes.client.channelbar.channelmemberslist.menu.option_2": "チャネルから削除", + "components.leftbar.channel.workspaceschannels.menu.option_1": "チャネルを作成する", + "components.leftbar.channel.workspaceschannels.menu.option_2": "チャンネルに参加する", + "components.channelworkspacelist.title": "チャンネル", + "scenes.client.channelbar.workspacechannellist.autocomplete": "チャネル、ユーザー、またはダイレクトメッセージを検索する", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "新しいタブを作成する", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_edition": "名前を変更{{$1}}", + "components.connectorslistmanager.add_connectors": "コネクタを追加します", + "components.notifications.hidden_notifications_button.children": "新しいメッセージ", + "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "応用", + "scenes.client.channelbar.channelmemberslist.no_members": "このチャネルにはユーザーがいません。[ユーザーの追加]をクリックして招待できます。", + "scenes.app.channelsbar.hide_discussion_leaving.menu": "ディスカッションを非表示", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}}メールが追加されます", + "components.newversion.new_version_component.row.part_1": "古いバージョンのTwakeを実行しています", + "components.newversion.new_version_component.row.part_2": "アプリをリロードして、新機能をお楽しみください。", + "components.newversion.new_version_component.link": "リロードするには、ここをクリックしてください", + "components.newversion.new_version_modal.title": "新しいアップデートが利用可能です!", + "scenes.apps.drive.download_all_button": "すべてダウンロード", + "components.inputs.input_with_select.input.placeholder": "チャンネル名", + "components.inputs.input_with_select.select.placeholder": "セクション名", + "components.inputs.input_with_select.select.no_sections": "最初のチャンネルセクションの名前を書き始めます。", + "components.inputs.input_with_select.button.tooltip": "チャネルセクションを設定する", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}}が{{$2}}をチャンネルに追加しました", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}}説明を変更しました", + "scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}}はチャネルの名前を{{$2}}に変更しました", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}}は新しい{{$2}}タブを追加しました{{$3}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}}は{{$2}}タブ{{$3}}を削除しました", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}}は新しいコネクタを追加しました{{$2}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}}コネクタを取り外しました{{$2}}", + "scenes.client.channelbar.channelmemberslist.tag": "君は", + "components.alert.leave_private_channel.title": "チャンネルを離れてもよろしいですか?", + "components.alert.leave_private_channel.description": "誰かがあなたを招待しない限り、このプライベートチャンネルに再び参加することはできません。", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.tag": "あなたは会員ではありません", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "もっと読み込む", + "general.re_send": "再送信", + "general.verify": "確認", + "components.unverified_account.typography_text_danger": "試用期間の残り日数は{{$1}}です。トライアルアカウントは7日後にブロックされ、登録から1か月後に完全に削除されます。送信された確認メールの[アカウントを確認]ボタンをクリックすると、アカウントを確認できます。", + "components.unverified_account.verification_details": "確認の詳細をに送信しました", + "components.account_verication_status_unverified": "未確認", + "components.account_verication_status_blocked": "ロック済み", + "components.unverified_account.re_send_email": "メールが届きませんでしたか?", + "components.blocked_account.trial_period_over": "試用期間が終了しました。アカウントのロックを解除してすべての機能にアクセスするには、確認メールでアカウントを確認してください", + "components.add_mails_workspace.button": "Twakeの使用を開始します", + "services.console_services.toaster.success_verify_email": "確認リンクがメールアカウントに送信されました", + "scenes.app.popup.workspaceparameter.edit_from_console": "コンソールで見る", + "services.console_services.toaster.success_invite_emails": "{{$1}}ユーザーが正常に追加されました", + "scenes.client.channels_bar.modals.guest_management.title": "{{$1}}でゲストを管理する", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "ゲストまたは保留中のメールを検索", + "scenes.client.channels_bar.modals.guest_management.tips": "上記の入力を使用して、メールの追加または検索を開始します", + "scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "メールが送信されました", + "general.user.role.company.admin": "会社の管理者", + "general.user.role.company.guest": "ゲスト", + "general.user.deleted": "削除されたアカウント", + "components.richtexteditor.toolbar.bold": "大胆な", + "components.richtexteditor.toolbar.underline": "下線を引く", + "components.richtexteditor.toolbar.italic": "イタリック", + "components.richtexteditor.toolbar.strikethrough": "取り消し線", + "components.richtexteditor.toolbar.code": "コード", + "components.richtexteditor.toolbar.unordered-list": "箇条書き", + "components.richtexteditor.toolbar.ordered-list": "注文リスト", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "ここをクリック", + "components.emoji_picker.categories.travel_and_places": "旅行と場所", + "components.emoji_picker.categories.objects": "オブジェクト", + "components.emoji_picker.categories.symbols": "記号", + "components.emoji_picker.categories.flags": "フラグ", + "components.emoji_picker.categories.search_result": "の検索結果", + "components.emoji_picker.categories.not_found": "絵文字が見つかりません" +} diff --git a/twake/frontend/public/locales/nb_NO.json b/twake/frontend/public/locales/nb_NO.json index 20017c2596..aa184d3c84 100644 --- a/twake/frontend/public/locales/nb_NO.json +++ b/twake/frontend/public/locales/nb_NO.json @@ -91,5 +91,757 @@ "scenes.apps.calendar.event_edition.checkbox_all_day": "Hele dagen", "scenes.apps.calendar.calendar.week_btn": "Uke", "scenes.apps.drive.navigators.new_file.untitled": "Uten navn", - "scenes.apps.drive.right_preview.public_link": "Offentlig lenke" -} \ No newline at end of file + "scenes.apps.drive.right_preview.public_link": "Offentlig lenke", + "scenes.app.popup.appsparameters.pages.remove_app_button": "Slett søknad", + "scenes.apps.calendar.modals.details_title": "Detaljer", + "scenes.apps.board.new_task": "+ Ny oppgave", + "scenes.app.popup.workspace.edit_temp": "Rediger midlertidig konto", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} e-post(er) vil bli lagt til", + "components.newversion.new_version_component.row.part_1": "Du kjører en utdatert Twake-versjon", + "scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}} ga nytt navn til kanalen til {{$2}}", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} la til en ny {{$2}}-fane {{$3}}", + "scenes.client.channelbar.channelmemberslist.tag": "Du", + "scenes.app.integrations_parameters.title": "Integrasjoner", + "scenes.app.integrations_parameters.applications_table.name": "Navn", + "scenes.app.integrations_parameters.applications_table.title": "Andre integrasjoner", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "Søkeapplikasjon", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "Nettsted", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "Opprettelsesdato", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "Versjon", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "Forestilling", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "Fjern fra selskapet", + "scenes.apps.messages.input.replied_to": "svarte på ", + "scenes.join.login_first_button": "Logg inn eller opprett en konto først", + "scenes.join.join_the_team_button": "Bli med på laget", + "scenes.app.popup.appsparameters.pages.website_label": "Nettsted", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "Skriveprivilegier", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "Du kan ikke slette denne appen hvis den er publisert.", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "Det oppstod en feil under oppdatering av applikasjonen.", + "scenes.app.popup.workspaceparameter.pages.apps_research_title": "Søk i applikasjoner", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "Applikasjoner av dette arbeidsområdet", + "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "Gå tilbake til søket", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "Inviter brukere", + "scenes.app.popup.workspaceparameter.pages.collaborateurs": "Brukere", + "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "Applikasjoner utviklet av selskapet", + "scenes.app.popup.workspaceparameter.pages.company_identity_title": "Identiteten til selskapet", + "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "Integrasjoner", + "scenes.apps.calendar.day_option": "Dag", + "scenes.apps.calendar.modals.modify_event_button": "Rediger hendelse", + "scenes.apps.calendar.modals.part.participants": "Deltakere", + "scenes.apps.drive.throw_menu": "Send til søpla", + "scenes.apps.drive.trash_empty_menu": "Tøm søpla", + "scenes.help_us": "Men hvis du ønsker å hjelpe oss med å fikse denne feilen, send oss en melding nedenfor: ", + "scenes.login.verifymail.alert": "Vi sjekker e-posten din!", + "scenes.login.verifymail.error_message": "En feil oppstod", + "scenes.apps.calendar.unconfigured_tab": "Denne fanen er ikke konfigurert ennå.", + "scenes.apps.drive.trash": "Søppel", + "scenes.apps.drive.top_menu_more": "Mer", + "scenes.apps.drive.top_menu_no_items": "{{$1}} elementer", + "scenes.apps.messages.new_thread": "Start en ny diskusjon", + "scenes.apps.messages.input.send_message": "Sende melding", + "scenes.apps.messages.input.emoji": "Emoji", + "scenes.apps.messages.input.hide_formatting": "Skjul formatering", + "scenes.apps.messages.input.show_formatting": "Vis formatering", + "scenes.tell_us": "Fortell oss hva du gjorde på:", + "scenes.apps.drive.viewer.download_desktop": "Last ned Twake Desktop for å forhåndsvise i appen", + "scenes.apps.tasks.my_tasks": "Mine oppgaver", + "scenes.apps.tasks.board.place_holder": "Styrenavn", + "scenes.apps.tasks.board.tasks.subtask": "Deloppgave", + "scenes.apps.tasks.board.tasks.add_subtask": "Legg til en deloppgave", + "scenes.apps.tasks.board.tasks.use_deadline": "Bruk frist", + "scenes.apps.parameters.workspace_sections.members.invite_all": "Inviter alle", + "scenes.app.taskpicker.select": "Plukke ut", + "components.listmanager.filter": "Filter", + "scenes.apps.tasks.no_connector": "Ingen kontakt", + "scenes.apps.drive.used": "brukt i denne mappen", + "components.reminder.notification": "Melding", + "components.reminder.minutes_bef": "minutter før", + "components.reminder.hours_bef": "timer før", + "components.reminder.days_bef": "dager før", + "components.reminder.weeks_bef": "uker før", + "components.reminder.by_email": "E-post", + "components.alert.leave_private_channel.title": "Er du sikker på at du vil forlate kanalen?", + "components.alert.leave_private_channel.description": "Du vil ikke kunne bli med i denne private kanalen igjen med mindre noen inviterer deg.", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.tag": "Du er ikke medlem", + "components.emoji_picker.categories.frequently_used": "Ofte brukt", + "components.emoji_picker.categories.smileys_and_people": "Smileys og mennesker", + "components.emoji_picker.categories.animals_and_nature": "Dyr og natur", + "components.emoji_picker.categories.food_and_drink": "Mat drikke", + "components.emoji_picker.categories.activity": "Aktivitet", + "components.emoji_picker.categories.travel_and_places": "Reise og steder", + "components.emoji_picker.categories.objects": "Objekter", + "components.emoji_picker.categories.symbols": "Symboler", + "components.emoji_picker.categories.flags": "Flagg", + "components.emoji_picker.categories.search_result": "Søkeresultater", + "scenes.apps.messages.left_bar.stream.add_to_favorites": "Legg til i favoritter", + "scenes.apps.messages.left_bar.stream.remove_from_favorites": "Fjern fra favoritter", + "scenes.apps.messages.left_bar.stream.notifications": "Varsler...", + "scenes.apps.messages.left_bar.stream.notifications.all": "Enhver melding", + "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}, {{$2}} og {{$3}}", + "scenes.apps.messages.left_bar.stream.notifications.me": "Bare {{$1}}", + "scenes.apps.messages.left_bar.stream.notifications.never": "Ingenting", + "scenes.apps.parameters.workspace_sections.workspace": "Arbeidsområde", + "scenes.apps.parameters.workspace_sections.members": "Deltakere", + "scenes.apps.parameters.group_sections.workspaces": "Arbeidsområder", + "scenes.apps.parameters.group_sections.apps": "Apper", + "scenes.apps.account.title": "Kontoparametere", + "scenes.apps.account.languages.menu_title": "Språk", + "scenes.apps.account.account.firstname": "Fornavn", + "scenes.apps.account.account.lastname": "Etternavn", + "scenes.apps.account.account.username": "Brukernavn", + "scenes.apps.account.account.change_username": "Endre ditt unike brukernavn.", + "scenes.apps.account.account.emails": "E-poster", + "scenes.apps.account.account.main_email": "Hoved e-post", + "scenes.apps.account.account.email_add": "Legg til ny e-post", + "scenes.apps.account.account.email_add_modal.invalid_code": "Denne koden er ugyldig", + "scenes.apps.account.account.password": "Passord", + "scenes.apps.account.account.password_modal.old_password": "Nåværende passord", + "scenes.apps.account.account.password_modal.password": "Nytt passord", + "scenes.apps.account.account.password_modal.bad_old_password": "Gammelt passord er ikke riktig.", + "scenes.apps.account.account.password_modal.bad_password": "Passordene dine stemmer ikke overens, eller de er for korte. Vennligst skriv inn et passord med minst 8 tegn.", + "scenes.apps.account.account.logout": "Logg ut", + "scenes.apps.account.languages.text": "Endre Twake-språket.", + "scenes.apps.account.notifications.title": "Varsler", + "scenes.apps.account.notifications.keywords_subtitle": "Nøkkelord", + "scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, kode, ...", + "scenes.apps.account.notifications.disturb_option_a": "Ikke send meg push-varsler mellom ", + "scenes.apps.account.notifications.disturb_option_b": " og ", + "scenes.apps.account.notifications.disturb_option_c": " (lokal tidssone)", + "scenes.apps.account.notifications.devices_subtitle": "Enhetsvarsler", + "scenes.apps.account.notifications.devices_option_ever": "Send meg alltid push-varsler", + "scenes.apps.account.notifications.devices_option_inactive": "Send meg push-varsler når jeg er inaktiv på skrivebordet", + "scenes.apps.account.notifications.devices_option_never": "Send meg aldri push-varsler", + "scenes.apps.account.notifications.privacy_subtitle": "Personvern", + "scenes.apps.account.notifications.mail_subtitle": "E-postvarsler", + "scenes.apps.account.notifications.sound": "Lydvarsling", + "scenes.apps.parameters.group_sections.apps.badge_extension": "Utvidelse", + "scenes.apps.parameters.workspace_sections.members.members": "Brukere", + "scenes.apps.parameters.workspace_sections.members.pending": "Ventende e-poster", + "scenes.apps.parameters.workspace_sections.members.invite": "Inviter ny bruker", + "scenes.apps.parameters.workspace_sections.members.invite_btn": "Legg til bruker", + "scenes.apps.tasks.connectors_menu": "Koblinger...", + "scenes.apps.tasks.connectors_search_menu": "Søk etter koblinger...", + "scenes.apps.tasks.no_connectors_menu_text": "Du har ingen koblinger som kan kobles til en kalender.", + "scenes.apps.tasks.unconfigured_tab": "Denne fanen er ikke konfigurert ennå.", + "scenes.apps.tasks.choose_board_button": "Velg et brett", + "scenes.apps.tasks.new_board.title": "Nytt styre", + "scenes.apps.tasks.new_board.edit_title": "Rediger tavle", + "scenes.apps.tasks.task": "Oppgave", + "scenes.apps.tasks.no_tasks": "Ikke spør", + "scenes.apps.tasks.task_status.todo": "Å gjøre", + "scenes.apps.tasks.task_status.current": "Strøm", + "scenes.apps.tasks.task_status.done": "Ferdig", + "scenes.apps.tasks.task.description": "Beskrivelse", + "scenes.apps.tasks.task.assignees": "Oppdragstakere", + "scenes.apps.tasks.task.edit.dates": "Datoer", + "scenes.apps.tasks.list_modal.modify_list": "Endre listen", + "scenes.apps.tasks.list_modal.new_list": "Ny liste", + "scenes.apps.tasks.list_modal.remove": "Fjern liste og oppgaver", + "scenes.apps.tasks.list_modal.predefined_participants": "Forhåndsdefinerte deltakere", + "scenes.apps.tasks.list_modal.archive_all_tasks": "Arkiver alle oppgaver", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "Fjern arkiverte oppgaver ({{$1}})", + "scenes.login.footer.go_to_twake": "Gå til twakeapp.com", + "scenes.login.footer.branding": "Du er på en {{$1}} ({{$2}}) privat Twake-server. ", + "scenes.login.create_account.title": "Lag en ny bruker", + "scenes.login.create_account.email": "E-post", + "scenes.login.create_account.email_used": "Denne e-posten er allerede i bruk.", + "scenes.login.create_account.username": "Brukernavn", + "scenes.login.create_account.username_already_exist": "dette brukernavnet er allerede i bruk", + "scenes.login.create_account.fill_in_username": "Du må fylle inn brukernavnet ditt", + "scenes.login.create_account.fill_in_email": "Du må fylle ut e-posten din med riktig e-post", + "scenes.login.create_account.too_short_password": "Passordet ditt må inneholde minst 8 tegn.", + "scenes.login.create_account.firstname": "Fornavn", + "scenes.login.create_account.newsletter": "Motta informasjon om Twake", + "scenes.login.create_account.lastname": "Etternavn", + "scenes.login.forgot_password.title": "Glemt passord?", + "scenes.login.forgot_password.text": "Du vil motta en 9-sifret kode på e-post for å bekrefte identiteten din.", + "scenes.login.forgot_password.email_to_recover": "E-post for å gjenopprette", + "scenes.login.forgot_password.mail_doesnt_exist": "Denne e-posten eksisterer ikke", + "scenes.login.forgot_password.text2": "Du vil motta en 9-sifret kode. Vennligst skriv det inn i feltet under for å fortsette.", + "scenes.login.forgot_password.invalid_code": "Denne koden er ikke gyldig.", + "scenes.login.forgot_password.text3": "Skriv inn et nytt passord for kontoen din.", + "scenes.login.forgot_password.password": "Passord", + "scenes.login.forgot_password.password2": "Bekreft passord", + "scenes.login.forgot_password.password_dont_match": "Passordene dine stemmer ikke overens, eller de er for korte. Vennligst skriv inn et passord med minst 8 tegn.", + "scenes.login.home.title": "Logg på Twake", + "scenes.login.home.subtitle": "Glad for å se deg", + "scenes.login.home.email": "E-post", + "scenes.login.home.unable_to_connect": "Ugyldige legitimasjon", + "scenes.login.home.password": "Passord", + "scenes.login.home.login_btn": "Logg Inn", + "scenes.login.home.lost_password": "Glemt passord?", + "scenes.login.home.create_account": "Opprett en konto", + "scenes.login.create_account.password": "Passord", + "scenes.login.create_account.step_1_subtitle": "Det kunne ikke vært enklere – vi trenger bare litt informasjon.", + "scenes.login.create_account.step_2_subtitle_a": "Legg til hele navnet ditt slik at andre brukere kan gjenkjenne deg.", + "scenes.login.create_account.step_2_subtitle_b": "Telefonnummeret ditt forblir privat.", + "scenes.login.create_account.step_3_mail_sent": "Vi har sendt deg en aktiveringslenke på e-post.", + "scenes.login.create_account.step_3_subtitle": "Siste trinn – vi må bekrefte at du ikke er en robot!", + "scenes.app.workspaces.create_company.company_name.placeholder": "Selskapsnavn", + "scenes.app.workspaces.create_company.company_name.title_1": "Å begynne,", + "scenes.app.workspaces.create_company.company_name.title_2": "angi navnet på bedriften din.", + "scenes.app.workspaces.create_company.default_workspace_name": "Hoved", + "scenes.app.workspaces.create_company.importations.title_1": "Jobber du allerede med digitale verktøy? Importer eller integrer verktøyene dine nå!", + "scenes.app.workspaces.create_company.importations.title_2": "Ingen grunn til bekymring, du kan gjøre dette senere!", + "scenes.app.workspaces.create_company.invitations.title_2": "Legg til brukere i teamet ditt.", + "scenes.app.workspaces.create_company.title": "Opprett firmaet mitt", + "scenes.app.workspaces.welcome_page.add_secondary_emails": "Legg til en sekundær e-post", + "scenes.app.workspaces.welcome_page.added_to_company": "Du er invitert til ", + "scenes.app.workspaces.welcome_page.create_my_company": "Opprett firmaet mitt", + "scenes.app.workspaces.welcome_page.lets_go": "La oss gå!", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "Ble du invitert med en annen e-postadresse?", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "Å, vel... Det ser ut til at ingen har invitert deg til en arbeidsplass ennå.", + "scenes.app.workspaces.welcome_page.ready_to_work": "Du er klar til å jobbe nå.", + "scenes.app.workspaces.welcome_page.see_you_soon": "Ser deg snart!", + "scenes.app.workspaces.welcome_page.try_again": "Prøv igjen", + "scenes.app.workspaces.welcome_page.twake_team": "Twake", + "scenes.app.workspaces.welcome_page.welcome_header": "Velkommen til Twake!", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Du kan koble flere e-postadresser til kontoen din; kun én adresse vil bli brukt til å sende deg varsler.", + "scenes.app.workspaces.welcome_page.main_mail_title": "Hovedadresse", + "scenes.app.workspaces.welcome_page.other_mail_title": "Sekundære adresser", + "scenes.app.workspaces.welcome_page.add_new_email": "Legg til en e-post", + "scenes.app.workspaces.welcome_page.code_verification": "Bekreftelseskode", + "scenes.app.workspaces.welcome_page.new_email": "Legg til en sekundær e-post", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "Vi sendte deg en bekreftelseskode via {{$1}}", + "scenes.app.workspaces.welcome_page.done": "jeg er ferdig", + "scenes.login.forgot_password.finished": "Passordet ditt ble oppdatert.", + "scenes.apps.account.account.description_main": "Hovedadressen din er der Twake sender varslene dine. Dine sekundære adresser lar deg automatisk inviteres til arbeidsområdene som bruker dem.", + "scenes.apps.account.account.emails.description": "Administrer de forskjellige e-postadressene dine.", + "scenes.apps.account.account.make_main": "Sett hoved", + "scenes.apps.account.account.password.description": "Bytt passord.", + "scenes.apps.account.identity": "Identitet", + "scenes.apps.account.identity.description": "Endre fornavn, etternavn og profilbilde synlig for andre Twake-brukere.", + "scenes.apps.account.preference": "Preferanser", + "scenes.apps.account.thumbnail.max_weight": "Maksimal størrelse 5 MB", + "scenes.apps.account.account.email_add_modal.confirm": "Bekreft denne e-posten", + "app.name.twake_calendar": "Kalender", + "app.name.twake_drive": "Dokumenter", + "app.name.twake_tasks": "Oppgaver", + "components.calendar.repetition.everyday": "Daglig", + "components.calendar.repetition.does_not_repeat": "Gjentas ikke", + "components.calendar.repetition.weekly_on": "Ukentlig på {{$1}}", + "components.calendar.repetition.monthly_on": "Månedlig på {{$1}} {{$2}}", + "components.calendar.repetition.monthly_on_day": "Månedlig på dag {{$1}}", + "components.calendar.repetition.annually_on": "Årlig på {{$1}}", + "components.calendar.repetition.every_weekday": "Hver ukedag (man-fre)", + "components.calendar.repetition.custom": "Tilpasset...", + "components.calendar.repetition.repeat": "Gjenta hver", + "components.calendar.repetition.ends": "Slutter", + "components.calendar.repetition.never": "Aldri", + "components.calendar.repetition.after": "Etter", + "components.calendar.repetition.days": "dager)", + "components.calendar.repetition.weeks": "uke(r)", + "components.calendar.repetition.months": "måneder)", + "components.calendar.repetition.years": "år", + "components.calendar.repetition.custom_recurrence": "Tilpasset gjentakelse", + "components.calendar.repetition.occurrence": "Forekomst(er)", + "components.calendar.repetition.repeat_on": "Gjenta på", + "scenes.app.channelsbar.currentuser.add_apps": "Søk i applikasjoner", + "scenes.app.channelsbar.currentuser.change_my_status": "Endre statusen min", + "scenes.app.channelsbar.currentuser.collaborateurs": "Brukere", + "scenes.app.channelsbar.currentuser.create_workspace_page": "Lag et arbeidsområde", + "scenes.app.channelsbar.currentuser.invited_status": "Du er en gjest.", + "scenes.app.channelsbar.currentuser.title": "Kontoinnstillinger", + "scenes.app.channelsbar.currentuser.workspace_info": "Du er i arbeidsområdet {{$1}} fra gruppen {{$2}}", + "scenes.app.channelsbar.currentuser.workspace_parameters": "Arbeidsområdeinnstillinger", + "scenes.app.channelsbar.currentuser.logout": "Logg ut", + "scenes.app.channelsbar.currentuser.update": "Oppdater", + "scenes.app.channelsbar.currentuser.disable_notifications": "Deaktiver", + "scenes.app.channelsbar.currentuser.disabling_notifications": "Deaktiver i 1 time", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "Deaktiver til kl. 09.00 i morgen", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "Aktiver på nytt", + "scenes.app.channelsbar.currentuser.user_parameter": "Varslingsinnstillinger", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "Du kan importere disse kanalene til virksomheten din for å holde deg organisert ved å klikke på denne rammen.", + "scenes.apps.drive.viewer.edit_with_button": "Rediger med {{$1}}", + "scenes.apps.drive.viewer.loading_preview_message": "Laster inn...", + "scenes.apps.drive.viewer.no_preview_message": "Kan ikke se denne typen fil.", + "scenes.apps.drive.viewer.open_with_button": "Åpne med...", + "scenes.apps.messages.input.placeholder": "Skrive en melding. Bruk @ for å sitere en bruker.", + "scenes.apps.messages.input.edited": "Redigert", + "scenes.apps.messages.just_you": "Bare synlig for deg", + "scenes.apps.messages.message.new_messages_bar": "Nye meldinger", + "scenes.apps.messages.message.cancel_button": "Avbryt", + "scenes.apps.messages.message.modify_button": "Redigere", + "scenes.apps.messages.message.pin_button": "Fest melding", + "scenes.apps.messages.message.unpin_button": "Løsne melding", + "scenes.apps.messages.message.copy_link": "Kopier lenke til melding", + "scenes.apps.messages.message.pinned": "Festet", + "scenes.apps.messages.message.remove_button": "Slett", + "scenes.apps.messages.message.reply_button": "Svare", + "scenes.apps.messages.message.save_button": "Lagre", + "scenes.apps.messages.message.show_button": "Vise", + "scenes.apps.messages.message.show_responses_button": "Se alle svarene", + "scenes.apps.messages.message.types.first_channel_message_text": "Dette er kanalens første melding", + "scenes.apps.messages.message.types.first_message_text": "Dette er den første meldingen", + "scenes.apps.messages.messageslist.get_writing_user": "skriver...", + "scenes.apps.messages.messageslist.get_writing_users": "skriver...", + "components.workspace.list_manager.all": "Alle", + "general.more": "Mer", + "scenes.apps.board.archived_tasks": "Arkiverte oppgaver ({{$1}})", + "scenes.apps.board.active_tasks": "Aktive oppgaver", + "scenes.apps.board.kanban": "Kanban", + "scenes.apps.board.display_as": "Vis som", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} fjernet {{$2}}-fanen {{$3}}", + "components.locked_features.locked_only_office_popup.text": "Huff!! Det virker som du vil redigere filen fra Twake. Det kan være lurt å vurdere å oppgradere planen din hvis du vil samarbeide rundt kontorfiler. Utforsk prisalternativene våre og velg det beste alternativet for teamsamarbeidsbehovene dine.", + "general.resume": "Gjenoppta", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "Rediger bildet av dette arbeidsområdet", + "scenes.app.popup.workspaceparameter.pages.research_by": "Søk etter applikasjoner etter navn og kategorier", + "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "Søk i apper...", + "scenes.app.popup.workspaceparameter.pages.show_button": "Vise", + "scenes.app.popup.workspaceparameter.pages.title": "Arbeidsområdeinnstillinger", + "scenes.apps.calendar.modals.description_placeholder": "Beskrivelse", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Invitasjonslenke til arbeidsområdet", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Ny lenke generert", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Kopiert til utklippstavlen", + "scenes.app.popup.adduser.magiclinks.action_copy": "Kopiere", + "scenes.app.popup.adduser.magiclinks.action_generate": "generere", + "scenes.app.popup.workspace.create_temp": "Opprett en midlertidig konto", + "scenes.apps.tasks.active_tasks": "aktive oppgaver", + "scenes.apps.drive.right_preview.versions": "Versjoner", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Administrer applikasjonene og koblingene dine.", + "scenes.app.popup.appsparameters.pages.icon": "Ikon", + "scenes.app.channelsbar.hide_discussion_leaving.menu": "Skjul diskusjon", + "general.pause": "Pause", + "scenes.app.integrations_parameters.company_application_popup.tag": "Installert", + "scenes.app.integrations_parameters.company_application_popup.btn": "Installere", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "Informasjon", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "Beskrivelse", + "scenes.app.integrations_parameters.company_applications_table.name": "Navn", + "scenes.app.integrations_parameters.company_applications_table.title": "Installert i din bedrift", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "Slettet {{$1}} fra bedriften din", + "scenes.join.loading": "Laster inn …", + "scenes.join.wrong_link_title": "Denne lenken er ikke lenger tilgjengelig", + "scenes.join.wrong_link_description": "Be personen som inviterte deg til å bli med i dette selskapet om en ny lenke eller opprette ditt eget selskap", + "scenes.join.create_the_company_button": "Opprett selskapet", + "scenes.join.join_workspace_from_company": "Bli med {{$1}} fra {{$2}}!", + "scenes.join.twake_description": "Twake er et digitalt arbeidsområde med åpen kildekode bygget for å forbedre teamets produktivitet", + "general.unarchive": "Avarkiver", + "scenes.apps.calendar.event_view.article_until": "til", + "scenes.apps.messages.left_bar.stream_modal.placeholder_name": "Navn", + "scenes.apps.tasks.boards": "Styrer", + "general.open": "Åpen", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "Gå til dokumentasjonen for å generere konfigurasjonen i JSON-format.", + "scenes.app.popup.appsparameters.pages.loading": "Laster inn...", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "Passive data som vil bli sendt i neste hendelse", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "Venter...", + "scenes.app.popup.workspaceparameter.pages.logo_subtitle": "Logo", + "scenes.app.popup.workspaceparameter.pages.name_description": "Endre navnet på dette arbeidsområdet", + "scenes.app.popup.workspaceparameter.pages.name_label": "Navn på arbeidsområdet", + "scenes.app.popup.workspaceparameter.pages.no_access": "Ingen adgang.", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "Du har ingen applikasjoner i dette arbeidsområdet", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "Forlat dette arbeidsområdet", + "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "Lesetilgang", + "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "Fjern fra hele selskapet", + "scenes.apps.calendar.modals.event_adresse_placeholder": "Adresse", + "scenes.apps.calendar.modals.event_description_placeholder": "Beskrivelse", + "scenes.apps.calendar.modals.event_title_placeholder": "Tittel", + "scenes.apps.drive.no_file_alert": "Du har ingen programmer som lar deg lage en fil.", + "scenes.apps.drive.no_storage_app_alert": "Du har ingen applikasjoner som lar deg legge til ekstern lagring.", + "scenes.apps.drive.remove_definitely_menu": "Slett permanent", + "scenes.apps.drive.restore_menu": "Restaurere", + "scenes.error_on_twake": "\"Houston vi har et problem\"", + "scenes.app.workspaces.components.skip": "Hopp over", + "scenes.client.channelbar.channelmemberslist.menu.option_2": "Fjern fra kanalen", + "components.leftbar.channel.workspaceschannels.menu.option_1": "Lag en kanal", + "components.leftbar.channel.workspaceschannels.menu.option_2": "Bli med i en kanal", + "components.upload.drop_files.toaster.error": "Du kan ikke laste opp flere enn {{$1}}-filer", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "Lagt til {{$1}} i bedriften din", + "scenes.apps.account.account.menu_title": "Regnskap", + "components.calendar.repetition.on": "På", + "scenes.app.workspaces.create_company.group_data.title": "Vi skal være raske - vi trenger bare litt statistisk informasjon.", + "scenes.apps.drive.new_file_menu": "Ny fil", + "scenes.apps.drive.new_file_title": "Ny fil", + "scenes.apps.drive.new_external_storage": "Ny ekstern lagring", + "scenes.apps.drive.new_folder_title": "Ny mappe", + "scenes.apps.drive.unconfigured_tab": "Denne fanen er ikke konfigurert ennå.", + "scenes.apps.messages.messageslist.go_last_message_button": "Gå til siste melding", + "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "Nye meldinger", + "scenes.login.verifymail.signin_button": "Logg Inn", + "scenes.login.verifymail.success": "E-posten din ble bekreftet!", + "scenes.login.verifymail.verification_waiting": "Venter på bekreftelse...", + "scenes.no_panic": "Ikke få panikk! Bare last inn denne siden på nytt for å fikse Twake.", + "services.apps.calendar.deadline_icon": "Frist", + "services.apps.calendar.event_icon": "Begivenhet", + "services.apps.calendar.move_icon": "Bevege seg", + "services.apps.calendar.reminder_icon": "Påminnelse", + "services.apps.messages.no_app": "Denne applikasjonen eksisterer ikke.", + "services.apps.messages.no_command_possible": "Vi kan ikke utføre kommandoen '{{$1}}' fordi '{{$2}}' ikke eksisterer eller ikke tillater å lage kommandoer.", + "services.user.notification_parameters_update_alert": "Varslingsinnstillingene er oppdatert.", + "services.user.update_password_alert": "Passordet ditt er oppdatert.", + "scenes.apps.tasks.board.tasks.use_starttime": "Bruk starttid", + "scenes.apps.tasks.board.tasks.in_list": "På listen", + "scenes.apps.tasks.board.starts": "Starter", + "scenes.apps.tasks.board.ends": "Skal gjøres for", + "scenes.apps.tasks.board.list_name": "Liste navn", + "scenes.app.popup.sync_calendar": "Synkroniser kalenderne dine.", + "scenes.apps.parameters.workspace_sections.workspace.logo_company": "Logoen til selskapet", + "scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "Rediger firmabilde ", + "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "Avbryt invitasjonen", + "scenes.apps.account.account.fullname": "Fullt navn", + "login.email_login": "E-post/pålogging", + "scenes.apps.account.account.password_for_user": "Passord for brukeren din", + "scenes.apps.account.account.send_info": "Send denne legitimasjonsinformasjonen til brukeren din.", + "scenes.apps.account.account.save": "Lagre konto", + "scenes.apps.account.message_temporary": "En midlertidig konto fungerer som en vanlig Twake-konto, men du oppretter passordet og du vil kunne tilbakestille det om nødvendig.", + "scenes.apps.account.message_user_signin": "Brukeren din kan når som helst logge på med den samme e-posten og endre den midlertidige kontoen til en vanlig konto.", + "scenes.app.mainview.link_expired": "Denne offentlige lenken er ugyldig eller har utløpt.", + "scenes.app.mainview.create_account": "Lag arbeidsområdet ditt gratis på ", + "scenes.apps.calendar.modals.reminder_add": "Legg til en påminnelse", + "components.attachmentpicker.add_attachment": "Legg til vedlegg", + "components.input.copied": "Kopiert", + "components.drive.new_versions": "Legg til en ny versjon", + "components.drive.navigators.directory_not_found": "Katalog ikke funnet.", + "components.drive.right_preview.suppress_link": "Undertrykk koblingen", + "components.drive.right_preview.create_link": "Opprett en tilgangslenke", + "components.drive.moove_here": "Flytt her", + "components.drive.modify_uslist": "Endre brukerliste", + "components.tagpicker.tag_name": "Tag navn", + "components.upload.drop_files": "Slipp filene dine her", + "components.workspace.list_manager.no_workspace": "Ingen arbeidsplass", + "components.workspace.list_manager.add": "Legg til arbeidsområder", + "components.workspace.list_manager.current_space": "Nåværende arbeidsområde", + "components.workspace.list_manager.current_company": "Nåværende selskap", + "components.workspace.calendar.invalid": "Ugyldig", + "components.searchpopup.enter_text": "Skriv inn litt tekst for å søke etter Twake.", + "components.searchpopup.loading": "Laster inn flere resultater", + "components.searchpopup.filter_ws": "Filtrer arbeidsområder", + "components.searchpopup.tags": "Tagger", + "components.searchpopup.size": "Størrelse", + "components.searchpopup.creation": "Opprettelse", + "components.searchpopup.update_search": "Oppdater søket", + "components.searchpopup.last_modif": "Siste modifikasjon", + "components.searchpopup.sender": "Avsender", + "components.searchpopup.mentions": "Omtaler", + "components.searchpopup.only_pinned": "Bare festede meldinger", + "components.alert.confirm": "Bekreft handlingen din", + "components.alert.confirm_click": "Bekreft handlingen ved å klikke på OK.", + "components.searchpopup.tasks": "Oppgaver", + "scenes.app.mainview.advanced_search_placeholder": "Avansert søk", + "components.searchpopup.hide_filters": "skjule filtre", + "components.searchpopup.show_filters": "vis filtre", + "components.searchpopup.load_more": "Last inn flere resultater", + "scenes.apps.board.all_boards": "Alle brett", + "components.userlistmanager.no_users": "Ingen brukere.", + "scenes.apps.calendar.reminders": "påminnelse(r)", + "scenes.apps.calendar.video_link": "Klikk for å åpne lenken", + "scenes.app.mainview.discussion": "Diskusjon", + "components.tagpicker.notag": "Ingen tag", + "scenes.apps.tasks.modals.attachments": "Vedlegg", + "components.calendar.calendarselector.from": "Fra", + "scenes.apps.drive.move_text2": "Bevege seg", + "components.attachmentpicker.from_computer": "Fra enheten din", + "components.attachmentpicker.from_twake": "Fra Twake Documents", + "components.attachmentpicker.file": "Fil", + "components.attachmentpicker.remove_attach": "Fjern vedlegg", + "scenes.apps.drive.remove_attachs": "Fjern vedlegg", + "components.drive.elements.see": "Se", + "components.drive.elements.current_name": "Nåværende navn: ", + "scenes.apps.drive.right_preview.public": "Offentlig tilgang", + "components.drive.elements.configurate_mod": "Konfigurer moden...", + "components.drive.elements.manage_version": "Administrer versjoner", + "scenes.app.popup.createcompany.try_again": "Vær så snill, prøv på nytt.", + "scenes.app.popup.appsparameters.pages.title_informations": "Grunnleggende informasjon", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "Informasjon knyttet til applikasjonsadministrasjon", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "Gjeldende bruker-ID", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "Gjeldende arbeidsområde-ID", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "Gjeldende gruppe-id", + "scenes.app.mainview.channel_description": "Beskriv kanalen", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "Inviter automatisk alle arbeidsområdebrukere til denne kanalen", + "scenes.client.channelbar.channelmemberslist.title": "Brukere i {{$1}}", + "scenes.client.channelbar.channelmemberslist.loader": "Last mer", + "scenes.client.channelbar.channelmemberslist.autocomplete": "Legg til eller søk bruker", + "components.channelworkspacelist.title": "Kanaler", + "scenes.client.channelbar.workspacechannellist.autocomplete": "Søk etter kanal, bruker eller direktemeldinger", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "Opprett en ny fane", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_edition": "Gi nytt navn til {{$1}}", + "components.connectorslistmanager.add_connectors": "Legg til kontakter", + "components.notifications.hidden_notifications_button.children": "Nye meldinger", + "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "applikasjon", + "scenes.client.channelbar.channelmemberslist.no_members": "Det er ingen bruker i denne kanalen, du kan invitere dem ved å klikke på Legg til brukere.", + "components.newversion.new_version_component.row.part_2": "vi foreslår at du laster appen på nytt og nyter de nye funksjonene våre!", + "components.newversion.new_version_component.link": "Klikk her for å laste inn på nytt", + "components.newversion.new_version_modal.title": "Ny oppdatering tilgjengelig !", + "scenes.apps.drive.download_all_button": "Last ned alle", + "components.inputs.input_with_select.input.placeholder": "Kanalnavn", + "components.inputs.input_with_select.select.placeholder": "Seksjonsnavn", + "components.inputs.input_with_select.select.no_sections": "Begynn å skrive navnet på din første kanalseksjon.", + "components.inputs.input_with_select.button.tooltip": "Angi en kanalseksjon", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}} la til {{$2}} til kanalen", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}} fjernet {{$2}} fra kanalen", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}} endret beskrivelsen", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} la til en ny kobling {{$2}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} fjernet en kobling {{$2}}", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "Last mer", + "general.re_send": "Send på nytt", + "general.verify": "Bekrefte", + "components.unverified_account.typography_text_danger": "Du har {{$1}} dag(er) igjen av prøveperioden. Prøvekonto vil bli blokkert etter 7 dager og slettet permanent etter 1 måned etter registrering. Du kan bekrefte kontoen din ved å klikke på \"Bekreft kontoen min\"-knappen i bekreftelses-e-posten vi sendte deg.", + "components.unverified_account.verification_details": "Vi har sendt bekreftelsesdetaljer til", + "components.account_verification_status_sentence": "Kontostatusen din er: {{$1}}", + "components.account_verication_status_unverified": "Ubekreftet", + "components.account_verication_status_blocked": "Låst", + "components.unverified_account.re_send_email": "Har du ikke mottatt e-posten?", + "components.blocked_account.trial_period_over": "Prøveperioden din er over. For å låse opp kontoen din og få tilgang til alle funksjoner, vennligst bekreft kontoen din via e-postbekreftelse", + "components.add_mails_workspace.button": "Begynn å bruke Twake", + "components.add_mails_workspace.title_1": "Legg til noen brukere", + "components.add_mails_workspace.title_2": "Twake er et teamsamarbeidsverktøy, så inviter noen brukere til å teste et arbeidsområde vi har laget for deg.", + "components.add_mails_workspace.text_area_placeholder": "Skriv inn e-poster til brukerne dine*", + "components.verify_mail.title_1": "Gratulerer", + "components.verify_mail.title_2": "Du er en offisiell Twake-bruker nå!", + "components.verify_mail.button": "Legg til bruker", + "components.verify_mail.text": "Først av alt må du bekrefte e-postadressen din. Vi har sendt en bekreftelseslenke til", + "components.verify_mail.paragraph": "Du kan gjøre det senere hvis du vil, men ubekreftede kontoer har bare tilgang til en begrenset versjon av Twake", + "services.console_services.toaster.add_emails_error": "Feil ved å legge til e-post(er)", + "services.console_services.toaster.add_email_error_message": "Feil under tillegging av {{$1}}", + "services.console_services.toaster.success_verify_email": "En bekreftelseslenke er sendt til e-postkontoen din", + "scenes.app.popup.workspaceparameter.edit_from_console": "Se i konsoll", + "services.console_services.toaster.success_invite_emails": "Vellykket lagt til {{$1}} bruker(e)", + "scenes.client.channels_bar.modals.guest_management.title": "Administrer gjester i {{$1}}", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "Søk etter gjester eller ventende e-poster", + "scenes.client.channels_bar.modals.guest_management.tips": "Begynn å legge til eller søke etter e-post ved å bruke inndataene ovenfor", + "scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "Mail sendt", + "general.user.role.company.admin": "Bedriftsadministrator", + "general.user.role.company.member": "Medlem", + "general.user.role.company.guest": "Gjest", + "general.user.deleted": "Slettet konto", + "components.richtexteditor.toolbar.bold": "Modig", + "components.richtexteditor.toolbar.underline": "Understrek", + "components.richtexteditor.toolbar.italic": "Kursiv", + "components.richtexteditor.toolbar.strikethrough": "Gjennomstreking", + "components.richtexteditor.toolbar.code": "Kode", + "components.richtexteditor.toolbar.unordered-list": "Punktliste", + "components.richtexteditor.toolbar.ordered-list": "Bestilt liste", + "components.richtexteditor.toolbar.blockquote": "Blockquote", + "components.richtexteditor.toolbar.code-block": "Kodeblokk", + "components.locked_features.locked_history_banner.title": "Du har akkurat nådd meldingsgrensen", + "components.locked_features.locked_history_banner.description": "Din bedrift har mange meldinger! Oppgrader nå for å få tilgang til hele meldingsloggen din.", + "components.locked_features.locked_history_banner.button": "Lære mer", + "components.locked_features.locked_guests_popup.title": "Gjestefunksjonen er låst", + "components.locked_features.locked_guests_popup.subtitle": "Denne funksjonen er ikke tilgjengelig i Twake gratisversjonen", + "components.locked_features.locked_guests_popup.description": "Huff!! Det virker som du ønsker å invitere eksterne brukere til arbeidsområdet ditt. Det kan være lurt å vurdere å oppgradere planen din hvis du ønsker å samarbeide med gjester og eksterne partnere. Utforsk prisalternativene våre og velg det beste alternativet for teamsamarbeidsbehovene dine.", + "components.locked_features.locked_guests_popup.learn_more_button": "Lære mer", + "components.locked_features.locked_guests_popup.skip_for_now_button": "Hopp over for nå", + "components.locked_features.locked_guests_popup.or": "Eller", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "Det er et problem med firmaabonnementet ditt. Vennligst ta en titt på din", + "components.on_boarding.company_billing_banner.guest_or_member_text": "Det er et problem med firmaabonnementet ditt. Ta kontakt med eieren eller administratoren av selskapet!", + "components.on_boarding.company_billing_banner.link": "selskapets abonnementsplan", + "components.on_boarding.popups.blocked_company.title": "Firmaet ditt er låst på grunn av et betalingsproblem", + "components.on_boarding.popups.blocked_company.description": "Ditt abonnement på Twake har utløpt. Ta kontakt med eieren eller administratoren av firmaet ditt for å fornye det og være i stand til å kommunisere med teamet ditt igjen!", + "components.on_boarding.popups.blocked_company.learn_more_text": "Vil du lære mer om bedriftens abonnementsplan?", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Klikk her", + "components.on_boarding.popups.blocked_company.or": "Eller", + "components.on_boarding.popups.blocked_company.company_selector": "Bytt til et annet selskap", + "scenes.apps.tasks.select_user_button": "Se oppgaver for en annen bruker", + "scenes.apps.tasks.select_user": "Søk bruker", + "scenes.apps.messages.input.attach_file.from_computer": "Fra datamaskinen", + "scenes.app.popup.workspaceparameter.pages.table_title": "Navn", + "scenes.client.main_view.main_header.search_input": "Søk", + "scenes.apps.drive.new_link_title": "Ny lenke", + "scenes.apps.drive.default_link_name": "Uten navn", + "components.emoji_picker.input_search_placeholder": "Søk", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}} - Du kan ikke legge til flere enn {{$2}} filer i en melding", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "Du slettet denne meldingen", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} slettet meldingen hans", + "components.member.user_parts.and_more_user_text": " og {{$1}} flere brukere", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "Opprett en privat kanal", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " i stedet", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "Du kan ikke legge til mer enn 10 brukere", + "general.uploading": "Laster opp", + "components.emoji_picker.categories.not_found": "Ingen emoji funnet", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "Rolle", + "general.email": "E-post", + "components.locked_features.locked_workspace_popup.title": "Du kan ikke opprette flere arbeidsområder", + "components.locked_features.locked_workspace_popup.subtitle": "I gratisversjonen kan du bare ha ett arbeidsområde i bedriften din.", + "components.locked_features.locked_workspace_popup.text": "Huff!! Ønsker du å skape et nytt arbeidsområde i din bedrift? Det kan være lurt å vurdere å oppgradere planen din. Utforsk våre prisalternativer og velg det beste valget for teamsamarbeidsbehovene dine.", + "components.locked_features.locked_only_office_popup.title": "Du kan ikke redigere denne filen", + "components.locked_features.locked_only_office_popup.subtitle": "I gratisversjonen kan du ikke bruke onlyoffice.", + "components.locked_features.locked_drive_popup.title": "Du har akkurat nådd kjøregrensen", + "components.locked_features.locked_drive_popup.subtitle": "I gratisversjonen kan du kun lagre 6 GB.", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Meldingsnummer", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "På gratisversjonen av Twake kan du ikke få tilgang til mer enn de {{$1}} nyere meldingene.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Vis flere planer", + "scenes.app.channelsbar.channelsuser.new_private_discussion": "Ny privat diskusjon", + "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Ingen private meldinger. Inviter brukere!", + "scenes.app.channelsbar.channelsuser.private_messages": "Direktemeldinger", + "scenes.app.channelsbar.channelsworkspace.channel_title": "KANALER", + "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "FAVORITER", + "scenes.app.channelsbar.channelsworkspace.create_channel": "Lag en kanal", + "scenes.app.channelsbar.channelsworkspace.no_channel": "Du har ikke blitt med i noen kanal ennå", + "scenes.app.channelsbar.modify_channel_menu": "Rediger kanal", + "scenes.app.channelsbar.guest_management": "Gjesteledelse", + "scenes.app.channelsbar.read_sign": "Merk som lest", + "scenes.app.channelsbar.unread_sign": "Merk som ulest", + "scenes.app.channelsbar.channel_leaving": "Forlat kanalen", + "scenes.app.channelsbar.channel_removing": "Slett kanal", + "scenes.app.channelsbar.company_invitation_alert_title": "Du inviteres til selskapet ", + "scenes.app.channelsbar.initial_instructions_tutorial": "Velg et fornavn, et navn og et profilbilde.", + "scenes.app.channelsbar.installation_desktop_tutorial": "Installer skrivebordsapplikasjonen", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "Inviter brukere til arbeidsområdet ditt.", + "scenes.app.channelsbar.public_channel_label": "Offentlig", + "scenes.app.channelsbar.private_channel_label": "Privat", + "scenes.app.channelsbar.sending_message_instruction": "Send din første melding i en diskusjon", + "scenes.app.channelsbar.tutorial_alert": "Vil du aldri vise denne rammen igjen?", + "scenes.app.channelsbar.welcome": "Velkommen til Twake", + "scenes.app.channelsbar.welcoming_message_subtitle": "Bli en Twake-proff med bare noen få klikk!", + "scenes.app.mainview.instruction_current_tab": "Start med å velge en kanal til venstre.", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Du har ingen kobling som kan koble til en kanal.", + "scenes.app.mainview.tabs.rename": "Gi nytt navn", + "scenes.app.mainview.tabs.searching_connectors": "Søk etter koblinger...", + "scenes.app.popup.adduser.adresses_message": "Vennligst skill adressene med komma eller mellomrom. Husk at Twake kan begrense antall invitasjoner basert på abonnementet ditt.", + "scenes.app.popup.appsparameters.pages._app_identity": "Søknadens identitet", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Test utseendet til Twacode-meldingene dine", + "scenes.app.popup.appsparameters.pages.alert_published_app": "Søknaden din er publisert, du kan ikke redigere den.", + "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Bruk * i utviklingen for å tillate alle IP-adresser.", + "scenes.app.popup.appsparameters.pages.amazing_app_name": "Min fantastiske app", + "scenes.app.popup.appsparameters.pages.api_data_description": "Nyttige data for Twake API.", + "scenes.app.popup.appsparameters.pages.api_parameters_label": "API-innstillinger", + "scenes.app.popup.appsparameters.pages.app_name_label": "Programnavn", + "scenes.app.popup.appsparameters.pages.app_modification_right": "Alle ledere av dette selskapet vil kunne redigere denne applikasjonen.", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "Definer hva applikasjonen din kan redigere og lese.", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "Applikasjonsrettigheter", + "scenes.app.popup.appsparameters.pages.app_update": "Oppdater appen {{$1}} (appen brukes {{$2}} ganger.)", + "scenes.app.popup.appsparameters.pages.application_title": "applikasjon", + "scenes.app.popup.appsparameters.pages.apps_title": "Dine applikasjoner og koblinger", + "scenes.app.popup.appsparameters.pages.automatique_label": "Automatisk", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "Hvis du aktiverer 'Automatisk', vil denne applikasjonen automatisk bli lagt til de neste arbeidsområdene til dette selskapet.", + "scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Tillatte IP-adresser", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "Publiseringen av søknaden din venter for øyeblikket på validering av Twake-teamet.", + "scenes.app.popup.appsparameters.pages.button_force": "Kraft i hele selskapet", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "Hendelse av typen «{{$1}}» og id «{{$2}}» med passive «{{$3}}»", + "scenes.app.popup.appsparameters.pages.company_label": "Bedriftseier", + "scenes.app.popup.appsparameters.pages.configuration_label": "Konfigurasjon", + "scenes.app.popup.appsparameters.pages.create_app_button": "Opprett en applikasjon", + "scenes.app.popup.appsparameters.pages.create_my_app": "Opprett søknaden min", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "Du har ikke opprettet en app ennå. Før du oppretter en applikasjon eller kobling, sørg for at den ikke allerede eksisterer i vårt applikasjonsmarked.", + "scenes.app.popup.appsparameters.pages.danger_zone_description": "Slett søknad", + "scenes.app.popup.appsparameters.pages.danger_zone_label": "Farlig sone", + "scenes.app.popup.appsparameters.pages.description_label": "Beskrivelse", + "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "Applikasjoner utviklet av selskapet", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "Lar deg definere hvor applikasjonen din skal være synlig.", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "Skjerminnstillinger", + "scenes.app.popup.appsparameters.pages.error_check_needed": "Det har oppstått en feil; sjekk informasjonen din.", + "scenes.app.popup.appsparameters.pages.error_message": "Dette navnet er allerede brukt av en annen applikasjon; vennligst velg en annen.", + "scenes.app.popup.appsparameters.pages.error_user_code": "feil", + "scenes.app.popup.appsparameters.pages.event_subtitle": "arrangementer", + "scenes.app.popup.appsparameters.pages.filter_information": "Dette filteret begrenser bruken av API-nøkkelen til kun servere i koblingen din.", + "scenes.app.popup.appsparameters.pages.go_back": "Tilbake", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "Dette navnet er allerede i bruk av en annen applikasjon. Vennligst velg en annen.", + "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "Forenklet navn", + "scenes.app.popup.appsparameters.pages.installation": "Installer.", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "Start med å skrive meldingen i JSON-format.", + "scenes.app.popup.appsparameters.pages.interne_availability_application": "Intern søknad", + "scenes.app.popup.appsparameters.pages.modify_public_data": "Rediger de offentlige dataene til applikasjonen din.", + "scenes.app.popup.appsparameters.pages.new_app_title": "Ny søknad", + "scenes.app.popup.appsparameters.pages.ok_user_code": "ok", + "scenes.app.popup.appsparameters.pages.optimal_format": "Optimalt format: 48x48px.", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Den upubliserte applikasjonen vil kun fungere i din bedrift. Hvis du ønsker å gjøre det tilgjengelig for alle Twake-brukere, aktiver dette alternativet.", + "scenes.app.popup.appsparameters.pages.public_availability_application": "Offentlig søknad", + "scenes.app.popup.appsparameters.pages.public_login_label": "Offentlig identifikator", + "scenes.app.popup.appsparameters.pages.publication_description": "Bestem synligheten til søknaden din.", + "scenes.app.popup.appsparameters.pages.publication_label": "Utgivelse", + "scenes.app.popup.appsparameters.pages.publish_app_label": "Publiser søknad", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "Les privilegier", + "scenes.app.popup.appsparameters.pages.remove_app": "Slett applikasjonen {{$1}} permanent.", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "Fjern fra hele selskapet", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "Fjern fra arbeidsområdet", + "scenes.app.popup.appsparameters.pages.show_button": "Forestilling", + "scenes.app.popup.appsparameters.pages.status_tilte": "Stat", + "scenes.app.popup.appsparameters.pages.string_information": "Denne strengen identifiserer applikasjonen din og vil bli brukt i meldingskommandoer.", + "scenes.app.popup.appsparameters.pages.title_tester": "Twakecode tester", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "URL til arrangementsmottak", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Det forenklede navnet på applikasjonen din brukes allerede av en annen applikasjon. Vennligst endre den.", + "scenes.app.popup.appsparameters.pages.update_button": "Oppdater", + "scenes.app.popup.createworkspacepage.add_subtitle": "Trenger mer rom?", + "scenes.app.popup.createworkspacepage.create_new_workspace": "Opprett et nytt arbeidsområde", + "scenes.app.popup.createworkspacepage.placeholder_name": "Navn på arbeidsområdet", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "Still inn frekvensen for mobilvarsler.", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "Hyppighet av varsler", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "Uthev følgende søkeord:", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "Angi frekvensen for e-postvarsler.", + "scenes.app.popup.userparameter.pages.private_message_content.show": "Vis innhold i private meldinger", + "scenes.app.popup.userparameter.pages.private_message_content.hide": "Skjul innhold i private meldinger", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "Velg en periode der du ikke mottar varsler.", + "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "Ikke forstyrr om natten", + "scenes.app.popup.userparameter.pages.notif_content_label": "Innhold i varsler", + "scenes.app.mainview.quick_search_placeholder": "Raskt søk", + "scenes.app.popup.userparameter.personnal_workspaces_title": "Arbeidsområdene dine", + "scenes.app.popup.workspaceparameter.admin_current_status": "Du er en administrator.", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "Du er en arbeidsområdeadministrator.", + "scenes.app.popup.workspaceparameter.manager_current_status": "Du er en bedriftsadministrator.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "Slett arbeidsområde", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "Du må være alene på arbeidsområdet for å fjerne det. Fjern samarbeidspartnerne dine og prøv på nytt.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "For å bekrefte at du vil slette dette arbeidsområdet, skriv inn navnet nedenfor og trykk på Slett.", + "scenes.app.popup.workspaceparameter.pages.enter": "Tast inn ", + "scenes.app.popup.workspaceparameter.pages.access_apps": "Få tilgang til applikasjonene og koblingene dine", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "Arbeidsområde moderator", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "Du kan ikke forlate arbeidsområdet, fordi du er den siste administratoren. Du kan definere en ny administrator eller slette/arkivere dette arbeidsområdet.", + "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "Alle applikasjoner", + "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "Din bedrifts applikasjoner", + "scenes.app.popup.workspaceparameter.pages.company_name_description": "Endre navnet på dette selskapet", + "scenes.app.popup.workspaceparameter.pages.company_name_label": "Navn på selskapet", + "scenes.app.popup.workspaceparameter.pages.configuration_notif": "konfigurasjon", + "scenes.app.popup.workspaceparameter.pages.configure_button": "Konfigurer", + "scenes.app.popup.workspaceparameter.pages.description": "Beskrivelse", + "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "Applikasjoner utviklet av selskapet", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "Vis preferanser", + "scenes.app.popup.workspaceparameter.pages.install_button": "Installere", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "Installer applikasjonen i dette arbeidsområdet.", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "Apper installert i dette arbeidsområdet {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "Applikasjoner installert i andre områder av selskapet {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_subtitle": "Installerte applikasjoner", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "Det oppsto en feil under invitasjonen av følgende brukere: ", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "Sjekk at brukernavnet eller e-posten som brukes er gyldig.", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "Tilgang til webhooks", + "scenes.app.popup.workspaceparameter.pages.weight_max_small_text": "Maksimal størrelse 5 MB.", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "Fjern fra dette arbeidsområdet", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "arbeidsområde", + "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "Skrivetilgang", + "scenes.app.popup.workspaceparameter.pages.your_apps_label": "Dine søknader", + "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "Betalinger og abonnementer", + "scenes.app.workspacesbar.components.change_company_title": "Bytt selskap", + "scenes.app.workspacesbar.components.create_company_menu": "Opprett et selskap", + "scenes.app.workspacesbar.components.grp_parameters": "{{$1}} innstillinger", + "scenes.apps.calendar.add_calendar_menu": "Legg til en kalender", + "scenes.apps.calendar.connectors_menu": "Koblinger...", + "scenes.apps.calendar.connectors_search_menu": "Søk etter koblinger...", + "scenes.apps.calendar.create_calendar_title": "Lag en kalender", + "scenes.apps.calendar.edit_calendar_title": "Rediger kalenderen", + "scenes.apps.calendar.export_title": "Eksport", + "scenes.apps.calendar.export_view_menu": "Eksporter visningen...", + "scenes.apps.calendar.ics_download_menu": "Last ned en ICS-fil", + "scenes.apps.calendar.ics_subscription_menu": "Få en ICS-abonnementslenke", + "scenes.apps.calendar.modals.advanced_options": "Avanserte instillinger", + "scenes.apps.calendar.modals.participants_event": "Deltakere", + "scenes.apps.calendar.modals.reminders": "Påminnelser", + "scenes.apps.calendar.modals.remove_button": "Slett", + "scenes.apps.calendar.modals.remove_event_button": "Slett hendelsen", + "scenes.apps.calendar.modals.remove_event_text": "Vil du slette arrangementet?", + "scenes.apps.calendar.modals.title_placeholder": "Tittel", + "scenes.apps.calendar.modify_calendar_menu": "Rediger kalenderen", + "scenes.apps.calendar.month_option": "Måned", + "scenes.apps.calendar.my_calendar": "Min kalender", + "scenes.apps.calendar.my_calendar_label": "Min kalender", + "scenes.apps.calendar.my_calendar_menu": "Min kalender", + "scenes.apps.calendar.no_calendar_text": "Du har ikke angitt noen kalendere for dette arbeidsområdet.", + "scenes.apps.calendar.no_connectors_menu_text": "Du har ingen koblinger som kan kobles til en kalender.", + "scenes.apps.calendar.remove_calendar_confirmation": "Vil du slette kalenderen og dens hendelser permanent?", + "scenes.apps.calendar.today_menu": "I dag", + "scenes.apps.calendar.week_option": "Uke", + "scenes.apps.calendar.workspace": "Arbeidsområde", + "scenes.apps.calendar.workspace_label": "Dette arbeidsområdet", + "scenes.apps.calendar.workspace_menu": "Arbeidsområde", + "scenes.apps.drive.add_button": "Legge til", + "scenes.apps.drive.message_added_file": "{{$1}} sendte {{$2}}.", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}} sendte flere filer.", + "scenes.apps.drive.message_added_file_no_name": "{{$1}} sendte en fil.", + "scenes.apps.drive.choose_folder_button": "Velg en katalog", + "scenes.apps.drive.choose_file_button": "Velg en fil", + "scenes.apps.drive.create_folder_button": "Skape", + "scenes.apps.drive.download_button": "nedlasting", + "scenes.apps.drive.open_link": "Åpne lenken i nytt vindu", + "scenes.apps.drive.files_subtitle": "Filer", + "scenes.apps.drive.folder_subtitle": "Mapper", + "scenes.apps.drive.go_out_trash_menu": "Legg igjen søppel", + "scenes.apps.drive.go_trash_menu": "Gå til søpla", + "scenes.apps.drive.import_from_computer_menu": "Last opp fra datamaskinen", + "scenes.apps.drive.move_text": "Bevege seg" +} diff --git a/twake/frontend/public/locales/ru.json b/twake/frontend/public/locales/ru.json index 30c372c20a..cc2d5262c6 100644 --- a/twake/frontend/public/locales/ru.json +++ b/twake/frontend/public/locales/ru.json @@ -8,8 +8,8 @@ "general.back": "Назад", "general.confirm": "Подтвердить", "general.delete": "Удалить", - "general.archive": "Архив", - "general.unarchive": "Снять с архивы", + "general.archive": "Архивировать", + "general.unarchive": "Разархивировать", "general.help": "Помощь", "general.help.support": "Поддержка", "general.help.documentation": "Документация", @@ -19,60 +19,60 @@ "general.add": "Добавить", "general.connexion_status.disconnected": "Вы не в сети", "general.connexion_status.connected": "Вы в сети", - "general.connexion_status.connecting": "Переподключение...", - "scenes.app.side_app.messages_thread_title": "{{$1}} • Ответы на сообщение", - "scenes.app.workspaces.create_company.group_data": "Настройте вашу новую группу", + "general.connexion_status.connecting": "Переподключение…", + "scenes.app.side_app.messages_thread_title": "{{$1}} • Ветка сообщений", + "scenes.app.workspaces.create_company.group_data": "Настроить новую группу", "scenes.app.workspaces.create_company.group_data.group_type": "Вид группы", "scenes.app.workspaces.create_company.group_data.group_type.company": "Компания или отдел компании", "scenes.app.workspaces.create_company.group_data.group_type.public_organization": "Общественная организация", "scenes.app.workspaces.create_company.group_data.group_type.university_school": "Университет или школа", - "scenes.app.workspaces.create_company.group_data.group_type.society_club_charity": "Общество, клуб или благотворительность", - "scenes.app.workspaces.create_company.group_data.group_type.other_group": "Другое", + "scenes.app.workspaces.create_company.group_data.group_type.society_club_charity": "Общество, клуб или благотворительная организация", + "scenes.app.workspaces.create_company.group_data.group_type.other_group": "Прочее", "scenes.app.workspaces.create_company.group_data.group_size": "Размер группы", - "scenes.app.workspaces.create_company.group_data.group_size.less_3": "Менее 4-х человек", - "scenes.app.workspaces.create_company.group_data.group_size.4_10": "4 - 10 человек", - "scenes.app.workspaces.create_company.group_data.group_size.10_50": "11 - 49 человек", - "scenes.app.workspaces.create_company.group_data.group_size.50_100": "50 - 99 people", - "scenes.app.workspaces.create_company.group_data.group_size.100_500": "100 - 499 человек", - "scenes.app.workspaces.create_company.group_data.group_size.500_1000": "500 - 999 человек", - "scenes.app.workspaces.create_company.group_data.group_size.1000_5000": "1000 - 4999 человек", - "scenes.app.workspaces.create_company.group_data.group_size.5000_more": "Больше 5000 человек", - "scenes.app.workspaces.create_company.group_data.group_main_activity": "Главная деятельность", - "scenes.app.workspaces.create_company.group_data.group_main_activity.food": "Еда", + "scenes.app.workspaces.create_company.group_data.group_size.less_3": "Менее 4 пользователей", + "scenes.app.workspaces.create_company.group_data.group_size.4_10": "4 - 10 пользователей", + "scenes.app.workspaces.create_company.group_data.group_size.10_50": "11 - 49 пользователей", + "scenes.app.workspaces.create_company.group_data.group_size.50_100": "50 - 99 пользователей", + "scenes.app.workspaces.create_company.group_data.group_size.100_500": "100 - 499 пользователей", + "scenes.app.workspaces.create_company.group_data.group_size.500_1000": "500 - 999 пользователей", + "scenes.app.workspaces.create_company.group_data.group_size.1000_5000": "1000 - 4999 пользователей", + "scenes.app.workspaces.create_company.group_data.group_size.5000_more": "Более 5000 пользователей", + "scenes.app.workspaces.create_company.group_data.group_main_activity": "Основной вид деятельности", + "scenes.app.workspaces.create_company.group_data.group_main_activity.food": "Продукты питания", "scenes.app.workspaces.create_company.group_data.group_main_activity.bank": "Банк / страхование", - "scenes.app.workspaces.create_company.group_data.group_main_activity.printing_paper": "Полиграфическая фирма / Бумажная фабрика", + "scenes.app.workspaces.create_company.group_data.group_main_activity.printing_paper": "Полиграфия / Печать газет", "scenes.app.workspaces.create_company.group_data.group_main_activity.construction_building": "Строительство / Строительные материалы", "scenes.app.workspaces.create_company.group_data.group_main_activity.real_estate": "Недвижимое имущество", "scenes.app.workspaces.create_company.group_data.group_main_activity.materials": "Материалы", "scenes.app.workspaces.create_company.group_data.group_main_activity.chemistry": "Химия", - "scenes.app.workspaces.create_company.group_data.group_main_activity.trade_commerce_distribution": "Торговля", + "scenes.app.workspaces.create_company.group_data.group_main_activity.trade_commerce_distribution": "Торговля / Коммерция / Распределение", "scenes.app.workspaces.create_company.group_data.group_main_activity.publishing_communication_multimedia": "Публикации / Коммуникации / Мультимедиа", - "scenes.app.workspaces.create_company.group_data.group_main_activity.electronics_electricity_energy": "Электроника / Электричество / Энергия", - "scenes.app.workspaces.create_company.group_data.group_main_activity.studies_and_advice": "Исследования и советы", + "scenes.app.workspaces.create_company.group_data.group_main_activity.electronics_electricity_energy": "Электроника / Электричество / Энергетика", + "scenes.app.workspaces.create_company.group_data.group_main_activity.studies_and_advice": "Исследования и консалтинг", "scenes.app.workspaces.create_company.group_data.group_main_activity.pharmaceutical_industry": "Фармацевтическая промышленность", - "scenes.app.workspaces.create_company.group_data.group_main_activity.it_telecom": "информационная технология / Телеком", - "scenes.app.workspaces.create_company.group_data.group_main_activity.machinery_automotive": "Машины / Автомобили", + "scenes.app.workspaces.create_company.group_data.group_main_activity.it_telecom": "Информационные технологии / Телесвязь", + "scenes.app.workspaces.create_company.group_data.group_main_activity.machinery_automotive": "Машинное оборудование / Автомобили", "scenes.app.workspaces.create_company.group_data.group_main_activity.business_services": "Бизнес-услуги", - "scenes.app.workspaces.create_company.group_data.group_main_activity.entertainment": "Развлечение", + "scenes.app.workspaces.create_company.group_data.group_main_activity.entertainment": "Развлечения", "scenes.app.workspaces.create_company.group_data.group_main_activity.textile_clothing_shoes": "Текстиль / Одежда / Обувь", "scenes.app.workspaces.create_company.group_data.group_main_activity.transport_logistics": "Транспорт / Логистика", - "scenes.app.workspaces.create_company.group_data.group_main_activity.research": "Исследование", + "scenes.app.workspaces.create_company.group_data.group_main_activity.research": "Исследования", "scenes.app.workspaces.create_company.group_data.group_main_activity.education": "Образование", - "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Администрация", - "scenes.app.workspaces.create_company.group_data.group_main_activity.other": "Другое", + "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Управление", + "scenes.app.workspaces.create_company.group_data.group_main_activity.other": "Прочее", "components.application.messages": "Сообщения", "components.drive_dropzone.uploading": "Загрузка...", - "components.user_picker.modal_no_result": "Результат не найден", - "components.users_picker.add_me": "Меня добавить", - "scenes.app.workspaces.create_company.invitations.title": "Настройте ваше рабочее пространство.", - "scenes.app.header.disconnected": "Вы отключены", + "components.user_picker.modal_no_result": "Результатов не найдено", + "components.users_picker.add_me": "Добавить меня", + "scenes.app.workspaces.create_company.invitations.title": "Настройте вашу рабочую среду.", + "scenes.app.header.disconnected": "Соединение отсутствует", "scenes.app.header.disconnected.reload": "Перезагрузить", "scenes.app.header.alt_notifications": "Уведомления", "scenes.apps.calendar.calendar.week_btn": "Неделя", "scenes.apps.calendar.calendar.list_btn": "Список", "scenes.apps.calendar.event_edition.deadline_tag": "Крайний срок", "scenes.apps.calendar.event_edition.checkbox_all_day": "Весь день", - "scenes.apps.calendar.event_edition.title_confidentiality": "Участники", + "scenes.apps.calendar.event_edition.title_confidentiality": "Конфиденциальность", "scenes.apps.calendar.event_view.article_until": "до", "scenes.apps.calendar.calendar_modal.participants": "Участники", "scenes.apps.calendar.calendar_modal.placeholder": "Имя", @@ -93,16 +93,16 @@ "scenes.apps.messages.chatbox.chat.delete_message": "Удалить данное сообщение", "scenes.apps.messages.chatbox.chat.delete_message_btn": "Удалить сообщение", "scenes.apps.messages.left_bar.stream_modal.placeholder_name": "Название", - "scenes.apps.messages.left_bar.stream.add_to_favorites": "Добавить канал в избранное", - "scenes.apps.messages.left_bar.stream.remove_from_favorites": "Удалить из Избранного", + "scenes.apps.messages.left_bar.stream.add_to_favorites": "Добавить в избранное", + "scenes.apps.messages.left_bar.stream.remove_from_favorites": "Удалить из избранного", "scenes.apps.messages.left_bar.stream.notifications": "Уведмления...", - "scenes.apps.messages.left_bar.stream.notifications.all": "Всех сообщений", + "scenes.apps.messages.left_bar.stream.notifications.all": "Все сообщения", "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}, {{$2}} и {{$3}}", "scenes.apps.messages.left_bar.stream.notifications.me": "только {{$1}}", - "scenes.apps.messages.left_bar.stream.notifications.never": "Никокого сообщения", - "scenes.apps.parameters.workspace_sections.workspace": "Рабочее пространство", + "scenes.apps.messages.left_bar.stream.notifications.never": "Никогда", + "scenes.apps.parameters.workspace_sections.workspace": "Рабочая среда", "scenes.apps.parameters.workspace_sections.members": "Участники", - "scenes.apps.parameters.group_sections.workspaces": "Рабочие пространства", + "scenes.apps.parameters.group_sections.workspaces": "Рабочие среды", "scenes.apps.parameters.group_sections.apps": "Приложения", "scenes.apps.account.title": "Параметры аккаунта", "scenes.apps.account.account.menu_title": "Аккаунт", @@ -110,39 +110,39 @@ "scenes.apps.account.account.firstname": "Имя", "scenes.apps.account.account.lastname": "Фамилия", "scenes.apps.account.account.username": "Имя пользователя", - "scenes.apps.account.account.change_username": "Измените ваше имя пользователя.", - "scenes.apps.account.account.emails": "Электронные почты", - "scenes.apps.account.account.main_email": "Главная электронная почта\"", - "scenes.apps.account.account.email_add": "Добавить новую почту", - "scenes.apps.account.account.email_add_modal.invalid_code": "Этот код недействителен", + "scenes.apps.account.account.change_username": "Изменить имя пользователя.", + "scenes.apps.account.account.emails": "Аккаунты электронной почты", + "scenes.apps.account.account.main_email": "Основной аккаунт электронной почты", + "scenes.apps.account.account.email_add": "Добавить новый аккаунт электронной почты", + "scenes.apps.account.account.email_add_modal.invalid_code": "Данный код недействителен", "scenes.apps.account.account.password": "Пароль", "scenes.apps.account.account.password_modal.old_password": "Текущий пароль", "scenes.apps.account.account.password_modal.password": "Новый пароль", - "scenes.apps.account.account.password_modal.bad_old_password": "Прежний пароль неверен.", - "scenes.apps.account.account.password_modal.bad_password": "Ваши пароли не совпадают или слишком малы, пожалуйста, введите пароль не менее чем из 8 символов.", + "scenes.apps.account.account.password_modal.bad_old_password": "Старый пароль введен неверно.", + "scenes.apps.account.account.password_modal.bad_password": "Ваши пароли не совпадают или содержат недостаточно символов. Пожалуйста, введите пароль не менее чем из 8 символов.", "scenes.apps.account.account.logout": "Выйти", "scenes.apps.account.languages.text": "Сменить язык Twake.", "scenes.apps.account.notifications.title": "Уведомления", "scenes.apps.account.notifications.keywords_subtitle": "Ключевые слова", "scenes.apps.account.notifications.keywords_placeholder": "разработка, Wi-Fi, код, ...", - "scenes.apps.account.notifications.disturb_option_a": "Не посылайте мне push-уведомления между ", + "scenes.apps.account.notifications.disturb_option_a": "Не отправлять мне push-уведомления между ", "scenes.apps.account.notifications.disturb_option_b": " и ", - "scenes.apps.account.notifications.disturb_option_c": " (локальный часовой пояс)", + "scenes.apps.account.notifications.disturb_option_c": " (часовой пояс)", "scenes.apps.account.notifications.devices_subtitle": "Уведомления на устройствах", - "scenes.apps.account.notifications.devices_option_ever": "Всегда отправляйте мне push-уведомления", - "scenes.apps.account.notifications.devices_option_inactive": "Отправляйте мне уведомления на телефон, когда я неактивен на рабочем столе", - "scenes.apps.account.notifications.devices_option_never": "Никогда не посылайте мне push-уведомления", + "scenes.apps.account.notifications.devices_option_ever": "Всегда отправлять мне push-уведомления", + "scenes.apps.account.notifications.devices_option_inactive": "Отправлять мне уведомления на телефон, когда я неактивен в десктопной версии", + "scenes.apps.account.notifications.devices_option_never": "Никогда не отправлять мне push-уведомления", "scenes.apps.account.notifications.privacy_subtitle": "Конфиденциальность", "scenes.apps.account.notifications.mail_subtitle": "Уведомления по электронной почте", "scenes.apps.parameters.group_sections.apps.badge_extension": "Расширение", "scenes.apps.parameters.workspace_sections.members.members": "Участники", - "scenes.apps.parameters.workspace_sections.members.pending": "Члены, ожидающие решения", + "scenes.apps.parameters.workspace_sections.members.pending": "Письма, ожидающие обработки", "scenes.apps.parameters.workspace_sections.members.invite": "Пригласить новых участников", "scenes.apps.parameters.workspace_sections.members.invite_btn": "Добавить участников", "scenes.apps.tasks.boards": "Доски", - "scenes.apps.tasks.connectors_menu": "Разъёмы...", - "scenes.apps.tasks.connectors_search_menu": "Поиск разъёмов..", - "scenes.apps.tasks.no_connectors_menu_text": "У вас нет разъёмов, которые могут подключаться к календарю.", + "scenes.apps.tasks.connectors_menu": "Расширения...", + "scenes.apps.tasks.connectors_search_menu": "Поиск расширений...", + "scenes.apps.tasks.no_connectors_menu_text": "У вас нет расширений, которые могут подключаться к календарю.", "scenes.apps.tasks.unconfigured_tab": "Эта вкладка еще не настроена.", "scenes.apps.tasks.choose_board_button": "Выберите доску", "scenes.apps.tasks.new_board.title": "Новая доска", @@ -150,42 +150,42 @@ "scenes.apps.tasks.task": "Задача", "scenes.apps.tasks.no_tasks": "У вас нет активных задач", "scenes.apps.tasks.task_status.todo": "Список задач", - "scenes.apps.tasks.task_status.current": "Текущий", - "scenes.apps.tasks.task_status.done": "Сделано", + "scenes.apps.tasks.task_status.current": "Текущие задачи", + "scenes.apps.tasks.task_status.done": "Выполненные задачи", "scenes.apps.tasks.task.description": "Описание", "scenes.apps.tasks.task.assignees": "Назначенные лица", "scenes.apps.tasks.task.edit.dates": "Даты", "scenes.apps.tasks.list_modal.modify_list": "Изменить список", "scenes.apps.tasks.list_modal.new_list": "Новый список", "scenes.apps.tasks.list_modal.remove": "Удалить список и задачи", - "scenes.apps.tasks.list_modal.predefined_participants": "Предопределенные участники", + "scenes.apps.tasks.list_modal.predefined_participants": "Предполагаемые участники", "scenes.apps.tasks.list_modal.archive_all_tasks": "Архивировать все задачи", "scenes.apps.tasks.list_modal.remove_archived_tasks": "Удалить заархивированные задачи ({{$1}})", "scenes.login.footer.go_to_twake": "Перейти к twakeapp.com", "scenes.login.footer.branding": "Вы находитесь на частном сервере, принадлежащем {{$1}} ({{$2}}). ", "scenes.login.create_account.title": "Создать новый аккаунт", "scenes.login.create_account.email": "Электронная почта", - "scenes.login.create_account.email_used": "Эта электронная почта уже используется.", + "scenes.login.create_account.email_used": "Этот адрес электронной почты уже используется.", "scenes.login.create_account.username": "Имя пользователя", "scenes.login.create_account.username_already_exist": "Это имя пользователя уже используется", - "scenes.login.create_account.fill_in_username": "Вы должны ввести имя пользователя", - "scenes.login.create_account.fill_in_email": "Вы должны заполнить вашу электронную почту с правильным электронным адресом", + "scenes.login.create_account.fill_in_username": "Необходимо ввести имя пользователя", + "scenes.login.create_account.fill_in_email": "Необходимо ввести верный адрес электронной почты", "scenes.login.create_account.too_short_password": "Ваш пароль должен содержать не менее 8 символов.", "scenes.login.create_account.firstname": "Имя", "scenes.login.create_account.newsletter": "Получать информацию о Twake", "scenes.login.create_account.lastname": "Фамилия", "scenes.login.forgot_password.title": "Забыли пароль?", - "scenes.login.forgot_password.text": "Вы получите 9 цифр по электронной почте, чтобы подтвердить вашу личность.", + "scenes.login.forgot_password.text": "Вы получите код из 9 цифр по электронной почте, необходимый, чтобы подтвердить вашу личность.", "scenes.login.forgot_password.email_to_recover": "Электронная почта для восстановления", - "scenes.login.forgot_password.mail_doesnt_exist": "Эта электронная почта не существует", + "scenes.login.forgot_password.mail_doesnt_exist": "Данный адрес электронной почты не существует", "scenes.login.forgot_password.text2": "Вы получите код из 9 символов. Пожалуйста, введите его в поле ниже, чтобы продолжить.", "scenes.login.forgot_password.invalid_code": "Этот код недействителен.", "scenes.login.forgot_password.text3": "Введите новый пароль для вашего аккаунта.", "scenes.login.forgot_password.password": "Пароль", "scenes.login.forgot_password.password2": "Подтвердите пароль", - "scenes.login.forgot_password.password_dont_match": "Ваши пароли не совпадают или слишком малы, пожалуйста, введите пароль, состоящий не менее чем из 8 символов.", + "scenes.login.forgot_password.password_dont_match": "Ваши пароли не совпадают или содержат недостаточно символов, пожалуйста, введите пароль, состоящий не менее чем из 8 символов.", "scenes.login.home.title": "Вход в Twake", - "scenes.login.home.subtitle": "Рад вас видеть", + "scenes.login.home.subtitle": "Добро пожаловать", "scenes.login.home.email": "Почта", "scenes.login.home.unable_to_connect": "Недействительные идентификационные данные", "scenes.login.home.password": "Пароль", @@ -193,153 +193,153 @@ "scenes.login.home.lost_password": "Забыли пароль?", "scenes.login.home.create_account": "Создать аккаунт", "scenes.login.create_account.password": "Пароль", - "scenes.login.create_account.step_1_subtitle": "NНичего более простого, нам просто нужны данные.", - "scenes.login.create_account.step_2_subtitle_a": "Добавьте ваше полное имя, чтобы ваши коллеги узнали вас", - "scenes.login.create_account.step_2_subtitle_b": "Ваш номер телефона остается приватным.", + "scenes.login.create_account.step_1_subtitle": "Все очень просто: нам понадобится кое-какая информация.", + "scenes.login.create_account.step_2_subtitle_a": "Добавьте ваше полное имя, чтобы коллеги могли узнать вас.", + "scenes.login.create_account.step_2_subtitle_b": "Ваш номер телефона не виден другим пользователям.", "scenes.login.create_account.step_3_mail_sent": "Мы отправили вам ссылку для активации по электронной почте.", "scenes.login.create_account.step_3_subtitle": "Последний шаг, мы должны убедиться, что вы не робот!", "scenes.app.workspaces.create_company.company_name.placeholder": "Название компании", "scenes.app.workspaces.create_company.company_name.title_1": "Для начала,", "scenes.app.workspaces.create_company.company_name.title_2": "укажите название вашей компании.", "scenes.app.workspaces.create_company.default_workspace_name": "Главное", - "scenes.app.workspaces.create_company.group_data.title": "Давайте сделаем это быстро, нам просто нужна статистическая информация.", + "scenes.app.workspaces.create_company.group_data.title": "Это не займет много времени: нам просто нужна статистическая информация.", "scenes.app.workspaces.create_company.importations.title_1": "Уже работаете с цифровыми инструментами? Импортируйте или интегрируйте свои инструменты прямо сейчас!", "scenes.app.workspaces.create_company.importations.title_2": "Не волнуйтесь, вы можете сделать это позже!", "scenes.app.workspaces.create_company.invitations.title_2": "Добавьте членов своей команды.", - "scenes.app.workspaces.create_company.title": "Создать мою компанию", - "scenes.app.workspaces.welcome_page.add_secondary_emails": "Добавить вторичную электронную почту", + "scenes.app.workspaces.create_company.title": "Создать свою компанию", + "scenes.app.workspaces.welcome_page.add_secondary_emails": "Добавить еще один аккаунт электронной почты", "scenes.app.workspaces.welcome_page.added_to_company": "Вы были приглашены в ", - "scenes.app.workspaces.welcome_page.create_my_company": "Создать мою компанию", + "scenes.app.workspaces.welcome_page.create_my_company": "Создать свою компанию", "scenes.app.workspaces.welcome_page.lets_go": "Поехали!", "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "Возможно, вас пригласили по другому электронному адресу?", - "scenes.app.workspaces.welcome_page.no_company_subtitle": "О ... Похоже, вас еще не пригласили на рабочее место.", - "scenes.app.workspaces.welcome_page.ready_to_work": "Вы готовы работать сейчас.", - "scenes.app.workspaces.welcome_page.see_you_soon": "До скорого.!", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "Не вышло... Похоже, вас еще не пригласили в эту рабочую среду.", + "scenes.app.workspaces.welcome_page.ready_to_work": "Все готово для работы.", + "scenes.app.workspaces.welcome_page.see_you_soon": "До скорого!", "scenes.app.workspaces.welcome_page.try_again": "Попробуйте еще раз", - "scenes.app.workspaces.welcome_page.twake_team": "Twake команда", + "scenes.app.workspaces.welcome_page.twake_team": "Twake", "scenes.app.workspaces.welcome_page.welcome_header": "Добро пожаловать в Twake!", - "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Вы можете связать несколько адресов электронной почты с вашим аккаунтом, только один адрес будет использоваться для отправки вам уведомлений.", - "scenes.app.workspaces.welcome_page.main_mail_title": "Главный адрес", - "scenes.app.workspaces.welcome_page.other_mail_title": "Вторичные адреса", - "scenes.app.workspaces.welcome_page.add_new_email": "Добавить электронную почту", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Вы можете связать несколько адресов электронной почты с вашим аккаунтом, только один из них будет использоваться для отправки вам уведомлений.", + "scenes.app.workspaces.welcome_page.main_mail_title": "Основной адрес", + "scenes.app.workspaces.welcome_page.other_mail_title": "Прочие адреса", + "scenes.app.workspaces.welcome_page.add_new_email": "Добавить аккаунт электронной почты", "scenes.app.workspaces.welcome_page.code_verification": "Код проверки", - "scenes.app.workspaces.welcome_page.new_email": "Добавить вторичную электронную почту", + "scenes.app.workspaces.welcome_page.new_email": "Добавить еще один аккаунт электронной почты", "scenes.app.workspaces.welcome_page.we_sent_you_mail": "Мы отправили вам код проверки через {{$1}}", - "scenes.app.workspaces.welcome_page.done": "Я закончил", + "scenes.app.workspaces.welcome_page.done": "Готово", "scenes.login.forgot_password.finished": "Ваш пароль был успешно обновлен.", - "scenes.apps.account.account.description_main": "Ваш главный адрес - это тот, на который Twake отправляет ваши уведомления. Ваши вторичные адреса позволяют автоматически приглашать вас на рабочие места, которые их используют.", - "scenes.apps.account.account.emails.description": "Управляйте различными адресами электронной почты\".", - "scenes.apps.account.account.make_main": "Установить как главная", + "scenes.apps.account.account.description_main": "Ваш основной адрес - это тот, на который Twake отправляет уведомления. Прочие адреса позволяют автоматически приглашать вас в рабочие среды, которые их используют.", + "scenes.apps.account.account.emails.description": "Управляйте различными адресами электронной почты.", + "scenes.apps.account.account.make_main": "Сделать основным", "scenes.apps.account.account.password.description": "Изменить пароль.", "scenes.apps.account.identity": "Личность", - "scenes.apps.account.identity.description": "Измените имя, фамилию и изображение профиля, видимые другими пользователями Twake.", + "scenes.apps.account.identity.description": "Измените имя, фамилию и изображение профиля, видимые другими пользователям Twake.", "scenes.apps.account.preference": "Предпочтения", "general.open": "Открыть", - "scenes.apps.account.thumbnail.max_weight": "Максимальный вес 5 мб", - "scenes.apps.account.account.email_add_modal.confirm": "Подтвердить эту электронную почту", + "scenes.apps.account.thumbnail.max_weight": "Максимальный размер - 5 Мб", + "scenes.apps.account.account.email_add_modal.confirm": "Подтвердить данную электронную почту", "app.name.twake_calendar": "Календарь", "app.name.twake_drive": "Документы", "app.name.twake_tasks": "Задачи", "components.calendar.repetition.everyday": "Ежедневно", "components.calendar.repetition.does_not_repeat": "Однократно", - "components.calendar.repetition.weekly_on": "Еженедельно по {{$1}}", - "components.calendar.repetition.monthly_on": "Ежемесячно по {{$1}} {{$2}}", - "components.calendar.repetition.monthly_on_day": "Ежемесячно в день {{$1}}", + "components.calendar.repetition.weekly_on": "Еженедельно {{$1}}", + "components.calendar.repetition.monthly_on": "Ежемесячно {{$1}} {{$2}}", + "components.calendar.repetition.monthly_on_day": "Ежемесячно {{$1}} числа", "components.calendar.repetition.annually_on": "Ежегодно {{$1}}", - "components.calendar.repetition.every_weekday": "Каждый рабочий день (Пон по Пят)", - "components.calendar.repetition.custom": "Особый...", + "components.calendar.repetition.every_weekday": "Каждый рабочий день (с пн по пт)", + "components.calendar.repetition.custom": "Пользовательский вариант...", "components.calendar.repetition.repeat": "Повторять каждый", - "components.calendar.repetition.ends": "Заканчивается", + "components.calendar.repetition.ends": "Окончание", "components.calendar.repetition.never": "Никогда", "components.calendar.repetition.after": "После", "components.calendar.repetition.days": "дня/дней", "components.calendar.repetition.weeks": "недели(ь)", - "components.calendar.repetition.months": "месяц(а)", - "components.calendar.repetition.years": "год/лет", - "components.calendar.repetition.custom_recurrence": "Особое повторение", + "components.calendar.repetition.months": "месяца(ев)", + "components.calendar.repetition.years": "года/лет", + "components.calendar.repetition.custom_recurrence": "Пользовательский вариант", "components.calendar.repetition.occurrence": "Повтор(ы)", "components.calendar.repetition.repeat_on": "Повторить", "scenes.app.channelsbar.currentuser.add_apps": "Поиск приложений", "scenes.app.channelsbar.currentuser.change_my_status": "Изменить мой статус", - "scenes.app.channelsbar.currentuser.collaborateurs": "Сотрудники", - "scenes.app.channelsbar.currentuser.create_workspace_page": "Создать рабочее пространство", - "scenes.app.channelsbar.currentuser.invited_status": "Вы гость.", + "scenes.app.channelsbar.currentuser.collaborateurs": "Пользователи", + "scenes.app.channelsbar.currentuser.create_workspace_page": "Создать рабочую среду", + "scenes.app.channelsbar.currentuser.invited_status": "Вы являетесь гостем.", "scenes.app.channelsbar.currentuser.title": "Настройки аккаунта", - "scenes.app.channelsbar.currentuser.workspace_info": "Вы в рабочем пространстве {{$1}} группы {{$2}}", - "scenes.app.channelsbar.currentuser.workspace_parameters": "Настройки рабочего пространства", + "scenes.app.channelsbar.currentuser.workspace_info": "Вы в рабочей среде {{$1}} группы {{$2}}", + "scenes.app.channelsbar.currentuser.workspace_parameters": "Настройки рабочей среды", "scenes.app.channelsbar.currentuser.logout": "Выход", "scenes.app.channelsbar.currentuser.update": "Обновить", "scenes.app.channelsbar.currentuser.disable_notifications": "Отключить", - "scenes.app.channelsbar.currentuser.disabling_notifications": "Отключить на 1ч", - "scenes.app.channelsbar.currentuser.disabling_notifications_until": "Отключить до завтра в 9 утра", - "scenes.app.channelsbar.currentuser.reactivate_notifications": "Реактивировать", - "scenes.app.channelsbar.currentuser.user_parameter": "Настройки уведомления", + "scenes.app.channelsbar.currentuser.disabling_notifications": "Отключить на 1 час", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "Отключить до 9:00 завтрашнего дня", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "Возобновить", + "scenes.app.channelsbar.currentuser.user_parameter": "Настройки уведомлений", "scenes.app.channelsbar.channelsuser.new_private_discussion": "Новое личное сообщение", - "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Никаких личных сообщений, приглашайте своих сотрудников!", + "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Личных сообщений нет. Приглашайте своих сотрудников!", "scenes.app.channelsbar.channelsuser.private_messages": "Личные сообщения", "scenes.app.channelsbar.channelsworkspace.channel_title": "КАНАЛЫ", - "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "Избранное", + "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "ИЗБРАННОЕ", "scenes.app.channelsbar.channelsworkspace.create_channel": "Создать канал", "scenes.app.channelsbar.channelsworkspace.no_channel": "Вы еще не присоединились ни к одному каналу", "scenes.app.channelsbar.modify_channel_menu": "Редактировать канал", - "scenes.app.channelsbar.guest_management": "Управление гостями", + "scenes.app.channelsbar.guest_management": "Управление участниками", "scenes.app.channelsbar.read_sign": "Отметить как прочитанное", - "scenes.app.channelsbar.unread_sign": "Отметить как непрочитанный", - "scenes.app.channelsbar.channel_leaving": "покинуть канал", + "scenes.app.channelsbar.unread_sign": "Отметить как непрочитанное", + "scenes.app.channelsbar.channel_leaving": "Покинуть канал", "scenes.app.channelsbar.channel_removing": "Удалить канал", - "scenes.app.channelsbar.company_invitation_alert_subtitle": "Вы можете импортировать эти каналы в свой бизнес, чтобы остаться организованным, нажав на этот кадр.", - "scenes.app.channelsbar.company_invitation_alert_title": "Вы приглашены в компанию", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "Для лучшей организации вы можете перенести эти каналы в раздел своего бизнеса, нажав сюда.", + "scenes.app.channelsbar.company_invitation_alert_title": "Вы приглашены в компанию ", "scenes.app.channelsbar.initial_instructions_tutorial": "Выберите имя, фамилию и фотографию профиля.", "scenes.app.channelsbar.installation_desktop_tutorial": "Установить настольное приложение", - "scenes.app.channelsbar.invitation_collaboraors_tutorial": "Пригласите своих сотрудников в ваше рабочее пространство.", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "Пригласите своих сотрудников в вашу рабочую среду.", "scenes.app.channelsbar.public_channel_label": "Открытый канал", "scenes.app.channelsbar.private_channel_label": "Частный канал", - "scenes.app.channelsbar.sending_message_instruction": "Отправить первое сообщение в дискуссию", - "scenes.app.channelsbar.tutorial_alert": "Никогда больше не показывать этот кадр?", + "scenes.app.channelsbar.sending_message_instruction": "Отправить первое сообщение в обсуждение", + "scenes.app.channelsbar.tutorial_alert": "Никогда больше не показывать этот блок?", "scenes.app.channelsbar.welcome": "Добро пожаловать в Twake", "scenes.app.channelsbar.welcoming_message_subtitle": "Станьте профессионалом Twake всего за несколько кликов!", - "scenes.app.mainview.instruction_current_tab": "Начните с выбора канала слева.", - "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "У вас нет разъёма, который может подключиться к каналу.", + "scenes.app.mainview.instruction_current_tab": "Начните с выбора канала в левой части экрана.", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "У вас нет расширения, которое может подключиться к каналу.", "scenes.app.mainview.tabs.rename": "Переименовать", - "scenes.app.mainview.tabs.searching_connectors": "Поиск разъёмов...", - "scenes.app.popup.adduser.adresses_message": "Пожалуйста, разделите адреса запятой. Помните, что Twake может ограничить количество приглашений в зависимости от вашей подписки.", + "scenes.app.mainview.tabs.searching_connectors": "Поиск расширений...", + "scenes.app.popup.adduser.adresses_message": "Пожалуйста, разделите адреса запятой или пробелом. Помните, что Twake может ограничить количество приглашений в зависимости от вашей подписки.", "scenes.app.popup.appsparameters.pages._app_identity": "Идентификация приложения", "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Проверьте внешний вид ваших сообщений Twacode", - "scenes.app.popup.appsparameters.pages.alert_published_app": "Проверьте внешний вид ваших сообщений Twacode.", + "scenes.app.popup.appsparameters.pages.alert_published_app": "Ваше приложение опубликовано, вы больше не можете его редактировать.", "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Используйте * в разработке, чтобы разрешить все IP-адреса.", "scenes.app.popup.appsparameters.pages.amazing_app_name": "Мое удивительное приложение", "scenes.app.popup.appsparameters.pages.api_data_description": "Полезные данные для Twake API.", "scenes.app.popup.appsparameters.pages.api_parameters_label": "Настройки API", "scenes.app.popup.appsparameters.pages.app_name_label": "Название приложения", "scenes.app.popup.appsparameters.pages.app_modification_right": "Все менеджеры этой компании смогут редактировать это приложение.", - "scenes.app.popup.appsparameters.pages.app_privileges_information": "Определите, что ваше приложение может редактировать и читать.", - "scenes.app.popup.appsparameters.pages.app_privileges_label": "Привилегии приложени", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "Определите, доступ к каким данным для просмотра и изменений имеет ваше приложение.", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "Преимущества приложения", "scenes.app.popup.appsparameters.pages.app_update": "Обновить приложение {{$1}} (это приложение использовано {{$2}} раз(а).)", "scenes.app.popup.appsparameters.pages.application_title": "Приложение", - "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Создавайте и администрируйте свои приложения и разъёмы.", - "scenes.app.popup.appsparameters.pages.apps_title": "Ваши апплликации и разъёмы", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Управляйте своими приложениями и расширениями.", + "scenes.app.popup.appsparameters.pages.apps_title": "Ваши приложения и расширения", "scenes.app.popup.appsparameters.pages.automatique_label": "Автоматически", - "scenes.app.popup.appsparameters.pages.automatique_option_information": "Если Вы активируете 'Автоматически', то это приложение будет автоматически добавлено к следующим рабочим пространствам этой компании", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "Если Вы активируете 'Автоматически', то это приложение будет автоматически добавлено к следующим рабочим средам этой компании.", "scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "Разрешенные IP-адреса", "scenes.app.popup.appsparameters.pages.available_publication_alert": "Публикация вашей заявки в настоящее время ожидает подтверждения командами Twake.", "scenes.app.popup.appsparameters.pages.button_force": "Применить принудительно по всей компании", - "scenes.app.popup.appsparameters.pages.call_event_handlers": "Событие типа '{{$1}}' и id '{{$2}}' с пассивами '{{$3}}'.", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "Событие типа '{{$1}}' и идентификатор '{{$2}}' с пассивами '{{$3}}'", "scenes.app.popup.appsparameters.pages.company_label": "Владелец компании", "scenes.app.popup.appsparameters.pages.configuration_label": "Конфигурация", "scenes.app.popup.appsparameters.pages.create_app_button": "Создать приложение", "scenes.app.popup.appsparameters.pages.create_my_app": "Создать мое приложение", - "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "Вы еще не создали приложение. Прежде чем создавать приложение или разъём, убедитесь, что его еще нет на нашем рынке приложений.", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "Вы еще не создали приложение. Прежде чем создавать приложение или расширение, убедитесь, что его еще нет на нашем рынке приложений.", "scenes.app.popup.appsparameters.pages.danger_zone_description": "Удалить приложение", "scenes.app.popup.appsparameters.pages.danger_zone_label": "Опасная зона", "scenes.app.popup.appsparameters.pages.description_label": "Описание", "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "Приложения, разработанные компанией", - "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "Позволяет определить, где будет видно ваше приложение.", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "Позволяет определить, где будет видимо ваше приложение.", "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "Отображать настройки", "scenes.app.popup.appsparameters.pages.error_check_needed": "Произошла ошибка, проверьте ваши данные.", "scenes.app.popup.appsparameters.pages.error_message": "Это имя уже используется другим приложением, пожалуйста, выберите другое.", "scenes.app.popup.appsparameters.pages.error_user_code": "ошибка", "scenes.app.popup.appsparameters.pages.event_subtitle": "События", - "scenes.app.popup.appsparameters.pages.filter_information": "Этот фильтр ограничивает использование вашего API ключа только серверами в вашем коннекторе.", + "scenes.app.popup.appsparameters.pages.filter_information": "Этот фильтр ограничивает использование вашего API ключа только серверами вашего расширения.", "scenes.app.popup.appsparameters.pages.go_back": "Назад", "scenes.app.popup.appsparameters.pages.grp_section_name-error": "Это имя уже используется другим приложением, пожалуйста, выберите другое.", "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "Упрощенное имя", @@ -348,7 +348,7 @@ "scenes.app.popup.appsparameters.pages.interne_availability_application": "Внутреннее приложение", "scenes.app.popup.appsparameters.pages.json_configuration_information": "Перейдите в документацию, чтобы сгенерировать вашу конфигурацию в формате JSON.", "scenes.app.popup.appsparameters.pages.loading": "Загрузка...", - "scenes.app.popup.appsparameters.pages.message_data_next_event": "Пассивные данные, которые будут отправлены в следующем событии", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "Пассивные данные, которые будут отправлены во время следующего события", "scenes.app.popup.appsparameters.pages.modify_public_data": "Редактируйте публичные данные вашего приложения.", "scenes.app.popup.appsparameters.pages.new_app_title": "Новое приложение", "scenes.app.popup.appsparameters.pages.ok_user_code": "ок", @@ -358,11 +358,11 @@ "scenes.app.popup.appsparameters.pages.public_login_label": "Публичный идентификатор", "scenes.app.popup.appsparameters.pages.publication_description": "Определите видимость вашего приложения.", "scenes.app.popup.appsparameters.pages.publication_label": "Публикация", - "scenes.app.popup.appsparameters.pages.publish_app_label": "Публикавать приложение", - "scenes.app.popup.appsparameters.pages.read_privileges_label": "Права на чтение", + "scenes.app.popup.appsparameters.pages.publish_app_label": "Опубликавать приложение", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "Права на просмотр", "scenes.app.popup.appsparameters.pages.remove_app": "Удалить приложение {{$1}} навсегда.", "scenes.app.popup.appsparameters.pages.remove_app_from_company": "Удалить из всей компании", - "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "Удалить из рабочего пространства", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "Удалить из рабочей среды", "scenes.app.popup.appsparameters.pages.show_button": "Показать", "scenes.app.popup.appsparameters.pages.status_tilte": "Статус", "scenes.app.popup.appsparameters.pages.string_information": "Эта строка идентифицирует ваше приложение и будет использоваться в командах.", @@ -373,37 +373,37 @@ "scenes.app.popup.appsparameters.pages.write_privileges_label": "Права на редактирование", "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "Вы не можете удалить это приложение, если оно опубликовано.", "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Упрощенное название вашего приложения уже используется другим приложением, пожалуйста, измените его.", - "scenes.app.popup.appsparameters.pages.error_app_update_message": "Ошибка произошла при обновлении приложения.", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "При обновлении приложения произошла ошибка.", "scenes.app.popup.appsparameters.pages.remove_app_button": "Удалить приложение", "scenes.app.popup.appsparameters.pages.update_button": "Обновить", "scenes.app.popup.createworkspacepage.add_subtitle": "Нужно больше места?", - "scenes.app.popup.createworkspacepage.create_new_workspace": "Создать новое рабочее пространство", - "scenes.app.popup.createworkspacepage.placeholder_name": "Название рабочего пространства", + "scenes.app.popup.createworkspacepage.create_new_workspace": "Создать новую рабочую среду", + "scenes.app.popup.createworkspacepage.placeholder_name": "Название рабочей среды", "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "Установить частоту мобильных уведомлений.", "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "Частота уведомлений", "scenes.app.popup.userparameter.pages.keywords_notif_description": "Выделите следующие ключевые слова:", "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "Установите частоту уведомлений по электронной почте.", - "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "Выберите период, в течение которого Вы не будете получать уведомления.", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "Выберите период, в течение которого вы не будете получать уведомления.", "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "Не беспокоить ночью", "scenes.app.popup.userparameter.pages.notif_content_label": "Содержимое уведомлений", "scenes.app.mainview.quick_search_placeholder": "Быстрый поиск", - "scenes.app.popup.userparameter.personnal_workspaces_title": "Ваши рабочие пространства", - "scenes.app.popup.workspaceparameter.admin_current_status": "Вы Администратор.", - "scenes.app.popup.workspaceparameter.admin_manager_current_status": "Вы директор и менеджер компании.", - "scenes.app.popup.workspaceparameter.manager_current_status": "Вы менеджер компании.", - "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "Удалить рабочее пространство", - "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "Чтобы подтвердить, что вы хотите удалить эту рабочую область, пожалуйста, введите имя ниже и нажмите кнопку \"Удалить\".", - "scenes.app.popup.workspaceparameter.pages.enter": "Введите ", - "scenes.app.popup.workspaceparameter.pages.access_apps": "Доступ к вашим приложениям и разъёмам", - "scenes.app.popup.workspaceparameter.pages.moderator_status": "Администратор", - "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "Вы не можете покинуть рабочее пространство, потому что вы последний администратор. Вы можете определить нового администратора или удалить/архивировать это рабочее пространство.", + "scenes.app.popup.userparameter.personnal_workspaces_title": "Ваши рабочие среды", + "scenes.app.popup.workspaceparameter.admin_current_status": "Вы являетесь администратором.", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "Вы являетесь администратором рабочей среды.", + "scenes.app.popup.workspaceparameter.manager_current_status": "Вы являетесь администратором компании.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "Удалить рабочую среду", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "Чтобы подтвердить, что вы хотите удалить эту рабочую среду, пожалуйста, введите имя ниже и нажмите кнопку \"Удалить\".", + "scenes.app.popup.workspaceparameter.pages.enter": "Ввести ", + "scenes.app.popup.workspaceparameter.pages.access_apps": "Доступ к вашим приложениям и расширениям", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "Администратор рабочей среды", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "Вы не можете покинуть рабочую среду, потому что вы последний администратор. Вы можете определить нового администратора или удалить/архивировать эту рабочую среду.", "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "Все приложения", "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "Приложения вашей компании", "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "Интеграции", "scenes.app.popup.workspaceparameter.pages.apps_research_title": "Поиск приложений", - "scenes.app.popup.workspaceparameter.pages.apps_small_text": "Приложения этого рабочего пространства", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "Приложения этой рабочей среды", "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "Вернуться к поиску", - "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "Добавить сотрудников", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "Пригласить пользователей", "scenes.app.popup.workspaceparameter.pages.collaborateurs": "Сотрудники", "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "Приложения, разработанные компанией", "scenes.app.popup.workspaceparameter.pages.company_identity_title": "Идентификация компании", @@ -415,29 +415,29 @@ "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "Приложения, разработанные компанией", "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "Параметры отображения", "scenes.app.popup.workspaceparameter.pages.install_button": "Установить", - "scenes.app.popup.workspaceparameter.pages.installed_app_information": "Установить приложение в этом рабочем пространстве.", - "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "Приложения, установленные в этом рабочем пространстве {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "Установить приложение в этой рабочей среде.", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "Приложения, установленные в этой рабочей среде {{$1}}", "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "Приложения, установленные в других областях компании {{$1}}", "scenes.app.popup.workspaceparameter.pages.installed_apps_subtitle": "Установленные приложения", - "scenes.app.popup.workspaceparameter.pages.invitation_error": "Ошибка произошла при приглашении следующих людей: ", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "Произошла ошибка при приглашении следующих людей: ", "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "Убедитесь, что используемое имя пользователя или электронная почта действительны.", - "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "Редактировать изображения этого рабочего пространства", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "Редактировать изображения этой рабочей среды", "scenes.app.popup.workspaceparameter.pages.logo_subtitle": "Логотип", - "scenes.app.popup.workspaceparameter.pages.name_description": "Изменить название этого рабочего пространства", - "scenes.app.popup.workspaceparameter.pages.name_label": "Название рабочего пространства", + "scenes.app.popup.workspaceparameter.pages.name_description": "Изменить название этой рабочей среды", + "scenes.app.popup.workspaceparameter.pages.name_label": "Название рабочей среды", "scenes.app.popup.workspaceparameter.pages.no_access": "Нет доступа.", - "scenes.app.popup.workspaceparameter.pages.no_app_information": "У вас нет приложений в этом рабочем пространстве", - "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "Покинуть это рабочее пространство", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "У вас нет приложений в этой рабочей среде", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "Покинуть эту рабочую среду", "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "Доступ с правом чтения", "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "Удалить из всей компании", - "scenes.app.popup.workspaceparameter.pages.research_by": "Поиск приложений по названию и разъёмам", + "scenes.app.popup.workspaceparameter.pages.research_by": "Поиск приложений по названию и категории", "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "Поиск приложений...", "scenes.app.popup.workspaceparameter.pages.show_button": "Показать", - "scenes.app.popup.workspaceparameter.pages.title": "Настройки рабочего пространства", + "scenes.app.popup.workspaceparameter.pages.title": "Настройки рабочей среды", "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "Доступ к webhooks", "scenes.app.popup.workspaceparameter.pages.weight_max_small_text": "Максимальный вес 5 мб.", - "scenes.app.popup.workspaceparameter.pages.withdraw_button": "Удалить из этого рабочего пространста", - "scenes.app.popup.workspaceparameter.pages.worspace_notif": "рабочее пространство", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "Удалить из этой рабочей среды", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "рабочая среда", "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "Права на редактирование", "scenes.app.popup.workspaceparameter.pages.your_apps_label": "Ваши приложения", "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "Платежи и подписки", @@ -445,8 +445,8 @@ "scenes.app.workspacesbar.components.create_company_menu": "Создать компанию", "scenes.app.workspacesbar.components.grp_parameters": "Настройки {{$1}}", "scenes.apps.calendar.add_calendar_menu": "Добавить календарь", - "scenes.apps.calendar.connectors_menu": "Разъёмы...", - "scenes.apps.calendar.connectors_search_menu": "Поиск разъёмов...", + "scenes.apps.calendar.connectors_menu": "Расширения...", + "scenes.apps.calendar.connectors_search_menu": "Поиск расширений...", "scenes.apps.calendar.create_calendar_title": "Создать календарь", "scenes.apps.calendar.day_option": "День", "scenes.apps.calendar.edit_calendar_title": "Редактировать календарь", @@ -473,17 +473,17 @@ "scenes.apps.calendar.my_calendar": "Мой календарь", "scenes.apps.calendar.my_calendar_label": "Мой календарь", "scenes.apps.calendar.my_calendar_menu": "Мой календарь", - "scenes.apps.calendar.no_calendar_text": "Вы не установили никаких календарей для этого рабочего пространства.", - "scenes.apps.calendar.no_connectors_menu_text": "У вас нет разъемов, которые могут подключаться к календарю.", - "scenes.apps.calendar.remove_calendar_confirmation": "Удалить календарь и его события навсегда?", + "scenes.apps.calendar.no_calendar_text": "Вы не установили никаких календарей для этой рабочей среды.", + "scenes.apps.calendar.no_connectors_menu_text": "У вас нет расширений, которые могут подключаться к календарю.", + "scenes.apps.calendar.remove_calendar_confirmation": "Удалить календарь и события из него навсегда?", "scenes.apps.calendar.today_menu": "Сегодня", "scenes.apps.calendar.week_option": "Неделя", - "scenes.apps.calendar.workspace": "Рабочее пространство", - "scenes.apps.calendar.workspace_label": "Это рабочее пространство", - "scenes.apps.calendar.workspace_menu": "Рабочее пространство", + "scenes.apps.calendar.workspace": "Рабочая среда", + "scenes.apps.calendar.workspace_label": "Эта рабочая среда", + "scenes.apps.calendar.workspace_menu": "Рабочая среда", "scenes.apps.drive.add_button": "Добавить", - "scenes.apps.drive.message_added_file": "{{$1}} послал {{$2}}.", - "scenes.apps.drive.message_added_file_no_name": "{{$1}} послал файл.", + "scenes.apps.drive.message_added_file": "{{$1}} отправил {{$2}}.", + "scenes.apps.drive.message_added_file_no_name": "{{$1}} отправил файл.", "scenes.apps.drive.choose_folder_button": "Выбрать каталог", "scenes.apps.drive.choose_file_button": "Выбрать файл", "scenes.apps.drive.create_folder_button": "Создать", @@ -503,15 +503,15 @@ "scenes.apps.drive.no_storage_app_alert": "У вас нет приложения, позволяющего добавлять внешнее хранилище.", "scenes.apps.drive.remove_definitely_menu": "Удалить навсегда", "scenes.apps.drive.restore_menu": "Восстановить", - "scenes.apps.drive.throw_menu": "Выкидывать в корзину", - "scenes.apps.drive.trash_empty_menu": "Опорожнять корзину", + "scenes.apps.drive.throw_menu": "Переместить в корзину", + "scenes.apps.drive.trash_empty_menu": "Очистить корзину", "scenes.apps.drive.unconfigured_tab": "Эта вкладка еще не настроена.", "scenes.apps.drive.viewer.edit_with_button": "Отредактировать с помощью {{$1}}", "scenes.apps.drive.viewer.loading_preview_message": "Загрузка...", - "scenes.apps.drive.viewer.no_preview_message": "Не могу показать такой тип файла.", - "scenes.apps.drive.viewer.open_with_button": "Открыть с...", + "scenes.apps.drive.viewer.no_preview_message": "Нельзя открыть этот тип файла.", + "scenes.apps.drive.viewer.open_with_button": "Открыть с помощью...", "scenes.apps.messages.input.placeholder": "Написать сообщение. Используйте @ для упоминания определенного пользователя.", - "scenes.apps.messages.just_you": "Видимый только вам", + "scenes.apps.messages.just_you": "Видимо только вам", "scenes.apps.messages.message.new_messages_bar": "Новые сообщения", "scenes.apps.messages.message.cancel_button": "Отменить", "scenes.apps.messages.message.modify_button": "Редактировать", @@ -523,28 +523,28 @@ "scenes.apps.messages.message.show_responses_button": "Просмотр всех ответов", "scenes.apps.messages.message.types.first_channel_message_text": "Это первое сообщение канала", "scenes.apps.messages.message.types.first_message_text": "Это первое сообщение", - "scenes.apps.messages.messageslist.get_writing_user": "пишет...", - "scenes.apps.messages.messageslist.get_writing_users": "пишут...", + "scenes.apps.messages.messageslist.get_writing_user": "печатает...", + "scenes.apps.messages.messageslist.get_writing_users": "печатают...", "scenes.apps.messages.messageslist.go_last_message_button": "Перейти к последнему сообщению", "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "Новые сообщения", - "scenes.error_on_twake": "“Хьюстон у нас проблема“", - "scenes.help_us": "Однако, если вы хотите помочь нам исправить эту ошибку, отправьте нам сообщение ниже:", + "scenes.error_on_twake": "“Хьюстон, у нас проблема“", + "scenes.help_us": "Если вы хотите помочь нам исправить эту ошибку, отправьте сообщение ниже: ", "scenes.login.verifymail.alert": "Мы проверяем вашу электронную почту!", "scenes.login.verifymail.error_message": "Произошла ошибка", "scenes.login.verifymail.signin_button": "Вход", - "scenes.login.verifymail.success": "Ваша электронная почта была успешно проверена!", - "scenes.login.verifymail.verification_waiting": "Ожидание проверки...", - "scenes.no_panic": "Не паникуйте, просто перезагрузите эту страницу, чтобы найти Twake.", + "scenes.login.verifymail.success": "Ваша электронная почта была успешно подтверждена!", + "scenes.login.verifymail.verification_waiting": "Ожидание подтверждения...", + "scenes.no_panic": "Без паники! Просто перезагрузите данную страницу, чтобы починить Twake.", "services.apps.calendar.deadline_icon": "Крайний срок", "services.apps.calendar.event_icon": "Cобытие", - "services.apps.calendar.move_icon": "Путешествие", + "services.apps.calendar.move_icon": "Перенести", "services.apps.calendar.reminder_icon": "Напоминание", "services.apps.messages.no_app": "Этого приложения не существует.", "services.apps.messages.no_command_possible": "Мы не можем выполнить команду '{{$1}}', потому что '{{$2}}' не существует или не позволяет создавать команды.", "services.user.notification_parameters_update_alert": "Настройки уведомлений были обновлены.", "services.user.update_password_alert": "Ваш пароль был обновлен.", "scenes.app.workspaces.components.skip": "Пропустить", - "scenes.apps.calendar.unconfigured_tab": "Эта закладка еще не настроена.", + "scenes.apps.calendar.unconfigured_tab": "Эта вкладка еще не настроена.", "scenes.apps.drive.trash": "Корзина", "scenes.apps.drive.top_menu_more": "Больше", "scenes.apps.drive.top_menu_no_items": "{{$1}} элементы", @@ -566,37 +566,37 @@ "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "Отменить приглашение", "scenes.apps.account.account.fullname": "Полное имя", "login.email_login": "Электронная почта / Логин", - "scenes.apps.account.account.password_for_user": "Пароль для вашего пользователя", - "scenes.apps.account.account.send_info": "Отправьте эту информацию вашему сотруднику, чтобы он получил новые учетные данные.", + "scenes.apps.account.account.password_for_user": "Пароль пользователя", + "scenes.apps.account.account.send_info": "Отправьте данную информацию вашему сотруднику, чтобы он получил новые учетные данные.", "scenes.apps.account.account.save": "Сохранить аккаунт", - "scenes.apps.account.message_temporary": "Временный счет работает как обычный Twake, но вы генерируете его пароль и при необходимости можете его сбросить.", + "scenes.apps.account.message_temporary": "Временный аккаунт работает как обычный аккаунт Twake, но вы генерируете пароль к нему и при необходимости можете его сбросить.", "scenes.apps.account.message_user_signin": "Ваш пользователь может войти в систему в любое время, используя эту же почту, и сменить временный аккаунт на обычный.", - "scenes.app.mainview.link_expired": "Эта публичная ссылка недействительна или ее срок действия истек.", - "scenes.app.mainview.create_account": "Создайте свое рабочее пространство бесплатно в ", + "scenes.app.mainview.link_expired": "Эта публичная ссылка недействительна или срок ее действия истек.", + "scenes.app.mainview.create_account": "Создайте свою рабочую среду бесплатно в ", "scenes.apps.calendar.modals.reminder_add": "Добавить напоминание", "scenes.apps.parameters.workspace_sections.members.invite_all": "Пригласить всех", - "scenes.app.taskpicker.select": "Выберите", + "scenes.app.taskpicker.select": "Выбрать", "components.listmanager.filter": "Фильтр", - "scenes.apps.tasks.no_connector": "Нет разъёма", + "scenes.apps.tasks.no_connector": "Нет расширения", "components.attachmentpicker.add_attachment": "Добавить вложения", "components.input.copied": "Скопировано", "components.drive.new_versions": "Добавить новую версию", "components.drive.navigators.directory_not_found": "Каталог не найден.", - "components.drive.right_preview.suppress_link": "Подавить ссылку", + "components.drive.right_preview.suppress_link": "Скрыть ссылку", "components.drive.right_preview.create_link": "Создать ссылку доступа", "components.drive.moove_here": "Переместить сюда", "components.drive.modify_uslist": "Изменить список пользователей", "components.tagpicker.tag_name": "Название метки", - "components.upload.drop_files": "Перетащите сюда свои файлы", - "components.workspace.list_manager.no_workspace": "Нет рабочего пространства", - "components.workspace.list_manager.add": "Добавить рабочие пространства", - "components.workspace.list_manager.current_space": "Текущая рабочая область", + "components.upload.drop_files": "Перетащить файлы сюда", + "components.workspace.list_manager.no_workspace": "Нет рабочей среды", + "components.workspace.list_manager.add": "Добавить рабочие среды", + "components.workspace.list_manager.current_space": "Текущая рабочая среда", "components.workspace.list_manager.current_company": "Текущая компания", "components.workspace.list_manager.all": "Все", "components.workspace.calendar.invalid": "Недействительны", "components.searchpopup.enter_text": "Введите текст для поиска в Twake.", "components.searchpopup.loading": "Загрузка дополнительных результатов", - "components.searchpopup.filter_ws": "Фильтровать рабочие пространства", + "components.searchpopup.filter_ws": "Фильтровать рабочие среды", "components.searchpopup.tags": "Метки", "components.searchpopup.size": "Размер", "components.searchpopup.creation": "Создание", @@ -606,17 +606,17 @@ "components.searchpopup.mentions": "Упоминания", "components.searchpopup.only_pinned": "Только закрепленные сообщения", "components.alert.confirm": "Подтвердите ваше действие", - "components.alert.confirm_click": "Подтвердите ваше действие, нажав на кнопку Подтвердить.", + "components.alert.confirm_click": "Подтвердите ваше действие, нажав на кнопку \"Подтвердить\".", "components.searchpopup.tasks": "Задачи", "scenes.app.mainview.advanced_search_placeholder": "Расширенный поиск", - "components.searchpopup.hide_filters": "скрыть", - "components.searchpopup.show_filters": "фильтры", + "components.searchpopup.hide_filters": "скрыть фильтры", + "components.searchpopup.show_filters": "показать фильтры", "components.searchpopup.load_more": "Загрузить больше результатов", "general.more": "Больше", - "scenes.apps.board.archived_tasks": "Архивные задачи ({{$1}})", + "scenes.apps.board.archived_tasks": "Заархивированные задачи ({{$1}})", "scenes.apps.board.active_tasks": "Активные задачи", "scenes.apps.board.kanban": "Канбан", - "scenes.apps.board.display_as": "Показать как", + "scenes.apps.board.display_as": "Отобразить как", "scenes.apps.board.new_task": "+ Новая задача", "scenes.apps.board.all_boards": "Все доски", "components.userlistmanager.no_users": "Нет пользователей.", @@ -635,32 +635,32 @@ "components.calendar.calendarselector.from": "C", "scenes.apps.drive.move_text2": "Переместить", "components.attachmentpicker.from_computer": "С компьютера", - "components.attachmentpicker.from_twake": "Из Twake Документы", + "components.attachmentpicker.from_twake": "Из Twake Documents", "components.attachmentpicker.file": "Файл", - "components.attachmentpicker.remove_attach": "Снять вложение", - "scenes.apps.drive.remove_attachs": "Снять вложения", + "components.attachmentpicker.remove_attach": "Удалить вложение", + "scenes.apps.drive.remove_attachs": "Удалить вложения", "components.drive.elements.see": "Посмотреть", "components.drive.elements.current_name": "Текущее название : ", - "scenes.apps.drive.right_preview.public": "Открыть доступ", + "scenes.apps.drive.right_preview.public": "Открытый доступ", "components.drive.elements.configurate_mod": "Настройка модуля...", "components.drive.elements.manage_version": "Управление версиями", - "scenes.app.popup.createcompany.try_again": "Пожалуйста повторите.", + "scenes.app.popup.createcompany.try_again": "Пожалуйста повторите попытку.", "scenes.app.popup.workspace.edit_temp": "Редактировать временный аккаунт", "scenes.app.popup.workspace.create_temp": "Создать временный аккаунт", "scenes.apps.tasks.active_tasks": "активные(х) задачи(ь)", "scenes.apps.drive.right_preview.versions": "Версии", - "components.locked_features.locked_workspace_popup.title": "Вы не можете создать больше рабочего пространства", - "components.locked_features.locked_workspace_popup.subtitle": "В бесплатной версии у вас может быть только 1 рабочее место в вашей компании.", - "components.locked_features.locked_workspace_popup.text": "Упс !! Похоже, вы хотите создать новое рабочее место в своей компании. Возможно, вы захотите обновить свой план, если хотите сотрудничать в нескольких рабочих областях. Изучите наши варианты цен и выберите лучший вариант для совместной работы вашей команды.", + "components.locked_features.locked_workspace_popup.title": "Вы не можете создать больше рабочих сред", + "components.locked_features.locked_workspace_popup.subtitle": "В бесплатной версии у вас может быть только 1 рабочая среда в компании.", + "components.locked_features.locked_workspace_popup.text": "Ой... Похоже, вы хотите создать новую рабочую среду в своей компании. Вам необходимо обновить свой план. Изучите наше ценовое предложение и выберите лучший вариант для совместной работы вашей команды.", "components.locked_features.locked_only_office_popup.title": "Вы не можете редактировать этот файл", "components.locked_features.locked_only_office_popup.subtitle": "В бесплатной версии вы не можете использовать onlyoffice.", - "components.locked_features.locked_only_office_popup.text": "Упс !! Похоже, вы хотите отредактировать файл из Twake. Возможно, вы захотите подумать об обновлении своего плана, если хотите сотрудничать с офисными файлами. Изучите наши варианты цен и выберите лучший вариант для совместной работы вашей команды.", + "components.locked_features.locked_only_office_popup.text": "Ой... Похоже, вы хотите отредактировать файл из Twake. Вам необходимо обновить свой план, чтобы совместно использовать файлы. Изучите наше ценовое предложение и выберите лучший вариант для совместной работы вашей команды.", "components.locked_features.locked_drive_popup.title": "Вы не можете загружать больше файлов", "components.locked_features.locked_drive_popup.subtitle": "В бесплатной версии можно хранить только 6 ГБ.", - "scenes.app.integrations_parameters.title" :"Интеграции", + "scenes.app.integrations_parameters.title": "Интеграции", "scenes.app.integrations_parameters.applications_table.name": "Имя", "scenes.app.integrations_parameters.applications_table.title": "Другие интеграции", - "scenes.app.integrations_parameters.applications_table.search_placeholder" : "Приложение для поиска", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "Приложение для поиска", "scenes.app.integrations_parameters.company_application_popup.tag": "Установлены", "scenes.app.integrations_parameters.company_application_popup.btn": "Установить", "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "Информация", @@ -669,14 +669,187 @@ "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "Дата создания", "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "Версия", "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "Показать", - "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application" : "Удалить из компании", - "scenes.app.integrations_parameters.company_applications_table.name" : "Имя", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "Удалить из компании", + "scenes.app.integrations_parameters.company_applications_table.name": "Имя", "scenes.app.integrations_parameters.company_applications_table.title": "Установлен в вашей компании", - "app.state.recoil.hooks.use_current_company_applications.toaster_delete" : "Успешно удалил {{$1}} из вашей компании", - "app.state.recoil.hooks.use_current_company_applications.toaster_add" : "{{$1}} успешно добавлен в вашу компанию", - "scenes.apps.messages.input.replied_to" : "ответил ", "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Введите минимум три символа для отображения пользователей", - "components.rich_text_editor.plugins.suggestions.default_message.no_user_found" : "Пользователь не найден", - "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found":"Не найдено ни одного эмодзи", - "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Команда не найдена" -} \ No newline at end of file + "components.rich_text_editor.plugins.suggestions.default_message.no_user_found": "Пользователь не найден", + "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found": "Не найдено ни одного эмодзи", + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Команда не найдена", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "{{$1}} успешно удален из вашей компании", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "{{$1}} успешно добавлен в вашу компанию", + "scenes.apps.messages.input.replied_to": "ответил ", + "general.retry": "Повторить попытку", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Пригласительная ссылка для рабочей среды", + "application.load.longer": "Сервер не отвечает слишком долго, пожалуйста, ожидайте или обновите страницу...", + "scenes.apps.account.notifications.sound": "Звуковые уведомления", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Количество сообщений", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "В бесплатной версии Twake вы можете получить доступ лишь к {{$1}} последним сообщениям.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Больше планов", + "scenes.apps.messages.input.hide_formatting": "Скрыть форматирование", + "scenes.apps.messages.input.show_formatting": "Отобразить форматирование", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "Информация, связанная с управлением приложениями", + "components.newversion.new_version_modal.title": "Доступно новое обновление !", + "scenes.apps.drive.download_all_button": "Скачать все", + "components.inputs.input_with_select.input.placeholder": "Название канала", + "components.inputs.input_with_select.select.placeholder": "Название раздела", + "components.inputs.input_with_select.select.no_sections": "Начните писать название вашего первого раздела канала.", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}} удалил {{$2}} из канала", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}} изменил описание", + "scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}} переименовал канал в {{$2}}", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} добавил новую вкладку {{$2}} {{$3}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} удалил вкладку {{$2}} {{$3}}", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} добавил новое расширение {{$2}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} удалил расширение {{$2}}", + "components.alert.leave_private_channel.description": "Вы не сможете снова присоединиться к этому частному каналу, если вас никто не пригласит.", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.tag": "Ты не являетесь членом", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "Загрузить больше", + "components.unverified_account.typography_text_danger": "У вас осталось {{$1}} дней до окончания пробного периода. Пробная учетная запись будет заблокирована через 7 дней и окончательно удалена через 1 месяц после регистрации. Вы можете подтвердить свою учетную запись, нажав кнопку «Подтвердить мою учетную запись» в электронном письме с подтверждением, которое мы вам отправили.", + "components.unverified_account.verification_details": "Мы отправили данные для подтверждения по адресу", + "components.account_verification_status_sentence": "Статус вашей учетной записи: {{$1}}", + "components.account_verication_status_unverified": "Проверка не пройдена", + "components.account_verication_status_blocked": "Заблокирован", + "components.unverified_account.re_send_email": "Не получили письмо?", + "components.add_mails_workspace.title_2": "Twake - это инструмент для совместной работы в команде, поэтому мы советуем пригласить других пользователей, чтобы протестировать созданную для вас рабочую среду.", + "components.add_mails_workspace.text_area_placeholder": "Введите адреса электронной почты пользователей*", + "components.verify_mail.title_2": "Теперь вы являетесь официальным пользователем Twake!", + "services.console_services.toaster.success_verify_email": "Ссылка для подтверждения была отправлена по вашему адресу электронной почты", + "scenes.app.popup.workspaceparameter.edit_from_console": "См. в \"Консоли\"", + "services.console_services.toaster.success_invite_emails": "Успешно добавлен(о) {{$1}} пользователь(ей)", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "Поиск гостей или ожидающих писем", + "scenes.client.channels_bar.modals.guest_management.tips": "Добавьте или найдите электронную почту, используя введенные выше данные", + "general.user.role.company.guest": "Гость", + "general.user.deleted": "Удаленная учетная запись", + "components.richtexteditor.toolbar.underline": "Подчеркнутый", + "components.richtexteditor.toolbar.italic": "Курсив", + "components.richtexteditor.toolbar.ordered-list": "Заказанный список", + "components.richtexteditor.toolbar.code-block": "Блок кода", + "components.locked_features.locked_history_banner.title": "Вы достигли лимита сообщений", + "components.locked_features.locked_history_banner.description": "У вашей компании много сообщений! Обновите сейчас, чтобы получить доступ ко всей истории сообщений.", + "components.locked_features.locked_history_banner.button": "Узнать больше", + "components.locked_features.locked_guests_popup.title": "Функция гостей заблокирована", + "components.locked_features.locked_guests_popup.subtitle": "Эта функция недоступна в бесплатной версии Twake", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "Возникла проблема с подпиской вашей компании. Пожалуйста, изучите ваш", + "components.on_boarding.company_billing_banner.link": "план подписки компании", + "components.on_boarding.popups.blocked_company.title": "Ваша компания заблокирована из-за проблемы с оплатой", + "components.on_boarding.popups.blocked_company.description": "Срок действия вашей подписки на Twake истек. Пожалуйста, свяжитесь с владельцем или администратором вашей компании, чтобы продлить подписку и снова иметь возможность общаться с командой!", + "components.on_boarding.popups.blocked_company.learn_more_text": "Хотите узнать больше о плане подписки для компаний?", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Кликните сюда", + "components.on_boarding.popups.blocked_company.or": "Или", + "components.on_boarding.popups.blocked_company.company_selector": "Перейти в другую компанию", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}} - Вы не можете прикрепить более {{$2}} файлов к сообщению", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} удалил свое сообщение", + "components.member.user_parts.and_more_user_text": " и еще {{$1}} пользователей", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "Создайте частный канал", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " вместо", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "Вы не можете добавить более 10 пользователей", + "general.uploading": "Загрузка", + "components.upload.drop_files.toaster.error": "Вы не можете загрузить более {{$1}} файлов", + "components.emoji_picker.categories.frequently_used": "Часто используемые", + "components.emoji_picker.categories.smileys_and_people": "Смайлики и люди", + "components.emoji_picker.categories.animals_and_nature": "Животные и природа", + "components.emoji_picker.categories.food_and_drink": "Еда и напитки", + "components.emoji_picker.categories.travel_and_places": "Путешествия и места", + "components.emoji_picker.categories.objects": "Объекты", + "components.emoji_picker.categories.symbols": "Символы", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "Роль", + "general.email": "Эл. адрес", + "scenes.join.join_workspace_from_company": "Присоединяйтесь к {{$1}} с {{$2}}!", + "scenes.join.twake_description": "Twake - это цифровая рабочая среда с открытым исходным кодом, созданная для повышения продуктивности вашей команды", + "scenes.join.login_first_button": "Войти или создать учетную запись", + "scenes.join.join_the_team_button": "Присоединиться к команде", + "general.verify": "Проверить", + "components.inputs.input_with_select.button.tooltip": "Установить раздел канала", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Создана новая ссылка", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Успешно скопировано в буфер обмена", + "scenes.app.popup.adduser.magiclinks.action_copy": "Копировать", + "scenes.app.popup.adduser.magiclinks.action_generate": "Сгенерировать", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "Вы должны быть единственным участником рабочей среды, чтобы удалить ее. Удалите прочих участников и попробуйте еще раз.", + "scenes.apps.messages.input.emoji": "Эмодзи", + "components.verify_mail.title_1": "Поздравляем", + "components.verify_mail.text": "Прежде всего, вы должны подтвердить свой адрес электронной почты. Мы отправили ссылку для подтверждения по адресу", + "components.verify_mail.paragraph": "Вы можете сделать это позже, но непроверенные учетные записи имеют доступ только к ограниченной версии Twake", + "services.console_services.toaster.add_email_error_message": "Ошибка при добавлении {{$1}}", + "scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "Письмо отправлено", + "general.user.role.company.admin": "Администратор компании", + "components.richtexteditor.toolbar.strikethrough": "Зачеркнутый", + "components.richtexteditor.toolbar.code": "Код", + "components.richtexteditor.toolbar.unordered-list": "Маркированный список", + "components.locked_features.locked_guests_popup.description": "Ой... Похоже, вы хотите пригласить внешних пользователей в свою рабочую среду. Вам необходимо обновить свой план, чтобы сотрудничать с гостями и внешними партнерами. Изучите наше ценовое предложение и выберите лучший вариант для совместной работы вашей команды.", + "components.locked_features.locked_guests_popup.learn_more_button": "Узнать больше", + "components.locked_features.locked_guests_popup.or": "Или", + "scenes.apps.messages.input.attach_file.from_computer": "С компьютера", + "scenes.client.main_view.main_header.search_input": "Поиск", + "scenes.apps.drive.new_link_title": "Новая ссылка", + "scenes.apps.drive.default_link_name": "Без названия", + "components.emoji_picker.input_search_placeholder": "Поиск", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "Вы удалили это сообщение", + "components.emoji_picker.categories.flags": "Флаги", + "components.emoji_picker.categories.search_result": "Результаты поиска", + "components.emoji_picker.categories.not_found": "Эмодзи не найдены", + "general.resume": "Продолжить", + "general.pause": "Пауза", + "scenes.client.channels_bar.modals.guest_management.title": "Управление гостями в {{$1}}", + "components.channelworkspacelist.title": "Каналы", + "general.user.role.company.member": "Участник", + "components.richtexteditor.toolbar.bold": "Полужирный", + "scenes.client.channelbar.channelmemberslist.tag": "Вы", + "components.alert.leave_private_channel.title": "Вы уверены, что хотите покинуть канал?", + "components.richtexteditor.toolbar.blockquote": "Цитата", + "components.emoji_picker.categories.activity": "Деятельность", + "scenes.apps.messages.input.edited": "Отредактировано", + "components.locked_features.locked_guests_popup.skip_for_now_button": "Отложить", + "scenes.join.loading": "Загрузка…", + "scenes.join.wrong_link_title": "Эта ссылка больше не доступна", + "scenes.join.wrong_link_description": "Попросите человека, который пригласил вас присоединиться к этой компании, выслать новую ссылку или создайте собственную компанию", + "scenes.join.create_the_company_button": "Создать компанию", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}} добавил {{$2}} на канал", + "scenes.app.mainview.channel_description": "Опишите канал", + "scenes.apps.messages.message.unpin_button": "Открепить сообщение", + "components.calendar.repetition.on": "На", + "scenes.apps.messages.new_thread": "Начать новое обсуждение", + "scenes.apps.messages.input.send_message": "Отправить сообщение", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "Автоматически приглашать всех пользователей рабочей среды на этот канал", + "components.blocked_account.trial_period_over": "Ваш пробный период закончился. Чтобы разблокировать учетную запись и получить доступ ко всем функциям, пожалуйста, подтвердите ее по электронной почте", + "components.add_mails_workspace.button": "Начать использовать Twake", + "components.add_mails_workspace.title_1": "Добавить пользователей", + "scenes.app.popup.userparameter.pages.private_message_content.show": "Показывать содержимое личных сообщений", + "scenes.app.popup.userparameter.pages.private_message_content.hide": "Скрыть содержимое личных сообщений", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}} отправил несколько файлов.", + "scenes.apps.messages.message.pin_button": "Закрепить сообщение", + "scenes.apps.messages.message.copy_link": "Скопировать ссылку на сообщение", + "scenes.app.popup.appsparameters.pages.icon": "Значок", + "scenes.app.popup.appsparameters.pages.title_informations": "Основная информация", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "Текущий идентификатор пользователя", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "Текущий идентификатор рабочей среды", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "Текущий идентификатор группы", + "scenes.client.channelbar.channelmemberslist.title": "Пользователи в {{$1}}", + "scenes.client.channelbar.channelmemberslist.loader": "Загрузить больше", + "scenes.client.channelbar.channelmemberslist.autocomplete": "Добавить или найти пользователя", + "scenes.client.channelbar.channelmemberslist.menu.option_2": "Удалить с канала", + "components.leftbar.channel.workspaceschannels.menu.option_1": "Создать канал", + "components.leftbar.channel.workspaceschannels.menu.option_2": "Присоединиться к каналу", + "scenes.client.channelbar.workspacechannellist.autocomplete": "Поиск канала, пользовательских или личных сообщений", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "Создать новую вкладку", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_edition": "Переименовать {{$1}}", + "components.connectorslistmanager.add_connectors": "Добавить расширения", + "components.notifications.hidden_notifications_button.children": "Новые сообщения", + "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "Заявка", + "scenes.client.channelbar.channelmemberslist.no_members": "На этом канале нет пользователей. Вы можете пригласить их, нажав \"Добавить пользователей\".", + "scenes.app.channelsbar.hide_discussion_leaving.menu": "Скрыть обсуждение", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} адрес(а) электронной почты будет(ут) добавлен(ы)", + "components.newversion.new_version_component.row.part_1": "Ваша версия Twake устарела", + "components.newversion.new_version_component.row.part_2": "предлагаем вам обновить приложение и попробовать наши новые функции!", + "components.newversion.new_version_component.link": "Нажмите сюда, чтобы обновить", + "general.re_send": "Отправить снова", + "components.verify_mail.button": "Добавить пользователя", + "services.console_services.toaster.add_emails_error": "Ошибка при добавлении адреса(ов) электронной почты", + "components.on_boarding.company_billing_banner.guest_or_member_text": "Возникла проблема с подпиской вашей компании. Обратитесь к владельцу или администратору компании!", + "scenes.apps.tasks.select_user_button": "Просмотр задач для другого пользователя", + "scenes.apps.tasks.select_user": "Поиск пользователя", + "scenes.app.popup.workspaceparameter.pages.table_title": "Имя", + "login.create_account": "Создать учетную запись", + "'": "'", + "login.login_error": "Ошибка при входе в систему", + "\"": "\"" +} diff --git a/twake/frontend/public/locales/si.json b/twake/frontend/public/locales/si.json index 457eac59ff..5f8ada1ff9 100644 --- a/twake/frontend/public/locales/si.json +++ b/twake/frontend/public/locales/si.json @@ -258,7 +258,7 @@ "components.drive.elements.manage_version": "අනුවාද කළමණාකරනය", "scenes.app.popup.workspace.edit_temp": "තාවකාලික ගිණුම සංස්කරණය", "scenes.app.popup.appsparameters.pages.icon": "නිරූපකය", - "scenes.app.popup.appsparameters.pages.smalltext_user_id": "වත්මන් පරිශීලක හැඳු.", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "වත්මන් පරිශීලක හැඳුනුම්පත", "scenes.client.channelbar.channelmemberslist.autocomplete": "පරිශීලකයෙකු සොයන්න හෝ එකතුකරන්න", "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "යෙදුම", "components.newversion.new_version_component.row.part_1": "ඔබ යල් පැන ගිය ට්වේක් අනුවාදයක් ධාවනය කරමින්", @@ -442,11 +442,406 @@ "scenes.apps.drive.new_file_title": "නව ගොනුව", "services.apps.calendar.move_icon": "ගෙනයන්න", "scenes.login.home.create_account": "ගිණුමක් සාදන්න", - "scenes.login.create_account.step_2_subtitle_a": "වෙනත් පරිශීලකයින්ට ඔබව හඳුනා ගැනීමට සම්පූර්ණ නම එකතු කරන්න.", + "scenes.login.create_account.step_2_subtitle_a": "වෙනත් පරිශීලකයින්ට හඳුනා ගැනීමට සම්පූර්ණ නම එකතු කරන්න.", "scenes.app.workspaces.create_company.invitations.title_2": "කණ්ඩායමට පරිශීලකයින් එකතු කරන්න.", "scenes.app.workspaces.welcome_page.add_secondary_emails": "ද්විතීයික වි-තැපෑලක් එකතු කරන්න", "scenes.app.workspaces.welcome_page.welcome_header": "ට්වේක් වෙත සාදරයෙන් පිළිගනිමු!", "scenes.apps.account.account.password.description": "ඔබගේ මුරපදය වෙනස් කරන්න.", "scenes.app.channelsbar.channelsworkspace.channel_title": "නාලිකා", - "scenes.login.forgot_password.password_dont_match": "ඔබගේ මුරපද නොගැලපේ හෝ ඒවා ඉතා කෙටි ය. අවම වශයෙන් අකුරු 8 ක් සහිත මුරපදයක් යොදන්න." + "scenes.login.forgot_password.password_dont_match": "ඔබගේ මුරපද නොගැලපේ හෝ ඒවා ඉතා කෙටි ය. අවම වශයෙන් අකුරු 8 ක් සහිත මුරපදයක් යොදන්න.", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "නව සබැඳියක් ජනනය කෙරිණි", + "scenes.app.popup.adduser.magiclinks.action_generate": "ජනනය කරන්න", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "සාර්ථකව පසුරුපුවරුවට පිටපත් කෙරිණි", + "scenes.app.popup.adduser.magiclinks.action_copy": "පිටපත්", + "scenes.app.popup.adduser.magiclinks.genrator_info": "වැඩබිටම ආරාධනා සබැඳිය", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "ඔබගේ වින්‍යාසය JSON ආකෘතියෙන් ජනනය කිරීමට ප්‍රලේඛනය වෙත යන්න.", + "scenes.app.popup.appsparameters.pages.publication_label": "ප්‍රකාශනය", + "scenes.app.popup.appsparameters.pages.publish_app_label": "යෙදුම ප්‍රසිද්ධ කරන්න", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "සමස්ථ සමාගමෙන්ම ඉවත් කරන්න", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "වැඩබිමෙන් ඉවත් කරන්න", + "scenes.app.popup.createworkspacepage.placeholder_name": "වැඩබිමේ නම", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "ජංගම දැනුම්දීම් වාරගණන සකසන්න.", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "දැනුම්දීම් වාර ගණන", + "scenes.app.popup.appsparameters.pages.title_tester": "ට්වෙක්කේත අත්", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "වි-තැපැල් දැනුම්දීම් වාර ගණන සකසන්න.", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "පහත මූලපද ඉස්මතු කරන්න:", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "මෙම වැඩබිම හැරයන්න", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "වැඩබිම", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "මෙම වැඩබිමෙහි ඔබ සතුව කිසිම යෙදුමක් නැත", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "ඔබ වැඩබිමෙහි පරිපාලකයි.", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "එය ඉවත් කිරීමට ඔබ වැඩබිමේ තනිව සිටිය යුතුය. සහකාරකයින් ඉවත් කර යළි උත්සාහ කරන්න.", + "scenes.app.mainview.quick_search_placeholder": "ඉක්මන් සෙවුම", + "scenes.app.popup.userparameter.personnal_workspaces_title": "ඔබගේ වැඩබිම්", + "scenes.apps.drive.go_out_trash_menu": "කුණුකූඩය හැරයන්න", + "scenes.apps.drive.go_trash_menu": "කුණුකූඩයට යන්න", + "scenes.apps.messages.message.show_button": "දර්ශනය", + "scenes.apps.messages.message.show_responses_button": "සියළු උත්තර දකින්න", + "components.workspace.list_manager.current_space": "වත්මන් වැඩබිම", + "components.upload.drop_files": "සියළු ගොනු මෙහි දමන්න", + "components.tagpicker.tag_name": "අනන්‍යනයේ නම", + "components.reminder.hours_bef": "පැය කිහිපයකට පෙර", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "වියමන අඩවිය", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "අනුවාදය", + "scenes.app.integrations_parameters.company_applications_table.name": "නම", + "scenes.app.integrations_parameters.company_applications_table.title": "ඔබගේ සමාගම තුළ ස්ථාපිතයි", + "components.locked_features.locked_workspace_popup.subtitle": "නොමිලේ අනුවාදයෙහි, ඔබගේ සමාගම තුළ එක් වැඩබිමක් පමණක් ලද හැකිය.", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "වැණුම", + "components.locked_features.locked_drive_popup.title": "ඔබ ධාවකයේ සීමාවම ලඟා වී ඇත", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "සෑදූ දිනය", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "පෙන්වන්න", + "scenes.join.join_the_team_button": "කණ්ඩායමට එක්වන්න", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "සමාගමෙන් ඉවත් කරන්න", + "scenes.join.wrong_link_description": "ඔබට මෙම සමාගමට එක්වීමට ආරාධනා කළ පුද්ගලයාගෙන් නව සබැඳියක් විමසන්න හෝ ඔබගේම සමාගමක් සාදන්න", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "ඔබගේ සමාගමට {{$1}} සාර්ථකව එක් කෙරිණි", + "scenes.join.twake_description": "ට්වේක් යනු ඔබගේ කණ්ඩායම් ඵලදායිතාව වැඩිදියුණු කිරීම සඳහා ගොඩනගා ඇති විවෘත මූලාශ්‍ර සංඛ්‍යාංක වැඩබිමකි", + "scenes.apps.messages.input.replied_to": "වෙත පිළිතුරු දුණි ", + "components.searchpopup.tasks": "කාර්යයන්", + "scenes.join.loading": "පූරණය වෙමින්…", + "scenes.join.wrong_link_title": "මෙම සබැඳිය තවදුරටත් නැත", + "scenes.join.create_the_company_button": "සමාගම සාදන්න", + "scenes.join.login_first_button": "පුරන්න හෝ පළමුව ගිණුමක් සාදන්න", + "scenes.join.join_workspace_from_company": "{{$2}} වෙතින් {{$1}} හා එක්වන්න!", + "scenes.app.integrations_parameters.applications_table.name": "නම", + "scenes.app.integrations_parameters.title": "අනුකලන", + "scenes.app.integrations_parameters.applications_table.title": "වෙනත් අනුකලන", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "යෙදුම සොයන්න", + "scenes.app.integrations_parameters.company_application_popup.tag": "ස්ථාපිතයි", + "scenes.app.integrations_parameters.company_application_popup.btn": "ස්ථාපනය", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "තොරතුරු", + "scenes.app.workspaces.create_company.group_data.group_main_activity.printing_paper": "මුද්‍රණය / කඩදාසිය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.construction_building": "ඉදිකිරීම් / ගොඩනැගිලි ද්‍රව්ය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.materials": "ද්‍රව්ය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.chemistry": "රසායනය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.trade_commerce_distribution": "වෙළඳ / වාණිජ / බෙදා හැරීම", + "scenes.app.workspaces.create_company.group_data.group_main_activity.publishing_communication_multimedia": "ප්‍රකාශනය / සන්නිවේදනය / බහුමාධ්‍ය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.studies_and_advice": "අධ්‍යයන සහ උපදෙස්", + "scenes.app.workspaces.create_company.group_data.group_main_activity.pharmaceutical_industry": "ඖෂධ කර්මාන්තය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.it_telecom": "තො.තා. / විදුලි සංදේශ", + "scenes.app.workspaces.create_company.group_data.group_type.company": "සමාගම හෝ සමාගමේ ක්‍රියාංශය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.entertainment": "විනෝදාස්වාදය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.textile_clothing_shoes": "රෙදි / ඇඳුම් / පාවහන්", + "scenes.app.workspaces.create_company.group_data.group_main_activity.research": "පර්යේෂණ", + "scenes.app.workspaces.create_company.group_data.group_main_activity.education": "අධ්යාපන", + "components.users_picker.add_me": "මාව එක්කරන්න", + "scenes.app.workspaces.create_company.invitations.title": "ඔබගේ වැඩබිම වින්‍යාසගත කරන්න.", + "scenes.apps.drive.right_preview.operations_delete": "කුණුකූඩයට ගෙනයන්න", + "scenes.apps.account.notifications.disturb_option_c": " (ස්ථානීය වේලාකලාපය)", + "scenes.apps.parameters.workspace_sections.workspace": "වැඩබිම", + "scenes.apps.parameters.group_sections.workspaces": "වැඩබිම්", + "scenes.apps.tasks.boards": "පුවරු", + "scenes.apps.tasks.task": "කාර්යය", + "scenes.apps.tasks.no_tasks": "කාර්යය නැත", + "scenes.apps.tasks.list_modal.archive_all_tasks": "සියළුම කාර්යය සංරක්‍ෂණය", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "({{$1}}) සංරක්‍ෂිත කාර්යය ඉවත්කරන්න", + "scenes.apps.tasks.new_board.title": "නව පුවරුව", + "scenes.apps.tasks.new_board.edit_title": "පුවරුව සංස්කරණය", + "scenes.apps.tasks.task.description": "සවිස්තරය", + "scenes.apps.tasks.task.assignees": "පැවරුම්ලාභීන්", + "scenes.app.workspaces.welcome_page.lets_go": "අපි යමු!", + "scenes.apps.account.account.emails.description": "ඔබගේ විවිධ වි-තැපැල් ලිපින කළමනාකරණය කරන්න.", + "scenes.login.create_account.step_2_subtitle_b": "ඔබගේ දු.ක. අංකය පෞද්ගලිකව තිබෙනු ඇත.", + "scenes.app.workspaces.create_company.company_name.title_2": "ඔබගේ සමාගමේ නම දක්වන්න.", + "scenes.app.workspaces.create_company.importations.title_1": "දැනටමත් සංඛ්‍යාංක මෙවලම් සමඟ වැඩ කරනවාද? දැන් ඔබගේ මෙවලම් ආයාත හෝ අනුකලනය කරන්න!", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "තවම කිසිවෙක් ඔබට වැඩබිමකට ආරාධනා කර නැති බව පෙනේ.", + "scenes.app.workspaces.welcome_page.see_you_soon": "ඉක්මණින් මුණගැසෙමු!", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "ඔබගේ ගිණුමට වි-තැපැල් කිහිපයක් යෙදිය හැකිය; දැනුම්දීම් එවීමට එක් ලිපිනයක් පමණක් භාවිතා කෙරේ.", + "scenes.app.workspaces.welcome_page.done": "මම අහවරයි", + "scenes.apps.account.account.description_main": "ට්වේක් දැනුම්දීම් යවන්නේ ඔබගේ ප්‍රධාන ලිපිනයටය. භාවිතා කරන වැඩබිම් වෙත ස්වයංක්‍රීයව ආරාධනා ලැබීමට ද්විතීයික ලිපින ඉඩ සලසයි.", + "scenes.app.channelsbar.currentuser.logout": "වරන්න", + "app.name.twake_tasks": "කාර්යය", + "components.calendar.repetition.never": "කවදාවත්", + "components.calendar.repetition.years": "අවුරුදු", + "components.calendar.repetition.days": "දවස්", + "scenes.app.channelsbar.currentuser.create_workspace_page": "වැඩබිමක් සාදන්න", + "scenes.app.channelsbar.currentuser.workspace_parameters": "වැඩබිමේ සැකසුම්", + "scenes.app.channelsbar.currentuser.workspace_info": "ඔබ {{$2}} සමූහයෙන් {{$1}} වැඩබිමෙහි සිටී", + "components.calendar.repetition.after": "පසු", + "scenes.apps.account.identity.description": "අනෙකුත් ට්වේක් පරිශීලකයින්ට පෙනෙන ඔබගේ පළමු නම, අග නම සහ පැතිකඩ රූපය වෙනස් කරන්න.", + "scenes.apps.account.account.make_main": "ප්‍රධාන සකසන්න", + "components.locked_features.locked_workspace_popup.title": "ඔබට තවත් වැඩබිම් සෑදිය නොහැකිය", + "scenes.app.workspaces.create_company.group_data.title": "අපි ඉක්මන් කරන්නෙමු — ඇවැසි වන්නේ සංඛ්‍යාන තොරතුරු කිහිපයක් පමණි.", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "භූමිකාව", + "scenes.app.mainview.channel_description": "නාලිකාව විස්තර කරන්න", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "වැඩබිමේ සියළුම පරිශීලකයින්ට මෙම නාලිකාවට ස්වයංක්‍රීයව ආරාධනා කරන්න", + "scenes.client.channelbar.channelmemberslist.title": "{{$1}} හි පරිශීලකයින්", + "scenes.apps.parameters.workspace_sections.members.invite_all": "සියල්ලන්ට ආරාධනා කරන්න", + "scenes.apps.calendar.modals.reminder_add": "සිහිකැඳවුමක් එක්කරන්න", + "scenes.app.mainview.create_account": "ඔබගේ වැඩබිම නොමිලේ සාදන්න ", + "components.drive.right_preview.suppress_link": "සබැඳිය යටපත් කරන්න", + "components.workspace.list_manager.no_workspace": "වැඩබිම් නැත", + "components.workspace.list_manager.add": "වැඩබිම් එක්කරන්න", + "components.searchpopup.enter_text": "ට්වේක් හි සෙවුමට පාඨ කිහිපයක් යොදන්න.", + "components.searchpopup.filter_ws": "වැඩබිම් පෙරන්න", + "components.searchpopup.tags": "අනන්‍යයන", + "components.searchpopup.creation": "සෑදීම", + "components.searchpopup.update_search": "සෙවුම යාවත්කාල", + "scenes.apps.board.archived_tasks": "({{$1}}) සංරක්‍ෂිත කාර්යයන්", + "scenes.apps.board.active_tasks": "ක්‍රියාත්මක කාර්යයන්", + "scenes.apps.board.display_as": "ලෙස දර්ශනය", + "scenes.apps.board.new_task": "+ නව කාර්යය", + "scenes.apps.board.all_boards": "සියළු පුවරු", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "ට්වේක් නොමිලේ අනුවාදයේදී, ඔබට මෑත පණිවිඩ {{$1}} කට වඩා ප්‍රවේශ විය නොහැකිය.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "තව සැලසුම් පෙන්වන්න", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "වැඩබිමට පරිශීලකයින් හට ආරාධනා කරන්න.", + "scenes.app.channelsbar.company_invitation_alert_title": "ඔබට සමාගමට ආරාධනා කර ඇත ", + "scenes.app.popup.appsparameters.pages.alert_published_app": "ඔබගේ යෙදුම ප්‍රකාශනය කෙරිණි, එය සංස්කරණය කළ නොහැකිය.", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "ඔබ 'ස්වයංක්‍රීය' ක්‍රියාත්මක කළහොත්, මෙම සමාගමේ ඊළඟ වැඩබිම් වලට ද ස්වයංක්‍රීයව මෙම යෙදුම එකතු වේ.", + "components.reminder.minutes_bef": "විනාඩි කිහිපයකට පෙර", + "scenes.app.popup.appsparameters.pages.app_update": "{{$1}} යෙදුම යාවත්කාල කරන්න (වාර {{$2}} ක් භාවිතා කර ඇත.)", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "දර්ශන සැකසුම්", + "scenes.app.popup.appsparameters.pages.event_subtitle": "සිදුවීම්", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "ඔබ තවමත් යෙදුමක් සාදා නැත. යෙදුමක් හෝ සම්බන්ධකයක් සෑදීමට පෙර එය දැනටමත් යෙදුම් වෙළඳපොළෙහි නැති බව සහතික කරගන්න.", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "ඔබගේ පණිවිඩය JSON ආකෘතියෙන් ලිවීමට අරඹන්න.", + "scenes.app.popup.appsparameters.pages.description_label": "වැණුම", + "scenes.app.popup.createworkspacepage.create_new_workspace": "නව වැඩබිමක් සාදන්න", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "යෙදුම යාවත්කාල වීමේදී දෝෂයක් සිදුවිණි.", + "scenes.app.popup.createworkspacepage.add_subtitle": "තව ඉඩ ඇවැසිද?", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "ඔබගේ යෙදුමෙහි සරළ කළ නම දැනටමත් වෙනත් යෙදුමක් භාවිතා කරයි. වෙනස් කරන්න.", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "රැඳෙමින්...", + "components.reminder.days_bef": "දවස් කිහිපයකට පෙර", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "මෙම වැඩබිමෙහි රූපය වෙනස් කරන්න", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "වි-තැපෑල හෝ පරිශීලක නාමය වලංගු දැයි පරීක්‍ෂා කරන්න.", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "යෙදුම මෙම වැඩබිමේ ස්ථාපනය කරන්න.", + "scenes.app.popup.workspaceparameter.pages.description": "වැණුම", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "පරිශීලකයින්ට ආරාධනය", + "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "සෙවුමට ආපසු", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "මෙම වැඩබිමෙහි යෙදුම්", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "පහත පරිශීලකයින්ට ආරාධනා කිරීමේදී දෝෂයක් සිදුවිණි: ", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "සමාගමේ අනෙකුත් පැතිවල ස්ථාපනය කර ඇති යෙදුම් {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "මෙම {{$1}} වැඩබිමේ ස්ථාපිත යෙදුම්", + "scenes.app.popup.workspaceparameter.pages.name_label": "වැඩබිමෙහි නම", + "scenes.app.popup.workspaceparameter.pages.name_description": "වැඩබිමෙහි නම වෙනස් කරන්න", + "components.reminder.weeks_bef": "සති කිහිපයකට පෙර", + "scenes.app.popup.workspaceparameter.pages.show_button": "දර්ශනය", + "scenes.app.popup.workspaceparameter.pages.title": "වැඩබිමේ සැකසුම්", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "මෙම වැඩබිමෙන් ඉවත් කරන්න", + "scenes.apps.calendar.modals.reminders": "සිහිකැඳවුම්", + "scenes.apps.calendar.modals.modify_event_button": "සිදුවීම සංස්කරණය", + "scenes.apps.calendar.modals.event_description_placeholder": "වැණුම", + "scenes.apps.calendar.modals.description_placeholder": "වැණුම", + "scenes.apps.drive.message_added_file_no_name": "{{$1}} ගොනුවක් යවා ඇත.", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}} ගොනු කිහිපයක් යවා ඇත.", + "scenes.apps.calendar.workspace_menu": "වැඩබිම", + "scenes.apps.calendar.workspace_label": "මෙම වැඩබිම", + "scenes.apps.calendar.workspace": "වැඩබිම", + "scenes.apps.calendar.no_connectors_menu_text": "දින දසුනකට සම්බන්ධ කළ හැකි සම්බන්ධක කිසිවක් ඔබ සතුව නැත.", + "scenes.apps.calendar.no_calendar_text": "ඔබ මෙම වැඩබිමට කිසිම දින දසුනක් සකසා නැත.", + "scenes.apps.drive.throw_menu": "කුණුකූඩයට යවන්න", + "scenes.apps.messages.input.edited": "සංස්කරණය කළා", + "scenes.apps.drive.trash_empty_menu": "කුණුකූඩය හිස් කරන්න", + "scenes.apps.drive.viewer.no_preview_message": "මෙවැනි ගොනුවක් දැකීමට නොහැකිය.", + "scenes.apps.messages.just_you": "ඔබට පමණක් පෙනෙයි", + "scenes.apps.calendar.reminders": "සිහිකැඳවුම්", + "scenes.help_us": "කෙසේ වෙතත්, දෝෂය නිවැරදි කිරීමට අපට උදවු වීමට කැමති නම්, පහතින් පණිවිඩයක් එවන්න: ", + "components.tagpicker.notag": "අනන්‍යයන නැත", + "scenes.login.verifymail.error_message": "දෝෂයක් සිදුවුණි", + "scenes.no_panic": "කලබල නොවන්න! ට්වේක් නිවැරදි කිරීමට පිටුව යළි පූරණය කරන්න.", + "services.apps.calendar.event_icon": "සිදුවීම", + "services.apps.calendar.reminder_icon": "සිහිකැඳවීම", + "services.user.notification_parameters_update_alert": "දැනුම්දීමේ සැකසුම් යාවත්කාල කර ඇත.", + "services.user.update_password_alert": "ඔබගේ මුරපදය යාවත්කාල කර ඇත.", + "scenes.apps.drive.trash": "කුණුකූඩය", + "scenes.apps.messages.input.emoji": "ඉමෝජි", + "scenes.apps.messages.input.hide_formatting": "ආකෘතිකරනය සඟවන්න", + "scenes.apps.messages.input.show_formatting": "ආකෘතිකරනය පෙන්වන්න", + "scenes.apps.tasks.my_tasks": "මාගේ කාර්යය", + "scenes.apps.tasks.board.tasks.subtask": "අනු-කාර්යය", + "scenes.apps.tasks.board.place_holder": "පුවරුවේ නම", + "scenes.apps.tasks.board.tasks.add_subtask": "අනු-කාර්යක් එක්කරන්න", + "components.drive.elements.see": "දකින්න", + "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "ඇරයුම අවලංගු කරන්න", + "scenes.apps.tasks.active_tasks": "ක්‍රියාත්මක කාර්යය", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "යෙදුම් කළමනාකරණයට අදාළ තොරතුරු", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "වත්මන් වැඩබිමේ හැඳු.", + "scenes.client.channelbar.channelmemberslist.no_members": "නාලිකාවෙහි පරිශීලකයින් නැත, පරිශීලකයින් එක්කරන්න එබීමෙන් ආරාධනා කළ හැකිය.", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}} සවිස්තරය වෙනස් කළා", + "components.alert.leave_private_channel.description": "ඇරයුමකින් තොරව ඔබට නැවත මෙම පෞද්ගලික නාලිකාවට එක්වීමට නොහැකි වනු ඇත.", + "components.add_mails_workspace.title_1": "කිහිප දෙනෙක් එක්කරන්න", + "components.add_mails_workspace.title_2": "ට්වේට් යනු කණ්ඩායම් සහයෝගීතා මෙවලමකි, එබැවින් අපි ඔබ වෙනුවෙන් සෑදූ වැඩබිම පරීක්‍ෂා කිරීමට පරිශීලකයින් කිහිප දෙනෙකුට ආරාධනා කරන්න.", + "components.add_mails_workspace.text_area_placeholder": "පරිශීලකයින්ගේ වි-තැපැල් ඇතුල් කරන්න*", + "components.verify_mail.title_1": "සුභ පැතුම්", + "components.verify_mail.title_2": "ඔබ දැන් නිල ට්වේට් පරිශීලකයෙකි!", + "components.verify_mail.button": "පරිශීලක එක්කරන්න", + "scenes.client.channels_bar.modals.guest_management.tips": "ඉහත ආදානය භාවිතයෙන් වි-තැපැල් එක්කිරීම හෝ සෙවීම අරඹන්න", + "scenes.app.popup.workspaceparameter.edit_from_console": "හසුරුවමෙහි බලන්න", + "services.console_services.toaster.add_emails_error": "වි-තැපැල් ලිපින(ය) එක්කිරීමේදී දෝෂයකි", + "components.locked_features.locked_history_banner.button": "තව දැනගන්න", + "components.locked_features.locked_guests_popup.title": "අමුත්තන්ගේ විශේෂාංගය අගුළු ලා ඇත", + "components.locked_features.locked_guests_popup.subtitle": "මෙම විශේෂාංගය ට්වේට් නොමිලේ අනුවාදයට නැත", + "components.locked_features.locked_guests_popup.learn_more_button": "තව දැනගන්න", + "components.on_boarding.popups.blocked_company.title": "ගෙවීමේ ගැටළුවක් නිසා ඔබගේ සමාගමට අගුළු ලා ඇත", + "scenes.apps.tasks.select_user_button": "වෙනත් පරිශීලකයෙකු සඳහා කාර්යයන් දකින්න", + "components.emoji_picker.categories.smileys_and_people": "මදහස හා මිනිසුන්", + "scenes.apps.account.notifications.devices_option_inactive": "මම ඩෙස්ක්ටොප් එකේ අක්‍රියව සිටින විට මට තල්ලු දැනුම්දීම් එවන්න", + "scenes.apps.parameters.group_sections.apps.badge_extension": "Extension", + "scenes.apps.parameters.workspace_sections.members.pending": "පොරොත්තු ඊමේල්", + "scenes.login.home.unable_to_connect": "වලංගු නොවන අක්තපත්‍ර", + "scenes.login.create_account.step_1_subtitle": "එය සරල විය නොහැකිය — අපට ඇවැසි වන්නේ තොරතුරු ටිකක් පමණි.", + "scenes.login.create_account.step_3_mail_sent": "අපි ඔබට විද්‍යුත් තැපෑලෙන් සක්‍රිය කිරීමේ සබැඳියක් එවා ඇත.", + "scenes.login.create_account.step_3_subtitle": "අවසාන පියවර — ඔබ රොබෝ කෙනෙක් නොවන බව අපට තහවුරු කිරීමට අවශ්‍යයි!", + "scenes.app.workspaces.create_company.company_name.title_1": "පටන් ගැනීමට,", + "scenes.app.workspaces.welcome_page.added_to_company": "ඔබට ආරාධනා කර ඇත ", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "වෙනත් විද්‍යුත් තැපැල් ලිපිනයක් භාවිතා කරමින් ඔබට ආරාධනා කළේද?", + "scenes.app.workspaces.welcome_page.code_verification": "සත්යාපන කේතය", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "අපි ඔබට {{$1}} හරහා සත්‍යාපන කේතයක් එවා ඇත", + "scenes.apps.account.preference": "මනාප", + "components.calendar.repetition.monthly_on": "මාසිකව {{$1}} {{$2}}", + "scenes.apps.account.account.email_add_modal.confirm": "මෙම විද්‍යුත් තැපෑල තහවුරු කරන්න", + "components.calendar.repetition.does_not_repeat": "නැවත සිදු නොවේ", + "components.calendar.repetition.monthly_on_day": "මාසිකව දින {{$1}}", + "components.calendar.repetition.annually_on": "වාර්ෂිකව {{$1}}", + "components.calendar.repetition.repeat": "සෑම එකක්ම නැවත නැවත කරන්න", + "components.calendar.repetition.ends": "අවසන් වේ", + "components.calendar.repetition.custom_recurrence": "අභිරුචි පුනරාවර්තනය", + "components.calendar.repetition.occurrence": "සිදුවීම(ය)", + "components.calendar.repetition.repeat_on": "නැවත නැවත කරන්න", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "නැවත ක්‍රියාත්මක", + "components.searchpopup.only_pinned": "ඇමුණුම් කළ පණිවිඩ පමණි", + "components.blocked_account.trial_period_over": "ඔබේ අත්හදා බැලීමේ කාලය අවසන්. ඔබගේ ගිණුම අගුළු ඇරීමට සහ සියලු ක්‍රියාකාරීත්වයන් වෙත ප්‍රවේශය ලබා ගැනීමට, කරුණාකර ඔබගේ ගිණුම විද්‍යුත් තැපෑලෙන් තහවුරු කරන්න", + "components.verify_mail.text": "පළමුවෙන්ම, ඔබ ඔබගේ විද්‍යුත් තැපැල් ලිපිනය සත්‍යාපනය කළ යුතුය. අපි සත්‍යාපන සබැඳියක් යවා ඇත", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "ඊළඟ සිදුවීමේදී යවනු ලබන නිෂ්ක්‍රීය දත්ත", + "scenes.app.popup.appsparameters.pages.publication_description": "ඔබගේ යෙදුම පෙන්වීම නිශ්චය කරන්න.", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "කියවීමේ වරප්‍රසාදය", + "scenes.app.popup.appsparameters.pages.remove_app": "යෙදුම {{$1}} ස්ථිරවම මකන්න.", + "scenes.app.popup.appsparameters.pages.status_tilte": "තත්වය", + "scenes.app.popup.appsparameters.pages.string_information": "මෙම තන්තුව ඔබගේ යෙදුම හඳුනා ගන්නා අතර පණිවිඩ විධානවල භාවිතා කරනු ඇත.", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "සිදුවීම් පිළිගැනීමේ Url", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "ඔබට දැනුම්දීම් නොලැබෙන කාල සීමාවක් තෝරන්න.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "කාර්ය ඉඩ මකන්න", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "ඔබට මෙම කාර්ය ඉඩ මැකීමට අවශ්‍ය බව තහවුරු කිරීමට, කරුණාකර පහත නම ටයිප් කර මකන්න ඔබන්න.", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "වැඩබිමේ මැදිහත්කරු", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "ඔබ අවසන් පරිපාලකයා වන නිසා ඔබට වැඩබිම හැර යා නොහැක. ඔබට නව පරිපාලකයෙකු නිර්වචනය කිරීමට හෝ මෙම කාර්ය ඉඩ මකා දැමීමට/සංරක්ෂිත කිරීමට හැකිය.", + "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "ගෙවීම් සහ දායකත්වයන්", + "scenes.apps.drive.choose_folder_button": "නාමාවලියක් තෝරන්න", + "scenes.apps.drive.choose_file_button": "ගොනුවක් තෝරන්න", + "components.alert.confirm_click": "OK ක්ලික් කිරීමෙන් ඔබගේ ක්‍රියාව තහවුරු කරන්න.", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "ඔබේ සමාගමෙන් {{$1}} සාර්ථකව මකා ඇත", + "general.delete": "මකන්න", + "general.unarchive": "අසංරක්ෂණය", + "general.confirm": "තහවුරු කරන්න", + "general.connexion_status.disconnected": "ඔබ නොබැඳිය", + "general.connexion_status.connected": "ඔබ මාර්ගගත යි", + "scenes.app.side_app.messages_thread_title": "{{$1}} • Messages thread", + "scenes.app.workspaces.create_company.group_data.group_main_activity.bank": "බැංකුව / රක්ෂණය", + "scenes.app.workspaces.create_company.group_data.group_main_activity.real_estate": "දේපළ වෙළදාම්", + "scenes.app.workspaces.create_company.group_data.group_main_activity.electronics_electricity_energy": "ඉලෙක්ට්රොනික / විදුලි / බලශක්ති", + "scenes.app.workspaces.create_company.group_data.group_main_activity.machinery_automotive": "යන්ත්‍රෝපකරණ / වාහන", + "scenes.app.workspaces.create_company.group_data.group_main_activity.transport_logistics": "ප්රවාහන / සැපයුම්", + "components.user_picker.modal_no_result": "ප්‍රතිඵල හමු නොවිණි", + "scenes.apps.calendar.calendar.list_btn": "ලැයිස්තුව", + "scenes.apps.drive.navigators.navigator_labels.title": "ලේබල්", + "scenes.apps.drive.preview_bloc.error_file": "ගොනුව හමු නොවිණි", + "scenes.apps.messages.chatbox.chat.delete_message": "මෙම පණිවිඩය මකන්න", + "scenes.apps.messages.chatbox.chat.delete_message_btn": "පණිවිඩය මකන්න", + "scenes.apps.messages.left_bar.stream.notifications.never": "කිසිවක් නැත", + "scenes.apps.account.title": "Account parameters", + "scenes.apps.account.notifications.keywords_placeholder": "සංවර්., වයිෆයි, කේතය, ...", + "scenes.apps.account.notifications.disturb_option_a": "අතර මට තල්ලු දැනුම්දීම් එවන්න එපා ", + "scenes.apps.account.notifications.devices_option_ever": "සෑම විටම මට තල්ලු දැනුම්දීම් එවන්න", + "scenes.apps.account.notifications.devices_option_never": "මට කිසිවිටක තල්ලු දැනුම්දීම් එවන්න එපා", + "scenes.apps.tasks.unconfigured_tab": "මෙම ටැබය තවම වින්‍යාස කර නොමැත.", + "scenes.apps.tasks.choose_board_button": "පුවරුවක් තෝරන්න", + "scenes.apps.tasks.task_status.todo": "කිරීමට", + "scenes.apps.tasks.task_status.done": "අහවර", + "scenes.apps.tasks.list_modal.modify_list": "ලැයිස්තුව වෙනස් කරන්න", + "scenes.apps.tasks.list_modal.new_list": "නව ලැයිස්තුව", + "scenes.apps.tasks.list_modal.remove": "ලැයිස්තුව සහ කාර්යයන් ඉවත් කරන්න", + "scenes.apps.tasks.list_modal.predefined_participants": "පූර්ව නිශ්චිත සහභාගිවන්නන්", + "scenes.login.forgot_password.text": "ඔබගේ අනන්‍යතාවය තහවුරු කිරීම සඳහා ඔබට විද්‍යුත් තැපෑලෙන් ඉලක්කම් 9ක කේතයක් ලැබෙනු ඇත.", + "scenes.login.forgot_password.password2": "මුරපදය තහවුරු කරන්න", + "components.emoji_picker.categories.not_found": "ඉමොජි හමු නොවිණි", + "scenes.app.taskpicker.select": "තෝරන්න", + "components.drive.navigators.directory_not_found": "නාමාවලිය හමු නොවිණි.", + "components.drive.modify_uslist": "පරිශීලක ලැයිස්තුව වෙනස් කරන්න", + "components.searchpopup.last_modif": "අවසාන වෙනස් කිරීම", + "components.alert.confirm": "ඔබේ ක්‍රියාව තහවුරු කරන්න", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "පණිවිඩ අංකය", + "scenes.app.channelsbar.channel_removing": "නාලිකාව මකන්න", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "සංවිධානාත්මකව සිටීමට රාමුව මත එබීමෙන් මෙම නාලිකා ඔබගේ ව්‍යාපාරයට ආයාත කළ හැකිය.", + "scenes.app.channelsbar.initial_instructions_tutorial": "මුල් නමක්, නමක් සහ පැතිකඩ පින්තූරයක් තෝරන්න.", + "scenes.app.channelsbar.installation_desktop_tutorial": "ඩෙස්ක්ටොප් යෙදුම ස්ථාපනය කරන්න", + "scenes.app.channelsbar.tutorial_alert": "මෙම රාමුව යළි නොපෙන්වන්නද?", + "scenes.app.channelsbar.welcoming_message_subtitle": "ක්ලික් කිරීම් කිහිපයකින් Twake pro කෙනෙක් වන්න!", + "scenes.app.mainview.instruction_current_tab": "ඔබගේ වම් පස ඇති නාලිකාවක් තේරීමෙන් ආරම්භ කරන්න.", + "scenes.app.popup.adduser.adresses_message": "කරුණාකර ලිපින කොමාවකින් හෝ ඉඩකින් වෙන් කරන්න. Twake ඔබගේ දායකත්වය මත පදනම්ව ආරාධනා ගණන සීමා කළ හැකි බව මතක තබා ගන්න.", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "ඔබගේ Twacode පණිවිඩවල පෙනුම පරීක්ෂා කරන්න", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "යෙදුමට සංස්කරණය සහ කියවීමට හැකි දේ නියම කරන්න.", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "යෙදුමේ වරප්‍රසාද", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "ඔබගේ අයදුම්පත්‍රය ප්‍රකාශනය දැනට Twake කණ්ඩායම විසින් වලංගු කිරීමක් බලාපොරොත්තුවෙන් සිටී.", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "උදාසීන '{{$3}}' සහිත '{{$1}}' සහ id '{{$2}}' වර්ගයේ සිදුවීම", + "scenes.app.popup.appsparameters.pages.danger_zone_description": "යෙදුම මකන්න", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "යෙදුම පෙන්වන්නේ කොතැනදැයි නියම කිරීමට ඔබට ඉඩ සලසයි.", + "scenes.app.popup.appsparameters.pages.error_message": "මෙම නම දැනටමත් වෙනත් යෙදුමක් විසින් භාවිතා කර ඇත; කරුණාකර වෙනත් එකක් තෝරන්න.", + "scenes.app.popup.appsparameters.pages.filter_information": "මෙම පෙරහන ඔබගේ API යතුර ඔබගේ සම්බන්ධකයේ ඇති සේවාදායකයන්ට පමණක් භාවිතා කිරීම සීමා කරයි.", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "මෙම නම දැනටමත් වෙනත් යෙදුමකින් භාවිතා වේ. කරුණාකර වෙනත් එකක් තෝරන්න.", + "scenes.app.popup.appsparameters.pages.installation": "ස්ථාපනය කරන්න.", + "scenes.app.popup.appsparameters.pages.optimal_format": "ප්රශස්ත ආකෘතිය: 48x48px.", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "ප්‍රකාශනය නොකළ යෙදුම ඔබේ සමාගම තුළ පමණක් ක්‍රියා කරයි. ඔබට එය සියලුම Twake පරිශීලකයින්ට ලබා දීමට අවශ්‍ය නම්, මෙම විකල්පය සක්‍රිය කරන්න.", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "ලිවීමේ වරප්‍රසාද", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "You can not delete this app if it is published.", + "scenes.app.popup.appsparameters.pages.remove_app_button": "යෙදුම මකන්න", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "මනාප සංදර්ශන කරන්න", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "webhooks වෙත ප්‍රවේශය", + "scenes.apps.calendar.export_view_menu": "Export the view...", + "scenes.apps.calendar.ics_subscription_menu": "ICS දායකත්ව සබැඳියක් ලබා ගන්න", + "scenes.apps.calendar.modals.remove_button": "මකන්න", + "scenes.apps.calendar.modals.remove_event_button": "සිදුවීම මකන්න", + "scenes.apps.calendar.modals.remove_event_text": "සිදුවීම මකන්නද?", + "scenes.apps.calendar.remove_calendar_confirmation": "දින දර්ශනය සහ එහි සිදුවීම් ස්ථිරවම මකන්නද?", + "scenes.apps.drive.message_added_file": "{{$1}} {{$2}} යවන ලදී.", + "scenes.apps.drive.remove_definitely_menu": "ස්ථිරවම මකන්න", + "scenes.apps.drive.unconfigured_tab": "මෙම ටැබය තවම වින්‍යාස කර නොමැත.", + "scenes.apps.messages.message.pin_button": "Pin message", + "scenes.apps.messages.message.unpin_button": "පණිවිඩය ඇමුණුම ඉවත් කරන්න", + "scenes.apps.messages.message.pinned": "පින් කර ඇත", + "scenes.apps.messages.message.remove_button": "මකන්න", + "scenes.login.verifymail.success": "ඔබගේ විද්‍යුත් තැපෑල සාර්ථකව සත්‍යාපනය කරන ලදී!", + "scenes.login.verifymail.verification_waiting": "සත්‍යාපනය සඳහා රැඳී සිටිමින්...", + "services.apps.messages.no_command_possible": "'{{$2}}' නොපවතින නිසා හෝ විධාන සෑදීමට ඉඩ නොදෙන නිසා අපට '{{$1}}' විධානය ක්‍රියාත්මක කළ නොහැක.", + "scenes.apps.calendar.unconfigured_tab": "මෙම ටැබය තවම වින්‍යාස කර නොමැත.", + "scenes.apps.drive.top_menu_no_items": "{{$1}} items", + "scenes.apps.drive.viewer.download_desktop": "යෙදුමේ පෙරදසුන් කිරීමට Twake Desktop බාගන්න", + "scenes.apps.tasks.board.tasks.use_deadline": "නියමිත කාළය භාවිතය", + "scenes.apps.tasks.board.tasks.use_starttime": "ආරම්භක වේලාව භාවිතය", + "scenes.apps.tasks.board.tasks.in_list": "ලැයිස්තුවේ", + "scenes.apps.tasks.board.starts": "ආරම්භ කරයි", + "scenes.apps.tasks.board.ends": "සඳහා සිදු කළ යුතුය", + "scenes.apps.tasks.board.list_name": "ලැයිස්තුවේ නම", + "scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "සමාගමේ අනුරුව සංස්කරණය ", + "scenes.apps.account.account.send_info": "මෙම අක්තපත්‍ර තොරතුරු ඔබේ පරිශීලකයාට යවන්න.", + "components.drive.elements.configurate_mod": "මැදිහත්කරු වින්‍යාසගත කරන්න...", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "නව ටැබ් එකක් සාදන්න", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} ඊමේල්(ය) එකතු වනු ඇත", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}} නාලිකාවට {{$2}} එක් කළේය", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}} {{$2}} නාලිකාවෙන් ඉවත් කරන ලදී", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} නව {{$2}} ටැබයක් {{$3}} එක් කරන ලදී", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} {{$2}} ටැබය {{$3}} ඉවත් කරන ලදී", + "general.verify": "තහවුරු කරන්න", + "components.unverified_account.typography_text_danger": "ඔබගේ අත්හදා බැලීමේ කාල සීමාව තුළ ඔබට {{$1}} දින(ය) ඉතිරිව ඇත. අත්හදා බැලීමේ ගිණුම දින 7කට පසු අවහිර කරනු ලබන අතර ලියාපදිංචි වී මාස 1කට පසු ස්ථිරවම මකා දමනු ලැබේ. අපි ඔබට එවූ සත්‍යාපන විද්‍යුත් තැපෑලෙහි \"මගේ ගිණුම සත්‍යාපනය කරන්න\" බොත්තම ක්ලික් කිරීමෙන් ඔබට ඔබගේ ගිණුම සත්‍යාපනය කළ හැක.", + "components.unverified_account.verification_details": "අපි සත්‍යාපන විස්තර යවා ඇත", + "components.account_verication_status_unverified": "තහවුරු නොකළ", + "components.verify_mail.paragraph": "ඔබට අවශ්‍ය නම් ඔබට එය පසුව කළ හැකි නමුත් සත්‍යාපනය නොකළ ගිණුම්වලට ප්‍රවේශය ඇත්තේ Twake හි සීමිත අනුවාදයකට පමණි", + "services.console_services.toaster.success_verify_email": "ඔබගේ විද්‍යුත් තැපැල් ගිණුමට සත්‍යාපන සබැඳියක් යවා ඇත", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "අමුත්තන් හෝ තිබෙන වි-තැපැල් සොයන්න", + "general.user.deleted": "මකා දැමූ ගිණුම", + "components.richtexteditor.toolbar.bold": "මහත", + "components.richtexteditor.toolbar.italic": "ඇල", + "components.richtexteditor.toolbar.strikethrough": "පහර හරහා", + "components.richtexteditor.toolbar.unordered-list": "බුලටිත ලැයිස්තුව", + "components.richtexteditor.toolbar.ordered-list": "ඇණවුම් කළ ලැයිස්තුව", + "components.richtexteditor.toolbar.blockquote": "වාරණ උපුටා දැක්වීම", + "components.richtexteditor.toolbar.code-block": "Code Block", + "components.locked_features.locked_history_banner.description": "ඔබේ සමාගමට පණිවිඩ ගොඩක් තිබේ! ඔබගේ සියලුම පණිවිඩ ඉතිහාසයට ප්‍රවේශ වීමට දැන් උත්ශ්‍රේණි කරන්න.", + "components.locked_features.locked_guests_popup.description": "අපොයි!! ඔබට ඔබේ වැඩබිමට බාහිර පරිශීලකයින්ට ආරාධනා කිරීමට අවශ්‍ය බව පෙනේ. ඔබට අමුත්තන් සහ බාහිර හවුල්කරුවන් සමඟ සහයෝගයෙන් කටයුතු කිරීමට අවශ්‍ය නම් ඔබේ සැලසුම උත්ශ්‍රේණි කිරීම සලකා බැලීමට ඔබට අවශ්‍ය විය හැකිය. අපගේ මිලකරණ විකල්ප ගවේෂණය කර ඔබේ කණ්ඩායම් සහයෝගීතා අවශ්‍යතා සඳහා හොඳම විකල්පය තෝරන්න.", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "ඔබේ සමාගම් දායකත්වයේ ගැටලුවක් තිබේ. කරුණාකර ඔබේ එක බලන්න", + "components.on_boarding.company_billing_banner.guest_or_member_text": "ඔබේ සමාගම් දායකත්වයේ ගැටලුවක් තිබේ. කරුණාකර සමාගමේ හිමිකරු හෝ පරිපාලක අමතන්න!", + "components.on_boarding.company_billing_banner.link": "සමාගම් දායක සැලැස්ම", + "components.on_boarding.popups.blocked_company.description": "Twake වෙත ඔබගේ දායකත්වය කල් ඉකුත් වී ඇත. කරුණාකර එය අලුත් කිරීමට සහ ඔබේ කණ්ඩායම සමඟ නැවත සන්නිවේදනය කිරීමට හැකි වීම සඳහා ඔබේ සමාගමේ හිමිකරු හෝ පරිපාලක අමතන්න!", + "components.on_boarding.popups.blocked_company.learn_more_text": "සමාගම් දායක සැලැස්ම ගැන තව දැන ගැනීමට අවශ්‍යද?", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "ඔබ මෙම පණිවිඩය මකා ඇත", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} ඔහුගේ පණිවිඩය මකා ඇත", + "components.locked_features.locked_workspace_popup.text": "අපොයි!! ඔබේ සමාගම තුළ නව වැඩ ඉඩක් නිර්මාණය කිරීමට ඔබට අවශ්‍යද? ඔබට ඔබේ සැලසුම උත්ශ්‍රේණි කිරීම සලකා බැලීමට අවශ්‍ය විය හැකිය. අපගේ මිලකරණ විකල්පයන් ගවේෂණය කර ඔබගේ කණ්ඩායම් සහයෝගීතා අවශ්‍යතා සඳහා හොඳම තේරීම තෝරන්න.", + "components.locked_features.locked_only_office_popup.text": "අපොයි!! ඔබට Twake වෙතින් ගොනුව සංස්කරණය කිරීමට අවශ්‍ය බව පෙනේ. ඔබට කාර්යාල ලිපිගොනු වටා සහයෝගයෙන් කටයුතු කිරීමට අවශ්‍ය නම් ඔබේ සැලසුම උත්ශ්‍රේණි කිරීම සලකා බැලීමට ඔබට අවශ්‍ය විය හැකිය. අපගේ මිලකරණ විකල්ප ගවේෂණය කර ඔබේ කණ්ඩායම් සහයෝගීතා අවශ්‍යතා සඳහා හොඳම විකල්පය තෝරන්න.", + "general.resume": "අරඹන්න", + "general.pause": "Pause" } diff --git a/twake/frontend/public/locales/tr.json b/twake/frontend/public/locales/tr.json index 6c923a856b..b45cae00f3 100644 --- a/twake/frontend/public/locales/tr.json +++ b/twake/frontend/public/locales/tr.json @@ -63,5 +63,785 @@ "scenes.app.workspaces.create_company.group_data.group_main_activity.publishing_communication_multimedia": "Yayıncılık / İletişim / Multimedya", "scenes.app.workspaces.create_company.group_data.group_main_activity.transport_logistics": "Taşımacılık / Lojistik", "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "Yönetim", - "components.drive_dropzone.uploading": "Yüklüyor..." -} \ No newline at end of file + "components.drive_dropzone.uploading": "Yüklüyor...", + "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "Ödemeler ve abonelikler", + "scenes.app.workspacesbar.components.change_company_title": "Şirket değiştir", + "scenes.app.workspacesbar.components.create_company_menu": "Bir şirket oluşturun", + "scenes.apps.calendar.no_calendar_text": "Bu çalışma alanı için herhangi bir takvim ayarlamadınız.", + "scenes.apps.calendar.no_connectors_menu_text": "Bir takvime bağlanabilecek bağlayıcınız yok.", + "scenes.apps.calendar.remove_calendar_confirmation": "Takvim ve etkinlikleri kalıcı olarak silinsin mi?", + "scenes.apps.calendar.today_menu": "Bugün", + "scenes.apps.calendar.week_option": "Hafta", + "scenes.apps.calendar.workspace": "çalışma alanı", + "scenes.apps.calendar.workspace_label": "Bu çalışma alanı", + "scenes.apps.calendar.workspace_menu": "çalışma alanı", + "scenes.apps.drive.add_button": "Ekle", + "scenes.apps.drive.message_added_file": "{{$1}}, {{$2}} gönderdi.", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}} birden fazla dosya gönderdi.", + "scenes.apps.drive.message_added_file_no_name": "{{$1}} bir dosya gönderdi.", + "scenes.apps.messages.input.edited": "Düzenlendi", + "scenes.apps.messages.just_you": "Yalnızca size görünür", + "scenes.apps.messages.message.new_messages_bar": "Yeni mesajlar", + "scenes.apps.messages.message.cancel_button": "İptal", + "scenes.apps.messages.message.modify_button": "Düzenlemek", + "scenes.apps.messages.message.pin_button": "Pin mesajı", + "scenes.apps.messages.message.unpin_button": "Mesajın sabitlemesini kaldır", + "scenes.apps.messages.message.copy_link": "Bağlantıyı mesaja kopyala", + "scenes.apps.messages.message.pinned": "sabitlenmiş", + "scenes.apps.messages.message.remove_button": "Silmek", + "scenes.apps.messages.message.reply_button": "Cevap vermek", + "scenes.apps.messages.message.save_button": "Kaydetmek", + "scenes.apps.messages.message.show_button": "Görüntülemek", + "scenes.apps.messages.message.show_responses_button": "Tüm yanıtları görüntüle", + "scenes.apps.messages.message.types.first_channel_message_text": "Bu kanalın ilk mesajı", + "scenes.apps.messages.message.types.first_message_text": "Bu ilk mesaj", + "scenes.apps.messages.messageslist.get_writing_user": "yazıyor...", + "services.apps.messages.no_app": "Bu uygulama mevcut değil.", + "services.apps.messages.no_command_possible": "'{{$1}}' komutunu çalıştıramıyoruz çünkü '{{$2}}' mevcut değil veya komut oluşturmaya izin vermiyor.", + "services.user.notification_parameters_update_alert": "Bildirim ayarları güncellendi.", + "scenes.apps.drive.right_preview.public": "Kamu erişim", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Uygulamalarınızı ve bağlayıcılarınızı yönetin.", + "scenes.app.popup.appsparameters.pages.title_informations": "Temel bilgiler", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "Uygulama yönetimi ile ilgili bilgiler", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "Geçerli kullanıcı kimliği", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "Geçerli çalışma alanı kimliği", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "Geçerli grup kimliği", + "scenes.app.mainview.channel_description": "Kanalı tanımlayın", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "Tüm çalışma alanı kullanıcılarını otomatik olarak bu kanala davet et", + "components.locked_features.locked_guests_popup.subtitle": "Bu özellik Twake'in ücretsiz sürümünde mevcut değildir.", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "Şirket aboneliğinizle ilgili bir sorun var. Lütfen, kendinize bir göz atın", + "components.on_boarding.company_billing_banner.guest_or_member_text": "Şirket aboneliğinizle ilgili bir sorun var. Lütfen şirket sahibi veya yöneticisi ile iletişime geçin!", + "components.on_boarding.company_billing_banner.link": "şirket abonelik planı", + "components.on_boarding.popups.blocked_company.title": "Bir ödeme sorunu nedeniyle şirketiniz kilitlendi", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "Buraya Tıkla", + "components.locked_features.locked_only_office_popup.subtitle": "Ücretsiz sürümde sadece ofis kullanamazsınız.", + "scenes.app.integrations_parameters.title": "Entegrasyonlar", + "scenes.app.integrations_parameters.applications_table.name": "İsim", + "scenes.app.integrations_parameters.applications_table.title": "Diğer entegrasyonlar", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "Uygulama ara", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "İnternet sitesi", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "Oluşturulma tarihi", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "sürüm", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "{{$1}} şirketinizden başarıyla silindi", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "{{$1}} şirketinize başarıyla eklendi", + "scenes.apps.messages.input.replied_to": "yanıtladı ", + "scenes.join.login_first_button": "Önce giriş yapın veya bir hesap oluşturun", + "scenes.join.join_the_team_button": "Takıma katıl", + "scenes.apps.account.title": "Hesap parametreleri", + "scenes.apps.account.account.menu_title": "Hesap", + "scenes.apps.account.languages.menu_title": "Dilim", + "scenes.apps.account.account.firstname": "İlk adı", + "scenes.apps.account.account.lastname": "Soyadı", + "scenes.apps.account.account.username": "Kullanıcı adı", + "scenes.apps.account.account.change_username": "Benzersiz kullanıcı adınızı değiştirin.", + "scenes.apps.account.account.emails": "e-postalar", + "scenes.apps.account.account.main_email": "ana e-posta", + "scenes.apps.account.account.email_add": "Yeni e-posta ekle", + "scenes.apps.account.account.email_add_modal.invalid_code": "Bu kod geçersiz", + "scenes.apps.account.account.password": "Parola", + "scenes.apps.account.account.password_modal.old_password": "Şimdiki Şifre", + "scenes.apps.account.account.password_modal.password": "Yeni Şifre", + "scenes.apps.account.account.password_modal.bad_old_password": "Eski şifre doğru değil.", + "scenes.apps.account.account.password_modal.bad_password": "Şifreleriniz uyuşmuyor veya çok kısa. Lütfen en az 8 karakterden oluşan bir şifre giriniz.", + "scenes.apps.account.account.logout": "Çıkış Yap", + "scenes.apps.account.notifications.title": "Bildirimler", + "scenes.apps.account.notifications.keywords_subtitle": "anahtar kelimeler", + "scenes.apps.account.notifications.keywords_placeholder": "dev, wifi, kod, ...", + "scenes.apps.account.notifications.disturb_option_a": "arasında bana push bildirimleri gönderme ", + "scenes.apps.account.notifications.disturb_option_b": " ve ", + "scenes.apps.account.notifications.disturb_option_c": " (yerel saat dilimi)", + "scenes.apps.account.notifications.devices_subtitle": "Cihaz bildirimleri", + "scenes.apps.account.notifications.devices_option_ever": "Bana her zaman push bildirimleri gönder", + "scenes.apps.account.notifications.devices_option_inactive": "Masaüstünde etkin olmadığımda bana anında iletme bildirimleri gönder", + "scenes.apps.account.notifications.devices_option_never": "Bana asla push bildirimleri gönderme", + "scenes.apps.account.notifications.privacy_subtitle": "Mahremiyet", + "scenes.apps.account.notifications.mail_subtitle": "E-posta Bildirimleri", + "scenes.apps.account.notifications.sound": "Sesli bildirim", + "scenes.apps.parameters.group_sections.apps.badge_extension": "Uzantı", + "scenes.apps.parameters.workspace_sections.members.members": "Kullanıcılar", + "scenes.apps.parameters.workspace_sections.members.pending": "bekleyen e-postalar", + "scenes.apps.parameters.workspace_sections.members.invite": "Yeni kullanıcı davet et", + "scenes.apps.parameters.workspace_sections.members.invite_btn": "Kullanıcı Ekle", + "scenes.apps.tasks.new_board.title": "Yeni tahta", + "scenes.apps.tasks.new_board.edit_title": "Panoyu düzenle", + "scenes.apps.tasks.task": "Görev", + "scenes.apps.tasks.no_tasks": "Sorma", + "scenes.apps.tasks.task_status.todo": "Yapmak", + "scenes.apps.tasks.task_status.current": "Akım", + "scenes.apps.tasks.task_status.done": "Tamamlandı", + "scenes.apps.tasks.task.description": "Açıklama", + "scenes.apps.tasks.task.assignees": "atananlar", + "scenes.apps.tasks.task.edit.dates": "Tarih", + "scenes.apps.tasks.list_modal.modify_list": "Listeyi değiştir", + "scenes.apps.tasks.list_modal.new_list": "Yeni liste", + "scenes.apps.tasks.list_modal.remove": "Listeyi ve görevleri kaldır", + "scenes.apps.tasks.list_modal.predefined_participants": "Önceden tanımlanmış katılımcılar", + "scenes.apps.tasks.list_modal.archive_all_tasks": "Tüm görevleri arşivle", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "Arşivlenmiş görevleri kaldırın ({{$1}})", + "scenes.login.footer.go_to_twake": "twakeapp.com'a gidin", + "scenes.login.footer.branding": "Bir {{$1}} ({{$2}}) özel Twake sunucusundasınız. ", + "scenes.login.create_account.title": "Yeni bir hesap oluştur", + "scenes.login.create_account.email": "e-posta", + "scenes.login.create_account.email_used": "Bu e-posta zaten kullanılıyor.", + "scenes.login.create_account.username": "Kullanıcı adı", + "scenes.login.create_account.username_already_exist": "Bu kullanıcı adı zaten kullanılıyor", + "scenes.login.create_account.fill_in_username": "Kullanıcı adınızı doldurmalısınız", + "scenes.login.create_account.fill_in_email": "E-postanızı doğru bir e-posta ile doldurmalısınız", + "scenes.login.create_account.too_short_password": "Şifreniz en az 8 karakter içermelidir.", + "scenes.login.create_account.firstname": "İlk adı", + "scenes.login.create_account.newsletter": "Twake hakkında bilgi alın", + "scenes.login.create_account.lastname": "Soyadı", + "scenes.login.forgot_password.title": "Parolanızı mı unuttunuz?", + "scenes.login.forgot_password.text": "Kimliğinizi doğrulamak için e-posta ile 9 haneli bir kod alacaksınız.", + "scenes.login.forgot_password.email_to_recover": "Kurtarmak için e-posta", + "scenes.login.forgot_password.mail_doesnt_exist": "Bu e-posta mevcut değil", + "scenes.login.forgot_password.text2": "9 haneli bir kod alacaksınız. Devam etmek için lütfen aşağıdaki alana giriniz.", + "scenes.login.forgot_password.invalid_code": "Bu kod geçerli değil.", + "scenes.login.forgot_password.text3": "Hesabınız için yeni bir şifre girin.", + "scenes.login.forgot_password.password": "Parola", + "scenes.login.forgot_password.password2": "Şifreyi Onayla", + "scenes.login.forgot_password.password_dont_match": "Şifreleriniz uyuşmuyor veya çok kısa. Lütfen en az 8 karakterden oluşan bir şifre giriniz.", + "scenes.login.home.title": "Twake'te oturum açın", + "scenes.login.home.subtitle": "Seni gördüğüme sevindim", + "scenes.app.popup.appsparameters.pages.alert_published_app": "Başvurunuz yayınlandı, düzenleyemezsiniz.", + "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "Tüm IP adreslerine izin vermek için geliştirme aşamasında * kullanın.", + "scenes.app.popup.appsparameters.pages.api_data_description": "Twake API için faydalı veriler.", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "Bekleniyor...", + "scenes.app.popup.appsparameters.pages.website_label": "İnternet sitesi", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "Yazma ayrıcalıkları", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "Yayınlanırsa bu uygulamayı silemezsiniz.", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "Uygulama güncellenirken bir hata oluştu.", + "scenes.app.popup.workspaceparameter.pages.apps_research_title": "Uygulamaları ara", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "Bu çalışma alanının uygulamaları", + "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "Aramaya dön", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "Kullanıcıları davet et", + "scenes.app.popup.workspaceparameter.pages.collaborateurs": "Kullanıcılar", + "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "Entegrasyonlar", + "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "Okuma erişimi", + "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "Tüm şirketten çıkar", + "scenes.apps.calendar.day_option": "Gün", + "scenes.apps.calendar.modals.event_description_placeholder": "Açıklama", + "scenes.apps.calendar.modals.event_title_placeholder": "Başlık", + "scenes.apps.calendar.modals.modify_event_button": "Etkinliği düzenle", + "scenes.apps.calendar.modals.part.participants": "Katılımcılar", + "scenes.apps.drive.no_storage_app_alert": "Harici depolama eklemenize izin veren uygulamanız yok.", + "scenes.apps.drive.remove_definitely_menu": "Kalıcı olarak sil", + "scenes.apps.drive.restore_menu": "Onarmak", + "scenes.apps.drive.throw_menu": "çöp kutusuna gönder", + "scenes.apps.drive.trash_empty_menu": "Boş çöp", + "scenes.apps.drive.unconfigured_tab": "Bu sekme henüz yapılandırılmamış.", + "scenes.apps.drive.viewer.edit_with_button": "{{$1}} ile düzenleyin", + "scenes.apps.drive.viewer.loading_preview_message": "Yükleniyor...", + "scenes.apps.messages.input.show_formatting": "Biçimlendirmeyi göster", + "scenes.tell_us": "Lütfen bize ne yaptığınızı söyleyin:", + "scenes.apps.drive.viewer.download_desktop": "Uygulamada önizlemek için Twake Desktop'ı indirin", + "scenes.apps.tasks.my_tasks": "Görevlerim", + "scenes.apps.tasks.board.place_holder": "Kurul adı", + "scenes.apps.tasks.board.tasks.subtask": "alt görev", + "scenes.apps.tasks.board.tasks.add_subtask": "Alt görev ekle", + "scenes.client.channelbar.channelmemberslist.menu.option_2": "Kanaldan kaldır", + "components.leftbar.channel.workspaceschannels.menu.option_1": "Kanal oluştur", + "components.leftbar.channel.workspaceschannels.menu.option_2": "Bir kanala katılın", + "components.channelworkspacelist.title": "Kanallar", + "scenes.client.channelbar.workspacechannellist.autocomplete": "Kanal, kullanıcı veya doğrudan mesajları arayın", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "Yeni bir sekme oluştur", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_edition": "{{$1}}'i yeniden adlandır", + "components.connectorslistmanager.add_connectors": "Bağlayıcı ekle", + "components.upload.drop_files.toaster.error": "{{$1}} dosyadan fazlasını yükleyemezsiniz", + "components.emoji_picker.categories.frequently_used": "Sıklıkla kullanılan", + "components.emoji_picker.categories.smileys_and_people": "Suratlar ve İnsanlar", + "components.emoji_picker.categories.animals_and_nature": "Hayvanlar ve Doğa", + "components.emoji_picker.categories.food_and_drink": "Yiyecek içecek", + "scenes.login.home.email": "e-posta", + "scenes.login.home.unable_to_connect": "Geçersiz kimlik bilgileri", + "scenes.login.home.password": "Parola", + "scenes.login.home.login_btn": "Giriş yapmak", + "scenes.login.home.lost_password": "Parolanızı mı unuttunuz?", + "scenes.login.home.create_account": "Bir hesap oluşturun", + "scenes.login.create_account.password": "Parola", + "scenes.login.create_account.step_1_subtitle": "Daha basit olamazdı - sadece biraz bilgiye ihtiyacımız var.", + "scenes.login.create_account.step_2_subtitle_a": "Diğer kullanıcıların sizi tanıması için tam adınızı ekleyin.", + "scenes.login.create_account.step_2_subtitle_b": "Telefon numaranız gizli kalır.", + "scenes.login.create_account.step_3_mail_sent": "Size e-posta ile bir aktivasyon linki gönderdik.", + "scenes.login.create_account.step_3_subtitle": "Son adım — robot olmadığınızı doğrulamamız gerekiyor!", + "scenes.app.workspaces.create_company.company_name.placeholder": "Şirket Adı", + "scenes.app.workspaces.create_company.company_name.title_1": "Başlamak,", + "scenes.app.workspaces.create_company.company_name.title_2": "şirketinizin adını belirtin.", + "scenes.app.workspaces.create_company.default_workspace_name": "Ana", + "scenes.app.workspaces.create_company.importations.title_1": "Zaten dijital araçlarla mı çalışıyorsunuz? Araçlarınızı şimdi içe aktarın veya entegre edin!", + "scenes.app.workspaces.create_company.importations.title_2": "Endişelenme, bunu daha sonra yapabilirsin!", + "scenes.app.workspaces.create_company.invitations.title_2": "Ekibinize kullanıcılar ekleyin.", + "scenes.app.workspaces.create_company.title": "şirketimi oluştur", + "scenes.app.workspaces.welcome_page.add_secondary_emails": "İkincil bir e-posta ekleyin", + "scenes.app.workspaces.welcome_page.added_to_company": "davet edildiniz ", + "scenes.app.workspaces.welcome_page.create_my_company": "şirketimi oluştur", + "scenes.app.workspaces.welcome_page.lets_go": "Hadi gidelim!", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "Başka bir e-posta adresi kullanarak mı davet edildiniz?", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "Oh, peki... Görünüşe göre henüz kimse seni bir çalışma alanına davet etmemiş.", + "scenes.app.workspaces.welcome_page.ready_to_work": "Artık çalışmaya hazırsınız.", + "scenes.app.workspaces.welcome_page.see_you_soon": "Yakında görüşürüz!", + "scenes.app.workspaces.welcome_page.try_again": "Tekrar deneyin", + "scenes.app.workspaces.welcome_page.twake_team": "Uyandırmak", + "scenes.app.workspaces.welcome_page.welcome_header": "Twake'e hoş geldiniz!", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "Hesabınıza birden fazla e-posta adresi bağlayabilirsiniz; size bildirim göndermek için yalnızca bir adres kullanılacaktır.", + "scenes.app.workspaces.welcome_page.main_mail_title": "ana adres", + "scenes.app.workspaces.welcome_page.other_mail_title": "ikincil adresler", + "scenes.app.workspaces.welcome_page.add_new_email": "E-posta ekle", + "scenes.app.workspaces.welcome_page.code_verification": "Doğrulama kodu", + "scenes.app.workspaces.welcome_page.new_email": "İkincil bir e-posta ekleyin", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "Size {{$1}} aracılığıyla bir doğrulama kodu gönderdik", + "scenes.app.workspaces.welcome_page.done": "bitirdim", + "scenes.login.forgot_password.finished": "Şifreniz başarıyla güncellendi.", + "scenes.apps.account.account.description_main": "Ana adresiniz, Twake'in bildirimlerinizi gönderdiği yerdir. İkincil adresleriniz, onları kullanan çalışma alanlarına otomatik olarak davet edilmenizi sağlar.", + "scenes.apps.account.account.emails.description": "Farklı e-posta adreslerinizi yönetin.", + "scenes.apps.account.account.make_main": "Ana ayarla", + "scenes.apps.account.account.password.description": "Şifreni değiştir.", + "scenes.apps.account.identity": "Kimlik", + "scenes.apps.account.identity.description": "Diğer Twake kullanıcıları tarafından görülebilen adınızı, soyadınızı ve profil resminizi değiştirin.", + "scenes.apps.account.preference": "tercihler", + "scenes.apps.account.thumbnail.max_weight": "Maksimum boyut 5 MB", + "scenes.apps.account.account.email_add_modal.confirm": "Bu e-postayı onaylayın", + "app.name.twake_calendar": "Takvim", + "app.name.twake_drive": "Belgeler", + "app.name.twake_tasks": "Görevler", + "components.calendar.repetition.everyday": "Günlük", + "components.calendar.repetition.does_not_repeat": "tekrar etmez", + "components.calendar.repetition.weekly_on": "Haftalık {{$1}}", + "components.calendar.repetition.monthly_on": "{{$1}} {{$2}} tarihinde aylık", + "components.calendar.repetition.monthly_on_day": "Aylık gün {{$1}}", + "components.calendar.repetition.annually_on": "{{$1}} tarihinde her yıl", + "components.calendar.repetition.every_weekday": "Hafta içi her gün (Pzt'den Cuma'ya)", + "components.calendar.repetition.custom": "Gelenek...", + "components.calendar.repetition.repeat": "Her tekrarla", + "scenes.app.channelsbar.currentuser.workspace_parameters": "Çalışma alanı ayarları", + "scenes.app.channelsbar.currentuser.logout": "oturumu Kapat", + "scenes.app.channelsbar.currentuser.update": "Güncelleme", + "scenes.app.channelsbar.currentuser.disable_notifications": "Devre dışı bırakmak", + "scenes.app.channelsbar.currentuser.disabling_notifications": "1 saat devre dışı bırak", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "Sabah 9'a kadar devre dışı bırak yarın", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "yeniden etkinleştir", + "scenes.app.channelsbar.currentuser.user_parameter": "Bildirim ayarları", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "Bu çalışma alanını silmek istediğinizi onaylamak için lütfen aşağıya adı yazın ve sil tuşuna basın.", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "Bir kanala bağlanabilecek bağlayıcınız yok.", + "scenes.app.mainview.tabs.rename": "Yeniden isimlendirmek", + "scenes.app.popup.appsparameters.pages.app_modification_right": "Bu şirketin tüm yöneticileri bu uygulamayı düzenleyebilecek.", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "Uygulamanızın neleri düzenleyebileceğini ve okuyabileceğini tanımlayın.", + "scenes.app.popup.appsparameters.pages.automatique_label": "Otomatik", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "'Otomatik' seçeneğini etkinleştirirseniz, bu uygulama bu şirketin sonraki çalışma alanlarına otomatik olarak eklenecektir.", + "scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "İzin verilen IP adresleri", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "Başvurunuzun yayınlanması şu anda Twake ekibi tarafından onaylanmayı bekliyor.", + "scenes.app.popup.appsparameters.pages.button_force": "Şirket genelinde kuvvet", + "scenes.app.popup.appsparameters.pages.danger_zone_label": "tehlikeli bölge", + "scenes.app.popup.appsparameters.pages.description_label": "Açıklama", + "scenes.app.popup.appsparameters.pages.error_check_needed": "Bir hata oluştu; bilgilerinizi kontrol edin.", + "scenes.app.popup.appsparameters.pages.error_message": "Bu ad zaten başka bir uygulama tarafından kullanılıyor; Lütfen başka birini seçiniz.", + "scenes.app.popup.appsparameters.pages.error_user_code": "hata", + "scenes.app.popup.appsparameters.pages.event_subtitle": "Olaylar", + "scenes.app.popup.appsparameters.pages.filter_information": "Bu filtre, API anahtarınızın kullanımını yalnızca bağlayıcınızdaki sunucularla sınırlar.", + "scenes.app.popup.appsparameters.pages.go_back": "Geri", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "Bu ad zaten başka bir uygulama tarafından kullanılıyor. Lütfen başka birini seçiniz.", + "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "basitleştirilmiş ad", + "scenes.app.popup.appsparameters.pages.installation": "yükleyin.", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "Mesajınızı JSON formatında yazarak başlayın.", + "scenes.app.popup.appsparameters.pages.interne_availability_application": "Dahili uygulama", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "Yapılandırmanızı JSON biçiminde oluşturmak için belgelere gidin.", + "scenes.app.popup.appsparameters.pages.loading": "Yükleniyor...", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "Bir sonraki Etkinlikte gönderilecek olan pasif veriler", + "scenes.app.popup.appsparameters.pages.modify_public_data": "Uygulamanızın genel verilerini düzenleyin.", + "scenes.app.popup.appsparameters.pages.publication_label": "yayın", + "scenes.app.popup.appsparameters.pages.publish_app_label": "Uygulamayı yayınla", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "Okuma ayrıcalıkları", + "scenes.app.popup.appsparameters.pages.remove_app": "{{$1}} uygulamasını kalıcı olarak silin.", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "Tüm şirketten çıkar", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "Çalışma alanından kaldır", + "scenes.app.popup.appsparameters.pages.show_button": "Göstermek", + "scenes.app.popup.appsparameters.pages.status_tilte": "Durum", + "scenes.app.popup.appsparameters.pages.remove_app_button": "Uygulamayı sil", + "scenes.app.popup.appsparameters.pages.update_button": "Güncelleme", + "scenes.app.popup.createworkspacepage.add_subtitle": "Daha fazla alana ihtiyaç var?", + "scenes.app.popup.createworkspacepage.create_new_workspace": "Yeni bir çalışma alanı oluşturun", + "scenes.app.popup.createworkspacepage.placeholder_name": "Çalışma alanının adı", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "Mobil bildirimlerin sıklığını ayarlayın.", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "Bildirimlerin sıklığı", + "scenes.app.popup.userparameter.pages.private_message_content.hide": "Özel mesaj içeriğini gizle", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "Bildirim almayacağınız bir dönem seçin.", + "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "geceleri rahatsız etmeyin", + "scenes.app.popup.userparameter.pages.notif_content_label": "Bildirimlerin içeriği", + "scenes.app.mainview.quick_search_placeholder": "Hızlı arama", + "scenes.app.popup.userparameter.personnal_workspaces_title": "Çalışma alanlarınız", + "scenes.app.popup.workspaceparameter.admin_current_status": "Siz bir Yöneticisiniz.", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "Siz bir çalışma alanı yöneticisisiniz.", + "scenes.app.popup.workspaceparameter.manager_current_status": "Siz bir şirket yöneticisisiniz.", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "Çalışma alanını sil", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "Kaldırmak için çalışma alanında yalnız olmalısınız. Ortak çalışanlarınızı kaldırın ve tekrar deneyin.", + "scenes.app.popup.workspaceparameter.pages.enter": "Girmek ", + "scenes.app.popup.workspaceparameter.pages.access_apps": "Uygulamalarınıza ve bağlayıcılarınıza erişin", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "Çalışma alanı moderatörü", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "Şirketin diğer alanlarında kurulu uygulamalar {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_subtitle": "Yüklü uygulamalar", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "Aşağıdaki kullanıcılar davet edilirken bir hata oluştu: ", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "Kullanılan kullanıcı adının veya e-postanın geçerli olup olmadığını kontrol edin.", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "Bu çalışma alanının görüntüsünü düzenleyin", + "scenes.app.popup.workspaceparameter.pages.research_by": "Uygulamaları ada ve kategorilere göre arayın", + "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "Uygulamaları ara...", + "scenes.app.popup.workspaceparameter.pages.show_button": "Görüntülemek", + "scenes.app.popup.workspaceparameter.pages.title": "Çalışma alanı ayarları", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "Web kancalarına erişim", + "scenes.app.popup.workspaceparameter.pages.weight_max_small_text": "Maksimum boyut 5 MB.", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "Bu çalışma alanından kaldır", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "çalışma alanı", + "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "Yazma erişimi", + "scenes.app.popup.workspaceparameter.pages.your_apps_label": "Uygulamalarınız", + "scenes.app.workspacesbar.components.grp_parameters": "{{$1}} ayarları", + "scenes.apps.calendar.add_calendar_menu": "Takvim ekle", + "scenes.apps.calendar.connectors_menu": "Konektörler...", + "scenes.apps.calendar.connectors_search_menu": "Bağlayıcı ara...", + "scenes.apps.calendar.create_calendar_title": "Bir takvim oluşturun", + "scenes.apps.calendar.edit_calendar_title": "Takvimi düzenle", + "scenes.apps.calendar.export_title": "İhracat", + "scenes.apps.calendar.export_view_menu": "Görünümü dışa aktar...", + "scenes.apps.calendar.ics_download_menu": "Bir ICS dosyası indirin", + "scenes.apps.calendar.ics_subscription_menu": "Bir ICS abonelik bağlantısı alın", + "scenes.apps.calendar.modals.advanced_options": "Gelişmiş seçenekler", + "scenes.apps.calendar.modals.description_placeholder": "Açıklama", + "scenes.apps.calendar.modals.details_title": "Detaylar", + "scenes.apps.calendar.modals.participants_event": "Katılımcılar", + "scenes.apps.calendar.modals.reminders": "hatırlatıcılar", + "scenes.apps.calendar.modals.remove_button": "Silmek", + "scenes.apps.calendar.modals.remove_event_button": "Etkinliği sil", + "scenes.apps.calendar.modals.remove_event_text": "Etkinlik silinsin mi?", + "scenes.apps.calendar.modals.title_placeholder": "Başlık", + "scenes.apps.drive.create_folder_button": "Oluşturmak", + "scenes.apps.drive.download_button": "İndirmek", + "scenes.apps.drive.open_link": "Bağlantıyı yeni pencerede aç", + "scenes.apps.drive.files_subtitle": "Dosyalar", + "scenes.apps.drive.folder_subtitle": "klasörler", + "scenes.apps.drive.go_out_trash_menu": "çöp bırak", + "scenes.apps.drive.go_trash_menu": "çöp kutusuna git", + "scenes.apps.drive.import_from_computer_menu": "bilgisayardan yükle", + "scenes.apps.drive.move_text": "Hareket", + "scenes.apps.drive.new_file_menu": "Yeni dosya", + "scenes.apps.drive.new_file_title": "Yeni dosya", + "scenes.apps.drive.new_external_storage": "Yeni harici depolama", + "scenes.apps.drive.new_folder_title": "Yeni dosya", + "scenes.apps.drive.viewer.no_preview_message": "Bu tür bir dosya görüntülenemiyor.", + "scenes.apps.messages.messageslist.go_last_message_button": "son mesaja git", + "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "Yeni mesajlar", + "services.user.update_password_alert": "Şifreniz güncellenmiştir.", + "scenes.apps.tasks.board.tasks.use_deadline": "Son tarihi kullan", + "scenes.apps.tasks.board.tasks.use_starttime": "Başlangıç zamanını kullan", + "scenes.apps.tasks.board.starts": "başlatır", + "scenes.apps.tasks.board.ends": "için yapılacak", + "scenes.apps.tasks.board.list_name": "Liste adı", + "scenes.app.popup.sync_calendar": "Takvimlerinizi senkronize edin.", + "scenes.apps.parameters.workspace_sections.workspace.logo_company": "şirket logosu", + "scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "Şirket resmini düzenle ", + "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "daveti iptal et", + "scenes.apps.account.account.fullname": "Ad Soyad", + "login.email_login": "E-posta / Giriş", + "scenes.apps.account.account.password_for_user": "Kullanıcınız için şifre", + "scenes.apps.account.account.send_info": "Bu kimlik bilgilerini kullanıcınıza gönderin.", + "scenes.apps.account.account.save": "Hesabı kaydet", + "scenes.apps.account.message_temporary": "Geçici bir hesap, normal bir Twake hesabı gibi çalışır, ancak parolayı siz oluşturursunuz ve gerekirse parolayı sıfırlayabilirsiniz.", + "scenes.apps.account.message_user_signin": "Kullanıcınız bu aynı e-postayı kullanarak herhangi bir zamanda oturum açabilir ve geçici hesabı normal bir hesapla değiştirebilir.", + "scenes.app.mainview.link_expired": "Bu genel bağlantı geçersiz veya süresi dolmuş.", + "scenes.app.mainview.create_account": "üzerinde ücretsiz olarak çalışma alanınızı oluşturun ", + "scenes.apps.calendar.modals.reminder_add": "Hatırlatıcı ekle", + "components.attachmentpicker.add_attachment": "Ek ekle", + "components.drive.new_versions": "Yeni bir sürüm ekle", + "components.drive.navigators.directory_not_found": "Dizin bulunamadı.", + "components.drive.right_preview.suppress_link": "Bağlantıyı bastır", + "components.tagpicker.tag_name": "Etiket adı", + "components.upload.drop_files": "Dosyalarınızı buraya bırakın", + "components.workspace.list_manager.no_workspace": "Çalışma alanı yok", + "components.workspace.list_manager.add": "Çalışma alanları ekle", + "components.workspace.list_manager.current_space": "Geçerli çalışma alanı", + "components.workspace.list_manager.current_company": "Mevcut şirket", + "components.workspace.list_manager.all": "Tüm", + "components.workspace.calendar.invalid": "Geçersiz", + "components.searchpopup.enter_text": "Twake'i aramak için bir metin girin.", + "components.searchpopup.loading": "Daha fazla sonuç yükleniyor", + "components.searchpopup.filter_ws": "Çalışma alanlarını filtrele", + "components.searchpopup.tags": "Etiketler", + "components.searchpopup.size": "Boy", + "components.searchpopup.creation": "oluşturma", + "components.searchpopup.update_search": "Aramayı güncelle", + "components.searchpopup.last_modif": "Son değişiklik", + "components.searchpopup.sender": "Gönderen", + "components.searchpopup.mentions": "Mansiyonlar", + "components.searchpopup.only_pinned": "Yalnızca sabitlenmiş mesajlar", + "components.alert.confirm": "İşleminizi onaylayın", + "components.alert.confirm_click": "Tamam'a tıklayarak işleminizi onaylayın.", + "components.searchpopup.tasks": "Görevler", + "scenes.app.mainview.advanced_search_placeholder": "Gelişmiş Arama", + "components.searchpopup.hide_filters": "filtreleri gizle", + "components.searchpopup.show_filters": "filtreleri göster", + "components.searchpopup.load_more": "Daha fazla sonuç yükle", + "general.more": "Daha", + "scenes.apps.board.archived_tasks": "Arşivlenmiş görevler ({{$1}})", + "scenes.apps.board.active_tasks": "Aktif görevler", + "scenes.apps.board.kanban": "kanban", + "scenes.apps.board.display_as": "olarak göster", + "scenes.apps.board.new_task": "+ Yeni görev", + "scenes.apps.board.all_boards": "Tüm Panolar", + "components.userlistmanager.no_users": "Kullanıcı yok.", + "scenes.apps.calendar.video_link": "Bağlantıyı açmak için tıklayın", + "components.tagpicker.notag": "Etiket yok", + "scenes.apps.tasks.modals.attachments": "ekler", + "components.calendar.calendarselector.from": "İtibaren", + "scenes.apps.drive.move_text2": "Hareket", + "components.attachmentpicker.from_computer": "cihazınızdan", + "components.attachmentpicker.from_twake": "Twake Belgelerinden", + "components.attachmentpicker.file": "Dosya", + "components.attachmentpicker.remove_attach": "Eki kaldır", + "scenes.apps.drive.remove_attachs": "Ekleri kaldır", + "components.drive.elements.see": "Görmek", + "components.drive.elements.current_name": "Şu anki ismi: ", + "scenes.app.channelsbar.hide_discussion_leaving.menu": "Tartışmayı gizle", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} e-posta(lar)ı eklenecek", + "components.newversion.new_version_component.row.part_1": "Eski bir Twake sürümü çalıştırıyorsunuz", + "components.newversion.new_version_component.row.part_2": "Uygulamayı yeniden yüklemenizi ve yeni özelliklerimizin keyfini çıkarmanızı öneririz!", + "components.newversion.new_version_component.link": "Yeniden yüklemek için burayı tıklayın", + "components.newversion.new_version_modal.title": "Yeni güncelleme mevcut !", + "scenes.apps.drive.download_all_button": "Hepsini indir", + "components.inputs.input_with_select.input.placeholder": "Kanal ismi", + "components.inputs.input_with_select.select.placeholder": "Bölüm adı", + "components.inputs.input_with_select.select.no_sections": "İlk kanal bölümünüzün adını yazmaya başlayın.", + "components.inputs.input_with_select.button.tooltip": "Bir kanal bölümü ayarla", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}}, kanala {{$2}} ekledi", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}}, {{$2}}'i kanaldan kaldırdı", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} bir konektörü çıkardı {{$2}}", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "Daha fazla yükle", + "general.verify": "Doğrulamak", + "components.unverified_account.typography_text_danger": "Deneme sürenizde {{$1}} gününüz kaldı. Deneme hesabı 7 gün sonra bloke edilecek ve 1 aylık kayıttan sonra kalıcı olarak silinecektir. Size gönderdiğimiz doğrulama e-postasındaki \"Hesabımı doğrula\" butonuna tıklayarak hesabınızı doğrulayabilirsiniz.", + "components.unverified_account.verification_details": "Doğrulama ayrıntılarını şu adrese gönderdik:", + "components.account_verification_status_sentence": "Hesap durumunuz: {{$1}}", + "components.unverified_account.re_send_email": "E-postayı almadınız mı?", + "components.blocked_account.trial_period_over": "Deneme süreniz bitti. Hesabınızın kilidini açmak ve tüm işlevlere erişmek için lütfen hesabınızı e-posta onayı ile doğrulayın.", + "components.add_mails_workspace.button": "Twake'i kullanmaya başlayın", + "components.add_mails_workspace.title_1": "Bazı kullanıcılar ekle", + "components.add_mails_workspace.title_2": "Twake bir ekip işbirliği aracıdır, bu nedenle bazı kullanıcıları sizin için oluşturduğumuz bir çalışma alanını test etmeye davet edin.", + "components.add_mails_workspace.text_area_placeholder": "Kullanıcılarınızın e-postalarını girin*", + "components.verify_mail.title_1": "Tebrikler", + "components.verify_mail.title_2": "Artık resmi bir Twake kullanıcısısınız!", + "components.verify_mail.button": "Kullanıcı Ekle", + "components.verify_mail.text": "Her şeyden önce, e-posta adresinizi doğrulamanız gerekir. Şu adrese bir doğrulama bağlantısı gönderdik:", + "components.verify_mail.paragraph": "İsterseniz bunu daha sonra yapabilirsiniz ancak doğrulanmamış hesapların Twake'in yalnızca sınırlı bir sürümüne erişimi vardır.", + "services.console_services.toaster.add_emails_error": "E-posta(lar) eklenirken hata oluştu", + "services.console_services.toaster.add_email_error_message": "{{$1}} eklenirken hata oluştu", + "services.console_services.toaster.success_verify_email": "E-posta hesabınıza bir doğrulama bağlantısı gönderildi", + "scenes.app.popup.workspaceparameter.edit_from_console": "Konsolda Gör", + "services.console_services.toaster.success_invite_emails": "{{$1}} kullanıcı(lar) başarıyla eklendi", + "scenes.client.channels_bar.modals.guest_management.title": "Misafirleri {{$1}} içinde yönetin", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "Misafirleri veya bekleyen e-postaları arayın", + "scenes.client.channels_bar.modals.guest_management.tips": "Yukarıdaki girişi kullanarak e-posta eklemeye veya aramaya başlayın", + "scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "Mail gönderildi", + "general.user.role.company.admin": "şirket yöneticisi", + "general.user.role.company.member": "Üye", + "general.user.role.company.guest": "Konuk", + "general.user.deleted": "Silinen Hesap", + "components.richtexteditor.toolbar.bold": "Gözü pek", + "components.richtexteditor.toolbar.underline": "Altını çizmek", + "components.richtexteditor.toolbar.italic": "İtalik", + "components.richtexteditor.toolbar.strikethrough": "üstü çizili", + "components.richtexteditor.toolbar.code": "kod", + "components.richtexteditor.toolbar.unordered-list": "Maddeli liste", + "components.richtexteditor.toolbar.ordered-list": "Sıralı Liste", + "components.richtexteditor.toolbar.blockquote": "blok alıntı", + "components.richtexteditor.toolbar.code-block": "Kod Bloğu", + "components.locked_features.locked_history_banner.title": "Az önce mesaj sınırına ulaştınız", + "components.locked_features.locked_history_banner.button": "Daha fazla bilgi edin", + "components.on_boarding.popups.blocked_company.or": "Veya", + "components.on_boarding.popups.blocked_company.company_selector": "Başka bir şirkete geç", + "scenes.apps.tasks.select_user_button": "Başka bir kullanıcı için görevleri görüntüleyin", + "scenes.apps.tasks.select_user": "Kullanıcı ara", + "scenes.apps.messages.input.attach_file.from_computer": "bilgisayardan", + "scenes.app.popup.workspaceparameter.pages.table_title": "İsim", + "scenes.client.main_view.main_header.search_input": "Arama", + "scenes.apps.drive.new_link_title": "Yeni bağlantı", + "scenes.apps.drive.default_link_name": "başlıksız", + "components.emoji_picker.input_search_placeholder": "Arama", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}} - Bir mesaja {{$2}}'ten fazla dosya ekleyemezsiniz", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "Bu mesajı sildin", + "general.uploading": "yükleniyor", + "components.emoji_picker.categories.activity": "Aktivite", + "components.emoji_picker.categories.travel_and_places": "Seyahat ve Yerler", + "components.emoji_picker.categories.objects": "nesneler", + "components.emoji_picker.categories.symbols": "semboller", + "components.emoji_picker.categories.flags": "Bayraklar", + "components.emoji_picker.categories.search_result": "Arama Sonuçları", + "components.emoji_picker.categories.not_found": "Emoji Bulunamadı", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "rol", + "general.email": "E-posta", + "components.locked_features.locked_only_office_popup.title": "Bu dosyayı düzenleyemezsiniz", + "components.locked_features.locked_only_office_popup.text": "Hata!! Dosyayı Twake'den düzenlemek istiyor gibisiniz. Ofis dosyaları etrafında işbirliği yapmak istiyorsanız planınızı yükseltmeyi düşünebilirsiniz. Fiyatlandırma seçeneklerimizi keşfedin ve ekip işbirliği ihtiyaçlarınız için en iyi seçeneği belirleyin.", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Çalışma alanına davet bağlantısı", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Yeni bağlantı oluşturuldu", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Panoya başarıyla kopyalandı", + "scenes.app.popup.adduser.magiclinks.action_copy": "kopyala", + "scenes.app.popup.adduser.magiclinks.action_generate": "üret", + "scenes.apps.calendar.modify_calendar_menu": "Takvimi düzenle", + "scenes.apps.calendar.month_option": "Ay", + "scenes.apps.calendar.my_calendar": "Takvimim", + "scenes.apps.calendar.my_calendar_label": "Takvimim", + "scenes.apps.calendar.my_calendar_menu": "Takvimim", + "scenes.apps.drive.choose_folder_button": "Bir dizin seçin", + "scenes.apps.drive.choose_file_button": "Bir dosya seçin", + "scenes.apps.drive.viewer.open_with_button": "Bununla aç...", + "scenes.apps.messages.input.placeholder": "Bir mesaj yaz. Bir kullanıcıdan alıntı yapmak için @ kullanın.", + "components.drive.elements.configurate_mod": "Modu yapılandırın...", + "components.drive.elements.manage_version": "Sürümleri yönet", + "scenes.app.popup.createcompany.try_again": "Lütfen tekrar deneyin.", + "scenes.app.popup.workspace.edit_temp": "Geçici hesabı düzenle", + "scenes.app.popup.workspace.create_temp": "Geçici hesap oluştur", + "scenes.apps.tasks.active_tasks": "aktif görevler", + "scenes.apps.drive.right_preview.versions": "Sürümler", + "scenes.app.popup.appsparameters.pages.icon": "Simge", + "components.locked_features.locked_history_banner.description": "Şirketinizin çok fazla mesajı var! Tüm mesaj geçmişinize erişmek için şimdi yükseltin.", + "components.locked_features.locked_guests_popup.title": "Misafirler özelliği kilitli", + "components.locked_features.locked_guests_popup.description": "Hata!! Görünüşe göre harici kullanıcıları çalışma alanınıza davet etmek istiyorsunuz. Misafirler ve harici ortaklarla işbirliği yapmak istiyorsanız planınızı yükseltmeyi düşünebilirsiniz. Fiyatlandırma seçeneklerimizi keşfedin ve ekip işbirliği ihtiyaçlarınız için en iyi seçeneği belirleyin.", + "components.locked_features.locked_guests_popup.learn_more_button": "Daha fazla bilgi edin", + "components.locked_features.locked_guests_popup.skip_for_now_button": "Şimdilik geç", + "components.locked_features.locked_guests_popup.or": "Veya", + "components.on_boarding.popups.blocked_company.description": "Twake aboneliğinizin süresi doldu. Yenilemek ve ekibinizle tekrar iletişim kurabilmek için lütfen şirketinizin sahibi veya yöneticisi ile iletişime geçin!", + "components.on_boarding.popups.blocked_company.learn_more_text": "Şirket abonelik planı hakkında daha fazla bilgi edinmek ister misiniz?", + "components.locked_features.locked_workspace_popup.text": "Hata!! Şirketinizde yeni bir çalışma alanı mı yaratmak istiyorsunuz? Planınızı yükseltmeyi düşünebilirsiniz. Fiyatlandırma seçeneklerimizi keşfedin ve ekip işbirliği ihtiyaçlarınız için en iyi seçeneği belirleyin.", + "scenes.app.integrations_parameters.company_application_popup.tag": "Kurulmuş", + "scenes.app.integrations_parameters.company_application_popup.btn": "Düzenlemek", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "bilgiler", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "Açıklama", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "Göstermek", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "şirketten uzaklaştır", + "scenes.app.integrations_parameters.company_applications_table.name": "İsim", + "scenes.app.integrations_parameters.company_applications_table.title": "Şirketinizde yüklü", + "scenes.join.loading": "Yükleniyor…", + "scenes.join.wrong_link_title": "Bu bağlantı artık mevcut değil", + "scenes.join.wrong_link_description": "Sizi bu şirkete katılmaya davet eden kişiden yeni bir bağlantı isteyin veya kendi şirketinizi oluşturun", + "scenes.join.create_the_company_button": "şirket oluştur", + "scenes.join.join_workspace_from_company": "{{$2}}'ten {{$1}}'e katılın!", + "scenes.join.twake_description": "Twake, ekip üretkenliğinizi artırmak için oluşturulmuş açık kaynaklı bir dijital çalışma alanıdır.", + "components.user_picker.modal_no_result": "Sonuç bulunamadı", + "components.users_picker.add_me": "beni ekle", + "scenes.app.workspaces.create_company.invitations.title": "Çalışma alanınızı yapılandırın.", + "scenes.app.header.disconnected": "bağlantınız kesildi", + "scenes.app.header.disconnected.reload": "Tekrar yükle", + "scenes.app.header.alt_notifications": "Bildirimler", + "scenes.apps.calendar.calendar.week_btn": "Hafta", + "scenes.apps.calendar.calendar.list_btn": "Liste", + "scenes.apps.calendar.event_edition.deadline_tag": "Son teslim tarihi", + "scenes.apps.calendar.event_edition.checkbox_all_day": "Tüm gün", + "scenes.apps.calendar.event_edition.title_confidentiality": "Gizlilik", + "scenes.apps.calendar.event_view.article_until": "ile", + "scenes.apps.calendar.calendar_modal.participants": "Katılımcılar", + "scenes.apps.calendar.calendar_modal.placeholder": "İsim", + "scenes.apps.calendar.left.calendars": "Takvimler", + "scenes.apps.drive.left.search": "Arama", + "scenes.apps.drive.navigators.navigator_content.directory_name": "dizin adı", + "scenes.apps.drive.navigators.navigator_content.files": "Dosyalar", + "scenes.apps.drive.navigators.navigator_labels.title": "Etiketler", + "scenes.apps.drive.navigators.new_file.untitled": "başlıksız", + "scenes.apps.drive.navigators.new_file.create_file.type": "Tip", + "scenes.apps.drive.navigators.new_file": "Yeni dosya", + "scenes.apps.drive.preview_bloc.operations_download": "İndirmek", + "scenes.apps.drive.preview_bloc.error_file": "Dosya bulunamadı", + "scenes.apps.drive.right_preview.operations_restore": "Onarmak", + "scenes.apps.drive.right_preview.operations_delete": "Çöp kutusuna taşıyın", + "scenes.apps.drive.right_preview.public_link": "Herkese açık bağlantı", + "scenes.apps.messages.messages": "Mesajlar", + "scenes.apps.messages.chatbox.chat.delete_message": "Bu mesajı sil", + "scenes.apps.messages.chatbox.chat.delete_message_btn": "Mesajı sil", + "scenes.apps.messages.left_bar.stream_modal.placeholder_name": "İsim", + "scenes.apps.messages.left_bar.stream.add_to_favorites": "Favorilere ekle", + "scenes.apps.messages.left_bar.stream.remove_from_favorites": "Favorilerden çıkar", + "scenes.apps.messages.left_bar.stream.notifications": "Bildirimler...", + "scenes.apps.messages.left_bar.stream.notifications.all": "herhangi bir mesaj", + "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}, {{$2}} ve {{$3}}", + "scenes.apps.messages.left_bar.stream.notifications.me": "sadece {{$1}}", + "scenes.apps.messages.left_bar.stream.notifications.never": "Hiçbir şey değil", + "scenes.apps.parameters.workspace_sections.workspace": "çalışma alanı", + "scenes.apps.parameters.workspace_sections.members": "Katılımcılar", + "scenes.apps.parameters.group_sections.workspaces": "çalışma alanları", + "scenes.apps.parameters.group_sections.apps": "uygulamalar", + "scenes.apps.account.languages.text": "Twake dilini değiştirin.", + "components.calendar.repetition.ends": "biter", + "scenes.apps.tasks.boards": "Panolar", + "scenes.apps.tasks.connectors_menu": "Konektörler...", + "scenes.apps.tasks.connectors_search_menu": "Bağlayıcı ara...", + "scenes.apps.tasks.no_connectors_menu_text": "Bir takvime bağlanabilecek bağlayıcınız yok.", + "scenes.apps.tasks.unconfigured_tab": "Bu sekme henüz yapılandırılmamış.", + "scenes.apps.tasks.choose_board_button": "Bir tahta seçin", + "general.open": "Açık", + "components.calendar.repetition.never": "Hiçbir zaman", + "components.calendar.repetition.on": "Açık", + "components.calendar.repetition.after": "Sonrasında", + "components.calendar.repetition.days": "gün(ler)", + "components.calendar.repetition.weeks": "haftalar)", + "components.calendar.repetition.months": "ay(lar)", + "components.calendar.repetition.years": "yıl(lar)", + "components.calendar.repetition.custom_recurrence": "Özel yineleme", + "components.calendar.repetition.occurrence": "Olay(lar)", + "components.calendar.repetition.repeat_on": "tekrarla", + "scenes.app.channelsbar.currentuser.add_apps": "Uygulamaları ara", + "scenes.app.channelsbar.currentuser.change_my_status": "durumumu değiştir", + "scenes.app.channelsbar.currentuser.collaborateurs": "Kullanıcılar", + "scenes.app.channelsbar.currentuser.create_workspace_page": "Bir çalışma alanı oluşturun", + "scenes.app.channelsbar.currentuser.invited_status": "sen misafirsin", + "scenes.app.channelsbar.currentuser.title": "Hesap ayarları", + "scenes.app.channelsbar.currentuser.workspace_info": "{{$2}} grubundan {{$1}} çalışma alanındasınız", + "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "FAVORİLER", + "scenes.app.channelsbar.channelsworkspace.create_channel": "Kanal oluştur", + "scenes.app.channelsbar.channelsworkspace.no_channel": "Henüz herhangi bir kanala katılmadınız", + "scenes.app.channelsbar.modify_channel_menu": "Kanalı düzenle", + "scenes.app.channelsbar.guest_management": "misafir yönetimi", + "scenes.app.channelsbar.read_sign": "Okundu olarak işaretle", + "scenes.app.channelsbar.unread_sign": "okunmamış olarak işaretle", + "scenes.app.channelsbar.channel_leaving": "kanaldan ayrıl", + "scenes.app.mainview.tabs.searching_connectors": "Bağlayıcı ara...", + "scenes.app.popup.adduser.adresses_message": "Lütfen adresleri virgül veya boşlukla ayırın. Twake'in aboneliğinize bağlı olarak davet sayısını sınırlayabileceğini unutmayın.", + "scenes.app.popup.appsparameters.pages._app_identity": "Uygulamanın kimliği", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "Twacode mesajlarınızın görünümünü test edin", + "scenes.app.popup.appsparameters.pages.amazing_app_name": "benim harika uygulamam", + "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "Firmanın geliştirdiği uygulamalar", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "Uygulamanızın nerede görüneceğini belirlemenizi sağlar.", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "Görüntü ayarları", + "scenes.app.popup.workspaceparameter.pages.logo_subtitle": "Logo", + "scenes.app.popup.workspaceparameter.pages.name_description": "Bu çalışma alanının adını değiştir", + "scenes.app.popup.workspaceparameter.pages.name_label": "Çalışma alanının adı", + "scenes.app.popup.workspaceparameter.pages.no_access": "Erişim yok.", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "Bu çalışma alanında uygulamanız yok", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "Bu çalışma alanından ayrıl", + "scenes.apps.calendar.modals.event_adresse_placeholder": "Adres", + "scenes.apps.drive.no_file_alert": "Dosya oluşturmanıza izin veren uygulamanız yok.", + "scenes.error_on_twake": "\"Bir problemimiz var Houston\"", + "scenes.help_us": "Ancak, bu hatayı düzeltmemize yardımcı olmak isterseniz, bize aşağıdan bir mesaj gönderin: ", + "scenes.login.verifymail.alert": "E-postanızı kontrol ediyoruz!", + "scenes.login.verifymail.error_message": "Bir hata oluştu", + "scenes.login.verifymail.signin_button": "Giriş yapmak", + "scenes.login.verifymail.success": "E-postanız başarıyla doğrulandı!", + "scenes.login.verifymail.verification_waiting": "Doğrulama bekleniyor...", + "scenes.no_panic": "Panik yapma! Twake'i düzeltmek için bu sayfayı yeniden yükleyin.", + "services.apps.calendar.deadline_icon": "Son teslim tarihi", + "services.apps.calendar.event_icon": "Etkinlik", + "services.apps.calendar.move_icon": "Hareket", + "services.apps.calendar.reminder_icon": "Hatırlatma", + "scenes.app.workspaces.components.skip": "Atlamak", + "scenes.apps.calendar.unconfigured_tab": "Bu sekme henüz yapılandırılmamış.", + "scenes.apps.drive.trash": "Çöp", + "scenes.apps.drive.top_menu_more": "Daha", + "scenes.apps.drive.top_menu_no_items": "{{$1}} öğeler", + "scenes.apps.messages.new_thread": "Yeni bir tartışma başlat", + "scenes.apps.messages.input.send_message": "Mesaj gönder", + "scenes.apps.messages.input.emoji": "emoji", + "scenes.apps.messages.input.hide_formatting": "Biçimlendirmeyi gizle", + "scenes.apps.tasks.board.tasks.in_list": "Listede", + "scenes.apps.parameters.workspace_sections.members.invite_all": "Tümünü davet et", + "scenes.app.taskpicker.select": "Seçme", + "components.listmanager.filter": "filtre", + "scenes.apps.tasks.no_connector": "Bağlayıcı yok", + "scenes.apps.drive.used": "Bu klasörde kullanılan", + "components.reminder.notification": "Bildirim", + "components.reminder.minutes_bef": "dakikalar önce", + "components.reminder.hours_bef": "saatler önce", + "components.reminder.days_bef": "Günler önce", + "components.reminder.weeks_bef": "haftalar önce", + "components.reminder.by_email": "E-Posta", + "components.alert.leave_private_channel.title": "Kanaldan ayrılmak istediğinizden emin misiniz?", + "components.alert.leave_private_channel.description": "Biri sizi davet etmedikçe bu özel kanala tekrar katılamazsınız.", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.tag": "üye değilsin", + "components.input.copied": "kopyalandı", + "scenes.client.channelbar.channelmemberslist.tag": "Sen", + "components.locked_features.locked_workspace_popup.title": "Daha fazla çalışma alanı oluşturamazsınız", + "components.locked_features.locked_workspace_popup.subtitle": "Ücretsiz sürümde, şirketinizde yalnızca bir çalışma alanınız olabilir.", + "scenes.app.workspaces.create_company.group_data.title": "Hızlı olacağız - sadece bazı istatistiksel bilgilere ihtiyacımız var.", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Mesaj numarası", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "Twake'in ücretsiz sürümünde, daha yeni olan {{$1}} mesajlarından daha fazlasına erişemezsiniz.", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Daha fazla plan göster", + "scenes.app.channelsbar.channelsuser.new_private_discussion": "Yeni özel tartışma", + "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "Özel mesaj yok. Kullanıcıları davet edin!", + "scenes.app.channelsbar.channelsuser.private_messages": "Doğrudan mesajlar", + "scenes.app.channelsbar.channelsworkspace.channel_title": "KANALLAR", + "scenes.app.channelsbar.channel_removing": "Kanalı sil", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "Bu çerçeveye tıklayarak düzenli kalmak için bu kanalları işletmenize aktarabilirsiniz.", + "scenes.app.channelsbar.company_invitation_alert_title": "şirkete davetlisiniz ", + "scenes.app.channelsbar.initial_instructions_tutorial": "Bir ad, bir ad ve bir profil resmi seçin.", + "scenes.app.channelsbar.installation_desktop_tutorial": "Masaüstü uygulamasını yükleyin", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "Kullanıcıları çalışma alanınıza davet edin.", + "scenes.app.channelsbar.public_channel_label": "Halk", + "scenes.app.channelsbar.private_channel_label": "Özel", + "scenes.app.channelsbar.sending_message_instruction": "Bir tartışmada ilk mesajınızı gönderin", + "scenes.app.channelsbar.tutorial_alert": "Bu kareyi bir daha göstermeyecek misin?", + "scenes.app.channelsbar.welcome": "Twake'e hoş geldiniz", + "scenes.app.channelsbar.welcoming_message_subtitle": "Sadece birkaç tıklamayla Twake profesyoneli olun!", + "scenes.app.mainview.instruction_current_tab": "Solunuzda bir kanal seçerek başlayın.", + "scenes.app.popup.appsparameters.pages.api_parameters_label": "API ayarları", + "scenes.app.popup.appsparameters.pages.app_name_label": "Uygulama Adı", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "Uygulama ayrıcalıkları", + "scenes.app.popup.appsparameters.pages.app_update": "Uygulamayı {{$1}} güncelleyin (uygulama {{$2}} kez kullanılır.)", + "scenes.app.popup.appsparameters.pages.application_title": "Başvuru", + "scenes.app.popup.appsparameters.pages.apps_title": "Uygulamalarınız ve bağlayıcılarınız", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "'{{$3}}' pasifleriyle '{{$1}}' türü ve '{{$2}}' kimliği olayı", + "scenes.app.popup.appsparameters.pages.company_label": "Şirket sahibi", + "scenes.app.popup.appsparameters.pages.configuration_label": "Yapılandırma", + "scenes.app.popup.appsparameters.pages.create_app_button": "Bir uygulama oluşturun", + "scenes.app.popup.appsparameters.pages.create_my_app": "Uygulamamı oluştur", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "Henüz bir uygulama oluşturmadınız. Bir uygulama veya bağlayıcı oluşturmadan önce, uygulama pazarımızda mevcut olmadığından emin olun.", + "scenes.app.popup.appsparameters.pages.danger_zone_description": "Uygulamayı sil", + "scenes.app.popup.appsparameters.pages.new_app_title": "Yeni uygulama", + "scenes.app.popup.appsparameters.pages.ok_user_code": "Tamam", + "scenes.app.popup.appsparameters.pages.optimal_format": "En uygun biçim : 48x48 piksel.", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "Yayınlanmayan uygulama yalnızca şirketinizde çalışır. Tüm Twake kullanıcılarının kullanımına sunmak istiyorsanız, bu seçeneği etkinleştirin.", + "scenes.app.popup.appsparameters.pages.public_availability_application": "Genel uygulama", + "scenes.app.popup.appsparameters.pages.public_login_label": "Genel tanımlayıcı", + "scenes.app.popup.appsparameters.pages.publication_description": "Uygulamanızın görünürlüğünü belirleyin.", + "scenes.app.popup.appsparameters.pages.string_information": "Bu dize, uygulamanızı tanımlar ve mesaj komutlarında kullanılacaktır.", + "scenes.app.popup.appsparameters.pages.title_tester": "Twakecode test cihazı", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "Etkinlik alma URL'si", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "Uygulamanızın basitleştirilmiş adı zaten başka bir uygulama tarafından kullanılıyor. Lütfen değiştirin.", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "Aşağıdaki anahtar kelimeleri vurgulayın:", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "E-posta bildirimlerinin sıklığını ayarlayın.", + "scenes.app.popup.userparameter.pages.private_message_content.show": "Özel mesaj içeriğini göster", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "Son yönetici olduğunuz için çalışma alanından çıkamazsınız. Yeni bir yönetici tanımlayabilir veya bu çalışma alanını silebilir/arşivleyebilirsiniz.", + "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "Bütün uygulamalar", + "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "Şirketinizin uygulamaları", + "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "Firmanın geliştirdiği uygulamalar", + "scenes.app.popup.workspaceparameter.pages.company_identity_title": "Şirketin kimliği", + "scenes.app.popup.workspaceparameter.pages.company_name_description": "Bu şirketin adını değiştir", + "scenes.app.popup.workspaceparameter.pages.company_name_label": "Şirketin adı", + "scenes.app.popup.workspaceparameter.pages.configuration_notif": "yapılandırma", + "scenes.app.popup.workspaceparameter.pages.configure_button": "Yapılandır", + "scenes.app.popup.workspaceparameter.pages.description": "Açıklama", + "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "Firmanın geliştirdiği uygulamalar", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "Görüntüleme tercihleri", + "scenes.app.popup.workspaceparameter.pages.install_button": "Düzenlemek", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "Uygulamayı bu çalışma alanına yükleyin.", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "Bu çalışma alanında yüklü uygulamalar {{$1}}", + "scenes.apps.messages.messageslist.get_writing_users": "yazıyorlar...", + "components.drive.right_preview.create_link": "Bir erişim bağlantısı oluşturun", + "components.drive.moove_here": "Buraya taşın", + "components.drive.modify_uslist": "Kullanıcı listesini değiştir", + "scenes.apps.calendar.reminders": "hatırlatıcı(lar)", + "scenes.app.mainview.discussion": "Tartışma", + "scenes.client.channelbar.channelmemberslist.title": "{{$1}} içindeki kullanıcılar", + "scenes.client.channelbar.channelmemberslist.loader": "Daha fazla yükle", + "scenes.client.channelbar.channelmemberslist.autocomplete": "Kullanıcı ekle veya ara", + "components.notifications.hidden_notifications_button.children": "Yeni mesajlar", + "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "Başvuru", + "scenes.client.channelbar.channelmemberslist.no_members": "Bu kanalda kullanıcı yok, Kullanıcı ekle'ye tıklayarak onları davet edebilirsiniz.", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}} açıklamayı değiştirdi", + "scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}}, kanalı {{$2}} olarak yeniden adlandırdı", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "{{$1}} yeni bir {{$2}} sekmesi ekledi {{$3}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}}, {{$2}} sekmesini kaldırdı {{$3}}", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} yeni bir bağlayıcı ekledi {{$2}}", + "general.re_send": "Yeniden gönder", + "components.account_verication_status_unverified": "Doğrulanmamış", + "components.account_verication_status_blocked": "Kilitli", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} mesajını sildi", + "components.member.user_parts.and_more_user_text": " ve {{$1}} daha fazla kullanıcı", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "Özel bir kanal oluşturun", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " Bunun yerine", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "10'dan fazla kullanıcı ekleyemezsiniz", + "components.locked_features.locked_drive_popup.title": "Az önce sürüş sınırına ulaştınız", + "components.locked_features.locked_drive_popup.subtitle": "Ücretsiz sürümde yalnızca 6 GB depolayabilirsiniz.", + "general.resume": "Devam et", + "general.pause": "Duraklat" +} diff --git a/twake/frontend/public/locales/vi.json b/twake/frontend/public/locales/vi.json index 07aa3053d6..ba05a65965 100644 --- a/twake/frontend/public/locales/vi.json +++ b/twake/frontend/public/locales/vi.json @@ -771,5 +771,77 @@ "components.locked_features.locked_drive_popup.subtitle": "Ở gói miễn phí, bạn chỉ có thể lưu trữ tối đa 6GB.", "scenes.apps.drive.no_file_alert": "Bạn không có ứng dụng nào để có thể cấp quyền tạo tệp.", "components.alert.confirm": "Xác nhận hành động của bạn", - "components.locked_features.locked_workspace_popup.text": "Whoops!!Bạn muốn tạo thêm không gian làm việc mới? Hãy cân nhắc đăng kí gói cao hơn. Khám phá các gói của chúng tôi và chọn gói phù hợp nhất với nhu cầu của công ty bạn." + "components.locked_features.locked_workspace_popup.text": "Whoops!!Bạn muốn tạo thêm không gian làm việc mới? Hãy cân nhắc đăng kí gói cao hơn. Khám phá các gói của chúng tôi và chọn gói phù hợp nhất với nhu cầu của công ty bạn.", + "scenes.app.popup.adduser.magiclinks.genrator_info": "Liên kết lời mời đến không gian làm việc", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "Liên kết mới được tạo", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "Đã sao chép thành công vào bộ nhớ tạm", + "scenes.app.popup.adduser.magiclinks.action_copy": "Sao chép", + "scenes.app.popup.adduser.magiclinks.action_generate": "Tạo ra", + "scenes.apps.board.new_task": "+ Công việc mới", + "components.alert.confirm_click": "Xác nhận hành động của bạn bằng cách nhấp vào OK.", + "components.searchpopup.tasks": "Công việc", + "scenes.app.mainview.advanced_search_placeholder": "Tìm kiếm nâng cao", + "components.searchpopup.hide_filters": "ẩn bộ lọc", + "components.searchpopup.show_filters": "hiện bộ lọc", + "components.searchpopup.load_more": "Tải thêm kết quả", + "general.more": "Thêm", + "scenes.apps.board.archived_tasks": "Công việc đã lưu trữ ({{$ 1}})", + "scenes.apps.board.active_tasks": "Công việc đang thực hiện", + "scenes.apps.board.kanban": "Kanban", + "scenes.apps.board.display_as": "Hiển thị dưới dạng", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "Phiên bản", + "components.reminder.hours_bef": "giờ trước", + "components.reminder.days_bef": "ngày hôm trước", + "components.reminder.weeks_bef": "vài tuần trước", + "components.reminder.by_email": "E-mail", + "scenes.apps.calendar.reminders": "(các) lời nhắc nhở", + "scenes.apps.calendar.video_link": "Nhấp để mở liên kết", + "scenes.app.mainview.discussion": "Thảo luận", + "components.tagpicker.notag": "Không có thẻ", + "scenes.apps.tasks.modals.attachments": "Tập tin đính kèm", + "components.calendar.calendarselector.from": "Từ", + "components.attachmentpicker.from_computer": "Từ thiết bị của bạn", + "components.attachmentpicker.from_twake": "Từ tài liệu Twake", + "components.attachmentpicker.file": "Tập tin", + "components.attachmentpicker.remove_attach": "Xóa tệp đính kèm", + "components.drive.elements.see": "Nhìn thấy", + "components.drive.elements.current_name": "Tên thật: ", + "scenes.app.integrations_parameters.company_application_popup.btn": "Cài đặt", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "Thông tin", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "Trang mạng", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "Ngày thành lập", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "Chỉ", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "Xóa khỏi công ty", + "scenes.app.integrations_parameters.company_applications_table.title": "Đã cài đặt trong công ty của bạn", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "Đã xóa thành công {{$1}} khỏi công ty của bạn", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "Đã thêm thành công {{$1}} vào công ty của bạn", + "components.reminder.notification": "Thông báo", + "scenes.join.loading": "Đang tải…", + "scenes.join.wrong_link_title": "Liên kết này không còn nữa", + "scenes.join.wrong_link_description": "Yêu cầu người đã mời bạn tham gia công ty này để có liên kết mới hoặc tạo công ty của riêng bạn", + "scenes.join.create_the_company_button": "Tạo công ty", + "scenes.join.join_workspace_from_company": "Tham gia {{$1}} từ {{$2}}!", + "scenes.join.twake_description": "Twake là một không gian làm việc kỹ thuật số mã nguồn mở được xây dựng để cải thiện năng suất nhóm của bạn", + "scenes.join.login_first_button": "Đăng nhập hoặc tạo tài khoản trước", + "scenes.join.join_the_team_button": "Tham gia nhóm", + "scenes.apps.drive.move_text2": "Di chuyển", + "scenes.apps.drive.remove_attachs": "Xóa tệp đính kèm", + "scenes.app.popup.createcompany.try_again": "Vui lòng thử lại.", + "scenes.apps.drive.right_preview.public": "Quyền truy cập công khai", + "components.drive.elements.configurate_mod": "Định cấu hình mod ...", + "components.drive.elements.manage_version": "Quản lý các phiên bản", + "scenes.app.popup.workspace.edit_temp": "Chỉnh sửa tài khoản tạm thời", + "scenes.app.popup.workspace.create_temp": "Tạo tài khoản tạm thời", + "scenes.apps.tasks.active_tasks": "nhiệm vụ tích cực", + "scenes.apps.drive.right_preview.versions": "Phiên bản", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "Quản lý các ứng dụng và trình kết nối của bạn.", + "scenes.app.popup.appsparameters.pages.icon": "Biểu tượng", + "scenes.app.integrations_parameters.title": "Tích hợp", + "scenes.app.integrations_parameters.applications_table.title": "Các tích hợp khác", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "Ứng dụng tìm kiếm", + "scenes.app.integrations_parameters.company_application_popup.tag": "Cài đặt", + "scenes.apps.board.all_boards": "Tất cả các bảng", + "components.userlistmanager.no_users": "Không có người dùng.", + "scenes.apps.drive.used": "được sử dụng trong thư mục này", + "components.reminder.minutes_bef": "phút trước" } diff --git a/twake/frontend/public/locales/zh_Hans.json b/twake/frontend/public/locales/zh_Hans.json index 3ffe5844ce..e4658b6cd6 100644 --- a/twake/frontend/public/locales/zh_Hans.json +++ b/twake/frontend/public/locales/zh_Hans.json @@ -64,5 +64,784 @@ "scenes.app.header.alt_notifications": "通知", "general.retry": "重试", "general.cancel": "取消", - "general.continue": "继续" -} \ No newline at end of file + "general.continue": "继续", + "scenes.app.popup.adduser.magiclinks.genrator_info": "工作区邀请链接", + "scenes.app.popup.adduser.magiclinks.new_link_generated": "新链接已生成", + "scenes.app.popup.adduser.magiclinks.copied_to_clipboard": "已成功复制到剪贴板", + "scenes.app.popup.adduser.magiclinks.action_copy": "复制", + "scenes.app.popup.adduser.magiclinks.action_generate": "产生", + "scenes.app.popup.appsparameters.pages.available_publication_alert": "您的应用程序的发布目前正在等待 Twake 团队的验证。", + "scenes.app.popup.appsparameters.pages.button_force": "整个公司的力量", + "scenes.app.popup.appsparameters.pages.read_privileges_label": "读取权限", + "scenes.app.popup.appsparameters.pages.remove_app": "永久删除应用程序 {{$1}}。", + "scenes.app.popup.appsparameters.pages.remove_app_from_company": "从整个公司中删除", + "scenes.app.popup.appsparameters.pages.remove_app_from_workspace": "从工作区中删除", + "scenes.app.popup.appsparameters.pages.string_information": "此字符串标识您的应用程序并将用于消息命令。", + "scenes.app.popup.appsparameters.pages.title_tester": "Twakecode 测试员", + "scenes.app.popup.appsparameters.pages.url_reception_events_label": "活动接收网址", + "scenes.app.popup.appsparameters.pages.waiting_availability_application": "等待...", + "scenes.app.popup.appsparameters.pages.write_privileges_label": "写入权限", + "scenes.app.popup.appsparameters.pages.update_button": "更新", + "scenes.app.popup.createworkspacepage.add_subtitle": "需要更多的空间?", + "scenes.app.popup.createworkspacepage.create_new_workspace": "创建新工作区", + "scenes.app.popup.createworkspacepage.placeholder_name": "工作区名称", + "scenes.app.popup.userparameter.pages.frequency_notif_configuration_description": "设置手机通知的频率。", + "scenes.app.popup.userparameter.pages.frequency_notif_subtitle": "通知频率", + "scenes.app.popup.workspaceparameter.pages.access_apps": "访问您的应用程序和连接器", + "scenes.app.popup.workspaceparameter.pages.moderator_status": "工作区版主", + "scenes.app.popup.workspaceparameter.pages.alert_impossible_removing": "您不能离开工作区,因为您是最后一位管理员。您可以定义新管理员或删除/归档此工作区。", + "scenes.app.popup.workspaceparameter.pages.all_apps_small_text": "所有应用", + "scenes.app.popup.workspaceparameter.payments_subscriptions_title": "付款和订阅", + "scenes.apps.calendar.my_calendar": "我的日历", + "scenes.apps.calendar.my_calendar_label": "我的日历", + "scenes.apps.calendar.my_calendar_menu": "我的日历", + "scenes.apps.calendar.today_menu": "今天", + "scenes.apps.calendar.week_option": "星期", + "scenes.apps.calendar.workspace": "工作区", + "scenes.apps.calendar.workspace_label": "这个工作区", + "scenes.apps.calendar.workspace_menu": "工作区", + "scenes.apps.drive.add_button": "添加", + "services.apps.messages.no_command_possible": "我们无法执行命令“{{$1}}”,因为“{{$2}}”不存在或不允许创建命令。", + "services.user.notification_parameters_update_alert": "通知设置已更新。", + "services.user.update_password_alert": "您的密码已更新。", + "scenes.apps.tasks.board.tasks.use_deadline": "使用期限", + "scenes.apps.tasks.board.tasks.use_starttime": "使用开始时间", + "scenes.apps.tasks.board.tasks.in_list": "在列表中", + "scenes.apps.tasks.board.starts": "启动", + "scenes.apps.tasks.board.ends": "为", + "scenes.apps.tasks.board.list_name": "列表名称", + "scenes.app.popup.sync_calendar": "同步您的日历。", + "scenes.apps.parameters.workspace_sections.workspace.logo_company": "公司标志", + "scenes.app.popup.workspaceparameter.pages.logo_company_modify_description": "编辑公司形象 ", + "components.listmanager.filter": "筛选", + "scenes.apps.tasks.no_connector": "无接头", + "components.attachmentpicker.add_attachment": "添加附件", + "components.input.copied": "已复制", + "components.drive.new_versions": "添加新版本", + "components.drive.navigators.directory_not_found": "未找到目录。", + "components.drive.right_preview.suppress_link": "取消链接", + "components.drive.right_preview.create_link": "创建访问链接", + "components.drive.moove_here": "搬来这", + "components.verify_mail.paragraph": "如果您愿意,您可以稍后再做,但未经验证的帐户只能访问有限版本的 Twake", + "services.console_services.toaster.add_email_error_message": "添加 {{$1}} 时出错", + "scenes.client.channels_bar.modals.guest_management.input_placeholder": "搜索来宾或待处理的电子邮件", + "scenes.client.channels_bar.modals.guest_management.tips": "使用上面的输入开始添加或搜索电子邮件", + "components.on_boarding.company_billing_banner.admin_or_owner_text": "您的公司订阅存在问题。请看看你的", + "components.on_boarding.company_billing_banner.guest_or_member_text": "您的公司订阅存在问题。请联系公司老板或管理员!", + "components.on_boarding.company_billing_banner.link": "公司认购计划", + "components.on_boarding.popups.blocked_company.description": "您对 Twake 的订阅已过期。请联系贵公司的老板或管理员进行更新,以便再次与您的团队沟通!", + "components.on_boarding.popups.blocked_company.learn_more_text": "想了解更多公司订阅计划?", + "components.upload.drop_files.toaster.error": "您不能上传超过 {{$1}} 个文件", + "components.emoji_picker.categories.frequently_used": "经常使用", + "components.emoji_picker.categories.activity": "活动", + "components.emoji_picker.categories.travel_and_places": "旅行和地方", + "components.emoji_picker.categories.objects": "对象", + "components.emoji_picker.categories.symbols": "符号", + "components.emoji_picker.categories.flags": "旗帜", + "components.emoji_picker.categories.search_result": "搜索结果", + "scenes.app.integrations_parameters.title": "集成", + "scenes.app.integrations_parameters.applications_table.name": "姓名", + "scenes.app.integrations_parameters.applications_table.title": "其他集成", + "scenes.app.integrations_parameters.company_application_popup.btn": "安装", + "scenes.app.integrations_parameters.company_application_popup.tab_btn_info": "资讯", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.created_item": "创立日期", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.version_item": "版本", + "scenes.app.integrations_parameters.company_applications_table.more_menu.remove_application": "从公司除名", + "scenes.app.integrations_parameters.company_applications_table.name": "姓名", + "scenes.app.integrations_parameters.company_applications_table.title": "安装在贵公司", + "scenes.join.loading": "正在加载…", + "scenes.join.wrong_link_title": "此链接不再可用", + "scenes.join.wrong_link_description": "向邀请您加入该公司的人询问新链接或创建您自己的公司", + "scenes.join.create_the_company_button": "创建公司", + "scenes.join.join_workspace_from_company": "从{{$2}}加入{{$1}}!", + "scenes.join.twake_description": "Twake 是一个开源数字工作区,旨在提高您的团队生产力", + "scenes.join.login_first_button": "首先登录或创建一个帐户", + "scenes.join.join_the_team_button": "加入团队", + "general.unarchive": "取消存档", + "application.load.longer": "服务器响应时间比预期长,请稍候或重新加载页面...", + "scenes.app.side_app.messages_thread_title": "{{$1}} • 消息线程", + "scenes.app.workspaces.create_company.group_data": "配置您的新组", + "scenes.app.workspaces.create_company.group_data.group_main_activity.food": "食物", + "scenes.app.workspaces.create_company.group_data.group_main_activity.administration": "行政", + "scenes.apps.calendar.event_edition.checkbox_all_day": "一整天", + "scenes.apps.calendar.event_edition.title_confidentiality": "保密", + "scenes.apps.calendar.event_view.article_until": "到", + "scenes.apps.calendar.calendar_modal.participants": "参与者", + "scenes.apps.calendar.calendar_modal.placeholder": "姓名", + "scenes.apps.calendar.left.calendars": "日历", + "scenes.apps.drive.navigators.navigator_content.directory_name": "目录名", + "scenes.apps.drive.navigators.navigator_content.files": "文件", + "scenes.apps.drive.navigators.navigator_labels.title": "标签", + "scenes.apps.drive.navigators.new_file.untitled": "无标题", + "scenes.apps.drive.navigators.new_file.create_file.type": "类型", + "scenes.apps.drive.navigators.new_file": "新文件", + "scenes.apps.drive.preview_bloc.operations_download": "下载", + "scenes.apps.drive.preview_bloc.error_file": "文件未找到", + "scenes.apps.drive.right_preview.operations_restore": "恢复", + "scenes.apps.drive.right_preview.operations_delete": "移到废纸篓", + "scenes.apps.drive.right_preview.public_link": "公共链接", + "scenes.apps.messages.messages": "留言", + "scenes.apps.messages.chatbox.chat.delete_message": "删除此消息", + "scenes.apps.messages.chatbox.chat.delete_message_btn": "删除留言", + "scenes.apps.messages.left_bar.stream_modal.placeholder_name": "姓名", + "scenes.apps.messages.left_bar.stream.add_to_favorites": "添加到收藏夹", + "scenes.apps.messages.left_bar.stream.remove_from_favorites": "从收藏夹中删除", + "scenes.apps.messages.left_bar.stream.notifications": "通知...", + "scenes.apps.messages.left_bar.stream.notifications.all": "任何消息", + "scenes.apps.messages.left_bar.stream.notifications.mentions": "{{$1}}、{{$2}} 和 {{$3}}", + "scenes.apps.messages.left_bar.stream.notifications.me": "{{$1}} 仅", + "scenes.apps.messages.left_bar.stream.notifications.never": "没有", + "scenes.apps.parameters.workspace_sections.workspace": "工作区", + "scenes.apps.parameters.workspace_sections.members": "参与者", + "scenes.apps.parameters.group_sections.workspaces": "工作区", + "scenes.apps.parameters.group_sections.apps": "应用", + "scenes.apps.account.title": "账户参数", + "scenes.apps.account.account.menu_title": "帐户", + "scenes.apps.account.languages.menu_title": "语", + "scenes.apps.account.account.firstname": "名", + "scenes.apps.account.account.lastname": "姓", + "scenes.apps.account.account.username": "用户名", + "scenes.apps.account.account.change_username": "更改您的唯一用户名。", + "scenes.apps.account.account.emails": "电子邮件", + "scenes.apps.account.account.main_email": "主要邮箱", + "scenes.apps.account.account.email_add": "添加新电子邮件", + "scenes.apps.account.account.email_add_modal.invalid_code": "此代码无效", + "scenes.apps.account.account.password": "密码", + "scenes.apps.account.account.password_modal.old_password": "当前密码", + "scenes.apps.account.account.password_modal.password": "新密码", + "scenes.apps.account.account.password_modal.bad_old_password": "旧密码不正确。", + "scenes.apps.account.account.password_modal.bad_password": "您的密码不匹配或密码太短。请输入至少 8 个字符的密码。", + "scenes.apps.account.account.logout": "登出", + "scenes.apps.account.languages.text": "更改 Twake 语言。", + "scenes.apps.account.notifications.title": "通知", + "scenes.apps.account.notifications.keywords_subtitle": "关键词", + "scenes.apps.account.notifications.keywords_placeholder": "开发,wifi,代码,...", + "scenes.apps.account.notifications.disturb_option_a": "之间不要向我发送推送通知 ", + "scenes.apps.account.notifications.disturb_option_b": " 和 ", + "scenes.apps.account.notifications.disturb_option_c": " (当地时区)", + "scenes.apps.account.notifications.devices_subtitle": "设备通知", + "scenes.apps.account.notifications.devices_option_ever": "始终向我发送推送通知", + "scenes.apps.account.notifications.devices_option_inactive": "当我在桌面上处于非活动状态时向我发送推送通知", + "scenes.apps.account.notifications.devices_option_never": "从不向我发送推送通知", + "scenes.apps.account.notifications.privacy_subtitle": "隐私", + "scenes.apps.account.notifications.mail_subtitle": "电子邮件通知", + "scenes.apps.account.notifications.sound": "声音通知", + "scenes.apps.parameters.workspace_sections.members.invite_btn": "添加用户", + "scenes.apps.tasks.boards": "板", + "scenes.apps.tasks.connectors_menu": "连接器...", + "scenes.apps.tasks.connectors_search_menu": "搜索连接器...", + "scenes.apps.tasks.no_connectors_menu_text": "您没有任何可以连接到日历的连接器。", + "scenes.apps.tasks.unconfigured_tab": "此选项卡尚未配置。", + "scenes.apps.tasks.choose_board_button": "选择一块板", + "scenes.apps.tasks.new_board.title": "新板", + "scenes.apps.tasks.new_board.edit_title": "编辑板", + "scenes.apps.tasks.task": "任务", + "scenes.apps.tasks.no_tasks": "没有任务", + "scenes.apps.tasks.task_status.todo": "去做", + "scenes.apps.tasks.task_status.current": "当前的", + "scenes.apps.tasks.task_status.done": "完毕", + "scenes.apps.tasks.task.description": "描述", + "scenes.apps.tasks.task.assignees": "受让人", + "scenes.apps.tasks.task.edit.dates": "日期", + "scenes.apps.tasks.list_modal.remove_archived_tasks": "删除归档任务 ({{$1}})", + "scenes.login.footer.go_to_twake": "去 twakeapp.com", + "scenes.login.footer.branding": "您在 {{$1}} ({{$2}}) 私人 Twake 服务器上。 ", + "scenes.login.create_account.title": "创建一个新账户", + "scenes.login.create_account.email": "电子邮件", + "scenes.login.create_account.email_used": "此电子邮件已被使用。", + "scenes.login.create_account.username": "用户名", + "scenes.login.create_account.username_already_exist": "此用户名已被使用", + "scenes.login.create_account.fill_in_username": "您必须填写您的用户名", + "scenes.login.create_account.fill_in_email": "您必须使用正确的电子邮件填写您的电子邮件", + "scenes.login.create_account.too_short_password": "您的密码必须至少包含 8 个字符。", + "scenes.login.create_account.firstname": "名", + "scenes.login.create_account.newsletter": "接收有关 Twake 的信息", + "scenes.login.create_account.lastname": "姓", + "scenes.login.forgot_password.title": "忘记密码?", + "scenes.login.forgot_password.text": "您将通过电子邮件收到一个 9 位代码以验证您的身份。", + "scenes.login.forgot_password.text2": "您将收到一个 9 位数的代码。请在下面的字段中输入它以继续。", + "scenes.login.forgot_password.invalid_code": "此代码无效。", + "scenes.login.forgot_password.text3": "为您的帐户输入新密码。", + "scenes.login.forgot_password.password": "密码", + "scenes.login.forgot_password.password2": "确认密码", + "scenes.login.forgot_password.password_dont_match": "您的密码不匹配或密码太短。请输入至少 8 个字符的密码。", + "scenes.login.home.title": "登录 Twake", + "scenes.login.home.subtitle": "高兴看到你", + "scenes.login.home.email": "电子邮件", + "scenes.login.home.unable_to_connect": "无效证件", + "scenes.login.home.password": "密码", + "scenes.login.home.login_btn": "登录", + "general.open": "打开", + "components.calendar.repetition.years": "年)", + "components.calendar.repetition.custom_recurrence": "自定义重复", + "components.calendar.repetition.occurrence": "发生次数", + "components.calendar.repetition.repeat_on": "重复", + "scenes.app.channelsbar.currentuser.add_apps": "搜索应用", + "scenes.app.channelsbar.currentuser.change_my_status": "更改我的状态", + "scenes.app.channelsbar.currentuser.collaborateurs": "用户", + "scenes.app.channelsbar.currentuser.create_workspace_page": "创建工作区", + "scenes.app.channelsbar.currentuser.invited_status": "你是客人。", + "scenes.app.channelsbar.currentuser.title": "帐号设定", + "scenes.app.channelsbar.currentuser.workspace_info": "您位于 {{$2}} 组的工作区 {{$1}}", + "scenes.app.channelsbar.currentuser.workspace_parameters": "工作区设置", + "scenes.app.channelsbar.currentuser.logout": "登出", + "scenes.app.channelsbar.currentuser.update": "更新", + "scenes.app.channelsbar.currentuser.disable_notifications": "禁用", + "scenes.app.channelsbar.currentuser.disabling_notifications": "禁用 1 小时", + "scenes.app.channelsbar.currentuser.disabling_notifications_until": "禁用至上午 9 点明天", + "scenes.app.channelsbar.currentuser.reactivate_notifications": "重新激活", + "scenes.app.channelsbar.modify_channel_menu": "编辑频道", + "scenes.app.channelsbar.guest_management": "宾客管理", + "scenes.app.channelsbar.read_sign": "标记为已读", + "scenes.app.channelsbar.unread_sign": "标记为未读", + "scenes.app.channelsbar.channel_leaving": "离开频道", + "scenes.app.channelsbar.channel_removing": "删除频道", + "scenes.app.channelsbar.company_invitation_alert_subtitle": "您可以通过单击此框架将这些渠道导入您的业务以保持井井有条。", + "scenes.app.channelsbar.company_invitation_alert_title": "公司邀请您 ", + "scenes.app.popup.appsparameters.pages.alert_published_app": "您的应用程序已发布,您无法对其进行编辑。", + "scenes.app.popup.appsparameters.pages.allowed_ip_adresses_method": "在开发中使用 * 以允许所有 IP 地址。", + "scenes.app.popup.appsparameters.pages.error_check_needed": "发生了错误;检查您的信息。", + "scenes.app.popup.appsparameters.pages.error_message": "此名称已被另一个应用程序使用;请选择另一个。", + "scenes.app.popup.appsparameters.pages.event_subtitle": "活动", + "scenes.app.popup.workspaceparameter.pages.back_to_search_button": "返回搜索", + "scenes.app.popup.workspaceparameter.pages.collaboraters_adding_button": "邀请用户", + "scenes.app.popup.workspaceparameter.pages.collaborateurs": "用户", + "scenes.app.popup.workspaceparameter.pages.company_developped_apps_subtitle": "公司开发的应用", + "scenes.app.popup.workspaceparameter.pages.company_identity_title": "公司身份", + "scenes.app.popup.workspaceparameter.pages.company_name_description": "更改这家公司的名称", + "scenes.app.popup.workspaceparameter.pages.company_name_label": "公司名称", + "scenes.app.popup.workspaceparameter.pages.configuration_notif": "配置", + "scenes.app.popup.workspaceparameter.pages.no_app_information": "您在此工作区中没有应用程序", + "scenes.app.popup.workspaceparameter.pages.quit_workspace_menu": "离开这个工作区", + "scenes.app.popup.workspaceparameter.pages.remove_from_company_text": "从整个公司中删除", + "scenes.app.popup.workspaceparameter.pages.research_by": "按名称和类别搜索应用程序", + "scenes.app.popup.workspaceparameter.pages.researching_apps_button": "搜索应用程序...", + "scenes.app.popup.workspaceparameter.pages.show_button": "展示", + "scenes.apps.calendar.modals.remove_button": "删除", + "scenes.apps.calendar.modals.remove_event_button": "删除事件", + "scenes.apps.calendar.modals.remove_event_text": "删除活动?", + "scenes.apps.calendar.modals.title_placeholder": "标题", + "scenes.apps.calendar.modify_calendar_menu": "编辑日历", + "scenes.apps.calendar.month_option": "月", + "scenes.apps.drive.viewer.open_with_button": "打开用...", + "scenes.apps.messages.input.placeholder": "写一个信息。使用@ 引用用户。", + "scenes.apps.messages.input.edited": "已编辑", + "scenes.apps.messages.just_you": "仅对您可见", + "scenes.apps.messages.message.new_messages_bar": "新消息", + "scenes.apps.messages.message.cancel_button": "取消", + "scenes.login.verifymail.signin_button": "登录", + "scenes.login.verifymail.success": "您的邮箱已成功验证!", + "scenes.login.verifymail.verification_waiting": "等待验证...", + "scenes.no_panic": "不要惊慌!只需重新加载此页面即可修复 Twake。", + "services.apps.calendar.deadline_icon": "最后期限", + "services.apps.calendar.event_icon": "事件", + "services.apps.calendar.move_icon": "移动", + "services.apps.calendar.reminder_icon": "提醒", + "services.apps.messages.no_app": "此应用程序不存在。", + "scenes.apps.calendar.unconfigured_tab": "此选项卡尚未配置。", + "scenes.apps.drive.top_menu_more": "更多的", + "scenes.apps.drive.top_menu_no_items": "{{$1}} 项", + "scenes.apps.messages.new_thread": "开始新的讨论", + "scenes.apps.messages.input.send_message": "发信息", + "scenes.apps.messages.input.emoji": "表情符号", + "scenes.apps.messages.input.hide_formatting": "隐藏格式", + "scenes.apps.messages.input.show_formatting": "显示格式", + "scenes.apps.tasks.my_tasks": "我的任务", + "scenes.apps.tasks.board.place_holder": "板名", + "scenes.apps.tasks.board.tasks.subtask": "子任务", + "scenes.apps.tasks.board.tasks.add_subtask": "添加子任务", + "components.tagpicker.tag_name": "标签名称", + "components.upload.drop_files": "将您的文件放在这里", + "components.workspace.list_manager.no_workspace": "没有工作区", + "components.attachmentpicker.from_computer": "从您的设备", + "components.attachmentpicker.from_twake": "从调整文件", + "components.attachmentpicker.file": "文件", + "components.attachmentpicker.remove_attach": "删除附件", + "scenes.apps.drive.remove_attachs": "删除附件", + "components.drive.elements.see": "看", + "components.drive.elements.current_name": "现名: ", + "scenes.apps.drive.right_preview.public": "公共访问", + "components.drive.elements.configurate_mod": "配置模块...", + "components.drive.elements.manage_version": "管理版本", + "scenes.app.popup.createcompany.try_again": "请再试一次。", + "components.notifications.hidden_notifications_button.children": "新消息", + "scenes.client.mainview.tabs.tabstemplateeditor.select_placeholder": "应用", + "scenes.client.channelbar.channelmemberslist.no_members": "此频道中没有用户,您可以通过单击添加用户来邀请他们。", + "scenes.app.channelsbar.hide_discussion_leaving.menu": "隐藏讨论", + "scenes.app.popup.adduserfromtwakeconsole.current_users_state": "{{$1}} 电子邮件将被添加", + "components.newversion.new_version_component.row.part_1": "您运行的是过时的 Twake 版本", + "general.re_send": "重发", + "components.account_verication_status_blocked": "锁定", + "components.unverified_account.re_send_email": "没有收到邮件?", + "components.blocked_account.trial_period_over": "您的试用期已过。要解锁您的帐户并访问所有功能,请通过电子邮件确认验证您的帐户", + "scenes.app.popup.workspaceparameter.pages.workspace_partner_tabs.members.table.tags": "角色", + "general.email": "电子邮件", + "components.locked_features.locked_workspace_popup.title": "您无法创建更多工作区", + "scenes.login.create_account.step_3_mail_sent": "我们已通过电子邮件向您发送激活链接。", + "scenes.login.create_account.step_3_subtitle": "最后一步——我们需要验证你不是机器人!", + "scenes.app.workspaces.create_company.company_name.placeholder": "公司名", + "scenes.app.workspaces.create_company.company_name.title_1": "开始,", + "scenes.app.workspaces.create_company.company_name.title_2": "注明贵公司的名称。", + "scenes.app.workspaces.create_company.default_workspace_name": "主要的", + "scenes.app.workspaces.create_company.importations.title_1": "已经在使用数字工具?立即导入或集成您的工具!", + "scenes.app.workspaces.create_company.importations.title_2": "不用担心,您可以稍后再做!", + "scenes.app.workspaces.create_company.invitations.title_2": "将用户添加到您的团队。", + "scenes.app.workspaces.create_company.title": "创建我的公司", + "scenes.app.workspaces.welcome_page.add_secondary_emails": "添加辅助电子邮件", + "scenes.app.workspaces.welcome_page.added_to_company": "您已受邀参加 ", + "scenes.app.workspaces.welcome_page.create_my_company": "创建我的公司", + "scenes.app.workspaces.welcome_page.lets_go": "我们走吧!", + "scenes.app.workspaces.welcome_page.may_be_invited_with_secondary_emails": "您是使用其他电子邮件地址被邀请的吗?", + "scenes.app.workspaces.welcome_page.no_company_subtitle": "哦,好吧……看起来还没有人邀请你到工作区。", + "scenes.app.workspaces.welcome_page.ready_to_work": "您现在可以开始工作了。", + "scenes.app.workspaces.welcome_page.see_you_soon": "再见!", + "scenes.app.workspaces.welcome_page.try_again": "再试一次", + "scenes.app.workspaces.welcome_page.twake_team": "调整", + "scenes.app.workspaces.welcome_page.welcome_header": "欢迎来到特瓦克!", + "scenes.app.workspaces.welcome_page.add_secondary_emails_comment": "您可以将多个电子邮件地址链接到您的帐户;只有一个地址将用于向您发送通知。", + "scenes.app.workspaces.welcome_page.main_mail_title": "主要地址", + "scenes.app.workspaces.welcome_page.other_mail_title": "辅助地址", + "scenes.app.workspaces.welcome_page.add_new_email": "添加电子邮件", + "scenes.app.workspaces.welcome_page.code_verification": "验证码", + "scenes.app.workspaces.welcome_page.new_email": "添加辅助电子邮件", + "scenes.app.workspaces.welcome_page.we_sent_you_mail": "我们通过 {{$1}} 向您发送了验证码", + "scenes.app.workspaces.welcome_page.done": "我受够了", + "scenes.login.forgot_password.finished": "您的密码已成功更新。", + "scenes.apps.account.account.description_main": "您的主要地址是 Twake 发送通知的地方。您的辅助地址允许您自动被邀请到使用它们的工作区。", + "scenes.apps.account.account.emails.description": "管理您的不同电子邮件地址。", + "scenes.apps.account.account.make_main": "设置主要", + "scenes.apps.account.account.password.description": "更改您的密码。", + "scenes.apps.account.identity": "身份", + "scenes.apps.account.identity.description": "更改其他 Twake 用户可见的名字、姓氏和个人资料图片。", + "scenes.apps.account.preference": "喜好", + "scenes.apps.account.thumbnail.max_weight": "最大大小 5 MB", + "scenes.apps.account.account.email_add_modal.confirm": "确认此电子邮件", + "app.name.twake_calendar": "日历", + "general.verify": "核实", + "scenes.app.workspaces.create_company.group_data.title": "我们很快——我们只需要一些统计信息。", + "scenes.app.channelsbar.currentuser.company_messages_counter_header": "留言号码", + "scenes.app.channelsbar.currentuser.company_messages_counter_info": "在 Twake 的免费版本上,您只能访问 {{$1}} 更新的消息。", + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "显示更多计划", + "scenes.app.channelsbar.channelsuser.new_private_discussion": "新的私人讨论", + "scenes.app.channelsbar.channelsuser.no_private_message_invite_collaboraters": "没有私信。邀请用户!", + "scenes.app.channelsbar.channelsuser.private_messages": "直接消息", + "scenes.app.channelsbar.channelsworkspace.channel_title": "频道", + "scenes.app.channelsbar.channelsworkspace.channel_title.favorite": "收藏夹", + "scenes.app.channelsbar.channelsworkspace.create_channel": "创建频道", + "scenes.app.channelsbar.channelsworkspace.no_channel": "您还没有加入任何频道", + "scenes.app.channelsbar.initial_instructions_tutorial": "选择名字、姓名和个人资料图片。", + "scenes.app.channelsbar.installation_desktop_tutorial": "安装桌面应用程序", + "scenes.app.channelsbar.invitation_collaboraors_tutorial": "邀请用户进入您的工作区。", + "scenes.app.channelsbar.public_channel_label": "民众", + "scenes.app.channelsbar.private_channel_label": "私人的", + "scenes.app.channelsbar.sending_message_instruction": "在讨论中发送您的第一条消息", + "scenes.app.channelsbar.tutorial_alert": "不再显示此框架?", + "scenes.app.channelsbar.welcome": "欢迎来到 Twake", + "scenes.app.channelsbar.welcoming_message_subtitle": "只需点击几下即可成为 Twake 专家!", + "scenes.app.mainview.instruction_current_tab": "首先选择左侧的频道。", + "scenes.app.mainview.tabs.no_connected_connectors_for_channel": "您没有可以连接到通道的连接器。", + "scenes.app.mainview.tabs.rename": "改名", + "scenes.app.mainview.tabs.searching_connectors": "搜索连接器...", + "scenes.app.popup.adduser.adresses_message": "请用逗号或空格分隔地址。请记住,Twake 可以根据您的订阅限制邀请数量。", + "scenes.app.popup.appsparameters.pages.amazing_app_name": "我惊人的应用程序", + "scenes.app.popup.appsparameters.pages.api_data_description": "Twake API 的有用数据。", + "scenes.app.popup.appsparameters.pages.api_parameters_label": "接口设置", + "scenes.app.popup.appsparameters.pages.app_name_label": "应用名称", + "scenes.app.popup.appsparameters.pages.app_modification_right": "该公司的所有经理都可以编辑此应用程序。", + "scenes.app.popup.appsparameters.pages.app_privileges_information": "定义您的应用程序可以编辑和读取的内容。", + "scenes.app.popup.appsparameters.pages.app_privileges_label": "应用权限", + "scenes.app.popup.appsparameters.pages.app_update": "更新应用 {{$1}}(应用使用 {{$2}} 次。)", + "scenes.app.popup.appsparameters.pages.application_title": "应用", + "scenes.app.popup.appsparameters.pages.apps_title": "您的应用程序和连接器", + "scenes.app.popup.appsparameters.pages.automatique_label": "自动的", + "scenes.app.popup.appsparameters.pages.automatique_option_information": "如果您激活“自动”,此应用程序将自动添加到该公司的下一个工作区。", + "scenes.app.popup.appsparameters.pages.autorised_ip_adresses_label": "允许的 IP 地址", + "scenes.app.popup.appsparameters.pages.create_my_app": "创建我的应用程序", + "scenes.app.popup.appsparameters.pages.current_informations_apps_connectors": "您尚未创建应用程序。在创建应用程序或连接器之前,请确保它在我们的应用程序市场中尚不存在。", + "scenes.app.popup.appsparameters.pages.danger_zone_description": "删除申请", + "scenes.app.popup.appsparameters.pages.danger_zone_label": "危险地带", + "scenes.app.popup.appsparameters.pages.description_label": "描述", + "scenes.app.popup.appsparameters.pages.developped_apps_subtitle": "公司开发的应用", + "scenes.app.popup.appsparameters.pages.dispalyed_parameters_description": "允许您定义应用程序的可见位置。", + "scenes.app.popup.appsparameters.pages.displayed_parameters_label": "显示设置", + "scenes.app.popup.appsparameters.pages.filter_information": "此过滤器将 API 密钥的使用仅限于连接器中的服务器。", + "scenes.app.popup.appsparameters.pages.go_back": "后退", + "scenes.app.popup.appsparameters.pages.grp_section_name-error": "此名称已被另一个应用程序使用。请选择另一个。", + "scenes.app.popup.appsparameters.pages.grp_section_surname_label": "简化名称", + "scenes.app.popup.appsparameters.pages.installation": "安装。", + "scenes.app.popup.appsparameters.pages.instruction_message_twakecode": "首先以 JSON 格式编写消息。", + "scenes.app.popup.appsparameters.pages.interne_availability_application": "内部应用", + "scenes.app.popup.appsparameters.pages.json_configuration_information": "转到文档以生成 JSON 格式的配置。", + "scenes.app.popup.appsparameters.pages.loading": "正在加载...", + "scenes.app.popup.appsparameters.pages.message_data_next_event": "将在下一个 Event 中发送的被动数据", + "scenes.app.popup.appsparameters.pages.modify_public_data": "编辑应用程序的公共数据。", + "scenes.app.popup.appsparameters.pages.new_app_title": "新应用", + "scenes.app.popup.appsparameters.pages.ok_user_code": "好的", + "scenes.app.popup.appsparameters.pages.optimal_format": "最佳格式:48x48px。", + "scenes.app.popup.appsparameters.pages.parameters_form_small_text": "未发布的应用程序仅适用于您的公司。如果您想让所有 Twake 用户都可以使用它,请激活此选项。", + "scenes.app.popup.appsparameters.pages.public_availability_application": "公开申请", + "scenes.app.popup.appsparameters.pages.public_login_label": "公共标识符", + "scenes.app.popup.appsparameters.pages.publication_description": "确定应用程序的可见性。", + "scenes.app.popup.appsparameters.pages.publication_label": "出版物", + "scenes.app.popup.appsparameters.pages.publish_app_label": "发布应用", + "scenes.app.popup.userparameter.pages.keywords_notif_description": "突出显示以下关键字:", + "scenes.app.popup.userparameter.pages.mail_frequency_notif_configuration_description": "设置电子邮件通知的频率。", + "scenes.app.popup.userparameter.pages.private_message_content.show": "显示私信内容", + "scenes.app.popup.userparameter.pages.private_message_content.hide": "隐藏私信内容", + "scenes.app.popup.userparameter.pages.no_disturbing_notif_period_description": "选择您不接收通知的时间段。", + "scenes.app.popup.userparameter.pages.no_night_disturbing_label": "晚上请勿打扰", + "scenes.app.popup.userparameter.pages.notif_content_label": "通知内容", + "scenes.app.mainview.quick_search_placeholder": "快速搜索", + "scenes.app.popup.userparameter.personnal_workspaces_title": "您的工作空间", + "scenes.app.popup.workspaceparameter.admin_current_status": "您是管理员。", + "scenes.app.popup.workspaceparameter.admin_manager_current_status": "您是工作区管理员。", + "scenes.app.popup.workspaceparameter.manager_current_status": "您是公司管理员。", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace": "删除工作区", + "scenes.app.popup.workspaceparameter.pages.error_workspace_member": "您必须独自在工作区中才能将其删除。删除您的协作者,然后重试。", + "scenes.app.popup.workspaceparameter.pages.enter": "进入 ", + "scenes.app.popup.workspaceparameter.pages.description": "描述", + "scenes.app.popup.workspaceparameter.pages.developped_apps_small_text": "公司开发的应用", + "scenes.app.popup.workspaceparameter.pages.displayed_preferencies_subtitle": "显示首选项", + "scenes.app.popup.workspaceparameter.pages.install_button": "安装", + "scenes.app.popup.workspaceparameter.pages.installed_app_information": "在此工作区中安装应用程序。", + "scenes.app.popup.workspaceparameter.pages.installed_apps_information": "安装在此工作区中的应用程序 {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_message": "安装在公司其他领域的应用程序 {{$1}}", + "scenes.app.popup.workspaceparameter.pages.installed_apps_subtitle": "已安装的应用程序", + "scenes.app.popup.workspaceparameter.pages.invitation_error": "邀请以下用户时出错: ", + "scenes.app.popup.workspaceparameter.pages.invited_guest_check_message": "检查使用的用户名或电子邮件是否有效。", + "scenes.app.popup.workspaceparameter.pages.logo_modify_description": "编辑此工作区的图像", + "scenes.app.popup.workspaceparameter.pages.logo_subtitle": "标识", + "scenes.app.popup.workspaceparameter.pages.name_description": "更改此工作区的名称", + "scenes.app.popup.workspaceparameter.pages.name_label": "工作区名称", + "scenes.app.popup.workspaceparameter.pages.no_access": "没有访问权限。", + "scenes.app.popup.workspaceparameter.pages.title": "工作区设置", + "scenes.app.popup.workspaceparameter.pages.webhooks_access_subtitle": "访问网络钩子", + "scenes.apps.calendar.connectors_menu": "连接器...", + "scenes.apps.calendar.connectors_search_menu": "搜索连接器...", + "scenes.apps.calendar.create_calendar_title": "创建日历", + "scenes.apps.calendar.day_option": "日", + "scenes.apps.calendar.edit_calendar_title": "编辑日历", + "scenes.apps.calendar.export_title": "出口", + "scenes.apps.calendar.export_view_menu": "导出视图...", + "scenes.apps.calendar.ics_download_menu": "下载 ICS 文件", + "scenes.apps.calendar.ics_subscription_menu": "获取 ICS 订阅链接", + "scenes.apps.calendar.modals.advanced_options": "高级选项", + "scenes.apps.calendar.modals.description_placeholder": "描述", + "scenes.apps.calendar.modals.details_title": "细节", + "scenes.apps.calendar.modals.event_adresse_placeholder": "地址", + "scenes.apps.calendar.modals.event_description_placeholder": "描述", + "scenes.apps.calendar.modals.event_title_placeholder": "标题", + "scenes.apps.calendar.modals.modify_event_button": "编辑事件", + "scenes.apps.calendar.modals.part.participants": "参与者", + "scenes.apps.calendar.modals.participants_event": "参与者", + "scenes.apps.drive.message_added_file": "{{$1}} 发送 {{$2}}。", + "scenes.apps.drive.message_added_mutiple_files": "{{$1}} 发送了多个文件。", + "scenes.apps.drive.message_added_file_no_name": "{{$1}} 发送了一个文件。", + "scenes.apps.drive.choose_folder_button": "选择一个目录", + "scenes.apps.drive.choose_file_button": "选择一个文件", + "scenes.apps.drive.create_folder_button": "创建", + "scenes.apps.drive.download_button": "下载", + "scenes.apps.drive.open_link": "在新窗口中打开链接", + "scenes.apps.drive.files_subtitle": "文件", + "scenes.apps.drive.folder_subtitle": "文件夹", + "scenes.apps.drive.go_out_trash_menu": "留下垃圾", + "scenes.apps.drive.go_trash_menu": "去垃圾箱", + "scenes.apps.drive.import_from_computer_menu": "从电脑上传", + "scenes.apps.drive.move_text": "移动", + "scenes.apps.drive.new_file_menu": "新文件", + "scenes.apps.drive.new_file_title": "新文件", + "scenes.apps.drive.new_external_storage": "新的外部存储", + "scenes.apps.drive.new_folder_title": "新建文件夹", + "scenes.apps.drive.no_file_alert": "您没有允许您创建文件的应用程序。", + "scenes.apps.drive.no_storage_app_alert": "您没有允许添加外部存储的应用程序。", + "scenes.apps.drive.remove_definitely_menu": "永久删除", + "scenes.apps.drive.restore_menu": "恢复", + "scenes.apps.drive.throw_menu": "发送到垃圾箱", + "scenes.apps.drive.trash_empty_menu": "清空垃圾", + "scenes.apps.messages.message.modify_button": "编辑", + "scenes.apps.messages.message.pin_button": "置顶消息", + "scenes.app.popup.workspaceparameter.pages.cancel_invitation": "取消邀请", + "scenes.apps.account.account.fullname": "全名", + "login.email_login": "电子邮件/登录", + "scenes.apps.account.account.password_for_user": "您的用户的密码", + "scenes.apps.account.account.send_info": "将此凭据信息发送给您的用户。", + "scenes.apps.account.account.save": "保存帐号", + "components.workspace.list_manager.current_space": "当前工作空间", + "components.workspace.list_manager.all": "全部", + "components.searchpopup.loading": "加载更多结果", + "components.searchpopup.filter_ws": "过滤工作区", + "components.searchpopup.tags": "标签", + "components.searchpopup.size": "尺寸", + "components.searchpopup.creation": "创建", + "components.searchpopup.update_search": "更新搜索", + "components.searchpopup.last_modif": "最后修改", + "components.searchpopup.sender": "发件人", + "components.searchpopup.mentions": "提及", + "components.searchpopup.only_pinned": "仅固定消息", + "components.alert.confirm": "确认您的操作", + "components.alert.confirm_click": "单击“确定”确认您的操作。", + "components.searchpopup.tasks": "任务", + "scenes.app.mainview.advanced_search_placeholder": "高级搜索", + "components.searchpopup.hide_filters": "隐藏过滤器", + "components.searchpopup.show_filters": "显示过滤器", + "components.searchpopup.load_more": "加载更多结果", + "general.more": "更多的", + "scenes.apps.board.archived_tasks": "存档任务 ({{$1}})", + "scenes.apps.board.active_tasks": "活动任务", + "scenes.apps.board.kanban": "看板", + "components.userlistmanager.no_users": "没有用户。", + "scenes.apps.drive.used": "在这个文件夹中使用", + "scenes.apps.calendar.reminders": "提醒", + "scenes.app.popup.workspace.edit_temp": "编辑临时账户", + "scenes.app.popup.workspace.create_temp": "创建临时账户", + "scenes.apps.tasks.active_tasks": "活动任务", + "scenes.apps.drive.right_preview.versions": "版本", + "scenes.app.popup.appsparameters.pages.apps_connectors_small_text": "管理您的应用程序和连接器。", + "scenes.app.popup.appsparameters.pages.icon": "图标", + "scenes.app.popup.appsparameters.pages.title_informations": "基本信息", + "scenes.app.popup.appsparameters.pages.subtitle_informations": "与应用程序管理相关的信息", + "scenes.app.popup.appsparameters.pages.smalltext_user_id": "当前用户 ID", + "scenes.app.popup.appsparameters.pages.smalltext_workspace_id": "当前工作区 ID", + "scenes.app.popup.appsparameters.pages.smalltext_group_id": "当前组 ID", + "scenes.app.mainview.channel_description": "描述渠道", + "scenes.client.channelbar.channeltemplateeditor.checkbox": "自动邀请所有工作区用户加入此频道", + "scenes.client.channelbar.channelmemberslist.title": "{{$1}} 中的用户", + "scenes.client.channelbar.channelmemberslist.loader": "装载更多", + "scenes.client.channelbar.channelmemberslist.autocomplete": "添加或搜索用户", + "scenes.client.channelbar.channelmemberslist.menu.option_2": "从频道中删除", + "components.leftbar.channel.workspaceschannels.menu.option_1": "创建频道", + "components.leftbar.channel.workspaceschannels.menu.option_2": "加入频道", + "components.channelworkspacelist.title": "频道", + "scenes.client.channelbar.workspacechannellist.autocomplete": "搜索频道、用户或直接消息", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_creation": "创建一个新选项卡", + "scenes.client.mainview.tabs.tabstemplateeditor.title_tab_edition": "重命名 {{$1}}", + "components.connectorslistmanager.add_connectors": "添加连接器", + "components.newversion.new_version_component.row.part_2": "我们建议您重新加载应用程序并享受我们的新功能!", + "components.newversion.new_version_component.link": "单击此处重新加载", + "components.newversion.new_version_modal.title": "有新的更新可用 !", + "scenes.apps.drive.download_all_button": "全部下载", + "components.inputs.input_with_select.input.placeholder": "频道名称", + "components.inputs.input_with_select.select.placeholder": "栏目名称", + "components.inputs.input_with_select.select.no_sections": "开始写下您的第一个频道部分的名称。", + "components.inputs.input_with_select.button.tooltip": "设置频道部分", + "scenes.apps.messages.message.activity_message.a_added_b_to_the_channel": "{{$1}} 频道新增 {{$2}}", + "scenes.apps.messages.message.activity_message.a_removed_b_from_the_channel": "{{$1}} 从频道中移除 {{$2}}", + "scenes.apps.messages.message.activity_message.a_updated_channel_description": "{{$1}} 更改了描述", + "scenes.apps.messages.message.activity_message.a_updated_channel_name": "{{$1}} 将频道重命名为 {{$2}}", + "scenes.apps.messages.message.activity_message.a_created_channel_tab": "【X0X】新增【X19X】标签【X30X】", + "scenes.apps.messages.message.activity_message.a_deleted_channel_tab": "{{$1}} 移除 {{$2}} 选项卡 {{$3}}", + "scenes.apps.messages.message.activity_message.a_created_channel_connector": "{{$1}} 增加了一个新的连接器 {{$2}}", + "scenes.apps.messages.message.activity_message.a_deleted_channel_connector": "{{$1}} 移除了一个连接器 {{$2}}", + "scenes.client.channelbar.channelmemberslist.tag": "你", + "components.alert.leave_private_channel.title": "您确定要离开频道吗?", + "components.richtexteditor.toolbar.underline": "强调", + "components.richtexteditor.toolbar.italic": "斜体", + "components.richtexteditor.toolbar.strikethrough": "删除线", + "components.richtexteditor.toolbar.code": "代码", + "components.richtexteditor.toolbar.unordered-list": "项目符号列表", + "components.richtexteditor.toolbar.ordered-list": "有序列表", + "components.richtexteditor.toolbar.blockquote": "块引用", + "components.richtexteditor.toolbar.code-block": "代码块", + "components.locked_features.locked_history_banner.title": "您刚刚达到消息限制", + "components.locked_features.locked_history_banner.description": "贵公司有大量留言!立即升级以访问您的所有消息历史记录。", + "components.locked_features.locked_history_banner.button": "了解更多", + "components.locked_features.locked_guests_popup.title": "访客功能已锁定", + "components.locked_features.locked_guests_popup.subtitle": "此功能在 Twake 免费版中不可用", + "components.locked_features.locked_guests_popup.description": "哎哟!!似乎您想邀请外部用户加入您的工作区。如果您想与客人和外部合作伙伴协作,您可能需要考虑升级您的计划。探索我们的定价选项并为您的团队协作需求选择最佳选项。", + "components.locked_features.locked_guests_popup.learn_more_button": "了解更多", + "components.locked_features.locked_guests_popup.skip_for_now_button": "暂时跳过", + "components.on_boarding.popups.blocked_company.company_selector": "切换到另一家公司", + "scenes.apps.tasks.select_user_button": "查看其他用户的任务", + "scenes.apps.messages.input.attach_file.from_computer": "从电脑", + "scenes.app.popup.workspaceparameter.pages.table_title": "姓名", + "scenes.client.main_view.main_header.search_input": "搜索", + "scenes.apps.drive.new_link_title": "新链接", + "scenes.apps.drive.default_link_name": "无标题", + "components.emoji_picker.input_search_placeholder": "搜索", + "services.apps.messages.message_editor_service.upload_error_toaster": "{{$1}} - 您不能在消息中添加超过 {{$2}} 个文件", + "scenes.apps.messages.message.parts.deleted_content.text.current_user": "你删除了这条消息", + "scenes.apps.messages.message.parts.deleted_content.text": "{{$1}} 删除了他的消息", + "components.member.user_parts.and_more_user_text": " 和 {{$1}} 更多用户", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_link": "创建私人频道", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_text": " 反而", + "scenes.app.channelsbar.channelsuser.new_private_discussion.limit_reached_input_placeholder": "您添加的用户不能超过 10 个", + "general.uploading": "上传", + "components.locked_features.locked_workspace_popup.text": "哎哟!!您想在您的公司中创建一个新的工作空间吗?您可能需要考虑升级您的计划。探索我们的定价选项并为您的团队协作需求选择最佳选择。", + "components.locked_features.locked_only_office_popup.subtitle": "在免费版本中,您不能使用 onlyoffice。", + "components.locked_features.locked_only_office_popup.text": "哎哟!!似乎您想从 Twake 编辑文件。如果您想围绕办公文件进行协作,您可能需要考虑升级您的计划。探索我们的定价选项并为您的团队协作需求选择最佳选项。", + "components.locked_features.locked_drive_popup.title": "您刚刚达到驱动器限制", + "components.locked_features.locked_drive_popup.subtitle": "在免费版本中,您只能存储 6GB。", + "general.pause": "暂停", + "scenes.app.popup.appsparameters.pages.call_event_handlers": "事件类型为“{{$1}}”,id 为“{{$2}}”,被动为“{{$3}}”", + "scenes.app.popup.appsparameters.pages.company_label": "公司所有者", + "scenes.app.popup.appsparameters.pages.configuration_label": "配置", + "scenes.app.popup.appsparameters.pages.create_app_button": "创建应用程序", + "scenes.app.popup.appsparameters.pages.show_button": "展示", + "scenes.app.popup.appsparameters.pages.status_tilte": "状态", + "scenes.app.popup.appsparameters.pages.website_label": "网站", + "scenes.app.popup.workspaceparameter.pages.apps_company_small_text": "贵公司的应用", + "scenes.app.popup.workspaceparameter.pages.apps_connectors_title": "集成", + "scenes.app.popup.workspaceparameter.pages.apps_research_title": "搜索应用", + "scenes.app.popup.workspaceparameter.pages.apps_small_text": "此工作区的应用", + "scenes.app.popup.workspaceparameter.pages.configure_button": "配置", + "scenes.app.popup.workspaceparameter.pages.weight_max_small_text": "最大大小 5 MB。", + "scenes.app.popup.workspaceparameter.pages.withdraw_button": "从此工作区中删除", + "scenes.app.popup.workspaceparameter.pages.worspace_notif": "工作空间", + "scenes.app.popup.workspaceparameter.pages.write_access_subtitle": "写权限", + "scenes.app.popup.workspaceparameter.pages.your_apps_label": "您的应用", + "scenes.app.workspacesbar.components.change_company_title": "换公司", + "scenes.app.workspacesbar.components.create_company_menu": "创建公司", + "scenes.app.workspacesbar.components.grp_parameters": "{{$1}} 设置", + "scenes.apps.calendar.add_calendar_menu": "添加日历", + "scenes.apps.calendar.modals.reminders": "提醒事项", + "scenes.apps.calendar.no_calendar_text": "您尚未为此工作区设置任何日历。", + "scenes.apps.calendar.no_connectors_menu_text": "您没有任何可以连接到日历的连接器。", + "scenes.apps.calendar.remove_calendar_confirmation": "永久删除日历及其事件?", + "scenes.app.workspaces.components.skip": "跳过", + "scenes.app.taskpicker.select": "选择", + "components.drive.modify_uslist": "修改用户列表", + "components.workspace.list_manager.add": "添加工作区", + "scenes.apps.board.display_as": "显示为", + "scenes.apps.board.new_task": "+ 新任务", + "scenes.apps.board.all_boards": "所有板", + "components.alert.leave_private_channel.description": "除非有人邀请您,否则您将无法再次加入此私人频道。", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.tag": "你不是会员", + "components.verify_mail.text": "首先,您必须验证您的电子邮件地址。我们已将验证链接发送至", + "services.console_services.toaster.add_emails_error": "添加电子邮件时出错", + "services.console_services.toaster.success_verify_email": "验证链接已发送到您的电子邮件帐户", + "scenes.app.popup.workspaceparameter.edit_from_console": "在控制台中查看", + "services.console_services.toaster.success_invite_emails": "已成功添加 {{$1}} 个用户", + "scenes.client.channels_bar.modals.guest_management.title": "在 {{$1}} 中管理来宾", + "scenes.client.channels_bar.modals.parts.channel_member_row.label.pending_email": "邮件已发送", + "general.user.role.company.admin": "公司管理员", + "general.user.role.company.guest": "客人", + "general.user.deleted": "已删除帐户", + "components.richtexteditor.toolbar.bold": "胆大", + "components.locked_features.locked_guests_popup.or": "或者", + "components.on_boarding.popups.blocked_company.title": "您的公司因付款问题而被锁定", + "components.on_boarding.popups.blocked_company.company_subscription_plan_button": "点击这里", + "components.emoji_picker.categories.animals_and_nature": "动物与自然", + "components.emoji_picker.categories.food_and_drink": "食物和饮料", + "scenes.app.integrations_parameters.applications_table.search_placeholder": "搜索应用", + "scenes.app.integrations_parameters.company_application_popup.tag": "已安装", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.description_item": "描述", + "scenes.app.integrations_parameters.company_application_popup.tab_info.descriptions.website_item": "网站", + "scenes.app.integrations_parameters.company_applications_table.more_menu.show_application": "展示", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "已成功从贵公司删除 {{$1}}", + "app.state.recoil.hooks.use_current_company_applications.toaster_add": "在贵公司成功添加【X19X】", + "scenes.apps.messages.input.replied_to": "回复 ", + "general.help.documentation": "文档", + "scenes.apps.calendar.event_edition.deadline_tag": "最后期限", + "scenes.apps.drive.left.search": "搜索", + "scenes.apps.parameters.group_sections.apps.badge_extension": "延期", + "scenes.apps.parameters.workspace_sections.members.members": "用户", + "scenes.apps.parameters.workspace_sections.members.pending": "待处理的电子邮件", + "scenes.apps.parameters.workspace_sections.members.invite": "邀请新用户", + "scenes.apps.tasks.list_modal.modify_list": "修改列表", + "scenes.apps.tasks.list_modal.new_list": "新名单", + "scenes.apps.tasks.list_modal.remove": "删除列表和任务", + "scenes.apps.tasks.list_modal.predefined_participants": "预定义参与者", + "scenes.apps.tasks.list_modal.archive_all_tasks": "归档所有任务", + "scenes.app.popup.appsparameters.pages._app_identity": "应用程序的身份", + "scenes.app.popup.appsparameters.pages._appareance_message_twakcode": "测试您的 Twacode 消息的外观", + "scenes.app.popup.appsparameters.pages.error_user_code": "错误", + "scenes.app.popup.appsparameters.pages.danger_zone_small_text": "如果此应用已发布,您将无法删除它。", + "scenes.app.popup.appsparameters.pages.error_app_simple_name_message": "您的应用程序的简化名称已被另一个应用程序使用。请改变它。", + "scenes.app.popup.appsparameters.pages.error_app_update_message": "更新应用程序时出错。", + "scenes.app.popup.appsparameters.pages.remove_app_button": "删除申请", + "scenes.app.popup.workspaceparameter.pages.read_access_subtitle": "读取权限", + "scenes.apps.drive.unconfigured_tab": "此选项卡尚未配置。", + "scenes.apps.drive.viewer.edit_with_button": "使用 {{$1}} 进行编辑", + "scenes.apps.drive.viewer.loading_preview_message": "正在加载...", + "scenes.apps.drive.viewer.no_preview_message": "无法查看此类文件。", + "scenes.login.verifymail.alert": "我们正在检查您的电子邮件!", + "scenes.login.verifymail.error_message": "发生错误", + "scenes.apps.drive.trash": "垃圾", + "scenes.tell_us": "请告诉我们你在做什么:", + "scenes.apps.drive.viewer.download_desktop": "下载 Twake Desktop 以在应用程序中进行预览", + "app.name.twake_drive": "文件", + "scenes.login.forgot_password.email_to_recover": "要恢复的电子邮件", + "scenes.login.forgot_password.mail_doesnt_exist": "此邮箱不存在", + "scenes.login.home.lost_password": "忘记密码?", + "scenes.login.home.create_account": "创建一个帐户", + "scenes.login.create_account.password": "密码", + "scenes.login.create_account.step_1_subtitle": "再简单不过了——我们只需要一些信息。", + "scenes.login.create_account.step_2_subtitle_a": "添加您的全名以便其他用户识别您。", + "scenes.login.create_account.step_2_subtitle_b": "您的电话号码保持私密。", + "app.name.twake_tasks": "任务", + "components.calendar.repetition.everyday": "日常的", + "components.calendar.repetition.does_not_repeat": "不重复", + "components.calendar.repetition.weekly_on": "每周 {{$1}}", + "components.calendar.repetition.monthly_on": "每月上 {{$1}} {{$2}}", + "components.calendar.repetition.monthly_on_day": "每月第 {{$1}}", + "components.calendar.repetition.annually_on": "每年在 {{$1}}", + "components.calendar.repetition.every_weekday": "每个工作日(周一至周五)", + "components.calendar.repetition.custom": "风俗...", + "components.calendar.repetition.repeat": "重复每", + "components.calendar.repetition.ends": "结束", + "components.calendar.repetition.never": "绝不", + "components.calendar.repetition.on": "在", + "components.calendar.repetition.after": "后", + "components.calendar.repetition.days": "天)", + "components.calendar.repetition.weeks": "周", + "components.calendar.repetition.months": "月", + "scenes.app.channelsbar.currentuser.user_parameter": "通知设置", + "components.emoji_picker.categories.smileys_and_people": "笑脸与人物", + "general.resume": "恢复", + "scenes.app.popup.workspaceparameter.pages.deleteworkspace_description": "要确认您要删除此工作区,请在下面键入名称并点击删除。", + "scenes.apps.messages.message.unpin_button": "取消固定消息", + "scenes.apps.messages.message.copy_link": "复制链接到消息", + "scenes.apps.messages.message.pinned": "固定", + "scenes.apps.messages.message.remove_button": "删除", + "scenes.apps.messages.message.reply_button": "回复", + "scenes.apps.messages.message.save_button": "节省", + "scenes.apps.messages.message.show_button": "展示", + "scenes.apps.messages.message.show_responses_button": "查看所有答案", + "scenes.apps.messages.message.types.first_channel_message_text": "这是频道的第一条消息", + "scenes.apps.messages.message.types.first_message_text": "这是第一条消息", + "scenes.apps.messages.messageslist.get_writing_user": "在写字...", + "scenes.apps.messages.messageslist.get_writing_users": "在写...", + "scenes.apps.messages.messageslist.go_last_message_button": "转到最后一条消息", + "scenes.apps.messages.messageslist.go_last_message_button.new_messages": "新消息", + "scenes.error_on_twake": "“休斯顿,我们有一个问题”", + "scenes.help_us": "但是,如果您想帮助我们解决此错误,请在下面给我们发送消息: ", + "scenes.apps.account.message_temporary": "临时帐户的工作方式与普通的 Twake 帐户类似,但您创建了密码,并且可以在必要时重置它。", + "scenes.apps.account.message_user_signin": "您的用户可以随时使用同一电子邮件登录并将临时帐户更改为普通帐户。", + "scenes.app.mainview.link_expired": "此公共链接无效或已过期。", + "scenes.app.mainview.create_account": "免费创建您的工作区 ", + "scenes.apps.calendar.modals.reminder_add": "添加提醒", + "scenes.apps.parameters.workspace_sections.members.invite_all": "邀请所有人", + "components.workspace.list_manager.current_company": "现任公司", + "components.workspace.calendar.invalid": "无效的", + "components.searchpopup.enter_text": "输入一些文本以搜索 Twake。", + "components.reminder.notification": "通知", + "components.reminder.minutes_bef": "几分钟前", + "components.reminder.hours_bef": "几小时前", + "components.reminder.days_bef": "几天前", + "components.reminder.weeks_bef": "几周前", + "components.reminder.by_email": "电子邮件", + "scenes.apps.calendar.video_link": "点击打开链接", + "scenes.app.mainview.discussion": "讨论", + "components.tagpicker.notag": "无标签", + "scenes.apps.tasks.modals.attachments": "附件", + "components.calendar.calendarselector.from": "从", + "scenes.apps.drive.move_text2": "移动", + "scenes.client.channelsbar.modals.workspace_channel_list.workspace_channel_row.loader": "装载更多", + "components.unverified_account.typography_text_danger": "您还有 {{$1}} 天的试用期。试用帐户将在 7 天后被冻结,并在注册 1 个月后永久删除。您可以通过单击我们发送给您的验证电子邮件中的“验证我的帐户”按钮来验证您的帐户。", + "components.unverified_account.verification_details": "我们已将验证详细信息发送至", + "components.account_verification_status_sentence": "您的帐户状态是:{{$1}}", + "components.account_verication_status_unverified": "未经证实", + "components.add_mails_workspace.button": "开始使用 Twake", + "components.add_mails_workspace.title_1": "添加一些用户", + "components.add_mails_workspace.title_2": "Twake 是一个团队协作工具,因此请邀请一些用户来测试我们为您创建的工作区。", + "components.add_mails_workspace.text_area_placeholder": "输入您的用户的电子邮件*", + "components.verify_mail.title_1": "恭喜", + "components.verify_mail.title_2": "您现在是 Twake 的正式用户!", + "components.verify_mail.button": "添加用户", + "general.user.role.company.member": "成员", + "components.on_boarding.popups.blocked_company.or": "或者", + "scenes.apps.tasks.select_user": "搜索用户", + "components.emoji_picker.categories.not_found": "未找到表情符号", + "components.locked_features.locked_workspace_popup.subtitle": "在免费版本中,您的公司中只能拥有一个工作区。", + "components.locked_features.locked_only_office_popup.title": "您无法编辑此文件" +} diff --git a/twake/frontend/src/app/services/languages/languages.ts b/twake/frontend/src/app/services/languages/languages.ts index a188a391fc..f59b80189d 100755 --- a/twake/frontend/src/app/services/languages/languages.ts +++ b/twake/frontend/src/app/services/languages/languages.ts @@ -9,7 +9,22 @@ class Languages extends Observable { private i18nt: Function | null = null; private language: string = ''; private default = 'en'; - private available = ['en', 'fr', 'de', 'es', 'ja', 'ru', 'vi', 'it', 'tr', 'si', 'nb_NO']; + private available = [ + 'en', + 'fr', + 'de', + 'es', + 'ja', + 'ru', + 'vi', + 'it', + 'tr', + 'si', + 'nb_NO', + 'zh_Hans', + 'fi', + 'eu', + ]; constructor() { super(); From feb1b82331e32d87425065f266f8f349e2c17925 Mon Sep 17 00:00:00 2001 From: Titouan Issarni <46565431+tissarni@users.noreply.github.com> Date: Mon, 3 Jan 2022 20:08:15 +0100 Subject: [PATCH 009/276] =?UTF-8?q?=20=F0=9F=9B=A0=20#1811:=20=20Re-implem?= =?UTF-8?q?ent=20the=20"is=20writing"=20event=20(#1823)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Bootstrap " A is Writting" event * collect is writing information * Use timers to know if writter send WS, stop writting or loose connexion Co-authored-by: Romaric Mourgues * Splitting Emit/Receive writing event hook + component in channel view + use selector for threadId Co-authored-by: Romaric Mourgues * Handle key board event and not just onChange in editor * fix UI bug about main view component * don't print is writing for the user who is writing * first step of cleaning * ready for review, Todo task before merge in PR * #1811 Add translations and improve isWriting feature Co-authored-by: tissarni Co-authored-by: Romaric Mourgues Co-authored-by: Stéphane VIEIRA --- twake/frontend/public/locales/de.json | 5 +- twake/frontend/public/locales/en.json | 5 +- twake/frontend/public/locales/es.json | 5 +- twake/frontend/public/locales/fr.json | 5 +- twake/frontend/public/locales/ru.json | 11 +- .../app/components/RichTextEditor/Editor.tsx | 8 +- .../WritingLoader/WritingLoader.scss | 44 ++++++ .../WritingLoader/WritingLoader.tsx | 14 ++ .../app/scenes/Apps/Messages/Input/Input.tsx | 17 +- .../Apps/Messages/Input/Parts/IsWriting.tsx | 58 +++++++ .../Messages/Message/Parts/ReplyBlock.tsx | 4 +- .../app/scenes/Apps/Messages/Messages.scss | 12 ++ .../src/app/scenes/Apps/Messages/Messages.tsx | 3 +- .../scenes/Client/ChannelsBar/ChannelsBar.tsx | 2 + .../ChannelsBar/Parts/Channel/Channel.scss | 9 ++ .../ChannelsBar/Parts/Channel/Channel.tsx | 9 ++ .../recoil/atoms/ChannelWritingActivity.ts | 12 ++ .../recoil/hooks/useChannelWritingActivity.ts | 149 ++++++++++++++++++ .../recoil/selectors/ThreadWritingActivity.ts | 19 +++ 19 files changed, 379 insertions(+), 12 deletions(-) create mode 100644 twake/frontend/src/app/components/WritingLoader/WritingLoader.scss create mode 100644 twake/frontend/src/app/components/WritingLoader/WritingLoader.tsx create mode 100644 twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/IsWriting.tsx create mode 100644 twake/frontend/src/app/state/recoil/atoms/ChannelWritingActivity.ts create mode 100644 twake/frontend/src/app/state/recoil/hooks/useChannelWritingActivity.ts create mode 100644 twake/frontend/src/app/state/recoil/selectors/ThreadWritingActivity.ts diff --git a/twake/frontend/public/locales/de.json b/twake/frontend/public/locales/de.json index dec1dae7ba..5d1ae0ff5b 100644 --- a/twake/frontend/public/locales/de.json +++ b/twake/frontend/public/locales/de.json @@ -847,5 +847,8 @@ "\"": "\"", "login.login_error": "Fehler bei der Anmeldung", "'": "'", - "login.create_account": "Konto erstellen" + "login.create_account": "Konto erstellen", + "scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} schreibt gerade...", + "scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} und {{$2}} schreiben...", + "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} und {{$3}} weitere Benutzer schreiben..." } diff --git a/twake/frontend/public/locales/en.json b/twake/frontend/public/locales/en.json index 53a2c96aeb..28d8619667 100644 --- a/twake/frontend/public/locales/en.json +++ b/twake/frontend/public/locales/en.json @@ -863,5 +863,8 @@ "components.rich_text_editor.plugins.suggestions.default_message.display_results": "Write at least three letters to display users", "components.rich_text_editor.plugins.suggestions.default_message.no_user_found": "No user found", "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found": "No emoji found", - "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No command found" + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No command found", + "scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} is writing...", + "scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} and {{$2}} are writing...", + "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} and {{$3}} more users are writing..." } diff --git a/twake/frontend/public/locales/es.json b/twake/frontend/public/locales/es.json index 1cd3324e67..1b4ea35e47 100644 --- a/twake/frontend/public/locales/es.json +++ b/twake/frontend/public/locales/es.json @@ -847,5 +847,8 @@ "scenes.join.twake_description": "Twake es un espacio de trabajo digital de código abierto creado para mejorar la productividad de su equipo", "scenes.app.channelsbar.currentuser.company_messages_counter_header": "Número de mensajes", "scenes.app.channelsbar.currentuser.company_messages_counter_info": "En la versión gratuita de Twake, no puede acceder a más mensajes que {{$1}} más recientes.", - "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Mostrar más planes" + "scenes.app.channelsbar.currentuser.company_messages_counter_link": "Mostrar más planes", + "scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} está escribiendo...", + "scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} y {{$2}} están escribiendo...", + "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} y {{$3}} usuarios más están escribiendo..." } diff --git a/twake/frontend/public/locales/fr.json b/twake/frontend/public/locales/fr.json index 87b5f10429..b3c2231006 100644 --- a/twake/frontend/public/locales/fr.json +++ b/twake/frontend/public/locales/fr.json @@ -863,5 +863,8 @@ "\"": "\"", "'": "'", "login.create_account": "Créer un compte", - "login.login_error": "Erreur lors de la connexion" + "login.login_error": "Erreur lors de la connexion", + "scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} est en train d'écrire...", + "scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} et {{$2}} sont en train d'écrire...", + "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} et {{$3}} autres utilisateurs sont en train d'écrire..." } diff --git a/twake/frontend/public/locales/ru.json b/twake/frontend/public/locales/ru.json index cc2d5262c6..c4f9c44731 100644 --- a/twake/frontend/public/locales/ru.json +++ b/twake/frontend/public/locales/ru.json @@ -676,9 +676,6 @@ "components.rich_text_editor.plugins.suggestions.default_message.no_user_found": "Пользователь не найден", "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found": "Не найдено ни одного эмодзи", "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Команда не найдена", - "app.state.recoil.hooks.use_current_company_applications.toaster_delete": "{{$1}} успешно удален из вашей компании", - "app.state.recoil.hooks.use_current_company_applications.toaster_add": "{{$1}} успешно добавлен в вашу компанию", - "scenes.apps.messages.input.replied_to": "ответил ", "general.retry": "Повторить попытку", "scenes.app.popup.adduser.magiclinks.genrator_info": "Пригласительная ссылка для рабочей среды", "application.load.longer": "Сервер не отвечает слишком долго, пожалуйста, ожидайте или обновите страницу...", @@ -851,5 +848,11 @@ "login.create_account": "Создать учетную запись", "'": "'", "login.login_error": "Ошибка при входе в систему", - "\"": "\"" + "\"": "\"", + "app.state.recoil.hooks.use_current_company_applications.toaster_delete" : "Успешно удалил {{$1}} из вашей компании", + "app.state.recoil.hooks.use_current_company_applications.toaster_add" : "{{$1}} успешно добавлен в вашу компанию", + "scenes.apps.messages.input.replied_to" : "ответил ", + "scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} пишет...", + "scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} и {{$2}} пишут...", + "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} и еще {{$3}} пользователей пишут..." } diff --git a/twake/frontend/src/app/components/RichTextEditor/Editor.tsx b/twake/frontend/src/app/components/RichTextEditor/Editor.tsx index 2cf25e6a9d..1e228b3f67 100644 --- a/twake/frontend/src/app/components/RichTextEditor/Editor.tsx +++ b/twake/frontend/src/app/components/RichTextEditor/Editor.tsx @@ -1,6 +1,6 @@ import React, { createRef, KeyboardEvent } from 'react'; import classNames from 'classnames'; -import { +import Draft, { Editor, EditorState, Modifier, @@ -124,6 +124,7 @@ export class EditorView extends React.Component { .map(plugin => plugin.resourceType); this.editorDataParser = RichTextEditorStateService.getDataParser(this.props.plugins); this.onChange = this.onChange.bind(this); + this.keyBindingFn = this.keyBindingFn.bind(this); this.handleKeyCommand = this.handleKeyCommand.bind(this); this.handleReturn = this.handleReturn.bind(this); this.handleBeforeInput = this.handleBeforeInput.bind(this); @@ -300,6 +301,10 @@ export class EditorView extends React.Component { }); } + keyBindingFn(e: any) { + return Draft.getDefaultKeyBinding(e); + } + updateSuggestionsState(): void { const currentEntityKey = getSelectionEntity(this.props.editorState); const currentEntityType = @@ -655,6 +660,7 @@ export class EditorView extends React.Component { ref={node => (this.editor = node)} editorState={this.props.editorState} onChange={this.onChange} + keyBindingFn={this.keyBindingFn} handleKeyCommand={this.handleKeyCommand} handleReturn={this.handleReturn} handlePastedText={this.handlePastedText} diff --git a/twake/frontend/src/app/components/WritingLoader/WritingLoader.scss b/twake/frontend/src/app/components/WritingLoader/WritingLoader.scss new file mode 100644 index 0000000000..e28f14359b --- /dev/null +++ b/twake/frontend/src/app/components/WritingLoader/WritingLoader.scss @@ -0,0 +1,44 @@ +.dot-typing { + position: relative; + left: -9999px; + margin-left: 15px; + width: 3px; + height: 3px; + border-radius: 50%; + background-color: var(--black-alpha-70); + color: var(--black-alpha-70); + box-shadow: 9988px 0 0 0 var(--black-alpha-70), 9992px 0 0 0 var(--black-alpha-70), + 9996px 0 0 0 var(--black-alpha-70); + animation: dotTyping 1.5s infinite linear; +} + +@keyframes dotTyping { + 0% { + box-shadow: 9988px 0 0 0 var(--black-alpha-70), 9992px 0 0 0 var(--black-alpha-70), + 9996px 0 0 0 var(--black-alpha-70); + } + 16.667% { + box-shadow: 9988px -5px 0 0 var(--black-alpha-70), 9992px 0 0 0 var(--black-alpha-70), + 9996px 0 0 0 var(--black-alpha-70); + } + 33.333% { + box-shadow: 9988px 0 0 0 var(--black-alpha-70), 9992px 0 0 0 var(--black-alpha-70), + 9996px 0 0 0 var(--black-alpha-70); + } + 50% { + box-shadow: 9988px 0 0 0 var(--black-alpha-70), 9992px -5px 0 0 var(--black-alpha-70), + 9996px 0 0 0 var(--black-alpha-70); + } + 66.667% { + box-shadow: 9988px 0 0 0 var(--black-alpha-70), 9992px 0 0 0 var(--black-alpha-70), + 9996px 0 0 0 var(--black-alpha-70); + } + 83.333% { + box-shadow: 9988px 0 0 0 var(--black-alpha-70), 9992px 0 0 0 var(--black-alpha-70), + 9996px -5px 0 0 var(--black-alpha-70); + } + 100% { + box-shadow: 9988px 0 0 0 var(--black-alpha-70), 9992px 0 0 0 var(--black-alpha-70), + 9996px 0 0 0 var(--black-alpha-70); + } +} diff --git a/twake/frontend/src/app/components/WritingLoader/WritingLoader.tsx b/twake/frontend/src/app/components/WritingLoader/WritingLoader.tsx new file mode 100644 index 0000000000..aa31ecc63b --- /dev/null +++ b/twake/frontend/src/app/components/WritingLoader/WritingLoader.tsx @@ -0,0 +1,14 @@ +import React from 'react'; +import './WritingLoader.scss'; + +export default (): JSX.Element => { + return ( +
+
+
+
+
+
+
+ ); +}; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx index 56ba31686e..77bc7607b8 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx @@ -21,6 +21,10 @@ import { useMessageEditor } from 'app/state/recoil/hooks/messages/useMessageEdit import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; import { delayRequest } from 'app/services/utils/managedSearchRequest'; import { useChannel } from 'app/state/recoil/hooks/useChannels'; +import { + useChannelWritingActivityEmit, + useWritingDetector, +} from 'app/state/recoil/hooks/useChannelWritingActivity'; type Props = { messageId?: string; @@ -71,6 +75,11 @@ export default (props: Props) => { RichTextEditorStateService.get(editorId, { plugins: editorPlugins }), ); const [isTooLong, setTooLong] = useState(false); + + const { iAmWriting } = useChannelWritingActivityEmit(props.channelId || '', props.threadId); + + const { onKeydown: onKeydownRealtimeListener } = useWritingDetector(); + useEffect(() => { setTooLong(TextCountService.getStats(editorState).isTooLong); }, [editorState]); @@ -100,6 +109,7 @@ export default (props: Props) => { if (props.editorState && props.editorState !== editorState) { setEditorState(props.editorState); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [props.editorState]); @@ -160,10 +170,13 @@ export default (props: Props) => { }; const onChange = async (editorState: EditorState) => { + onKeydownRealtimeListener(state => iAmWriting(state)); + //Delay request make the input faster (getContentOutput is a heavy call) delayRequest(`editor-${editorId}`, () => { setValue(getContentOutput(editorState)); }); + if (props.onChange) { props.onChange(editorState); return; @@ -243,7 +256,9 @@ export default (props: Props) => {
onChange(editorState)} + onChange={editorState => { + onChange(editorState); + }} clearOnSubmit={true} outputFormat={format} plugins={editorPlugins} diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/IsWriting.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/IsWriting.tsx new file mode 100644 index 0000000000..f6e9407ce7 --- /dev/null +++ b/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/IsWriting.tsx @@ -0,0 +1,58 @@ +import React, { useEffect, useState } from 'react'; + +import { useChannelWritingActivityState } from 'app/state/recoil/hooks/useChannelWritingActivity'; +import Languages from 'services/languages/languages'; +import WritingLoader from 'app/components/WritingLoader/WritingLoader'; +import { ChannelWritingActivityType } from 'app/state/recoil/atoms/ChannelWritingActivity'; + +type PropsType = { + channelId: string; + threadId: string; +}; + +const getChannelActivityMessage = (channelActivityUsers: ChannelWritingActivityType[]) => { + const channelActivityUsersCount = channelActivityUsers.length; + let channelActivityMessage = ''; + + if (channelActivityUsersCount === 1) { + channelActivityMessage = Languages.t( + 'scenes.app.messages.input.parts.is_writing.message.user_is_writing', + [channelActivityUsers[0].name], + ); + } + + if (channelActivityUsersCount === 2) { + channelActivityMessage = Languages.t( + 'scenes.app.messages.input.parts.is_writing.message.users_are_writing', + [channelActivityUsers[0].name, channelActivityUsers[1].name], + ); + } + + if (channelActivityUsersCount > 2) { + channelActivityMessage = Languages.t( + 'scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing', + [channelActivityUsers[0].name, channelActivityUsers[1].name, channelActivityUsersCount - 2], + ); + } + + return channelActivityMessage; +}; + +export default ({ channelId, threadId }: PropsType): JSX.Element => { + const channelActivityUsers = useChannelWritingActivityState(channelId, threadId); + const [writtingInfo, setWritingInfo] = useState(''); + + useEffect(() => { + const message = getChannelActivityMessage(channelActivityUsers); + + setWritingInfo(message); + }, [channelActivityUsers]); + + return writtingInfo.length > 0 ? ( +
+
{writtingInfo}
+
+ ) : ( + <> + ); +}; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ReplyBlock.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ReplyBlock.tsx index 32bf4b20fd..01c3eecc57 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ReplyBlock.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ReplyBlock.tsx @@ -7,11 +7,13 @@ import { MessageContext } from '../MessageWithReplies'; import { useVisibleMessagesEditorLocation } from 'app/state/recoil/hooks/messages/useMessageEditor'; import { ViewContext } from 'app/scenes/Client/MainView/MainContent'; import Input from '../../Input/Input'; +import useRouterChannel from 'app/state/recoil/hooks/router/useRouterChannel'; type Props = {}; export default (props: Props) => { const context = useContext(MessageContext); + const channelId = useRouterChannel(); let { message } = useMessage(context); const location = `thread-${message.thread_id}`; @@ -29,7 +31,7 @@ export default (props: Props) => { return (
- +
); diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Messages.scss b/twake/frontend/src/app/scenes/Apps/Messages/Messages.scss index a25db8bb41..dccc2e3ba3 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Messages.scss +++ b/twake/frontend/src/app/scenes/Apps/Messages/Messages.scss @@ -6,6 +6,18 @@ flex-direction: column; flex: 1; + .user-writing-info-message-view { + display: flex; + justify-content: flex-start; + align-items: center; + color: var(--grey-dark); + margin: 0 auto; + min-width: 0; + max-width: 1000px; + width: calc(100% - 32px); + position: relative; + } + .loading-full { position: absolute; width: 100%; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Messages.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Messages.tsx index 0a2c90a047..0c94c47f4e 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Messages.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Messages.tsx @@ -4,7 +4,7 @@ import { ViewConfiguration } from 'app/services/AppView/AppViewService'; import NewThread from './Input/NewThread'; import MessagesList from './MessagesList'; import ThreadMessagesList from './ThreadMessagesList'; -import ChannelAPIClient from 'app/services/channels/ChannelAPIClient'; +import IsWriting from './Input/Parts/IsWriting'; type Props = { channel: ChannelResource; @@ -44,6 +44,7 @@ export default (props: Props) => { /> )}{' '} + { const companyId = useRouterCompany(); const workspaceId = useRouterWorkspace(); const { workspace } = useCurrentWorkspace(); + useChannelWritingActivity(); useEffect(() => { const openWorkspaceChannelList: ShortcutType = { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.scss b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.scss index 4e7ef0095f..cf68fc1df0 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.scss +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.scss @@ -65,6 +65,12 @@ cursor: pointer; line-height: normal; + .writing_Activity { + display: inline-block; + align-self: center; + color: var(--white); + } + &.unread { font-weight: bold; color: var(--black); @@ -85,6 +91,9 @@ color: var(--black); } } + .writing_Activity { + display: none; + } } &.extra-margin { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.tsx index 533a1b183b..3ad4dafe1a 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.tsx @@ -14,6 +14,10 @@ import { Collection } from 'app/services/CollectionsReact/Collections'; import useRouterChannelSelected from 'app/state/recoil/hooks/router/useRouterChannelSelected'; import './Channel.scss'; +import useChannelWritingActivity, { + useChannelWritingActivityState, +} from 'app/state/recoil/hooks/useChannelWritingActivity'; +import WritingLoader from 'app/components/WritingLoader/WritingLoader'; type Props = { collection?: Collection; @@ -31,10 +35,12 @@ type Props = { menu?: JSX.Element; showTooltip?: boolean; active?: boolean; + writingActivity?: boolean; }; export default (props: Props) => { const selected = useRouterChannelSelected(props.id || ''); + const writingActivity = useChannelWritingActivityState(props.id || ''); const onChannelChange = () => { props.id && @@ -103,6 +109,9 @@ export default (props: Props) => { {props.name + ' '} {props.visibility === 'private' && }
+
+ {!selected && writingActivity.length > 0 && } +
{props.muted && } {props.notifications > 0 && ( diff --git a/twake/frontend/src/app/state/recoil/atoms/ChannelWritingActivity.ts b/twake/frontend/src/app/state/recoil/atoms/ChannelWritingActivity.ts new file mode 100644 index 0000000000..72e4bc7f3a --- /dev/null +++ b/twake/frontend/src/app/state/recoil/atoms/ChannelWritingActivity.ts @@ -0,0 +1,12 @@ +import { atomFamily } from 'recoil'; + +export type ChannelWritingActivityType = { + threadId: string; + userId: string; + name: string; +}; + +export const ChannelWritingActivityState = atomFamily({ + key: 'ChannelWritingActivityState', + default: [], +}); diff --git a/twake/frontend/src/app/state/recoil/hooks/useChannelWritingActivity.ts b/twake/frontend/src/app/state/recoil/hooks/useChannelWritingActivity.ts new file mode 100644 index 0000000000..771598d5f6 --- /dev/null +++ b/twake/frontend/src/app/state/recoil/hooks/useChannelWritingActivity.ts @@ -0,0 +1,149 @@ +import { WorkspaceType } from 'app/models/Workspace'; +import { useRealtimeRoom } from 'app/services/Realtime/useRealtime'; +import CurrentUser from 'app/services/user/CurrentUser'; +import UserAPIClient from 'app/services/user/UserAPIClient'; +import WorkspaceAPIClient from 'app/services/workspaces/WorkspaceAPIClient'; +import { useRecoilCallback, useRecoilState, useRecoilValue } from 'recoil'; +import { + ChannelWritingActivityState, + ChannelWritingActivityType, +} from '../atoms/ChannelWritingActivity'; +import { ThreadWritingActivitySelector } from '../selectors/ThreadWritingActivity'; +import UserService from 'services/user/UserService'; +import useRouterCompany from './router/useRouterCompany'; +import { useCallback, useRef } from 'react'; +import { useCurrentUser } from './useCurrentUser'; + +const MAX_DELAY_BETWEEN_KEYDOWN = 500; +const MIN_DELAY_BETWEEN_EMIT = 8000; +const MAX_DELAY_AFTER_LAST_WRITE_EVENT = 10000; + +export type WritingEvent = { + type: 'writing'; + event: { + channel_id: string; + thread_id: string; + user_id: string; + name: string; + is_writing: boolean; + }; +}; + +export type ChannelWritingActivityTypeEmit = { + iAmWriting: (writing: boolean) => void; +}; + +export function useChannelWritingActivityState( + channelId: string, + threadId?: string | null, +): ChannelWritingActivityType[] { + const threadIdSelector = useRecoilValue( + ThreadWritingActivitySelector({ channelId: channelId, threadId: threadId || '' }), + ); + return threadIdSelector; +} + +let receivedWritingTimeout = new Map(); + +export default function useChannelWritingActivity() { + const companyId = useRouterCompany(); + const { user } = useCurrentUser(); + + const setChannelWritingActivityState = useRecoilCallback( + ({ set, snapshot }) => + async (event: WritingEvent['event']) => { + let currentList: ChannelWritingActivityType[] = await snapshot.getPromise( + ChannelWritingActivityState(event.channel_id), + ); + const newEvent: ChannelWritingActivityType = { + threadId: event.thread_id, + userId: event.user_id, + name: event.name, + }; + currentList = currentList.filter(elem => elem.userId !== newEvent.userId); + if (event.is_writing) { + currentList = [...currentList, newEvent]; + } + currentList = currentList.filter(elem => elem.userId !== user?.id); + set(ChannelWritingActivityState(event.channel_id), currentList); + + //Fallback stop is_writing in case of lost connection + if (receivedWritingTimeout.has(event.user_id)) + clearTimeout(receivedWritingTimeout.get(event.user_id)); + if (event.is_writing) { + receivedWritingTimeout.set( + event.user_id, + setTimeout(() => { + setChannelWritingActivityState({ ...event, is_writing: false }); + }, MAX_DELAY_AFTER_LAST_WRITE_EVENT) as any, + ); + } + }, + ); + + useRealtimeRoom( + WorkspaceAPIClient.websockets(companyId)[0], + 'useChannelWritingActivity', + (action, resource) => { + if (action === 'event' && resource.type === 'writing') { + setChannelWritingActivityState(resource.event); + } + }, + ); +} + +export function useChannelWritingActivityEmit( + channelId: string, + threadId: string | null, +): ChannelWritingActivityTypeEmit { + const companyId = useRouterCompany(); + + const { send } = useRealtimeRoom( + WorkspaceAPIClient.websockets(companyId)[0], + 'useChannelWritingActivityEmit', + (action, resource) => {}, + ); + (window as any).send = send; + + const iAmWriting = useCallback( + async (writing: boolean) => { + const currentUser = await UserAPIClient.getCurrent(); + send({ + type: 'writing', + event: { + channel_id: channelId, + thread_id: threadId, + user_id: currentUser.id, + name: UserService.getFullName(currentUser), + is_writing: writing, + }, + } as WritingEvent); + }, + [send], + ); + return { iAmWriting }; +} + +/** Keyboard typeing detection helper */ +let writeTimeout = setTimeout(() => {}, 0); +export const useWritingDetector = () => { + let lastEmit = useRef(new Date().getTime()); + + const onKeydown = useCallback((emit: (value: boolean) => unknown) => { + const now = new Date().getTime(); + if (now - lastEmit.current > MIN_DELAY_BETWEEN_EMIT) { + lastEmit.current = now; + emit(true); + } + + if (writeTimeout) { + clearTimeout(writeTimeout); + } + writeTimeout = setTimeout(() => { + emit(false); + lastEmit.current = 0; + }, MAX_DELAY_BETWEEN_KEYDOWN) as any; + }, []); + + return { onKeydown }; +}; diff --git a/twake/frontend/src/app/state/recoil/selectors/ThreadWritingActivity.ts b/twake/frontend/src/app/state/recoil/selectors/ThreadWritingActivity.ts new file mode 100644 index 0000000000..2ca297d4b2 --- /dev/null +++ b/twake/frontend/src/app/state/recoil/selectors/ThreadWritingActivity.ts @@ -0,0 +1,19 @@ +import { selectorFamily } from 'recoil'; +import { + ChannelWritingActivityType, + ChannelWritingActivityState, +} from '../atoms/ChannelWritingActivity'; + +export const ThreadWritingActivitySelector = selectorFamily< + ChannelWritingActivityType[], + { channelId: string; threadId: string } +>({ + key: 'ThreadWritingActivitySelector', + get: + ({ channelId, threadId }) => + ({ get }) => { + return get(ChannelWritingActivityState(channelId) || []).filter( + status => !threadId || status.threadId === threadId, + ); + }, +}); From 9da45bfcf536cc727f10f52ba3b4dc5b4c50520b Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Mon, 3 Jan 2022 21:07:43 +0100 Subject: [PATCH 010/276] =?UTF-8?q?=F0=9F=A9=B9Patch=202=20of=20January=20?= =?UTF-8?q?B=20(#1865)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix missing user images in realtime / created messages * Auto renew JWT token * Minor messages feed loading time improvement --- .../scenes/Apps/Messages/Message/Message.tsx | 6 +--- .../Messages/Message/Parts/MessageContent.tsx | 7 ++--- .../Messages/Message/Parts/MessageHeader.tsx | 11 ++++++-- .../Apps/Messages/Parts/ThreadAvatar.tsx | 12 ++++++-- .../frontend/src/app/services/Application.ts | 8 +++--- .../Collections/Transport/TransportAPI.ts | 2 +- .../Collections/Transport/TransportHTTP.ts | 6 ++-- twake/frontend/src/app/services/JWTStorage.ts | 28 +++++++++++++++---- .../Twacode/pseudoMarkdownCompiler.ts | 2 +- 9 files changed, 55 insertions(+), 27 deletions(-) diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.tsx index 028064f2b1..a6a6889226 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.tsx @@ -4,9 +4,5 @@ import MessageContent from './Parts/MessageContent'; type Props = {}; export default (props: Props) => { - return ( - - - - ); + return ; }; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageContent.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageContent.tsx index 0988e35d0e..c5fa5d770d 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageContent.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageContent.tsx @@ -18,6 +18,7 @@ import { useVisibleMessagesEditorLocation } from 'app/state/recoil/hooks/message import { ViewContext } from 'app/scenes/Client/MainView/MainContent'; import PossiblyPendingAttachment from './PossiblyPendingAttachment'; import MessageAttachments from './MessageAttachments'; +import PseudoMarkdownCompiler from 'services/Twacode/pseudoMarkdownCompiler'; type Props = { linkToThread?: boolean; @@ -82,9 +83,7 @@ export default (props: Props) => { }} onClick={() => setActive(false)} > - - - + {!!showEdition && !deleted && (
@@ -109,7 +108,7 @@ export default (props: Props) => { <> { let { message } = useMessage(context); let parentMessage: NodeMessage | null = useMessage({ ...context, id: message.thread_id }).message; - let user = (message.users || []).find(u => u.id === message.user_id); + let user = + useRecoilValueLoadable(UsersState(message.user_id)).valueMaybe() || + (message.users || []).find(u => u.id === message.user_id); const companyApplications = useRecoilState(CompanyApplicationsStateFamily(context.companyId))[0] || []; let application = companyApplications.find(a => a.id === message.application_id); diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx index 0d4e37b3fe..8c19c7174a 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx @@ -6,8 +6,14 @@ import Icon from 'components/Icon/Icon.js'; import './Threads.scss'; import { MessageContext } from '../Message/MessageWithReplies'; import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import { useRecoilState, useRecoilStateLoadable } from 'recoil'; +import { + useRecoilState, + useRecoilStateLoadable, + useRecoilValue, + useRecoilValueLoadable, +} from 'recoil'; import { CompanyApplicationsStateFamily } from 'app/state/recoil/atoms/CompanyApplications'; +import { UsersState } from 'app/state/recoil/atoms/Users'; type Props = { small?: boolean; @@ -17,7 +23,9 @@ export default (props: Props) => { const context = useContext(MessageContext); let { message } = useMessage(context); - let user = (message.users || []).find(u => u.id === message.user_id); + let user = + useRecoilValueLoadable(UsersState(message.user_id)).valueMaybe() || + (message.users || []).find(u => u.id === message.user_id); const companyApplications = useRecoilState(CompanyApplicationsStateFamily(context.companyId))[0] || []; let application = companyApplications.find(a => a.id === message.application_id); diff --git a/twake/frontend/src/app/services/Application.ts b/twake/frontend/src/app/services/Application.ts index dd25b0f878..cf8e090a5f 100644 --- a/twake/frontend/src/app/services/Application.ts +++ b/twake/frontend/src/app/services/Application.ts @@ -57,10 +57,10 @@ class Application { socket: WebSocket.get(), rest: { url: `${Globals.api_root_url}/internal/services`, - headers: { - // TODO: The token can expire if we do not renew it in the later uses of this header - // Instead of doing this, we should have a function which is called when header needs to be used - Authorization: JWT.getAutorizationHeader(), + headers: () => { + return { + Authorization: JWT.getAutorizationHeader(), + }; }, }, }, diff --git a/twake/frontend/src/app/services/Collections/Transport/TransportAPI.ts b/twake/frontend/src/app/services/Collections/Transport/TransportAPI.ts index 060f66d6cf..0060b87d84 100644 --- a/twake/frontend/src/app/services/Collections/Transport/TransportAPI.ts +++ b/twake/frontend/src/app/services/Collections/Transport/TransportAPI.ts @@ -13,7 +13,7 @@ export interface WebSocketTransport { export type TransportOptions = { rest?: { url?: string; //Rest API prefix, like http://localhost:8000/internal - headers?: { [key: string]: string }; + headers?: () => { [key: string]: string }; }; socket: WebSocketTransport; }; diff --git a/twake/frontend/src/app/services/Collections/Transport/TransportHTTP.ts b/twake/frontend/src/app/services/Collections/Transport/TransportHTTP.ts index 92b5348693..3126d9fc0a 100644 --- a/twake/frontend/src/app/services/Collections/Transport/TransportHTTP.ts +++ b/twake/frontend/src/app/services/Collections/Transport/TransportHTTP.ts @@ -7,11 +7,11 @@ const logger = Logger.getLogger('Collections/Transport/HTTP'); type HTTPMethod = 'post' | 'delete' | 'get' | 'put'; export default class TransportHTTP { - private options?: TransportOptions["rest"]; + private options?: TransportOptions['rest']; constructor(private readonly transport: Transport) {} - public configure(options: TransportOptions["rest"]) { + public configure(options: TransportOptions['rest']) { this.options = options; } @@ -24,7 +24,7 @@ export default class TransportHTTP { route = `${prefix}${route}`; const headers = { - ...this.options?.headers, + ...(this.options?.headers && this.options?.headers()), ...this.transport.apiOptions?.headers, ...options?.headers, }; diff --git a/twake/frontend/src/app/services/JWTStorage.ts b/twake/frontend/src/app/services/JWTStorage.ts index a733eeca41..bcb5a0056a 100755 --- a/twake/frontend/src/app/services/JWTStorage.ts +++ b/twake/frontend/src/app/services/JWTStorage.ts @@ -33,8 +33,16 @@ class JWTStorage { logger: Logger.Logger; constructor() { - this.logger = Logger.getLogger("JWT"); + this.logger = Logger.getLogger('JWT'); this.init(); + + setInterval(() => { + if (this.jwtData.value && this.jwtData.expiration < new Date().getTime() + 1000 * 60 * 10) { + this.renew().catch(() => { + LoginService.logout(); + }); + } + }, 60000); } private init() { @@ -92,9 +100,10 @@ class JWTStorage { } isAccessExpired() { - const expired = new Date().getTime() / 1000 - this.jwtData.expiration > 0; + const expired = new Date().getTime() / 1000 - this.jwtData.expiration > 0; - expired && this.logger.debug(`Access token expired, expiration time was ${this.jwtData.expiration}`); + expired && + this.logger.debug(`Access token expired, expiration time was ${this.jwtData.expiration}`); return expired; } @@ -102,7 +111,10 @@ class JWTStorage { isRefreshExpired() { const expired = new Date().getTime() / 1000 - this.jwtData.refresh_expiration > 0; - expired && this.logger.debug(`Refresh token expired, expiration time was ${this.jwtData.refresh_expiration}`); + expired && + this.logger.debug( + `Refresh token expired, expiration time was ${this.jwtData.refresh_expiration}`, + ); return expired; } @@ -110,7 +122,13 @@ class JWTStorage { authenticateCall(callback?: () => void) { if (this.isAccessExpired() && LoginService.currentUserId) { this.logger.debug('authenticateCall: Updating user because the access token expired'); - LoginService.updateUser(callback); + this.renew() + .then(() => { + LoginService.updateUser(callback); + }) + .catch(() => { + LoginService.logout(); + }); return; } diff --git a/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.ts b/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.ts index e26f104dc1..169579f4a5 100644 --- a/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.ts +++ b/twake/frontend/src/app/services/Twacode/pseudoMarkdownCompiler.ts @@ -337,7 +337,7 @@ class PseudoMarkdownCompiler { transformBackChannelsUsers(str: string) { //Users - str = str.replace(/\B(@[^\s]*?):.*?(( |$|[^a-zA-Z0-9-]))/g, '$1$2'); + str = (str || '').replace(/\B(@[^\s]*?):.*?(( |$|[^a-zA-Z0-9-]))/g, '$1$2'); //Channels str = str.replace(/\B(#[^\s]*?):.*?(( |$|[^a-zA-Z0-9-]))/g, '$1$2'); return str; From 13b395ba7202547e1f8b460eb0fc30a70185bb6d Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Wed, 5 Jan 2022 15:39:38 +0100 Subject: [PATCH 011/276] =?UTF-8?q?=F0=9F=A9=B9=20Patch=2005-01-2022=20(#1?= =?UTF-8?q?872)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Only logout if ping is false fix feature toggle service * Force loading last messages * Fix isWritting trigger * Fix build --- .../services/pubsub/new-workspace/index.ts | 2 +- twake/frontend/public/locales/en.json | 2 +- .../RichTextEditor/TextCount/TextCount.tsx | 6 ++- .../app/scenes/Apps/Messages/Input/Input.tsx | 13 +++--- .../app/scenes/Apps/Messages/ListBuilder.tsx | 13 +++++- .../app/scenes/Apps/Messages/MessagesList.tsx | 12 +++-- .../Apps/Messages/ThreadMessagesList.tsx | 1 + .../ChannelsBar/Parts/Channel/ChannelMenu.tsx | 34 +++++++------- .../frontend/src/app/scenes/Client/Client.tsx | 44 ++++++++++--------- .../scenes/Login/Internal/Signin/Signin.js | 4 ++ .../src/app/services/FeatureTogglesService.ts | 23 +++++----- twake/frontend/src/app/services/JWTStorage.ts | 8 ++-- .../src/app/services/login/LoginService.ts | 11 +++-- .../src/app/state/recoil/atoms/Companies.ts | 4 +- .../hooks/messages/useChannelMessages.ts | 5 ++- .../hooks/messages/useThreadMessages.ts | 5 ++- .../state/recoil/hooks/messages/windows.ts | 18 +++++++- .../app/state/recoil/hooks/useCompanies.ts | 10 ++--- 18 files changed, 128 insertions(+), 87 deletions(-) diff --git a/twake/backend/node/src/services/channels/services/pubsub/new-workspace/index.ts b/twake/backend/node/src/services/channels/services/pubsub/new-workspace/index.ts index 6d53c8d898..20909f0602 100644 --- a/twake/backend/node/src/services/channels/services/pubsub/new-workspace/index.ts +++ b/twake/backend/node/src/services/channels/services/pubsub/new-workspace/index.ts @@ -25,7 +25,7 @@ export class NewWorkspaceProcessor implements PubsubHandler { - logger.info(`${this.name} - Processing new activity in channel ${message.channel_id}`); + logger.info(`${this.name} - Processing new workspace created ${message.workspace_id}`); try { await this.service.channels.save( diff --git a/twake/frontend/public/locales/en.json b/twake/frontend/public/locales/en.json index 28d8619667..41f7955322 100644 --- a/twake/frontend/public/locales/en.json +++ b/twake/frontend/public/locales/en.json @@ -843,7 +843,7 @@ "app.state.recoil.hooks.use_current_company_applications.toaster_add": "Successfully added {{$1}} in your company", "scenes.apps.messages.input.replied_to": "replied to ", "scenes.app.popup.workspaceparameter.pages.workspace_identity.default_workspace.label": "Default workspace", - "scenes.app.popup.workspaceparameter.pages.workspace_identity.default_workspace.description": "Automatically invite all workspace users to this channel", + "scenes.app.popup.workspaceparameter.pages.workspace_identity.default_workspace.description": "Automatically invite all new company users to this workspace", "scenes.app.popup.workspaceparameter.pages.delete_workspace_popup.title": "You are about to delete {{$1}}", "scenes.app.popup.workspaceparameter.pages.delete_workspace_popup.alert_total_members": "You still have {{$1}} members in {{$2}}. You should remove all the members to be able to delete this workspace.", "scenes.app.popup.workspaceparameter.pages.delete_workspace_popup.checkbox": "I understand that all of my workspace's messages and files will be deleted.", diff --git a/twake/frontend/src/app/components/RichTextEditor/TextCount/TextCount.tsx b/twake/frontend/src/app/components/RichTextEditor/TextCount/TextCount.tsx index 2a5aae88f5..f44464c653 100644 --- a/twake/frontend/src/app/components/RichTextEditor/TextCount/TextCount.tsx +++ b/twake/frontend/src/app/components/RichTextEditor/TextCount/TextCount.tsx @@ -29,9 +29,11 @@ export const TextCount = (props: PropsType) => { return ( <> - { display && ( + {display && (
- {stats.length}/{stats.maxLength} + + {stats.length}/{stats.maxLength} +
)} diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx index 77bc7607b8..29278ff1ad 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx @@ -169,19 +169,22 @@ export default (props: Props) => { } }; - const onChange = async (editorState: EditorState) => { - onKeydownRealtimeListener(state => iAmWriting(state)); + const onChange = async (newEditorState: EditorState) => { + const statsAfter = TextCountService.getStats(newEditorState); + const statsBefore = TextCountService.getStats(editorState); + if (statsAfter.length > statsBefore.length) + onKeydownRealtimeListener(state => iAmWriting(state)); //Delay request make the input faster (getContentOutput is a heavy call) delayRequest(`editor-${editorId}`, () => { - setValue(getContentOutput(editorState)); + setValue(getContentOutput(newEditorState)); }); if (props.onChange) { - props.onChange(editorState); + props.onChange(newEditorState); return; } - setRichTextEditorState(editorState); + setRichTextEditorState(newEditorState); }; const onFilePaste = (files: Blob[]) => { diff --git a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx b/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx index 6b81dc5d0b..cc1f736762 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx @@ -13,10 +13,19 @@ type Props = { itemId: (item: any) => string; emptyListComponent: ReactNode; atBottomStateChange?: (atBottom: boolean) => void; + loaded: boolean; }; export default React.memo( - ({ emptyListComponent, itemId, loadMore, items, itemContent, atBottomStateChange }: Props) => { + ({ + emptyListComponent, + itemId, + loadMore, + items, + itemContent, + atBottomStateChange, + loaded, + }: Props) => { const virtuosoRef = useRef(null); const [initiated, setInitiated] = useState(false); @@ -27,7 +36,7 @@ export default React.memo( }; useEffect(() => { - if (items.length === 0) { + if (!loaded) { more('history').then(() => { if (atBottomStateChange) atBottomStateChange(true); }); diff --git a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx b/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx index ac3bf7c302..f849beab7f 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx @@ -28,9 +28,9 @@ export default ({ channelId, companyId, workspaceId, threadId }: Props) => { const { company } = useCurrentCompany(); useEffect(() => { - //Use window.setEdge instead ? - window.reachedEnd = false; - }, []); + if (messages.length) + ChannelAPIClient.read(companyId, workspaceId || '', channelId || '', { status: true }); + }, [messages.length > 0]); return ( @@ -38,6 +38,7 @@ export default ({ channelId, companyId, workspaceId, threadId }: Props) => { items={messages} itemId={m => m.threadId} emptyListComponent={} + loaded={!!window.loaded} itemContent={(index, m) => { const currentIndex = messages.map(m => m.threadId).indexOf(m.threadId); const previous = messages[currentIndex - 1]; @@ -47,7 +48,10 @@ export default ({ channelId, companyId, workspaceId, threadId }: Props) => { head = ; } - if (MessageHistoryService.shouldLimitMessages(company, window.start, messages.length)) { + if ( + company && + MessageHistoryService.shouldLimitMessages(company, window.start, messages.length) + ) { head = ; } diff --git a/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx b/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx index db05a6ce46..606e3978a3 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx @@ -25,6 +25,7 @@ export default ({ companyId, threadId }: Props) => { key={threadId} items={messages} itemId={m => m.id} + loaded={!!window.loaded} emptyListComponent={} itemContent={(index, m) => { const currentIndex = messages.map(m => m.id).indexOf(m.id); diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx index 5f506d8f4e..355a0d88ba 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx @@ -42,9 +42,9 @@ export default (props: Props): JSX.Element => { ChannelResource, ); const isDirectChannel = props.channel.data.visibility === 'direct'; - const { FeatureToggles, Feature, activeFeatureNames, FeatureNames } = useFeatureToggles(); Languages.useListener(); + const { Feature, FeatureNames } = useFeatureToggles(); const notificationsCollection = Collection.get('/notifications/v1/badges/', NotificationResource); @@ -75,20 +75,18 @@ export default (props: Props): JSX.Element => { const displayGuestManagement = () => { return ModalManager.open( - - ( - - )} - activeComponent={() => } - /> - , + ( + + )} + activeComponent={() => } + />, { position: 'center', size: { width: '600px', minHeight: '329px' }, @@ -205,7 +203,7 @@ export default (props: Props): JSX.Element => { text: Languages.t('scenes.apps.messages.left_bar.stream.notifications.mentions', [ '@all', '@here', - `@${currentUser.username}`, + `@[you]`, ]), icon: props.channel.data.user_member?.notification_level === 'mentions' && 'check', onClick: () => { @@ -213,9 +211,7 @@ export default (props: Props): JSX.Element => { }, }, { - text: Languages.t('scenes.apps.messages.left_bar.stream.notifications.me', [ - `@${currentUser.username}`, - ]), + text: Languages.t('scenes.apps.messages.left_bar.stream.notifications.me', [`@[you]`]), icon: props.channel.data.user_member?.notification_level === 'me' && 'check', onClick: () => { changeNotificationPreference('me'); diff --git a/twake/frontend/src/app/scenes/Client/Client.tsx b/twake/frontend/src/app/scenes/Client/Client.tsx index f4fbb4ac67..2cdf1879e0 100755 --- a/twake/frontend/src/app/scenes/Client/Client.tsx +++ b/twake/frontend/src/app/scenes/Client/Client.tsx @@ -21,14 +21,16 @@ import NewVersionComponent from 'components/NewVersion/NewVersionComponent'; import SideBars, { LoadingSidebar } from './SideBars'; import CompanyStatusComponent from 'app/components/OnBoarding/CompanyStatusComponent'; import UserContext from 'app/state/recoil/integration/UserContext'; +import { useCurrentUser, useCurrentUserRealtime } from 'app/state/recoil/hooks/useCurrentUser'; +import { useFeatureToggles } from 'app/components/LockedFeaturesComponents/FeatureTogglesHooks'; import './Client.scss'; -import { useCurrentUser, useCurrentUserRealtime } from 'app/state/recoil/hooks/useCurrentUser'; export default React.memo((): JSX.Element => { const [menuIsOpen, setMenuIsOpen] = useState(false); const { user } = useCurrentUser(); useCurrentUserRealtime(); + const { FeatureToggles, activeFeatureNames } = useFeatureToggles(); PopupService.useListener(); Languages.useListener(); @@ -42,26 +44,28 @@ export default React.memo((): JSX.Element => { - - } - breakpoint="lg" - collapsedWidth="0" - theme="light" - width={290} - onCollapse={(collapsed, type) => { - if (type === 'responsive') return setMenuIsOpen(false); - setMenuIsOpen(!collapsed); - }} - > - }> - + + + } + breakpoint="lg" + collapsedWidth="0" + theme="light" + width={290} + onCollapse={(collapsed, type) => { + if (type === 'responsive') return setMenuIsOpen(false); + setMenuIsOpen(!collapsed); + }} + > + }> + + + + }> + - - }> - - - + + ); diff --git a/twake/frontend/src/app/scenes/Login/Internal/Signin/Signin.js b/twake/frontend/src/app/scenes/Login/Internal/Signin/Signin.js index 34d6d08393..3db54a8bfe 100755 --- a/twake/frontend/src/app/scenes/Login/Internal/Signin/Signin.js +++ b/twake/frontend/src/app/scenes/Login/Internal/Signin/Signin.js @@ -217,6 +217,10 @@ export default class Signin extends Component { ); } if (this.state.page == 2 && this.disableEmailVerification) { + setTimeout(() => { + window.document.location.reload(); + }, 2000); + return (
diff --git a/twake/frontend/src/app/services/FeatureTogglesService.ts b/twake/frontend/src/app/services/FeatureTogglesService.ts index 8a19d7356b..790beacb37 100644 --- a/twake/frontend/src/app/services/FeatureTogglesService.ts +++ b/twake/frontend/src/app/services/FeatureTogglesService.ts @@ -1,11 +1,11 @@ // Define feature names here export enum FeatureNames { - GUESTS = "chat:guests", - MESSAGE_HISTORY = "chat:message_history", - MESSAGE_HISTORY_LIMIT = "chat:message_history_limit", - MULTIPLE_WORKSPACES = "chat:multiple_workspaces", - EDIT_FILES = "chat:edit_files", - UNLIMITED_STORAGE = "chat:unlimited_storage", //Currently inactive + GUESTS = 'chat:guests', + MESSAGE_HISTORY = 'chat:message_history', + MESSAGE_HISTORY_LIMIT = 'chat:message_history_limit', + MULTIPLE_WORKSPACES = 'chat:multiple_workspaces', + EDIT_FILES = 'chat:edit_files', + UNLIMITED_STORAGE = 'chat:unlimited_storage', //Currently inactive } export type FeatureValueType = boolean | number; @@ -20,7 +20,6 @@ availableFeaturesWithDefaults.set(FeatureNames.MULTIPLE_WORKSPACES, true); availableFeaturesWithDefaults.set(FeatureNames.EDIT_FILES, true); availableFeaturesWithDefaults.set(FeatureNames.UNLIMITED_STORAGE, true); - /** * Service that allow you to manage feature flipping in Twake using react feature toggles */ @@ -30,21 +29,20 @@ class FeatureTogglesService { constructor() { this.activeFeatureNames = []; - this.activeFeatureValues = new Map(); + this.activeFeatureValues = new Map(); } public setFeaturesFromCompanyPlan(plan: { features: { [key: string]: FeatureValueType } }): void { for (let [featureName, defaultValue] of availableFeaturesWithDefaults) { this.setActiveFeatureName( featureName, - plan.features[featureName] !== undefined ? plan.features[featureName] : defaultValue + plan.features[featureName] !== undefined ? plan.features[featureName] : defaultValue, ); } } private setActiveFeatureName(featureName: FeatureNames, value: FeatureValueType): void { - - if (typeof value === "boolean") { + if (typeof value === 'boolean') { const shouldAddFeature = value && !this.isActiveFeatureName(featureName); if (shouldAddFeature) this.activeFeatureNames.push(featureName); @@ -60,10 +58,9 @@ class FeatureTogglesService { return this.activeFeatureNames.includes(featureName); } - public getFeatureValue(featureName: FeatureNames): T{ + public getFeatureValue(featureName: FeatureNames): T { return this.activeFeatureValues.get(featureName) as unknown as T; } - } export default new FeatureTogglesService(); diff --git a/twake/frontend/src/app/services/JWTStorage.ts b/twake/frontend/src/app/services/JWTStorage.ts index bcb5a0056a..8d137cb0c2 100755 --- a/twake/frontend/src/app/services/JWTStorage.ts +++ b/twake/frontend/src/app/services/JWTStorage.ts @@ -38,8 +38,8 @@ class JWTStorage { setInterval(() => { if (this.jwtData.value && this.jwtData.expiration < new Date().getTime() + 1000 * 60 * 10) { - this.renew().catch(() => { - LoginService.logout(); + this.renew().catch(async () => { + if (await LoginService.pingServer()) LoginService.logout(); }); } }, 60000); @@ -126,8 +126,8 @@ class JWTStorage { .then(() => { LoginService.updateUser(callback); }) - .catch(() => { - LoginService.logout(); + .catch(async () => { + if (await LoginService.pingServer()) LoginService.logout(); }); return; } diff --git a/twake/frontend/src/app/services/login/LoginService.ts b/twake/frontend/src/app/services/login/LoginService.ts index 0446f25d7d..60e693c26a 100755 --- a/twake/frontend/src/app/services/login/LoginService.ts +++ b/twake/frontend/src/app/services/login/LoginService.ts @@ -94,6 +94,13 @@ class Login extends Observable { } } + async pingServer() { + const infos = await InitService.getServer(); + //We are disconnected + if (infos?.status !== 'ready') return false; + return true; + } + async updateUser(callback?: (err: Error | null, user?: UserType) => void): Promise { if (Globals.store_public_access_get_data) { this.firstInit = true; @@ -105,9 +112,7 @@ class Login extends Observable { AuthService.updateUser(async user => { this.logger.debug('User update result', user); if (!user) { - //Ping server - const infos = await InitService.getServer(); - if (infos?.status !== 'ready') { + if (!this.pingServer()) { //We are disconnected console.log('We are disconnected, we will get user again in 10 seconds'); setTimeout(() => { diff --git a/twake/frontend/src/app/state/recoil/atoms/Companies.ts b/twake/frontend/src/app/state/recoil/atoms/Companies.ts index d9a995ed78..a9d92fb095 100644 --- a/twake/frontend/src/app/state/recoil/atoms/Companies.ts +++ b/twake/frontend/src/app/state/recoil/atoms/Companies.ts @@ -5,9 +5,9 @@ import { CompanyType } from 'app/models/Company'; import CompanyAPIClient from 'app/services/CompanyAPIClient'; import _ from 'lodash'; -export const CompaniesState = atomFamily({ +export const CompaniesState = atomFamily({ key: 'CompaniesState', - default: id => CompanyAPIClient.get(id), + default: id => (id ? CompanyAPIClient.get(id) : null), //Retro compatibility effects_UNSTABLE: id => [ diff --git a/twake/frontend/src/app/state/recoil/hooks/messages/useChannelMessages.ts b/twake/frontend/src/app/state/recoil/hooks/messages/useChannelMessages.ts index 1554878a8e..d34f4fe380 100644 --- a/twake/frontend/src/app/state/recoil/hooks/messages/useChannelMessages.ts +++ b/twake/frontend/src/app/state/recoil/hooks/messages/useChannelMessages.ts @@ -19,7 +19,7 @@ import { //TODO make this more easy to duplicate for other views export const useChannelMessages = (key: AtomChannelKey) => { const [messages, setMessages] = useRecoilState(ChannelMessagesState(key)); - const { window, isInWindow } = getListWindow(key.channelId); + const { window, isInWindow, setLoaded } = getListWindow(key.channelId); let currentWindowedMessages = messages.filter(message => isInWindow(message.threadId)); currentWindowedMessages = currentWindowedMessages.sort((a, b) => Numbers.compareTimeuuid(a.sortId, b.sortId), @@ -30,7 +30,6 @@ export const useChannelMessages = (key: AtomChannelKey) => { const addToChannel = useAddMessageToChannel(key); const loadMore = async (direction: 'future' | 'history' = 'future') => { - if (window.reachedEnd && direction === 'future') return; if (window.reachedStart && direction === 'history') return; const limit = 100; @@ -40,6 +39,8 @@ export const useChannelMessages = (key: AtomChannelKey) => { key.channelId, { direction, limit, pageToken: direction === 'future' ? window.end : window.start }, ); + setLoaded(); + const nothingNew = newMessages.filter(m => !isInWindow(m.thread_id)).length < limit; addToChannel(newMessages, { diff --git a/twake/frontend/src/app/state/recoil/hooks/messages/useThreadMessages.ts b/twake/frontend/src/app/state/recoil/hooks/messages/useThreadMessages.ts index e2cb49a667..25b54046a2 100644 --- a/twake/frontend/src/app/state/recoil/hooks/messages/useThreadMessages.ts +++ b/twake/frontend/src/app/state/recoil/hooks/messages/useThreadMessages.ts @@ -13,7 +13,7 @@ import { } from './windows'; export const useThreadMessages = (key: AtomThreadKey) => { - const { window, isInWindow } = getListWindow(key.threadId); + const { window, isInWindow, setLoaded } = getListWindow(key.threadId); let [messages, setMessages] = useRecoilState(ThreadMessagesState(key)); messages = messages.filter(message => isInWindow(message.id || '')); @@ -23,7 +23,6 @@ export const useThreadMessages = (key: AtomThreadKey) => { const addToThread = useAddMessageToThread(key.companyId); const loadMore = async (direction: 'future' | 'history' = 'future') => { - if (window.reachedEnd && direction === 'future') return; if (window.reachedStart && direction === 'history') return; const limit = 100; @@ -32,6 +31,8 @@ export const useThreadMessages = (key: AtomThreadKey) => { limit, pageToken: direction === 'future' ? window.end : window.start, }); + setLoaded(); + const nothingNew = newMessages.filter(m => !isInWindow(m.id)).length < limit; addToThread(newMessages, { diff --git a/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts b/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts index 0d9d3357de..f9e77507ae 100644 --- a/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts +++ b/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts @@ -6,12 +6,18 @@ import { RecoilState, useRecoilCallback } from 'recoil'; * This is the hook to work with feed window (from where to where we are looking the messages) * useful mostly in case of jumps */ -type WindowType = { start: string; end: string; reachedStart: boolean; reachedEnd: boolean }; +type WindowType = { + loaded: boolean; + start: string; + end: string; + reachedStart: boolean; + reachedEnd: boolean; +}; const windows: Map = new Map(); (window as any).windows = windows; export const getListWindow = (key: string) => { if (!windows.has(key)) - windows.set(key, { start: '', end: '', reachedEnd: false, reachedStart: false }); + windows.set(key, { loaded: false, start: '', end: '', reachedEnd: false, reachedStart: false }); let window = windows.get(key) as WindowType; const updateWindowFromIds = (ids: string[]) => { @@ -45,11 +51,19 @@ export const getListWindow = (key: string) => { ); }; + const setLoaded = (loaded: boolean = true) => { + windows.set(key, { + ...window, + loaded, + }); + }; + return { window, updateWindowFromIds, reachEdge, isInWindow, + setLoaded, }; }; diff --git a/twake/frontend/src/app/state/recoil/hooks/useCompanies.ts b/twake/frontend/src/app/state/recoil/hooks/useCompanies.ts index 0e9671a3cf..f923b3b9f5 100644 --- a/twake/frontend/src/app/state/recoil/hooks/useCompanies.ts +++ b/twake/frontend/src/app/state/recoil/hooks/useCompanies.ts @@ -36,10 +36,10 @@ export const useCompany = (companyId: string) => { const [company, setCompany] = useRecoilState(CompaniesState(companyId)); const refresh = async () => { - setCompany(await UserAPIClient.getCompany(companyId)); + if (companyId) setCompany(await UserAPIClient.getCompany(companyId)); }; - return { company, refresh }; + return { company: company as CompanyType, refresh }; }; /** @@ -66,11 +66,11 @@ export const useCurrentCompany = () => { const [company, setCompany] = useRecoilState(CompaniesState(routerCompanyId)); const refresh = async () => { - setCompany(await CompanyAPIClient.get(company.id)); + if (company) setCompany(await CompanyAPIClient.get(company.id)); }; //Always set the current company in localstorage to open it automatically later - if (routerCompanyId) { + if (routerCompanyId && company) { //Depreciated retrocompatibility Groups.addToUser(company); AccessRightsService.updateCompanyLevel( @@ -86,7 +86,7 @@ export const useCurrentCompany = () => { LocalStorage.setItem('default_company_id', routerCompanyId); } - return { company, refresh }; + return { company: company as CompanyType, refresh }; }; export const useCurrentCompanyRealtime = () => { From 07c300d32032a87dd26b5ba708fae627bb34bbee Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Thu, 6 Jan 2022 09:44:32 +0100 Subject: [PATCH 012/276] =?UTF-8?q?=F0=9F=A9=B9=20Patch=2006-01-2022=20(#1?= =?UTF-8?q?874)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/scenes/Apps/Messages/ListBuilder.tsx | 9 +++++---- .../src/app/scenes/Apps/Messages/MessagesList.tsx | 2 +- .../src/app/scenes/Apps/Messages/ThreadMessagesList.tsx | 2 +- .../src/app/state/recoil/hooks/messages/windows.ts | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx b/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx index cc1f736762..2cc18e0d9b 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx @@ -1,6 +1,7 @@ import React, { ReactNode, Suspense, useEffect, useRef, useState } from 'react'; import { ItemContent, LogLevel, Virtuoso } from 'react-virtuoso'; import Logger from 'app/services/Logger'; +import { WindowType } from 'app/state/recoil/hooks/messages/windows'; const logger = Logger.getLogger(`ListBuilder`); const START_INDEX = 1000000; @@ -13,7 +14,7 @@ type Props = { itemId: (item: any) => string; emptyListComponent: ReactNode; atBottomStateChange?: (atBottom: boolean) => void; - loaded: boolean; + window: WindowType; }; export default React.memo( @@ -24,7 +25,7 @@ export default React.memo( items, itemContent, atBottomStateChange, - loaded, + window, }: Props) => { const virtuosoRef = useRef(null); const [initiated, setInitiated] = useState(false); @@ -36,7 +37,7 @@ export default React.memo( }; useEffect(() => { - if (!loaded) { + if (!window.loaded) { more('history').then(() => { if (atBottomStateChange) atBottomStateChange(true); }); @@ -74,7 +75,7 @@ export default React.memo( await more('history'); }} endReached={async () => { - await more('future'); + if (!window.reachedEnd) await more('future'); }} atBottomStateChange={atBottomStateChange} atTopStateChange={atTop => {}} diff --git a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx b/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx index f849beab7f..f0cf3b9cda 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx @@ -38,7 +38,7 @@ export default ({ channelId, companyId, workspaceId, threadId }: Props) => { items={messages} itemId={m => m.threadId} emptyListComponent={} - loaded={!!window.loaded} + window={window} itemContent={(index, m) => { const currentIndex = messages.map(m => m.threadId).indexOf(m.threadId); const previous = messages[currentIndex - 1]; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx b/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx index 606e3978a3..14255f82d0 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx @@ -25,7 +25,7 @@ export default ({ companyId, threadId }: Props) => { key={threadId} items={messages} itemId={m => m.id} - loaded={!!window.loaded} + window={window} emptyListComponent={} itemContent={(index, m) => { const currentIndex = messages.map(m => m.id).indexOf(m.id); diff --git a/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts b/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts index f9e77507ae..77b74cdab8 100644 --- a/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts +++ b/twake/frontend/src/app/state/recoil/hooks/messages/windows.ts @@ -6,7 +6,7 @@ import { RecoilState, useRecoilCallback } from 'recoil'; * This is the hook to work with feed window (from where to where we are looking the messages) * useful mostly in case of jumps */ -type WindowType = { +export type WindowType = { loaded: boolean; start: string; end: string; From 1f47d24ff025a5f72a6287984104be053170ecb8 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Mon, 10 Jan 2022 15:21:42 +0100 Subject: [PATCH 013/276] =?UTF-8?q?=F0=9F=9B=A0=20=20Fix=20console=20hooks?= =?UTF-8?q?=20(#1876)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix console hooks * Fix empty menu on messages * Do not logout but just reload the page if access expired issue --- .../node/src/services/console/web/schemas.ts | 3 ++- .../Apps/Messages/Message/Parts/Options.tsx | 18 ++++++++---------- twake/frontend/src/app/services/JWTStorage.ts | 4 ++-- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/twake/backend/node/src/services/console/web/schemas.ts b/twake/backend/node/src/services/console/web/schemas.ts index 2d5ebc21c5..47bfe93564 100644 --- a/twake/backend/node/src/services/console/web/schemas.ts +++ b/twake/backend/node/src/services/console/web/schemas.ts @@ -4,7 +4,7 @@ export const consoleHookSchema = { properties: { secret_key: { type: "string" }, }, - required: ["secret_key"], + required: [""], }, body: { type: "object", @@ -12,6 +12,7 @@ export const consoleHookSchema = { type: { type: "string" }, content: { type: "object" }, signature: { type: "string" }, + secret_key: { type: "string" }, }, required: ["type", "content"], }, diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Options.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Options.tsx index c63b8a7efa..44ba0a2919 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Options.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Options.tsx @@ -74,16 +74,14 @@ export default (props: Props) => { }, }); } else { - if (message.thread_id == message.id) { - menu.push({ - type: 'menu', - icon: 'arrow-up-right', - text: Languages.t('scenes.apps.messages.message.show_button', [], 'Display'), - onClick: () => { - MessagesService.showMessage(message.id); - }, - }); - } + menu.push({ + type: 'menu', + icon: 'arrow-up-right', + text: Languages.t('scenes.apps.messages.message.show_button', [], 'Display'), + onClick: () => { + MessagesService.showMessage(message.thread_id); + }, + }); if (message.thread_id == message.id) { if (!message.context?.disable_pin) { diff --git a/twake/frontend/src/app/services/JWTStorage.ts b/twake/frontend/src/app/services/JWTStorage.ts index 8d137cb0c2..98f6c3fc48 100755 --- a/twake/frontend/src/app/services/JWTStorage.ts +++ b/twake/frontend/src/app/services/JWTStorage.ts @@ -39,7 +39,7 @@ class JWTStorage { setInterval(() => { if (this.jwtData.value && this.jwtData.expiration < new Date().getTime() + 1000 * 60 * 10) { this.renew().catch(async () => { - if (await LoginService.pingServer()) LoginService.logout(); + if (await LoginService.pingServer()) (window as any).document.location.reload(); }); } }, 60000); @@ -127,7 +127,7 @@ class JWTStorage { LoginService.updateUser(callback); }) .catch(async () => { - if (await LoginService.pingServer()) LoginService.logout(); + if (await LoginService.pingServer()) (window as any).document.location.reload(); }); return; } From 06ef4ddca83da607419ebe57a87181512e4ba6d2 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Mon, 10 Jan 2022 18:25:15 +0100 Subject: [PATCH 014/276] =?UTF-8?q?=F0=9F=9B=A0=20fix-typo=20(#1877)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- twake/backend/node/src/services/console/web/schemas.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/twake/backend/node/src/services/console/web/schemas.ts b/twake/backend/node/src/services/console/web/schemas.ts index 47bfe93564..34db919671 100644 --- a/twake/backend/node/src/services/console/web/schemas.ts +++ b/twake/backend/node/src/services/console/web/schemas.ts @@ -4,7 +4,6 @@ export const consoleHookSchema = { properties: { secret_key: { type: "string" }, }, - required: [""], }, body: { type: "object", From 77b4bf67f59a2983c89cdb9ddabeed6924e0c06c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Vieira?= <36481167+stephanevieira75@users.noreply.github.com> Date: Tue, 11 Jan 2022 10:01:14 +0000 Subject: [PATCH 015/276] =?UTF-8?q?=F0=9F=9B=A0=20#1826=20Fix=20cannot=20r?= =?UTF-8?q?ead=20properties=20of=20undefined=20in=20backend=20(#1875)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- twake/backend/node/src/core/platform/framework/logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/twake/backend/node/src/core/platform/framework/logger.ts b/twake/backend/node/src/core/platform/framework/logger.ts index 2b78e0e95a..5b58e3b2e3 100644 --- a/twake/backend/node/src/core/platform/framework/logger.ts +++ b/twake/backend/node/src/core/platform/framework/logger.ts @@ -9,7 +9,7 @@ export const logger = pino({ name: "TwakeApp", level: config.get("level", "info"), prettyPrint: - process.env.NODE_ENV.indexOf("test") > -1 + process.env.NODE_ENV?.indexOf("test") > -1 ? { translateTime: "HH:MM:ss Z", ignore: "pid,hostname,name", From 925cc3bd122af8069a3d3957a6358ac90a61b51e Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Sun, 16 Jan 2022 22:55:16 +0100 Subject: [PATCH 016/276] =?UTF-8?q?=F0=9F=9B=A0=20Multiple=20fixes=20(#187?= =?UTF-8?q?9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Reduce invite token size * Add channel counters type message and add statistics when get channel as long as list channels * Refactor channels member count increase * Persist the required url even after OIDC redirect / sign up process * Fix typo * Make sure search works with accents * Fix tests * Fix tests * Last thing to fix * Try again * Fixing tests * Fixing tests 2 * Fixing tests 3 * Fixing tests 4 * Random ids in tests --- .../platform/services/counter/provider.ts | 12 ++-- .../channels/entities/channel_counters.ts | 1 + .../channels/services/channel/types.ts | 1 - .../src/services/channels/services/index.ts | 2 +- .../channels/services/member/service.ts | 17 ++--- .../channels/services/pubsub/index.ts | 4 +- .../pubsub/new-channel-activity/index.ts | 40 +++++++++++- .../channels/web/controllers/channel.ts | 64 +++++++------------ .../node/src/services/channels/web/schemas.ts | 1 - .../backend/node/src/services/online/index.ts | 4 +- .../node/src/services/workspaces/api.ts | 5 +- .../workspaces/services/workspace/service.ts | 42 ++++++++---- .../controllers/workspace-invite-tokens.ts | 11 ++-- .../web/controllers/workspace-users.ts | 10 +++ twake/backend/node/src/utils/uuid-reducer.ts | 20 ++++++ .../test/e2e/channels/channels.rest.spec.ts | 12 ++-- .../test/e2e/console/console-auth.spec.ts | 2 + twake/backend/node/test/e2e/counters.spec.ts | 12 ++-- twake/backend/node/test/e2e/run-all.js | 6 +- .../backend/node/test/e2e/utils.prepare.db.ts | 2 +- .../workspaces.invite-tokens.spec.ts | 10 ++- .../RichTextEditor/plugins/mentions/index.ts | 2 +- .../Client/WorkspacesBar/WorkspacesBar.tsx | 2 +- .../provider/oidc/OIDCAuthProviderService.ts | 32 +++++++++- 24 files changed, 202 insertions(+), 112 deletions(-) create mode 100644 twake/backend/node/src/utils/uuid-reducer.ts diff --git a/twake/backend/node/src/core/platform/services/counter/provider.ts b/twake/backend/node/src/core/platform/services/counter/provider.ts index 1ee54654a9..f0537cbd79 100644 --- a/twake/backend/node/src/core/platform/services/counter/provider.ts +++ b/twake/backend/node/src/core/platform/services/counter/provider.ts @@ -36,12 +36,12 @@ export class CounterProvider { } } - reviseCounter( + setReviseCallback( handler: (pk: Partial) => Promise, maxCalls: number = 10, maxPeriod: number = 24 * 60 * 60 * 1000, ): void { - logger.debug(`${this.name} Set reviseCounter for ${this.repository.table}`); + logger.debug(`${this.name} Set setReviseCallback for ${this.repository.table}`); this.reviseHandler = handler; this.reviseMaxCalls = maxCalls; this.reviseMaxPeriod = maxPeriod; @@ -59,15 +59,17 @@ export class CounterProvider { now > lastRevised.period + this.reviseMaxPeriod ) { if (!this.reviseHandler) { - logger.debug(`${this.name} No reviseCounter handler found for ${this.repository.table}`); + logger.debug( + `${this.name} No setReviseCallback handler found for ${this.repository.table}`, + ); return currentValue; } - logger.debug(`${this.name} Execute reviseCounter handler for ${this.repository.table}`); + logger.debug(`${this.name} Execute setReviseCallback handler for ${this.repository.table}`); const actual = await this.reviseHandler(pk); - if (actual != currentValue) { + if (actual !== undefined && actual != currentValue) { await this.increase(pk, actual - currentValue); currentValue = actual; } diff --git a/twake/backend/node/src/services/channels/entities/channel_counters.ts b/twake/backend/node/src/services/channels/entities/channel_counters.ts index 989a24782c..3958848f1a 100644 --- a/twake/backend/node/src/services/channels/entities/channel_counters.ts +++ b/twake/backend/node/src/services/channels/entities/channel_counters.ts @@ -30,5 +30,6 @@ export type ChannelCounterPrimaryKey = Pick< export enum ChannelUserCounterType { MEMBERS = "members", + MESSAGES = "messages", GUESTS = "guests", } diff --git a/twake/backend/node/src/services/channels/services/channel/types.ts b/twake/backend/node/src/services/channels/services/channel/types.ts index bab5d4f41d..5a48169505 100644 --- a/twake/backend/node/src/services/channels/services/channel/types.ts +++ b/twake/backend/node/src/services/channels/services/channel/types.ts @@ -11,7 +11,6 @@ export type NewUserInWorkspaceNotification = { export type ChannelStats = { members: number; - guests: number; messages: number; }; diff --git a/twake/backend/node/src/services/channels/services/index.ts b/twake/backend/node/src/services/channels/services/index.ts index d1cf125fd9..3a641d36cf 100644 --- a/twake/backend/node/src/services/channels/services/index.ts +++ b/twake/backend/node/src/services/channels/services/index.ts @@ -41,7 +41,7 @@ class Service implements ChannelServiceAPI { this.channels = getChannelService(platformServices, this, user); this.tabs = getTabService(platformServices.database); this.activities = getActivitiesService(platformServices.pubsub); - this.pubsubListener = new PubsubListener(this, platformServices.pubsub, user); + this.pubsubListener = new PubsubListener(platformServices, this, platformServices.pubsub, user); this.pendingEmails = new ChannelPendingEmailsService(platformServices.database, user, this); } diff --git a/twake/backend/node/src/services/channels/services/member/service.ts b/twake/backend/node/src/services/channels/services/member/service.ts index 4eed50ac7f..48d92282ce 100644 --- a/twake/backend/node/src/services/channels/services/member/service.ts +++ b/twake/backend/node/src/services/channels/services/member/service.ts @@ -114,10 +114,14 @@ export class Service implements MemberService { channelCountersRepository, ); - this.channelCounter.reviseCounter(async (pk: ChannelCounterPrimaryKey) => { - const type = ChannelUserCounterType.MEMBERS - ? ChannelMemberType.MEMBER - : ChannelMemberType.GUEST; + this.channelCounter.setReviseCallback(async (pk: ChannelCounterPrimaryKey) => { + if (pk.counter_type === ChannelUserCounterType.MESSAGES) { + return; + } + const type = + ChannelUserCounterType.MEMBERS === pk.counter_type + ? ChannelMemberType.MEMBER + : ChannelMemberType.GUEST; return countRepositoryItems( this.channelMembersRepository, { channel_id: pk.id, company_id: pk.company_id, workspace_id: pk.workspace_id }, @@ -235,6 +239,7 @@ export class Service implements MemberService { await this.userChannelsRepository.save(userChannel); await this.channelMembersRepository.save(channelMember); + await this.usersCounterIncrease(channel, member.user_id); this.onCreated( channel, member, @@ -447,8 +452,6 @@ export class Service implements MemberService { const result = await this.save(member, null, context); - await this.usersCounterIncrease(channel, user.id); - return { channel, added: true, @@ -507,8 +510,6 @@ export class Service implements MemberService { const result = await this.save(member, null, context); - await this.usersCounterIncrease(channel, member.user_id); - return { channel, member: result.entity, added: true }; } catch (err) { logger.warn({ err }, "Member has not been added %o", member); diff --git a/twake/backend/node/src/services/channels/services/pubsub/index.ts b/twake/backend/node/src/services/channels/services/pubsub/index.ts index 563fec030e..83718aa322 100644 --- a/twake/backend/node/src/services/channels/services/pubsub/index.ts +++ b/twake/backend/node/src/services/channels/services/pubsub/index.ts @@ -7,9 +7,11 @@ import { NewUserInWorkspaceJoinDefaultChannelsProcessor } from "./new-user-in-wo import { NewPendingEmailsInWorkspaceJoinChannelsProcessor } from "./new-pending-emails-in-workspace-join-channels"; import UserServiceAPI from "../../../user/api"; import { NewWorkspaceProcessor } from "./new-workspace"; +import { PlatformServicesAPI } from "../../../../core/platform/services/platform-services"; export class PubsubListener implements Initializable { constructor( + private platformServices: PlatformServicesAPI, private service: ChannelServiceAPI, private pubsub: PubsubServiceAPI, private user: UserServiceAPI, @@ -17,7 +19,7 @@ export class PubsubListener implements Initializable { async init(): Promise { this.pubsub.processor.addHandler( - new NewChannelActivityProcessor(this.service.channels, this.user), + new NewChannelActivityProcessor(this.platformServices, this.service.channels, this.user), ); this.pubsub.processor.addHandler(new NewDirectChannelMessageProcessor(this.service)); this.pubsub.processor.addHandler( diff --git a/twake/backend/node/src/services/channels/services/pubsub/new-channel-activity/index.ts b/twake/backend/node/src/services/channels/services/pubsub/new-channel-activity/index.ts index ef242f9c8d..72fd2c6073 100644 --- a/twake/backend/node/src/services/channels/services/pubsub/new-channel-activity/index.ts +++ b/twake/backend/node/src/services/channels/services/pubsub/new-channel-activity/index.ts @@ -3,11 +3,37 @@ import { PubsubHandler } from "../../../../../core/platform/services/pubsub/api" import { ChannelActivityNotification } from "../../../types"; import { ChannelService } from "../../../provider"; import UserServiceAPI from "../../../../user/api"; +import { CounterProvider } from "../../../../../core/platform/services/counter/provider"; +import { + ChannelCounterEntity, + ChannelUserCounterType, + TYPE as ChannelCounterEntityType, +} from "../../../entities/channel_counters"; +import { PlatformServicesAPI } from "../../../../../core/platform/services/platform-services"; const logger = getLogger("channel.pubsub.new-channel-activity"); export class NewChannelActivityProcessor - implements PubsubHandler { - constructor(readonly service: ChannelService, private user: UserServiceAPI) {} + implements PubsubHandler +{ + private channelCounter: CounterProvider; + + constructor( + readonly platformServices: PlatformServicesAPI, + readonly service: ChannelService, + private user: UserServiceAPI, + ) {} + + async init() { + const channelCountersRepository = + await this.platformServices.database.getRepository( + ChannelCounterEntityType, + ChannelCounterEntity, + ); + this.channelCounter = await this.platformServices.counter.getCounter( + channelCountersRepository, + ); + return this; + } readonly topics = { in: "channel:activity", @@ -27,6 +53,16 @@ export class NewChannelActivityProcessor async process(message: ChannelActivityNotification): Promise { logger.info(`${this.name} - Processing new activity in channel ${message.channel_id}`); + await this.channelCounter.increase( + { + id: message.channel_id, + company_id: message.company_id, + workspace_id: message.workspace_id, + counter_type: ChannelUserCounterType.MESSAGES, + }, + 1, + ); + try { this.service.updateLastActivity( { diff --git a/twake/backend/node/src/services/channels/web/controllers/channel.ts b/twake/backend/node/src/services/channels/web/controllers/channel.ts index c8c5c653c2..fdf442ffd9 100644 --- a/twake/backend/node/src/services/channels/web/controllers/channel.ts +++ b/twake/backend/node/src/services/channels/web/controllers/channel.ts @@ -108,27 +108,15 @@ export class ChannelCrudController getChannelExecutionContext(request, channel), ); + const channelObject = ChannelObject.mapTo(channel, { + user_member: ChannelMemberObject.mapTo(member), + }); + + await this.completeWithStatistics([channelObject]); + return { websocket: this.websockets.sign([getWebsocketInformation(channel)], context.user.id)[0], - resource: ChannelObject.mapTo(channel, { - user_member: ChannelMemberObject.mapTo(member), - stats: { - members: await this.membersService.getUsersCount({ - id: channel.id, - company_id: channel.company_id, - workspace_id: channel.workspace_id, - counter_type: ChannelUserCounterType.MEMBERS, - }), - guests: 0, // Since actually all users are now added to the channel as members, we are removing the guest counter for now. - // guests: await this.membersService.getUsersCount({ - // id: channel.id, - // company_id: channel.company_id, - // workspace_id: channel.workspace_id, - // counter_type: ChannelUserCounterType.GUESTS, - // }), - messages: 0, - }, - }), + resource: channelObject, }; } @@ -285,27 +273,7 @@ export class ChannelCrudController const resources = entities.map(a => ChannelObject.mapTo(a)); - try { - await this.membersService.getUsersCount({ - ..._.pick(resources[0], "id", "company_id", "workspace_id"), - counter_type: ChannelUserCounterType.MEMBERS, - }); - } catch (e) { - console.log(e); - } - - const counts = await Promise.all( - resources.map(a => - this.membersService.getUsersCount({ - ..._.pick(a, "id", "company_id", "workspace_id"), - counter_type: ChannelUserCounterType.MEMBERS, - }), - ), - ); - - for (let i = 0; i < resources.length; i++) { - resources[i].stats = { members: counts[i], guests: 0, messages: 0 }; - } + await this.completeWithStatistics(resources); return { ...{ @@ -437,6 +405,22 @@ export class ChannelCrudController return { status: pendingEmail.deleted ? "success" : "error" }; } + + async completeWithStatistics(channels: ChannelObject[]) { + await Promise.all( + channels.map(async a => { + const members = await this.membersService.getUsersCount({ + ..._.pick(a, "id", "company_id", "workspace_id"), + counter_type: ChannelUserCounterType.MEMBERS, + }); + const messages = await this.membersService.getUsersCount({ + ..._.pick(a, "id", "company_id", "workspace_id"), + counter_type: ChannelUserCounterType.MEMBERS, + }); + a.stats = { members, messages }; + }), + ); + } } function getExecutionContext( diff --git a/twake/backend/node/src/services/channels/web/schemas.ts b/twake/backend/node/src/services/channels/web/schemas.ts index 1c557ad335..a82306ca5d 100644 --- a/twake/backend/node/src/services/channels/web/schemas.ts +++ b/twake/backend/node/src/services/channels/web/schemas.ts @@ -45,7 +45,6 @@ const channelSchema = { type: "object", properties: { members: { type: "number" }, - guests: { type: "number" }, messages: { type: "number" }, }, }, diff --git a/twake/backend/node/src/services/online/index.ts b/twake/backend/node/src/services/online/index.ts index f137341681..675e7f0398 100644 --- a/twake/backend/node/src/services/online/index.ts +++ b/twake/backend/node/src/services/online/index.ts @@ -52,9 +52,7 @@ export default class OnlineService event.socket.on( "online:get", async (request: OnlineGetRequest, ack: (response: OnlineGetResponse) => void) => { - this.logger.debug( - `Got an online:get request for users "[${(request.data || []).join(",")}]"`, - ); + this.logger.debug(`Got an online:get request for ${(request.data || []).length} users`); ack({ data: await this.getOnlineStatuses(request.data) }); }, diff --git a/twake/backend/node/src/services/workspaces/api.ts b/twake/backend/node/src/services/workspaces/api.ts index 86779cba3e..c4dd6272f4 100644 --- a/twake/backend/node/src/services/workspaces/api.ts +++ b/twake/backend/node/src/services/workspaces/api.ts @@ -19,7 +19,7 @@ import WorkspacePendingUser, { import { CompanyUserRole } from "../user/web/types"; import { uuid } from "../../utils/types"; import { ConsoleServiceAPI } from "../console/api"; -import { WorkspaceInviteTokenObject } from "./web/types"; +import { InviteTokenObject, WorkspaceInviteTokenObject } from "./web/types"; import WorkspaceInviteTokens from "./entities/workspace_invite_tokens"; import { Readable } from "stream"; @@ -126,4 +126,7 @@ export interface WorkspaceServiceAPI createInviteToken(companyId: string, workspaceId: string): Promise; deleteInviteToken(companyId: string, workspaceId: string): Promise; getInviteTokenInfo(jwtToken: string): Promise; + + encodeInviteToken(companyId: string, workspaceId: string, token: string): string; + decodeInviteToken(encodedToken: string): InviteTokenObject; } diff --git a/twake/backend/node/src/services/workspaces/services/workspace/service.ts b/twake/backend/node/src/services/workspaces/services/workspace/service.ts index 593c86db22..97b4fc14dd 100644 --- a/twake/backend/node/src/services/workspaces/services/workspace/service.ts +++ b/twake/backend/node/src/services/workspaces/services/workspace/service.ts @@ -56,8 +56,9 @@ import WorkspaceInviteTokens, { } from "../../entities/workspace_invite_tokens"; import AuthServiceAPI from "../../../../core/platform/services/auth/provider"; import { randomBytes } from "crypto"; -import { ConsoleOptions, ConsoleType } from "../../../console/types"; import { Readable } from "stream"; +import { reduceUUID4 } from "../../../../utils/uuid-reducer"; +import { expandUUID4 } from "../../../../utils/uuid-reducer"; export class WorkspaceService implements WorkspaceServiceAPI { version: "1"; @@ -103,7 +104,7 @@ export class WorkspaceService implements WorkspaceServiceAPI { workspaceCountersRepository, ); - this.workspaceCounter.reviseCounter(async (pk: WorkspaceCounterPrimaryKey) => { + this.workspaceCounter.setReviseCallback(async (pk: WorkspaceCounterPrimaryKey) => { if (pk.counter_type == "members") { return countRepositoryItems(this.workspaceUserRepository, { workspace_id: pk.id }); } @@ -556,11 +557,6 @@ export class WorkspaceService implements WorkspaceServiceAPI { return this.workspaceCounter.get(this.wsCountPk(workspaceId)); } - private jwtInviteToken(companyId: string, workspaceId: string, token: string) { - const inviteTokenObject: InviteTokenObject = { c: companyId, w: workspaceId, t: token }; - return this.auth.sign(inviteTokenObject); - } - async getInviteToken( companyId: string, workspaceId: string, @@ -570,7 +566,7 @@ export class WorkspaceService implements WorkspaceServiceAPI { if (!res) return null; return { - token: this.jwtInviteToken(companyId, workspaceId, res.invite_token), + token: this.encodeInviteToken(companyId, workspaceId, res.invite_token), }; } @@ -585,22 +581,24 @@ export class WorkspaceService implements WorkspaceServiceAPI { getWorkspaceInviteTokensInstance({ ...pk, invite_token: token }), ); return { - token: this.jwtInviteToken(companyId, workspaceId, token), + token: this.encodeInviteToken(companyId, workspaceId, token), }; } + async deleteInviteToken(companyId: string, workspaceId: string): Promise { const pk = { company_id: companyId, workspace_id: workspaceId }; const currentRecord = await this.workspaceInviteTokensRepository.findOne(pk); - if (currentRecord) { - await this.workspaceInviteTokensRepository.remove(currentRecord); + if (!currentRecord) { + return false; } - return !!currentRecord; + await this.workspaceInviteTokensRepository.remove(currentRecord); + return true; } - async getInviteTokenInfo(jwtToken: string): Promise { + async getInviteTokenInfo(encodedToken: string): Promise { let tokenInfo: InviteTokenObject; try { - tokenInfo = await this.auth.verifyTokenObject(jwtToken); + tokenInfo = this.decodeInviteToken(encodedToken); } catch (e) {} if (!tokenInfo) { @@ -614,4 +612,20 @@ export class WorkspaceService implements WorkspaceServiceAPI { }; return this.workspaceInviteTokensRepository.findOne(pk); } + + public encodeInviteToken(companyId: string, workspaceId: string, token: string) { + return `${reduceUUID4(companyId)}-${reduceUUID4(workspaceId)}-${token}`; + } + + public decodeInviteToken(encodedToken: string): InviteTokenObject | null { + try { + const [companyId, workspaceId, token] = encodedToken.split("-"); + if (!token) { + return; + } + return { c: expandUUID4(companyId), w: expandUUID4(workspaceId), t: token }; + } catch (e) { + return null; + } + } } diff --git a/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts b/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts index 81cc186944..bd08864b74 100644 --- a/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts +++ b/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts @@ -74,6 +74,12 @@ export class WorkspaceInviteTokensCrudController ): Promise { const context = getExecutionContext(request); + const tokenInfo = this.services.workspaces.decodeInviteToken(request.params.token); + + if (!tokenInfo) { + throw CrudExeption.notFound("Invite token malformed"); + } + const deleted = await this.services.workspaces.deleteInviteToken( context.company_id, context.workspace_id, @@ -94,11 +100,6 @@ export class WorkspaceInviteTokensCrudController request: FastifyRequest<{ Body: WorkspaceJoinByTokenRequest }>, reply: FastifyReply, ): Promise> { - const consoleUrl = this.services.console.consoleOptions.url; - // if (!consoleUrl) { - // throw CrudExeption.badRequest("Console url is not defined"); - // } - const entity = await this.services.workspaces.getInviteTokenInfo(request.body.token); if (!entity) { diff --git a/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts b/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts index 92325e2cb7..584d27ce5b 100644 --- a/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts +++ b/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts @@ -36,6 +36,7 @@ import { import WorkspacePendingUser from "../../entities/workspace_pending_users"; import { ConsoleServiceAPI } from "../../../console/api"; import { ConsoleCompany, CreateConsoleUser } from "../../../console/types"; +import { hasCompanyAdminLevel } from "../../../../utils/company"; export class WorkspaceUsersCrudController implements @@ -60,6 +61,15 @@ export class WorkspaceUsersCrudController userCompanies: CompanyUser[], companiesMap: Map, ): WorkspaceUserObject { + //Company admins should be workspace moderators automatically + if ( + currentCompanyId && + userCompanies && + hasCompanyAdminLevel(userCompanies.find(uc => uc.group_id === currentCompanyId)?.role) + ) { + workspaceUser.role = "moderator"; + } + const res: WorkspaceUserObject = { id: workspaceUser.id, company_id: currentCompanyId, diff --git a/twake/backend/node/src/utils/uuid-reducer.ts b/twake/backend/node/src/utils/uuid-reducer.ts new file mode 100644 index 0000000000..b2e5b5b3ff --- /dev/null +++ b/twake/backend/node/src/utils/uuid-reducer.ts @@ -0,0 +1,20 @@ +export const reduceUUID4 = function (id: string) { + if (!id) return undefined; + + return id + .replace(/(.)\1{2,3}/g, "$1i") + .replace(/(.)\1{1,2}/g, "$1h") + .replace(/-/g, "g"); +}; + +export const expandUUID4 = function (id: string) { + if (!id) return undefined; + + return ( + id + .replace(/(.)i/g, "$1$1$1") + .replace(/(.)h/g, "$1$1") + .replace(/[^0-9a-g]/g, "") + .replace(/g/g, "-") || undefined + ); +}; diff --git a/twake/backend/node/test/e2e/channels/channels.rest.spec.ts b/twake/backend/node/test/e2e/channels/channels.rest.spec.ts index ca29fa4829..9a71e78039 100644 --- a/twake/backend/node/test/e2e/channels/channels.rest.spec.ts +++ b/twake/backend/node/test/e2e/channels/channels.rest.spec.ts @@ -167,8 +167,7 @@ describe("The /internal/services/channels/v1 API", () => { result.resources.forEach(r => { expect(r.stats).toMatchObject({ members: 1, - guests: 0, - messages: 0, + messages: 1, }); }); @@ -522,8 +521,7 @@ describe("The /internal/services/channels/v1 API", () => { expect(resource.stats).toMatchObject({ members: 1, - guests: 0, - messages: 0, + messages: 1, }); expect(resource.user_member).toMatchObject({ @@ -552,8 +550,7 @@ describe("The /internal/services/channels/v1 API", () => { expect(resource.stats).toMatchObject({ members: 6, - guests: 0, - messages: 0, + messages: 6, }); await channelService.members.delete( @@ -569,8 +566,7 @@ describe("The /internal/services/channels/v1 API", () => { expect(resource.stats).toMatchObject({ members: 5, - guests: 0, - messages: 0, + messages: 5, }); done(); diff --git a/twake/backend/node/test/e2e/console/console-auth.spec.ts b/twake/backend/node/test/e2e/console/console-auth.spec.ts index da70ad58c8..146ef7602b 100644 --- a/twake/backend/node/test/e2e/console/console-auth.spec.ts +++ b/twake/backend/node/test/e2e/console/console-auth.spec.ts @@ -73,6 +73,8 @@ describe("The console API auth", () => { consoleOptions = console.consoleOptions; consoleType = console.consoleType; + await new Promise(r => setTimeout(r, 1000)); + ends(); }); diff --git a/twake/backend/node/test/e2e/counters.spec.ts b/twake/backend/node/test/e2e/counters.spec.ts index 843de22290..63440fdeff 100644 --- a/twake/backend/node/test/e2e/counters.spec.ts +++ b/twake/backend/node/test/e2e/counters.spec.ts @@ -8,12 +8,12 @@ import { CounterAPI } from "../../src/core/platform/services/counter/types"; import { WorkspaceCounterEntity, WorkspaceCounterPrimaryKey, - WorkspaceCounterType + WorkspaceCounterType, } from "../../src/services/workspaces/entities/workspace_counters"; import { CounterProvider } from "../../src/core/platform/services/counter/provider"; import WorkspaceUser, { getInstance as getWorkspaceUserInstance, - TYPE as WorkspaceUserEntityType + TYPE as WorkspaceUserEntityType, } from "../../src/services/workspaces/entities/workspace_user"; import { countRepositoryItems } from "../../src/utils/counters"; @@ -21,7 +21,7 @@ import { TestDbService } from "./utils.prepare.db"; import { ChannelCounterEntity, ChannelCounterPrimaryKey, - ChannelUserCounterType + ChannelUserCounterType, } from "../../src/services/channels/entities/channel_counters"; import { ChannelMemberType } from "../../src/services/channels/types"; import { getMemberOfChannelInstance, MemberOfChannel } from "../../src/services/channels/entities"; @@ -66,7 +66,7 @@ describe("Counters implementation", () => { WorkspaceUser, ); - counter.reviseCounter(async (pk: WorkspaceCounterPrimaryKey) => { + counter.setReviseCallback(async (pk: WorkspaceCounterPrimaryKey) => { if (pk.counter_type == "members") { return countRepositoryItems(workspaceUserRepository, { workspace_id: pk.id }); } @@ -154,7 +154,7 @@ describe("Counters implementation", () => { MemberOfChannel, ); - counter.reviseCounter(async (pk: ChannelCounterPrimaryKey) => { + counter.setReviseCallback(async (pk: ChannelCounterPrimaryKey) => { if (pk.counter_type == ChannelUserCounterType.MEMBERS) { return countRepositoryItems( memberOfChannelRepository, @@ -178,7 +178,7 @@ describe("Counters implementation", () => { // ChannelMember, // ); // - // counter.reviseCounter(async (pk: ChannelCounterPrimaryKey) => { + // counter.setReviseCallback(async (pk: ChannelCounterPrimaryKey) => { // if (pk.counter_type == ChannelUserCounterType.MEMBERS) { // return countRepositoryItems( // channelMemberRepository, diff --git a/twake/backend/node/test/e2e/run-all.js b/twake/backend/node/test/e2e/run-all.js index 98b7a4161f..57f7ca5a0c 100644 --- a/twake/backend/node/test/e2e/run-all.js +++ b/twake/backend/node/test/e2e/run-all.js @@ -55,11 +55,9 @@ srcFiles = srcFiles.filter(p => p.indexOf(".spec.ts") >= 0 || p.indexOf(".test.t try { const out = await exec("jest", args.split(" ")); if (out.code !== 0) { - //To get all the logs - await exec("jest", args.split(" "), true); + //To get all the logs, we run it again console.log(`FAIL ${testName}`); - console.log(`-- Data\n ${out.data}`); - console.log(`-- Error\n ${out.error || "(no error)"}`); + await exec("jest", args.split(" "), true); failed++; } else { passed++; diff --git a/twake/backend/node/test/e2e/utils.prepare.db.ts b/twake/backend/node/test/e2e/utils.prepare.db.ts index b971b74270..686c3348ae 100644 --- a/twake/backend/node/test/e2e/utils.prepare.db.ts +++ b/twake/backend/node/test/e2e/utils.prepare.db.ts @@ -149,7 +149,7 @@ export class TestDbService { if (options.email) { user.email_canonical = options.email; } - const createdUser = await this.userService.users.create(user).then(a => a.entity); + const createdUser = (await this.userService.users.create(user)).entity; if (options.password) { await this.userService.users.setPassword({ id: createdUser.id }, options.password); diff --git a/twake/backend/node/test/e2e/workspaces/workspaces.invite-tokens.spec.ts b/twake/backend/node/test/e2e/workspaces/workspaces.invite-tokens.spec.ts index 1dd1f3ccdc..17ba7a4a6b 100644 --- a/twake/backend/node/test/e2e/workspaces/workspaces.invite-tokens.spec.ts +++ b/twake/backend/node/test/e2e/workspaces/workspaces.invite-tokens.spec.ts @@ -64,7 +64,7 @@ describe("The /workspaces API (invite tokens)", () => { }; const decodeToken = (token: string): InviteTokenObject => { - return authServiceApi.verifyTokenObject(token); + return workspaceServicesAPI.workspaces.decodeInviteToken(token); }; describe("The GET /tokens/ route", () => { @@ -311,7 +311,7 @@ describe("The /workspaces API (invite tokens)", () => { const response = await platform.app.inject({ method: "DELETE", - url: `${url}/companies/${companyId}/workspaces/${workspaceId}/users/tokens/123`, + url: `${url}/companies/${companyId}/workspaces/${workspaceId}/users/tokens/fake1-${new Date().getTime()}`, }); expect(response.statusCode).toBe(401); done(); @@ -326,7 +326,7 @@ describe("The /workspaces API (invite tokens)", () => { const response = await platform.app.inject({ method: "DELETE", - url: `${url}/companies/${companyId}/workspaces/${workspaceId}/users/tokens/123`, + url: `${url}/companies/${companyId}/workspaces/${workspaceId}/users/tokens/fake2-${new Date().getTime()}`, headers: { authorization: `Bearer ${jwtToken}` }, payload: {}, }); @@ -382,7 +382,7 @@ describe("The /workspaces API (invite tokens)", () => { const response = await platform.app.inject({ method: "DELETE", - url: `${url}/companies/${companyId}/workspaces/${workspaceId}/users/tokens/123456`, + url: `${url}/companies/${companyId}/workspaces/${workspaceId}/users/tokens/fake3-${new Date().getTime()}`, headers: { authorization: `Bearer ${jwtToken}` }, payload: {}, }); @@ -424,8 +424,6 @@ describe("The /workspaces API (invite tokens)", () => { }); it("should 200 when user is not authorized", async done => { - const jwtToken = await platform.auth.getJWTToken({ sub: userId }); - const response = await platform.app.inject({ method: "POST", url: `${url}/join`, diff --git a/twake/frontend/src/app/components/RichTextEditor/plugins/mentions/index.ts b/twake/frontend/src/app/components/RichTextEditor/plugins/mentions/index.ts index 099d5aebea..dfe853425e 100644 --- a/twake/frontend/src/app/components/RichTextEditor/plugins/mentions/index.ts +++ b/twake/frontend/src/app/components/RichTextEditor/plugins/mentions/index.ts @@ -154,7 +154,7 @@ export default ( strategy: findMentionEntities, component: Mention, }, - trigger: /\B@([-+\w]+)$/, + trigger: /\B@([^\B]+)$/, resourceType: MENTION_TYPE, getTextDisplay: (mention: MentionSuggestionType) => mention.username, onSelected: ( diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.tsx b/twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.tsx index e8e3483c16..5eadd1f166 100755 --- a/twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.tsx +++ b/twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.tsx @@ -27,7 +27,7 @@ const WorkspaceListComponent = ({ companyId }: { companyId: string }) => { const { workspaces, refresh } = useWorkspaces(companyId); useEffect(() => { - refresh(); + companyId && refresh(); }, [companyId]); return ( diff --git a/twake/frontend/src/app/services/Auth/provider/oidc/OIDCAuthProviderService.ts b/twake/frontend/src/app/services/Auth/provider/oidc/OIDCAuthProviderService.ts index 2c2e54feba..cdb56319c8 100644 --- a/twake/frontend/src/app/services/Auth/provider/oidc/OIDCAuthProviderService.ts +++ b/twake/frontend/src/app/services/Auth/provider/oidc/OIDCAuthProviderService.ts @@ -10,6 +10,7 @@ import EnvironmentService from '../../../EnvironmentService'; import { AuthProvider, InitParameters } from '../AuthProvider'; import ConsoleService from 'app/services/Console/ConsoleService'; import { JWTDataType } from 'app/services/JWTStorage'; +import LocalStorage from 'app/services/LocalStorage'; const OIDC_CALLBACK_URL = '/oidccallback'; const OIDC_SIGNOUT_URL = '/signout'; @@ -25,6 +26,7 @@ export default class OIDCAuthProviderService private userManager: Oidc.UserManager | null = null; private initialized: boolean = false; private user!: Oidc.User; + private params?: InitParameters; constructor(private configuration?: ConsoleConfiguration) { super(); @@ -33,6 +35,8 @@ export default class OIDCAuthProviderService } init(params: InitParameters): this { + this.params = params; + if (this.initialized) { this.logger.warn('Already initialized'); return this; @@ -81,7 +85,7 @@ export default class OIDCAuthProviderService if (!this.initialized) { // FIXME: Do we need to send back the user? - params.onInitialized(); + this.onInitialized(); this.initialized = true; } else { jwt && params.onNewToken(jwt); @@ -172,13 +176,13 @@ export default class OIDCAuthProviderService } else { //If no user defined, we try a redirect signin this.logger.debug('silentLogin, user not defined, launching a signin redirect'); - this.userManager.signinRedirect(); + this.signinRedirect(); } } catch (e) { this.logger.debug('silentLogin error, launching a signin redirect', e); // FIXME: We should also be able to show a message to the user with the onSessionExpired listener // In any case if it doesn't work we do a redirect signin - this.userManager.signinRedirect(); + this.signinRedirect(); } } } @@ -234,6 +238,28 @@ export default class OIDCAuthProviderService ConsoleService.getNewAccessToken({ access_token: user.access_token }, callback); } + + signinRedirect() { + //Save requested URL for after redirect / sign-in + LocalStorage.setItem('requested_url', { + url: document.location.href, + time: new Date().getTime(), + }); + + if (this.userManager) this.userManager.signinRedirect(); + } + + onInitialized() { + //If user requested an url in the last 10 minutes, we open it + const ref = LocalStorage.getItem('requested_url') as { url: string; time: number }; + if (ref && new Date().getTime() - ref.time < 1000 * 60 * 10) { + document.location.replace(ref.url); + } + LocalStorage.setItem('requested_url', null); + //End of post-login redirection + + this.params?.onInitialized(); + } } function getDomain(str: string): string { From 139e34b857a92e1960ecd647c6264d01dc4decaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Vieira?= <36481167+stephanevieira75@users.noreply.github.com> Date: Mon, 17 Jan 2022 10:01:38 +0000 Subject: [PATCH 017/276] =?UTF-8?q?=F0=9F=9B=A0=20#1864=20Channels=20to=20?= =?UTF-8?q?recoil=20state=20(#1870)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #1864 Add ChannelsMineAPIClient * #1864 Add ChannelsReachableAPIClient * #1864 Recoil part 1 * #1864 Add channel visibility utils * #1864 Update useChannels hook * #1864 Add direct channels in useChannels hook * #1864 Create channels folder and separation of the useChannels hook into 3 hooks * #1864 Implement channel recoil state in sidebar * #1864 Implement channels state in search list manager --- .../app/scenes/Apps/Messages/Input/Input.tsx | 2 +- .../scenes/Client/ChannelsBar/ChannelsBar.tsx | 13 +- .../ChannelsWorkspace/ChannelsWorkspace.tsx | 49 +++-- .../ChannelsWorkspace/WorkspaceChannel.tsx | 6 +- .../ChannelsBar/Modals/ChannelMembersList.tsx | 66 ++++--- .../Modals/ChannelTemplateEditor.tsx | 23 +-- .../Modals/ChannelWorkspaceEditor.tsx | 103 +++++------ .../ChannelsBar/Modals/GuestManagement.tsx | 14 +- .../Modals/WorkspaceChannelList.tsx | 47 +++-- .../SearchListContainer.tsx | 21 +-- .../WorkspaceChannelRow.tsx | 61 ++++--- .../Parts/Channel/ChannelIntermediate.tsx | 31 ++-- .../ChannelsBar/Parts/Channel/ChannelMenu.tsx | 171 +++++++++++------- .../ChannelHeader/ChannelHeader.tsx | 54 ++---- .../src/app/services/Realtime/useRealtime.ts | 2 +- .../app/services/channels/ChannelAPIClient.ts | 14 ++ .../channels/ChannelMembersAPIClient.ts | 32 ++++ .../channels/ChannelsMineAPIClient.ts | 100 ++++++++++ .../channels/ChannelsReachableAPIClient.ts | 54 ++++++ .../src/app/services/channels/utils.ts | 12 ++ .../app/services/search/searchListManager.ts | 100 +++++----- .../app/services/user/UserNotifications.tsx | 22 ++- .../src/app/services/utils/useGlobalEffect.ts | 10 + .../src/app/state/recoil/atoms/Channels.ts | 20 +- .../useChannel.ts} | 3 +- .../hooks/channels/useChannelsBarLoader.ts | 18 ++ .../hooks/channels/useDirectChannels.ts | 53 ++++++ .../hooks/channels/useFavoriteChannels.ts | 30 +++ .../channels/usePublicOrPrivateChannels.ts | 60 ++++++ .../hooks/channels/useReachableChannels.ts | 36 ++++ .../hooks/messages/useChannelMessages.ts | 6 +- .../state/recoil/hooks/messages/windows.ts | 6 +- 32 files changed, 847 insertions(+), 392 deletions(-) create mode 100644 twake/frontend/src/app/services/channels/ChannelMembersAPIClient.ts create mode 100644 twake/frontend/src/app/services/channels/ChannelsMineAPIClient.ts create mode 100644 twake/frontend/src/app/services/channels/ChannelsReachableAPIClient.ts create mode 100644 twake/frontend/src/app/services/channels/utils.ts create mode 100644 twake/frontend/src/app/services/utils/useGlobalEffect.ts rename twake/frontend/src/app/state/recoil/hooks/{useChannels.ts => channels/useChannel.ts} (90%) create mode 100644 twake/frontend/src/app/state/recoil/hooks/channels/useChannelsBarLoader.ts create mode 100644 twake/frontend/src/app/state/recoil/hooks/channels/useDirectChannels.ts create mode 100644 twake/frontend/src/app/state/recoil/hooks/channels/useFavoriteChannels.ts create mode 100644 twake/frontend/src/app/state/recoil/hooks/channels/usePublicOrPrivateChannels.ts create mode 100644 twake/frontend/src/app/state/recoil/hooks/channels/useReachableChannels.ts diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx b/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx index 29278ff1ad..e8e04a4f72 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx +++ b/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx @@ -20,7 +20,7 @@ import { useUploadZones } from 'app/state/recoil/hooks/useUploadZones'; import { useMessageEditor } from 'app/state/recoil/hooks/messages/useMessageEditor'; import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; import { delayRequest } from 'app/services/utils/managedSearchRequest'; -import { useChannel } from 'app/state/recoil/hooks/useChannels'; +import { useChannel } from 'app/state/recoil/hooks/channels/useChannel'; import { useChannelWritingActivityEmit, useWritingDetector, diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.tsx index 4480baf632..db59fcb264 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.tsx @@ -22,12 +22,21 @@ import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace import './ChannelsBar.scss'; import { useCurrentWorkspace } from 'app/state/recoil/hooks/useWorkspaces'; import useChannelWritingActivity from 'app/state/recoil/hooks/useChannelWritingActivity'; +import { useChannelsBarLoader } from 'app/state/recoil/hooks/channels/useChannelsBarLoader'; +import { useFavoriteChannels } from 'app/state/recoil/hooks/channels/useFavoriteChannels'; +import { usePublicOrPrivateChannels } from 'app/state/recoil/hooks/channels/usePublicOrPrivateChannels'; +import { useDirectChannels } from 'app/state/recoil/hooks/channels/useDirectChannels'; export default () => { const companyId = useRouterCompany(); const workspaceId = useRouterWorkspace(); const { workspace } = useCurrentWorkspace(); useChannelWritingActivity(); + const { loading } = useChannelsBarLoader({ companyId, workspaceId }); + + usePublicOrPrivateChannels(); + useDirectChannels(); + useFavoriteChannels(); useEffect(() => { const openWorkspaceChannelList: ShortcutType = { @@ -53,8 +62,8 @@ export default () => { }; }, []); - if (!companyId || !workspaceId || !workspace) { - return <>; + if (loading || !companyId || !workspaceId || !workspace) { + return ; } return ( diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/ChannelsWorkspace.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/ChannelsWorkspace.tsx index dc282ec24a..5d09ed1173 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/ChannelsWorkspace.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/ChannelsWorkspace.tsx @@ -1,18 +1,20 @@ import React from 'react'; -import { ChannelResource } from 'app/models/Channel'; +import { ChannelResource, ChannelType } from 'app/models/Channel'; import { Collection } from 'services/CollectionsReact/Collections'; import RouterServices from 'app/services/RouterService'; import WorkspaceChannels from './WorkspaceChannel'; import Languages from 'services/languages/languages'; import ChannelsBarService from 'app/services/channels/ChannelsBarService'; import { getDirectChannels, getMine } from 'app/services/channels/ChannelCollectionPath'; +import { useDirectChannels } from 'app/state/recoil/hooks/channels/useDirectChannels'; +import { usePublicOrPrivateChannels } from 'app/state/recoil/hooks/channels/usePublicOrPrivateChannels'; type channelCategoryType = { - favorite: ChannelResource[]; - workspace: ChannelResource[]; - inGroup: ChannelResource[]; - direct: ChannelResource[]; + favorite: ChannelType[]; + workspace: ChannelType[]; + inGroup: ChannelType[]; + direct: ChannelType[]; }; export default () => { @@ -31,30 +33,25 @@ export default () => { getDirectChannels(companyId), ChannelResource, ).setOptions({ reloadStrategy: 'delayed' }); - const channels = channelsCollection.useWatcher( - {}, - { observedFields: ['id', 'channel_group', 'user_member.favorite'], query: { mine: true } }, - ); - const directChannels = directChannelsCollection.useWatcher( - {}, - { observedFields: ['id', 'user_member.favorite'] }, - ); + const { privateChannels, publicChannels } = usePublicOrPrivateChannels(); + const { directChannels } = useDirectChannels(); + const channels: ChannelType[] = [...privateChannels, ...publicChannels]; ChannelsBarService.wait(companyId, workspaceId, channelsCollection); channels .concat(directChannels) - .filter(a => a.data.user_member?.user_id) - .sort((a, b) => (a.data.name || '').localeCompare(b.data.name || '')) + .filter(a => a.user_member?.user_id) + .sort((a, b) => (a.name || '').localeCompare(b.name || '')) .forEach(channel => { switch (true) { - case channel.data.user_member?.favorite: + case channel.user_member?.favorite: channelCategory.favorite.push(channel); break; - case channel.data.visibility === 'direct': + case channel.visibility === 'direct': channelCategory.direct.push(channel); break; - case channel.data.channel_group && channel.data.channel_group.length > 1: + case channel.channel_group && channel.channel_group.length > 1: channelCategory.inGroup.push(channel); break; default: @@ -63,27 +60,27 @@ export default () => { }); const groupsName: string[] = []; - const groups: { name: string; channels: ChannelResource[] }[] = []; + const groups: { name: string; channels: ChannelType[] }[] = []; const hasNonGroupWorkspaceChannels = !( channelCategory.workspace.length === 0 && channelCategory.inGroup.length !== 0 ); channelCategory.inGroup.forEach(channel => { - if (channel.data.channel_group && channel.data.channel_group.length > 1) { + if (channel.channel_group && channel.channel_group.length > 1) { if (groups.length === 0) { - groupsName.push(channel.data.channel_group); + groupsName.push(channel.channel_group); groups.push({ - name: channel.data.channel_group, + name: channel.channel_group, channels: [channel], }); } else { - if (groupsName.includes(channel.data.channel_group)) { - const groupIndex = groups.findIndex(group => group.name === channel.data.channel_group); + if (groupsName.includes(channel.channel_group)) { + const groupIndex = groups.findIndex(group => group.name === channel.channel_group); groups[groupIndex].channels.push(channel); } else { - groupsName.push(channel.data.channel_group); + groupsName.push(channel.channel_group); groups.push({ - name: channel.data.channel_group, + name: channel.channel_group, channels: [channel], }); } diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/WorkspaceChannel.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/WorkspaceChannel.tsx index f7564e0fe0..c67c8a3a97 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/WorkspaceChannel.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/WorkspaceChannel.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { ChannelResource } from 'app/models/Channel'; +import { ChannelResource, ChannelType } from 'app/models/Channel'; import Languages from 'services/languages/languages'; import ModalManager from 'app/components/Modal/ModalManager'; @@ -21,7 +21,7 @@ type Props = { collection: Collection; directCollection: Collection; sectionTitle: string; - channels: ChannelResource[]; + channels: ChannelType[]; favorite?: boolean; subgroup?: boolean; }; @@ -81,7 +81,7 @@ export default (props: Props) => {
)} {props.channels.length > 0 && - props.channels.map(({ data, key }) => { + props.channels.map((data, key) => { return ( = props => { - const { company_id, workspace_id, id } = props.channel.data; +const ChannelMembersList: FC = props => { + const { company_id, workspace_id, id } = props.channel; const [search, setSearch] = useState(''); const [limit, setLimit] = useState(defaultLimit); @@ -81,14 +81,12 @@ const ChannelMembersList: FC = props => { companyId: company_id, workspaceId: workspace_id || undefined, }, - list => filterSearch(list.map(wsUser => wsUser.user)), + list => filterSearch((list || []).map(wsUser => wsUser.user)), ); return (
@@ -118,16 +116,20 @@ const ChannelMembersList: FC = props => { channelMembers.length > 0 && channelMembers .sort((a, b) => compareFullname(a, b, true)) - .map(user => ( -
- -
- ))} + .map(user => + props.channel.id ? ( +
+ +
+ ) : ( + <> + ), + )} {!search.length && !channelMembers.length && ( = props => { )} {!!search.length && - searchedUsers.map(userId => ( -
- -
- ))} + searchedUsers.map(userId => + props.channel.id ? ( +
+ +
+ ) : ( + <> + ), + )} {!!search.length && searchedUsers.length === 0 && ( ) => void; currentUserId?: string; @@ -18,12 +19,12 @@ type Props = { const { TextArea } = Input; const { Option } = Select; const { Title } = Typography; -const ChannelTemplateEditor: FC = ({ +const ChannelTemplateEditor = ({ channel, onChange, currentUserId, defaultVisibility, -}) => { +}: PropsType) => { const [icon, setIcon] = useState(channel?.icon || ''); const [name, setName] = useState(channel?.name || ''); const [description, setDescription] = useState(channel?.description || ''); @@ -33,7 +34,7 @@ const ChannelTemplateEditor: FC = ({ const [defaultChannel, setDefaultChannel] = useState(channel?.is_default || false); const [group, setGroup] = useState(channel?.channel_group || ''); const { companyId, workspaceId } = RouterServices.getStateFromRoute(); - + const { privateChannels, publicChannels } = usePublicOrPrivateChannels(); useEffect(() => { onChange({ icon, @@ -46,16 +47,12 @@ const ChannelTemplateEditor: FC = ({ }); const getGroups = () => { - const url: string = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/::mine`; - const channelsCollection = Collection.get(url, ChannelResource); - const channels = channelsCollection.find({}, { withoutBackend: true }); - const groupsNames: string[] = []; - channels - .sort((a, b) => (a.data.channel_group || '').localeCompare(b.data.channel_group || '')) - .forEach((channel: ChannelResource) => { - if (channel.data.channel_group && !groupsNames.includes(channel.data.channel_group)) - groupsNames.push(channel.data.channel_group); + [...privateChannels, ...publicChannels] + .sort((a, b) => (a.channel_group || '').localeCompare(b.channel_group || '')) + .forEach(channel => { + if (channel.channel_group && !groupsNames.includes(channel.channel_group)) + groupsNames.push(channel.channel_group); }); return groupsNames; }; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor.tsx index 34d1b6a52c..9f565d77ec 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor.tsx @@ -10,10 +10,13 @@ import ChannelMembersList from './ChannelMembersList'; import RouterServices from 'app/services/RouterService'; import _ from 'lodash'; import MainViewService from 'app/services/AppView/MainViewService'; +import ChannelAPIClient from 'app/services/channels/ChannelAPIClient'; +import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; +import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; type Props = { title: string; - channel?: ChannelResource; + channel?: ChannelType; currentUserId?: string; defaultVisibility?: ChannelType['visibility']; }; @@ -24,8 +27,11 @@ const ChannelWorkspaceEditor: FC = ({ currentUserId, defaultVisibility, }) => { - const { companyId, workspaceId } = RouterServices.getStateFromRoute(); + const companyId = useRouterCompany(); + const workspaceId = useRouterWorkspace(); + const collectionPath = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/::mine`; + const ChannelsCollections = Collections.get(collectionPath, ChannelResource); const [disabled, setDisabled] = useState(true); const [loading, setLoading] = useState(false); let newChannel: ChannelType = { @@ -49,12 +55,12 @@ const ChannelWorkspaceEditor: FC = ({ visibility: channelEntries.visibility, }, { - channel_group: channel?.data.channel_group, - description: channel?.data.description, - icon: channel?.data.icon, - is_default: channel?.data.is_default, - name: channel?.data.name, - visibility: channel?.data.visibility, + channel_group: channel?.channel_group, + description: channel?.description, + icon: channel?.icon, + is_default: channel?.is_default, + name: channel?.name, + visibility: channel?.visibility, }, ); @@ -62,60 +68,45 @@ const ChannelWorkspaceEditor: FC = ({ return (newChannel = channelEntries); }; - const upsertChannel = async (): Promise => { - const collectionPath = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/::mine`; - const ChannelsCollections = Collections.get(collectionPath, ChannelResource); - + const upsertChannel = async (): Promise => { setLoading(true); - if (channel?.id) { - const insertedChannel = ChannelsCollections.findOne(channel.id, { withoutBackend: true }); - insertedChannel.data = _.assign(insertedChannel.data, { - name: newChannel.name || channel.data.name, - description: newChannel.description, - icon: newChannel.icon || channel.data.icon, - is_default: newChannel.is_default || false, - visibility: - newChannel.visibility !== undefined ? newChannel.visibility : channel.data.visibility, - channel_group: - newChannel.channel_group !== undefined - ? newChannel.channel_group - : channel.data.channel_group, - }); - await ChannelsCollections.upsert(insertedChannel); - ModalManager.close(); - } else { - const resource = await ChannelsCollections.upsert(new ChannelResource(newChannel), { - waitServerReply: true, - }); + const response = await ChannelAPIClient.save(newChannel, { + companyId, + workspaceId, + channelId: channel?.id, + }); - if (resource) { - MainViewService.select(resource.id, { - collection: ChannelsCollections, - app: { - identity: { - code: 'messages', - name: '', - icon: '', - description: '', - website: '', - categories: [], - compatibility: [], - }, + if (response && response?.id) { + MainViewService.select(response.id, { + app: { + identity: { + code: 'messages', + name: '', + icon: '', + description: '', + website: '', + categories: [], + compatibility: [], }, - context: null, - hasTabs: false, + }, + collection: ChannelsCollections, // To remove + context: null, + hasTabs: false, + }); + + if (!channel && !response.is_default) { + // Show channel member list only for non default channel + return ModalManager.open(, { + position: 'center', + size: { width: '600px', minHeight: '329px' }, }); - if (!resource.data.is_default) { - // Show channel member list only for non default channel - return ModalManager.open(, { - position: 'center', - size: { width: '600px', minHeight: '329px' }, - }); - } - ModalManager.close(); } } + + setLoading(false); + + ModalManager.close(); }; return ( @@ -140,7 +131,7 @@ const ChannelWorkspaceEditor: FC = ({ } > { @@ -22,13 +22,13 @@ export default ({ channel }: PropsType): JSX.Element => { const [shouldDisplayAdditionRow, setShouldDisplayAdditionRow] = useState(false); const { workspaceId, companyId } = RouterService.getStateFromRoute(); - GuestManagementService.bind({ search, channel_id: channel.data.id || '' }); + GuestManagementService.bind({ search, channel_id: channel.id || '' }); const { list } = GuestManagementService; - const memberCollectionPath: string = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/${channel.data.id}/members/`; + const memberCollectionPath: string = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/${channel.id}/members/`; const channelMembersCollection = Collections.get(memberCollectionPath, ChannelMemberResource); - const pendingEmailsCollectionPath = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/${channel.data.id}/pending_emails/`; + const pendingEmailsCollectionPath = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/${channel.id}/pending_emails/`; const pendingEmailsCollection = Collections.get( pendingEmailsCollectionPath, PendingEmailResource, @@ -53,7 +53,7 @@ export default ({ channel }: PropsType): JSX.Element => { return ( @@ -79,7 +79,7 @@ export default ({ channel }: PropsType): JSX.Element => { > {shouldDisplayAdditionRow && ( { const [search, setSearch] = useState(''); @@ -23,6 +26,7 @@ export default () => { const list = listService.useWatcher(() => listService.list); const currentUserId: string = UsersService.getCurrentUserId(); const inputRef = useRef(null); + const { refresh: refreshFavoriteChannels } = useFavoriteChannels(); useEffect(() => { listService.searchAll(''); @@ -48,9 +52,9 @@ export default () => { case 'user': return upsertDirectMessage([(element.resource as UserType).id || '', currentUserId]); case 'workspace': - return joinChannel(element.resource as ChannelResource); + return joinChannel(element.resource as ChannelType); case 'direct': - return upsertDirectMessage((element.resource as ChannelResource).data.members || []); + return upsertDirectMessage((element.resource as ChannelType).members || []); } }; @@ -59,27 +63,32 @@ export default () => { return ModalManager.closeAll(); }; - const joinChannel = (channel: ChannelResource) => { - const collectionPath: string = `/channels/v1/companies/${channel.data.company_id}/workspaces/${channel.data.workspace_id}/channels/${channel.data.id}/members/`; - const channelMembersCollection = Collection.get(collectionPath, ChannelMemberResource); - const findMember = channelMembersCollection.find({ user_id: currentUserId }); - - if (!findMember.length) { - channelMembersCollection.insert( - new ChannelMemberResource({ - channel_id: channel.data.id, - user_id: currentUserId, - type: 'member', - }), + const joinChannel = async (channel: ChannelType) => { + if (channel.company_id && channel.workspace_id && channel.id) { + const channelMembers = await ChannelMembersAPIClient.get( + channel.company_id, + channel.workspace_id, + channel.id, ); + + const alreadyMemberInChannel = channelMembers.map(m => m.user_id)?.includes(currentUserId); + + if (!alreadyMemberInChannel) { + await ChannelsReachableAPIClient.inviteUser( + channel.company_id, + channel.workspace_id, + channel.id, + currentUserId, + ).finally(refreshFavoriteChannels); + } } ModalManager.closeAll(); - return RouterServices.push( + RouterServices.push( RouterServices.generateRouteFromState({ - companyId: channel.data.company_id, - workspaceId: channel.data.workspace_id || '', - channelId: channel.data.id, + companyId: channel.company_id, + workspaceId: channel.workspace_id || '', + channelId: channel.id, }), ); }; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/SearchListContainer.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/SearchListContainer.tsx index bde08d6126..4e101cc7de 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/SearchListContainer.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/SearchListContainer.tsx @@ -1,5 +1,5 @@ import { Divider } from 'antd'; -import { ChannelResource } from 'app/models/Channel'; +import { ChannelResource, ChannelType } from 'app/models/Channel'; import { UserType } from 'app/models/User'; import { Collection } from 'services/CollectionsReact/Collections'; import RouterServices from 'services/RouterService'; @@ -7,6 +7,7 @@ import React from 'react'; import DirectChannelRow from './DirectChannelRow'; import WorkspaceChannelRow from './WorkspaceChannelRow'; import { GenericChannel } from 'services/search/searchListManager'; +import { usePublicOrPrivateChannels } from 'app/state/recoil/hooks/channels/usePublicOrPrivateChannels'; type PropsType = { list: GenericChannel[]; @@ -16,15 +17,13 @@ type PropsType = { }; const SearchListContainer = ({ list, active, limit, setCursor }: PropsType) => { - const { companyId, workspaceId } = RouterServices.getStateFromRoute(); + const { privateChannels, publicChannels } = usePublicOrPrivateChannels(); + const mine = [...privateChannels, ...publicChannels]; - const minePath = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/::mine`; - const mineCollection = Collection.get(minePath, ChannelResource); - const mine = mineCollection.useWatcher({}); - - const isJoined = (resource: ChannelResource) => { - return mine.some(channel => resource.id === channel.id && channel.data.user_member?.user_id); + const isJoined = (resource: ChannelType) => { + return mine.some(channel => resource.id === channel.id && channel.user_member?.user_id); }; + return ( <> {list.slice(0, limit).map((item, index) => ( @@ -42,14 +41,14 @@ const SearchListContainer = ({ list, active, limit, setCursor }: PropsType) => { )} {item.type === 'workspace' && ( )} {item.type === 'direct' && ( diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx index 3c157a8257..c650ec0d23 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx @@ -4,23 +4,25 @@ import { Col, Row, Tag, Typography } from 'antd'; import { capitalize } from 'lodash'; import Languages from 'services/languages/languages'; import Icon from 'components/Icon/Icon'; -import RouterServices, { ClientStateType } from 'app/services/RouterService'; -import { Collection } from 'services/CollectionsReact/Collections'; -import { ChannelMemberResource, ChannelResource } from 'app/models/Channel'; +import RouterServices from 'app/services/RouterService'; +import { ChannelType } from 'app/models/Channel'; import Emojione from 'app/components/Emojione/Emojione'; import UsersService from 'services/user/UserService'; import ModalManager from 'app/components/Modal/ModalManager'; +import ChannelsReachableAPIClient from 'app/services/channels/ChannelsReachableAPIClient'; +import { useFavoriteChannels } from 'app/state/recoil/hooks/channels/useFavoriteChannels'; +import ChannelMembersAPIClient from 'app/services/channels/ChannelMembersAPIClient'; + import './ChannelRow.scss'; type PropsType = { - channel: ChannelResource; + channel: ChannelType; joined: boolean; active: boolean; }; export default ({ channel, joined, active }: PropsType) => { - const { companyId, workspaceId } = RouterServices.getStateFromRoute(); - + const { refresh: refreshFavoriteChannels } = useFavoriteChannels(); const userId: string = UsersService.getCurrentUserId(); const ref = createRef(); @@ -31,34 +33,39 @@ export default ({ channel, joined, active }: PropsType) => { } }); - const joinChannel = () => { - const collectionPath: string = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/${channel.data.id}/members/`; - const channelMembersCollection = Collection.get(collectionPath, ChannelMemberResource); - const findMember = channelMembersCollection.find({ user_id: userId }); - - if (!findMember.length) { - channelMembersCollection.insert( - new ChannelMemberResource({ - channel_id: channel.data.id, - user_id: userId, - type: 'member', - }), + const joinChannel = async () => { + if (channel.company_id && channel.workspace_id && channel.id) { + const channelMembers = await ChannelMembersAPIClient.get( + channel.company_id, + channel.workspace_id, + channel.id, ); + + const alreadyMemberInChannel = channelMembers.map(m => m.user_id)?.includes(userId); + + if (!alreadyMemberInChannel) { + await ChannelsReachableAPIClient.inviteUser( + channel.company_id, + channel.workspace_id, + channel.id, + userId, + ).finally(refreshFavoriteChannels); + } } ModalManager.closeAll(); - return RouterServices.push( + RouterServices.push( RouterServices.generateRouteFromState({ - companyId, - workspaceId, - channelId: channel.data.id, + companyId: channel.company_id, + workspaceId: channel.workspace_id || '', + channelId: channel.id, }), ); }; return ( { >
- +
- {capitalize(channel.data.name)} + {capitalize(channel.name)} - {channel.data.visibility === 'private' && } + {channel.visibility === 'private' && } - {!joined && channel.data.visibility === 'public' && ( + {!joined && channel.visibility === 'public' && ( diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelIntermediate.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelIntermediate.tsx index 6792794016..df190b3982 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelIntermediate.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelIntermediate.tsx @@ -7,7 +7,7 @@ import { Collection } from 'services/CollectionsReact/Collections'; import { getUserParts } from 'app/components/Member/UserParts'; import { NotificationResource } from 'app/models/Notification'; import { useUsersListener } from 'app/services/user/hooks/useUsersListener'; -import { useSetChannel } from 'app/state/recoil/hooks/useChannels'; +import { useSetChannel } from 'app/state/recoil/hooks/channels/useChannel'; import _ from 'lodash'; type Props = { @@ -24,7 +24,7 @@ export default (props: Props): JSX.Element => { set(_.cloneDeep(props.channel)); }, [props.channel]); - const menu = (channel: ChannelResource) => { + const menu = (channel: ChannelType) => { if (!channel) return <>; return ( { ); }; - const channel = props.collection.useWatcher( - { id: props.channel.id }, - { query: { mine: true } }, - )[0]; + const channel = props.channel; //Fixme: find a better way to reload channels if we have only part of it (maily when invited by other members) - if (!channel?.data?.visibility && channel?.data?.user_member?.user_id) { + if (!channel?.visibility && channel?.user_member?.user_id) { props.collection.reload('ontime'); } @@ -58,28 +55,28 @@ export default (props: Props): JSX.Element => { }) : { avatar: '', name: '' }; - if (!channel || !channel.data.user_member?.user_id || !channel.state.persisted) return <>; + if (!channel || !channel.user_member?.user_id) return <>; - const channelIcon = isDirectChannel ? avatar : channel.data.icon || ''; - const channeName = isDirectChannel ? name : channel.data.name || ''; + const channelIcon = isDirectChannel ? avatar : channel.icon || ''; + const channeName = isDirectChannel ? name : channel.name || ''; const unreadMessages = - (channel.data.last_activity || 0) > (channel.data.user_member.last_access || 0) && - channel.data.last_message?.sender !== channel.data.user_member?.user_id; + (channel.last_activity || 0) > (channel.user_member.last_access || 0) && + channel.last_message?.sender !== channel.user_member?.user_id; return ( ); }; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx index 355a0d88ba..226a092195 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx +++ b/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx @@ -1,13 +1,12 @@ // eslint-disable-next-line @typescript-eslint/no-use-before-define -import React, { useState } from 'react'; +import React from 'react'; -import { ChannelMemberType, ChannelResource, ChannelMemberResource } from 'app/models/Channel'; +import { ChannelMemberType, ChannelType } from 'app/models/Channel'; import ChannelMembersList from 'scenes/Client/ChannelsBar/Modals/ChannelMembersList'; import Icon from 'components/Icon/Icon'; import Menu from 'components/Menus/Menu'; import { Collection } from 'services/CollectionsReact/Collections'; import Languages from 'services/languages/languages'; -import Collections from 'services/CollectionsReact/Collections'; import AlertManager from 'services/AlertManager/AlertManager'; import UserService from 'services/user/UserService'; import ModalManager from 'app/components/Modal/ModalManager'; @@ -17,53 +16,72 @@ import AccessRightsService from 'app/services/AccessRightsService'; import { NotificationResource } from 'app/models/Notification'; import RouterServices from 'app/services/RouterService'; import GuestManagement from 'app/scenes/Client/ChannelsBar/Modals/GuestManagement'; -import { getChannelMembers, getMine } from 'app/services/channels/ChannelCollectionPath'; import { useFeatureToggles } from 'app/components/LockedFeaturesComponents/FeatureTogglesHooks'; import LockedGuestsPopup from 'app/components/LockedFeaturesComponents/LockedGuestsPopup/LockedGuestsPopup'; import InitService from 'app/services/InitService'; +import ChannelsMineAPIClient from 'app/services/channels/ChannelsMineAPIClient'; +import ChannelMembersAPIClient from 'app/services/channels/ChannelMembersAPIClient'; +import { isDirectChannel, isPrivateChannel } from 'app/services/channels/utils'; +import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; +import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; +import { ToasterService as Toaster } from 'app/services/Toaster'; +import { useFavoriteChannels } from 'app/state/recoil/hooks/channels/useFavoriteChannels'; -type Props = { - channel: ChannelResource; +type PropsType = { + channel: ChannelType; onClick: () => void; onClose: () => void; }; -export default (props: Props): JSX.Element => { - const currentUser = UserService.getCurrentUser(); - const companyId = props.channel.data.company_id; - const channelWorkspaceId = props.channel.data.workspace_id; - const { workspaceId } = RouterServices.getStateFromRoute(); - const channelMembersCollection = Collections.get( - getChannelMembers(companyId, channelWorkspaceId, props.channel.data.id), - ChannelMemberResource, - ); - const channelsCollection = Collection.get( - getMine(companyId, channelWorkspaceId), - ChannelResource, - ); - const isDirectChannel = props.channel.data.visibility === 'direct'; - - Languages.useListener(); +export default (props: PropsType): JSX.Element => { + const notificationsCollection = Collection.get('/notifications/v1/badges/', NotificationResource); + const workspaceId = useRouterWorkspace(); + const { user: currentUser } = useCurrentUser(); + const companyId = props.channel.company_id; + const { refresh: refreshFavoriteChannels } = useFavoriteChannels(); const { Feature, FeatureNames } = useFeatureToggles(); + const channelMember: ChannelMemberType = props.channel.user_member || {}; - const notificationsCollection = Collection.get('/notifications/v1/badges/', NotificationResource); + Languages.useListener(); const changeNotificationPreference = async (preference: 'all' | 'none' | 'mentions' | 'me') => { - const channelMember: ChannelMemberType = props.channel.data.user_member || {}; - channelMember.user_id = channelMember.user_id || currentUser.id; - channelMember.notification_level = 'all'; - channelMember.notification_level = preference; - channelMember.channel_id = props.channel.id; - - await channelMembersCollection.upsert(new ChannelMemberResource(channelMember)); + if ( + props.channel.company_id && + props.channel.workspace_id && + props.channel.id && + currentUser?.id + ) { + await ChannelMembersAPIClient.save( + channelMember, + { notification_level: preference }, + { + companyId: props.channel.company_id, + workspaceId: props.channel.workspace_id, + channelId: props.channel.id, + userId: currentUser.id, + }, + ).finally(refreshFavoriteChannels); + } }; const addOrCancelFavorite = async (state: boolean) => { - const channelMember: ChannelMemberType = props.channel.data.user_member || {}; - channelMember.user_id = channelMember.user_id || currentUser.id; - channelMember.favorite = state; - channelMember.channel_id = props.channel.id; - await channelMembersCollection.upsert(new ChannelMemberResource(channelMember)); + if ( + props.channel.company_id && + props.channel.workspace_id && + props.channel.id && + currentUser?.id + ) { + await ChannelMembersAPIClient.save( + channelMember, + { favorite: state }, + { + companyId: props.channel.company_id, + workspaceId: props.channel.workspace_id, + channelId: props.channel.id, + userId: currentUser.id, + }, + ).finally(refreshFavoriteChannels); + } }; const displayMembers = () => { @@ -94,24 +112,29 @@ export default (props: Props): JSX.Element => { ); }; - const leaveChannel = async () => { - try { - channelMembersCollection - .remove( - { - user_id: UserService.getCurrentUserId(), - channel_id: props.channel.id, - }, - { force: true }, - ) - .then(redirectToWorkspace); - } catch (err) { - console.log('Error in ChannelMenu.tsx', err); + const leaveChannel = async (isDirectChannel = false) => { + if (props.channel?.id && props.channel?.company_id && workspaceId) { + const res = await ChannelsMineAPIClient.removeUser(UserService.getCurrentUserId(), { + companyId: props.channel.company_id, + workspaceId: isDirectChannel ? 'direct' : workspaceId, + channelId: props.channel.id, + }); + + if (res?.error?.length && res?.message?.length) { + Toaster.error(`${res.error} - ${res.message}`); + } else { + redirectToWorkspace(); + refreshFavoriteChannels(); + } } }; const redirectToWorkspace = () => { - const url = RouterServices.generateRouteFromState({ companyId, workspaceId, channelId: '' }); + const url = RouterServices.generateRouteFromState({ + companyId, + workspaceId, + channelId: '', + }); return RouterServices.push(url); }; @@ -120,7 +143,7 @@ export default (props: Props): JSX.Element => { , { position: 'center', @@ -129,8 +152,13 @@ export default (props: Props): JSX.Element => { ); }; - const removeChannel = async () => - await channelsCollection.remove({ id: props.channel.data.id }).then(redirectToWorkspace); + const removeChannel = async () => { + if (companyId && workspaceId && props.channel.id) { + await ChannelsMineAPIClient.removeChannel(companyId, workspaceId, props.channel.id).then( + redirectToWorkspace, + ); + } + }; let menu: object[] = [ { @@ -149,12 +177,12 @@ export default (props: Props): JSX.Element => { { type: 'menu', text: Languages.t( - props.channel.data.user_member?.favorite + props.channel.user_member?.favorite ? 'scenes.apps.messages.left_bar.stream.remove_from_favorites' : 'scenes.apps.messages.left_bar.stream.add_to_favorites', ), onClick: () => { - addOrCancelFavorite(!props.channel.data.user_member?.favorite); + addOrCancelFavorite(!props.channel.user_member?.favorite); }, }, { @@ -171,30 +199,37 @@ export default (props: Props): JSX.Element => { AccessRightsService.getCompanyLevel(companyId) !== 'guest' ), text: Languages.t( - isDirectChannel + props.channel.visibility && isDirectChannel(props.channel.visibility) ? 'scenes.app.channelsbar.hide_discussion_leaving.menu' : 'scenes.app.channelsbar.channel_leaving', ), className: 'danger', onClick: () => { - if (props.channel.data.visibility === 'private') { - return AlertManager.confirm(() => leaveChannel(), undefined, { - title: Languages.t('components.alert.leave_private_channel.title'), - text: Languages.t('components.alert.leave_private_channel.description'), - }); - } else return leaveChannel(); + if (props.channel.visibility) { + if (isPrivateChannel(props.channel.visibility)) { + return AlertManager.confirm(() => leaveChannel(), undefined, { + title: Languages.t('components.alert.leave_private_channel.title'), + text: Languages.t('components.alert.leave_private_channel.description'), + }); + } + if (isDirectChannel(props.channel.visibility)) { + return leaveChannel(true); + } + } + + return leaveChannel(); }, }, ]; - if (props.channel.data.visibility !== 'direct') { + if (props.channel.visibility && isDirectChannel(props.channel.visibility) === false) { menu.unshift({ type: 'menu', text: Languages.t('scenes.apps.messages.left_bar.stream.notifications'), submenu: [ { text: Languages.t('scenes.apps.messages.left_bar.stream.notifications.all'), - icon: props.channel.data.user_member?.notification_level === 'all' && 'check', + icon: props.channel.user_member?.notification_level === 'all' && 'check', onClick: () => { changeNotificationPreference('all'); }, @@ -205,21 +240,21 @@ export default (props: Props): JSX.Element => { '@here', `@[you]`, ]), - icon: props.channel.data.user_member?.notification_level === 'mentions' && 'check', + icon: props.channel.user_member?.notification_level === 'mentions' && 'check', onClick: () => { changeNotificationPreference('mentions'); }, }, { text: Languages.t('scenes.apps.messages.left_bar.stream.notifications.me', [`@[you]`]), - icon: props.channel.data.user_member?.notification_level === 'me' && 'check', + icon: props.channel.user_member?.notification_level === 'me' && 'check', onClick: () => { changeNotificationPreference('me'); }, }, { text: Languages.t('scenes.apps.messages.left_bar.stream.notifications.never'), - icon: props.channel.data.user_member?.notification_level === 'none' && 'check', + icon: props.channel.user_member?.notification_level === 'none' && 'check', onClick: () => { changeNotificationPreference('none'); }, @@ -252,11 +287,11 @@ export default (props: Props): JSX.Element => { ); } - if (props.channel.data.visibility !== 'direct') { + if (props.channel.visibility && isDirectChannel(props.channel.visibility) === false) { menu.push({ type: 'menu', hide: - currentUser.id !== props.channel.data.owner && + currentUser?.id !== props.channel.owner && !AccessRightsService.hasLevel(workspaceId, 'moderator'), text: Languages.t('scenes.app.channelsbar.channel_removing'), className: 'danger', diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelHeader.tsx b/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelHeader.tsx index 4513d9f3e7..20644a2db4 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelHeader.tsx +++ b/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelHeader.tsx @@ -1,21 +1,19 @@ import React from 'react'; +import { Lock } from 'react-feather'; import { Button, Col, Row, Typography } from 'antd'; + import Emojione from 'app/components/Emojione/Emojione'; import ModalManager from 'app/components/Modal/ModalManager'; import ChannelMembersList from 'scenes/Client/ChannelsBar/Modals/ChannelMembersList'; import RouterServices from 'app/services/RouterService'; -import MainViewService from 'app/services/AppView/MainViewService'; -import { Lock } from 'react-feather'; import SearchInput from '../Search'; import ChannelUsersHeader from './ChannelUsersHeader'; import PseudoMarkdownCompiler from 'services/Twacode/pseudoMarkdownCompiler'; -import { ChannelResource } from 'app/models/Channel'; import ChannelAvatars from './ChannelAvatars'; -import Collections from 'app/services/CollectionsReact/Collections'; -import { ChannelMemberResource } from 'app/models/Channel'; import Languages from 'services/languages/languages'; import ChannelsBarService from 'app/services/channels/ChannelsBarService'; import { useUsersListener } from 'app/services/user/hooks/useUsersListener'; +import { useChannel } from 'app/state/recoil/hooks/channels/useChannel'; export default (): JSX.Element => { const { companyId, workspaceId, channelId } = RouterServices.getStateFromRoute(); @@ -29,31 +27,21 @@ export default (): JSX.Element => { return RouterServices.push(url); }; - const collectionPath: string = `/channels/v1/companies/${companyId}/workspaces/${workspaceId}/channels/${ - channelId || channelId - }/members/`; - const channelMembersCollection = Collections.get(collectionPath, ChannelMemberResource); - - const members = channelMembersCollection - .useWatcher({}, { limit: 10 }) - .map(i => i.data.user_id || ''); - useUsersListener(members); - - MainViewService.useWatcher(() => !!MainViewService.getViewCollection()); - const channelCollection = MainViewService.getViewCollection(); - if (!channelCollection?.useWatcher) { + if (!channelId) { return ; } - const channel: ChannelResource = channelCollection.useWatcher({ - id: channelId, - })[0]; + const { channel } = useChannel(channelId); + + const members = channel.members; + + useUsersListener(members); if (!channel) { return ; } - if (!channel.data.user_member?.user_id) { + if (!channel.user_member?.user_id) { ChannelsBarService.updateCurrentChannelId(companyId, workspaceId, ''); redirectToWorkspace(); return ; @@ -67,30 +55,28 @@ export default (): JSX.Element => { // Temporary, it's for spacing when the hamburger menu is displayed } - {channel.data.visibility === 'direct' && ( + {channel.visibility === 'direct' && ( - + )} - {channel.data.visibility !== 'direct' && ( + {channel.visibility !== 'direct' && (
- +
- {channel.data.name} + {channel.name} - {channel.data.visibility === 'private' && ( - - )} + {channel.visibility === 'private' && } {PseudoMarkdownCompiler.compileToHTML( PseudoMarkdownCompiler.compileToJSON( - (channel.data.description || '').replace(/\n/g, ' '), + (channel.description || '').replace(/\n/g, ' '), ), )} @@ -105,12 +91,12 @@ export default (): JSX.Element => { gutter={[8, 0]} style={{ padding: 0, flexWrap: 'nowrap' }} > - {channel.data.visibility !== 'direct' && channel.data.workspace_id && ( + {channel.visibility !== 'direct' && channel.workspace_id && (
- +
)} - {channel.data.visibility !== 'direct' && ( + {channel.visibility !== 'direct' && ( ); - - return ready ? ( -
- - - {Languages.t("scenes.app.popup.adduser.magiclinks.genrator_info")} -
- {currentToken ? : } -
-
-
- ) : (<>); -}; - - diff --git a/twake/frontend/src/app/scenes/Join/Join.tsx b/twake/frontend/src/app/scenes/Join/Join.tsx deleted file mode 100644 index d72e397a39..0000000000 --- a/twake/frontend/src/app/scenes/Join/Join.tsx +++ /dev/null @@ -1,91 +0,0 @@ -/* eslint-disable react-hooks/exhaustive-deps */ -import React, { useEffect, useState } from "react"; -import { MagicLinksJoinResponse, MagicLinksJoinService } from "services/MagicLinks/MagicLinks"; -import "./Join.scss"; -import { Button, Col, Divider, Layout, Row, Space, Typography } from "antd"; -import { useParams } from "react-router-dom"; -import Languages from "services/languages/languages"; -import RouterService from "services/RouterService"; -import { useCookies } from "react-cookie"; -import InitService from 'services/InitService'; - -const { Title, Text } = Typography; - - -type PropsType = { - [key: string]: any; -}; - -type JoinError = { - title: string, - description: string -} - -export default (props: PropsType): JSX.Element => { - - const [error, setError] = useState(); - const [info, setInfo] = useState(); - const [busy, setBusy] = useState(false); - const [cookies, setCookie] = useCookies(['pending-redirect']); - - const params = useParams() as any; - let service = new MagicLinksJoinService(params.token, (val: boolean) => setBusy(val)); - - useEffect(() => { - service.getInfo().then(info => { - setInfo(info); - }).catch(() => setError({title: Languages.t("scenes.join.wrong_link_title"), description: Languages.t("scenes.join.wrong_link_description")})); - }, []); - - - const onJoinAccountBtnClick = () => { - if (!info) return null; - - if (info.auth_required) { - const origin = document.location.origin; - const currentPage = document.location.href; - const authUrl = `${InitService.server_infos?.configuration?.accounts?.console?.authority}/oauth2/authorize?invite=0&redirect_uri=${origin}`; - setCookie("pending-redirect", currentPage, {path: "/", maxAge : 60*60}); - setBusy(true); - document.location.href = authUrl; - } else { - service.join().then(resource => { - setBusy(true); - document.location.replace(RouterService.generateRouteFromState({workspaceId: resource.workspace.id, companyId: resource.company.id})); - }).catch(err => { setError(err.message); }); - } - }; - - const onCreateCompanyBtnClick = () => { - console.log('onCreateCompanyBtnClick'); - }; - - return - - - - {(!error && !info) && {Languages.t("scenes.join.loading")}} - - {error && - {error.title} <span role="img" aria-label="">✋</span> - {error.description} - - - } - - {info && - {Languages.t("scenes.join.join_workspace_from_company", [info.company.name, info.workspace.name])} <span role="img" aria-label="">👋</span> - {Languages.t("scenes.join.twake_description")} - - {info.auth_required - ? - : - } - - } - - - - ; -}; diff --git a/twake/frontend/src/app/scenes/Login/Login.tsx b/twake/frontend/src/app/scenes/Login/Login.tsx deleted file mode 100644 index 1a6cabf6ed..0000000000 --- a/twake/frontend/src/app/scenes/Login/Login.tsx +++ /dev/null @@ -1,12 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-use-before-define -import React, { lazy, Suspense } from 'react'; - -import InitService from 'app/services/InitService'; -const InternalLogin = lazy(() => import('app/scenes/Login/Internal/InternalLogin')); -const ConsoleLogin = lazy(() => import('app/scenes/Login/Console/ConsoleLogin')); - -export default () => - }> - { InitService.server_infos?.configuration?.accounts.type === 'console' ? : } - -; \ No newline at end of file diff --git a/twake/frontend/src/app/services/MagicLinks/MagicLinks.tsx b/twake/frontend/src/app/services/MagicLinks/MagicLinks.tsx deleted file mode 100644 index ac1946df2b..0000000000 --- a/twake/frontend/src/app/services/MagicLinks/MagicLinks.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import Api from 'app/services/Api'; - - -export type MagicLinksGeneratorResponse = { - token: string -} - -export class MagicLinksGeneratorService { - - constructor(protected companyId: string, protected workspaceId: string, protected loading = (arg: boolean) => { }) { } - - private route = `/internal/services/workspaces/v1/companies/${this.companyId}/workspaces/${this.workspaceId}/users/tokens`; - - getCurrentTokens(): Promise { - this.loading(true); - return Api.get<{ resources: MagicLinksGeneratorResponse[] }>(this.route).then((a) => (a.resources) ? a.resources : null).finally(() => this.loading(false)); - } - - recreateToken(): Promise { - this.loading(true); - return Api.post(this.route, {}).then(a => a.resource).finally(() => this.loading(false)); - } - - deleteToken(token: string): Promise { - this.loading(true); - return Api.delete(`${this.route}/${token}`).then(a => undefined).finally(() => this.loading(false)); - } -} - - -export type MagicLinksJoinResponse = { - company: { - id: string, - name: string - }, - workspace: { - id: string - name: string - }, - auth_required: boolean -} - -export class MagicLinksJoinService { - - private route = `/internal/services/workspaces/v1/join`; - constructor(protected token: string, protected loading = (arg: boolean) => { }) { } - - private process(join: boolean): Promise { - this.loading(true); - return Api.post<{}, { resource: MagicLinksJoinResponse }>(this.route, { join, token: this.token }).then(a => { - if (!a.resource) { - throw new Error("Token not found"); - } - return a.resource; - }).finally(() => { this.loading(false); }); - } - - getInfo(): Promise { - return this.process(false); - } - - join(): Promise { - return this.process(true); - } - -} - - diff --git a/twake/frontend/src/app/services/Toaster/ToasterService.ts b/twake/frontend/src/app/services/Toaster/ToasterService.ts deleted file mode 100644 index 47e5617ddd..0000000000 --- a/twake/frontend/src/app/services/Toaster/ToasterService.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { message } from 'antd'; - -export default message; - diff --git a/twake/frontend/src/app/services/Toaster/index.ts b/twake/frontend/src/app/services/Toaster/index.ts deleted file mode 100644 index 08cab2dfbc..0000000000 --- a/twake/frontend/src/app/services/Toaster/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -import ToasterService from './ToasterService'; - -export { ToasterService }; diff --git a/twake/frontend/src/app/services/electron/electron.js b/twake/frontend/src/app/services/electron/electron.js deleted file mode 100755 index 6eae768a47..0000000000 --- a/twake/frontend/src/app/services/electron/electron.js +++ /dev/null @@ -1,31 +0,0 @@ -import Globals from 'services/Globals'; - -class Electron { - constructor() {} - - isElectron() { - return window.electron !== undefined; - } - - setBadge(value) { - if (!this.isElectron()) return; - try { - if ( - window.electron && - window.electron.remote && - window.electron.remote.app && - window.electron.remote.app.dock - ) { - window.electron.remote.app.dock.setBadge(value); - } - if (window.electron && window.electron.ipcRenderer) { - window.electron.ipcRenderer.send('application:update_badge', value); - } - } catch (err) { - console.log('No electron app available for setting dock badge'); - } - } -} - -const instanceElectron = new Electron(); -export default instanceElectron; diff --git a/twake/frontend/src/app/services/hooks/useRouteState.ts b/twake/frontend/src/app/services/hooks/useRouteState.ts deleted file mode 100644 index d5ad1b8128..0000000000 --- a/twake/frontend/src/app/services/hooks/useRouteState.ts +++ /dev/null @@ -1,8 +0,0 @@ -import RouterService, { ClientStateType } from "../RouterService"; - -/** - * observedScope function which returns data to be observed by the hook - */ -export default function useRouteState(observedScope?: (state: ClientStateType) => ClientStateType): ClientStateType { - return RouterService.useRouteState(observedScope); -}; diff --git a/twake/frontend/src/app/services/user/UserNotificationAPIClient.ts b/twake/frontend/src/app/services/user/UserNotificationAPIClient.ts deleted file mode 100644 index e155bed3d2..0000000000 --- a/twake/frontend/src/app/services/user/UserNotificationAPIClient.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Api from '../Api'; -import { NotificationType } from 'app/models/Notification'; -import { TwakeService } from '../Decorators/TwakeService'; - -@TwakeService('UserNotificationAPIClientService') -class UserNotificationAPIClient { - async getAllCompaniesBadges(): Promise { - return Api.get<{ resources: NotificationType[]}>( - '/internal/services/notifications/v1/badges?all_companies=true', - ).then(response => response.resources ? response.resources : []); - } -} - -export default new UserNotificationAPIClient(); diff --git a/twake/frontend/src/app/state/recoil/atoms/OnlineUsers.ts b/twake/frontend/src/app/state/recoil/atoms/OnlineUsers.ts deleted file mode 100644 index 15cfa747e3..0000000000 --- a/twake/frontend/src/app/state/recoil/atoms/OnlineUsers.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { atom, DefaultValue, selector, selectorFamily } from "recoil"; - -import { UserType } from "app/models/User"; -import { CurrentUserState } from "./CurrentUser"; - -export type OnlineUserType = Pick & { - lastSeen: number; - initialized: boolean; -}; - -const CurrentUserStatus = selector({ - key: 'CurrentUserStatus', - get: ({ get }) => { - const currentUser = get(CurrentUserState); - - return currentUser ? [{id: currentUser.id!, connected: true, lastSeen: Date.now(), initialized: true, }]: []; - } -}); - -export const OnlineUsersState = atom({ - key: 'OnlineUsersState', - default: CurrentUserStatus, -}); - -export const CountOnlineUsers = selector({ - key: 'CountOnlineUsers', - get: ({ get }) => get(OnlineUsersState).filter(u => u.connected).length, -}); - -export const OnlineUserStateFamily = selectorFamily({ - key: 'OnlineUserState', - get: (userId) => ({ get }) => { - return get(OnlineUsersState).find(u => u.id === userId) || { id: userId, connected: false, lastSeen: Date.now(), initialized: false }; - }, - set: (userId) => ({ set }, newValue) => { - if (!(newValue instanceof DefaultValue)) { - const newStatus: OnlineUserType = { ...newValue as unknown as OnlineUserType, ...{ id: userId }}; - - set(OnlineUsersState, previousStatus => { - const index = previousStatus.findIndex(e => e.id === userId); - - return index === -1 ? - [...previousStatus, newStatus] - : - [...previousStatus.slice(0, index), newStatus, ...previousStatus.slice(index + 1)]; - }); - } - }, -}); diff --git a/twake/frontend/src/app/state/recoil/selectors/CurrentUser.ts b/twake/frontend/src/app/state/recoil/selectors/CurrentUser.ts deleted file mode 100644 index f50303dbba..0000000000 --- a/twake/frontend/src/app/state/recoil/selectors/CurrentUser.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { selector } from "recoil"; -import { UserListState } from "../atoms/UserList"; -import CurrentUser from "app/services/user/CurrentUser"; -import { UserType } from "app/models/User"; - -export const CurrentUserSelector = selector({ - key: "CurrentUserSelector", - get: (({ get }) => get(UserListState).find(user => (user.id === CurrentUser.get()))) -}); diff --git a/twake/frontend/src/app/styles/colors.less b/twake/frontend/src/app/styles/colors.less new file mode 100644 index 0000000000..f0434b02ac --- /dev/null +++ b/twake/frontend/src/app/styles/colors.less @@ -0,0 +1,37 @@ +// --- Twake default colors --- // +@black: #000000; +@black-alpha-50: #18295288; +@black-alpha-70: #18295255; +@error: #ff5154; +@error-background: #ffeded; +@primary: #004dff; +@primary-background: #004dff23; +@primary-hover: #002ddf; +@grey-background: #f5f5f7; +@grey-light: #eeeeee; +@grey-dark: #6a6a6a; +@secondary: #0d0f38; //#182952; +@success: #04aa11; +@warning: #ff8607; +@white: #fff; +@progress-bar-background: #efefef; +@progress-bar-color: #58c3ff; +@lazy-backgound: #dfdfdf; + +/* +// Preparation of dark theme +@black: #fff; +@black-alpha-50: #ffffff88; +@black-alpha-70: #ffffff55; +@error: #ff5154; +@primary: #2da4fc; +@primary-background: #111; +@primary-hover: #0091ff; +@grey-background: #222; +@grey-light: #555; +@grey-dark: #999; +@secondary: #080808; //#182952; +@success: #04aa11; +@warning: #ff8607; +@white: #111; +*/ diff --git a/twake/frontend/src/app/styles/fonts.less b/twake/frontend/src/app/styles/fonts.less new file mode 100644 index 0000000000..45c1bacf63 --- /dev/null +++ b/twake/frontend/src/app/styles/fonts.less @@ -0,0 +1,6 @@ +// --- Twake fonts --- // + +// 'TT Norms Pro' = Default +// Helvetica Neue = Other alphabets fallback +@main-font: 'TT Norms Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', + 'Apple Color Emoji', Arial, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; diff --git a/twake/frontend/src/app/styles/index.less b/twake/frontend/src/app/styles/index.less new file mode 100644 index 0000000000..114273c116 --- /dev/null +++ b/twake/frontend/src/app/styles/index.less @@ -0,0 +1,40 @@ +@import '~antd/lib/style/themes/default.less'; +@import '~antd/dist/antd.less'; + +@import './colors.less'; +@import './sizes.less'; +@import './fonts.less'; +@import './shadows.less'; + +@import './ui.less'; +@import './themes/antd-theme.less'; + +// --- Root variables --- // +:root { + --black: @black; + --black-alpha-50: @black-alpha-50; + --black-alpha-70: @black-alpha-70; + --border-radius-small: @border-radius-small; + --border-radius-base: @border-radius-base; + --border-radius-large: @border-radius-large; + --box-shadow-base: @box-shadow-base; + --box-shadow-large: @box-shadow-large; + --green: @success; + --success: @success; + --grey-dark: @grey-dark; + --grey-background: @grey-background; + --main-font: @main-font; + --grey-light: @grey-light; + --primary: @primary; + --primary-hover: @primary-hover; + --primary-background: @primary-background; + --red: @error; + --error: @error; + --error-background: @error-background; + --secondary: @secondary; + --white: @white; + --warning: @warning; + --progress-bar-background: @progress-bar-background; + --progress-bar-color: @progress-bar-color; + --lazy-backgroud: @lazy-backgound; +} diff --git a/twake/frontend/src/app/styles/shadows.less b/twake/frontend/src/app/styles/shadows.less new file mode 100644 index 0000000000..16c5de904e --- /dev/null +++ b/twake/frontend/src/app/styles/shadows.less @@ -0,0 +1,4 @@ +// --- Twake shadows --- // +@checkbox-shadow: 0px 0px 20px rgba(0, 0, 0, 0.15); +@box-shadow-base: 0 2px 15px rgba(0, 0, 0, 0.3); //0 2px 4px rgba(0, 0, 0, 0.5) +@box-shadow-large: 0 2px 15px rgba(0, 0, 0, 0.2); //0 2px 4px rgba(0, 0, 0, 0.5) diff --git a/twake/frontend/src/app/styles/sizes.less b/twake/frontend/src/app/styles/sizes.less new file mode 100644 index 0000000000..0c116da64a --- /dev/null +++ b/twake/frontend/src/app/styles/sizes.less @@ -0,0 +1,10 @@ +// --- Twake sizes --- // +@border-radius-small: 4px; +@border-radius-base: 8px; +@border-radius-large: 20px; +@font-size-base: 14px; // major text font size +@font-size-large: @font-size-base + 2px; +@font-size-small: @font-size-base - 2px; +@height-base: 32px; +@height-large: @height-base + 8px; +@height-small: 28px; diff --git a/twake/frontend/src/app/theme.less b/twake/frontend/src/app/styles/themes/antd-theme.less similarity index 76% rename from twake/frontend/src/app/theme.less rename to twake/frontend/src/app/styles/themes/antd-theme.less index 34289b8687..3935e1bdd4 100644 --- a/twake/frontend/src/app/theme.less +++ b/twake/frontend/src/app/styles/themes/antd-theme.less @@ -8,100 +8,6 @@ /* */ /****************************************************************/ -@import '~antd/lib/style/themes/default.less'; -@import '~antd/dist/antd.less'; - -// 'TT Norms Pro' = Default -// Helvetica Neue = Other alphabets fallback - -// --- Twake fonts --- // -@main-font: 'TT Norms Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Helvetica Neue', - 'Apple Color Emoji', Arial, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; - -// --- Twake colors --- // -@black: #000000; -@black-alpha-50: #18295288; -@black-alpha-70: #18295255; -@error: #ff5154; -@error-background: #ffeded; -@primary: #004dff; -@primary-background: #004dff23; -@primary-hover: #002ddf; -@grey-background: #f5f5f7; -@grey-light: #eeeeee; -@grey-dark: #6a6a6a; -@secondary: #0d0f38; //#182952; -@success: #04aa11; -@warning: #ff8607; -@white: #fff; -@progress-bar-background: #efefef; -@progress-bar-color: #58c3ff; -@lazy-backgound: #dfdfdf; - -/* -// Preparation of dark theme -@black: #fff; -@black-alpha-50: #ffffff88; -@black-alpha-70: #ffffff55; -@error: #ff5154; -@primary: #2da4fc; -@primary-background: #111; -@primary-hover: #0091ff; -@grey-background: #222; -@grey-light: #555; -@grey-dark: #999; -@secondary: #080808; //#182952; -@success: #04aa11; -@warning: #ff8607; -@white: #111; -*/ - -// --- Twake sizing --- // -@border-radius-small: 4px; -@border-radius-base: 8px; -@border-radius-large: 20px; -@font-size-base: 14px; // major text font size -@font-size-large: @font-size-base + 2px; -@font-size-small: @font-size-base - 2px; -@height-base: 32px; -@height-large: @height-base + 8px; -@height-small: 28px; - -// --- Twake shadows --- // -@checkbox-shadow: 0px 0px 20px rgba(0, 0, 0, 0.15); -@box-shadow-base: 0 2px 15px rgba(0, 0, 0, 0.3); //0 2px 4px rgba(0, 0, 0, 0.5) -@box-shadow-large: 0 2px 15px rgba(0, 0, 0, 0.2); //0 2px 4px rgba(0, 0, 0, 0.5) - -// --- Root variables --- // -:root { - --black: @black; - --black-alpha-50: @black-alpha-50; - --black-alpha-70: @black-alpha-70; - --border-radius-small: @border-radius-small; - --border-radius-base: @border-radius-base; - --border-radius-large: @border-radius-large; - --box-shadow-base: @box-shadow-base; - --box-shadow-large: @box-shadow-large; - --green: @success; - --success: @success; - --grey-dark: @grey-dark; - --grey-background: @grey-background; - --main-font: @main-font; - --grey-light: @grey-light; - --primary: @primary; - --primary-hover: @primary-hover; - --primary-background: @primary-background; - --red: @error; - --error: @error; - --error-background: @error-background; - --secondary: @secondary; - --white: @white; - --warning: @warning; - --progress-bar-background: @progress-bar-background; - --progress-bar-color: @progress-bar-color; - --lazy-backgroud: @lazy-backgound; -} - // --- ant-colors --- // @disabled-bg: @primary-background; // disable state background @disabled-color: @white; // disable state color diff --git a/twake/frontend/src/app/dark.less b/twake/frontend/src/app/styles/themes/dark.less similarity index 100% rename from twake/frontend/src/app/dark.less rename to twake/frontend/src/app/styles/themes/dark.less diff --git a/twake/frontend/src/app/ui.scss b/twake/frontend/src/app/styles/ui.less similarity index 100% rename from twake/frontend/src/app/ui.scss rename to twake/frontend/src/app/styles/ui.less diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/CalendarContent.js b/twake/frontend/src/app/views/applications/calendar/calendar-content.js similarity index 92% rename from twake/frontend/src/app/scenes/Apps/Calendar/CalendarContent.js rename to twake/frontend/src/app/views/applications/calendar/calendar-content.js index 7ca23e38a7..178bcdcdc0 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/CalendarContent.js +++ b/twake/frontend/src/app/views/applications/calendar/calendar-content.js @@ -1,41 +1,42 @@ import React, { Component, useState } from 'react'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Languages from 'services/languages/languages'; -import UserService from 'services/user/UserService'; -import CalendarService from 'services/Apps/Calendar/Calendar.js'; -import './Calendar.scss'; -import LocalStorage from 'app/services/LocalStorage'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Languages from 'app/features/global/services/languages-service'; +import UserService from 'app/features/users/services/current-user-service'; +import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js'; +import LocalStorage from 'app/features/global/framework/local-storage-service'; -import ModalManager from 'app/components/Modal/ModalManager'; +import ModalManager from 'app/components/modal/modal-manager'; -import Icon from 'components/Icon/Icon.js'; +import Icon from 'components/icon/icon.js'; import moment from 'moment'; -import Groups from 'services/workspaces/groups.js'; -import FullCalendar from './FullCalendar/FullCalendar.js'; -import EventDetails from './Modals/EventDetails.js'; -import EventCreation from './Modals/EventCreation.js'; -import EventModification from './Modals/EventModification.js'; -import CalendarEditor from './Modals/CalendarEditor.js'; -import Menu from 'components/Menus/Menu.js'; -import DayPicker from 'components/Calendar/DayPicker/DayPicker.js'; -import AlertManager from 'services/AlertManager/AlertManager'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import WorkspacesService from 'services/workspaces/workspaces.js'; -import popupManager from 'services/popupManager/popupManager.js'; -import ConnectorsListManager from 'components/ConnectorsListManager/ConnectorsListManager.js'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; -import Checkbox from 'components/Inputs/Checkbox.js'; -import InputWithClipBoard from 'components/InputWithClipBoard/InputWithClipBoard.js'; -import Select from 'components/Select/Select.js'; -import WorkspaceParameter from 'app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.js'; -import UnconfiguredTab from './UnconfiguredTab.js'; -import RouterService from 'app/services/RouterService'; -import MainPlus from 'components/MainPlus/MainPlus.js'; +import Groups from 'app/deprecated/workspaces/groups.js'; +import FullCalendar from './full-calendar/full-calendar.js'; +import EventDetails from './modals/EventDetails.js'; +import EventCreation from './modals/EventCreation.js'; +import EventModification from './modals/EventModification.js'; +import CalendarEditor from './modals/CalendarEditor.js'; +import Menu from 'components/menus/menu.js'; +import DayPicker from 'components/calendar/day-picker/day-picker.js'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import WorkspacesService from 'app/deprecated/workspaces/workspaces.js'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import ConnectorsListManager from 'components/connectors-list-manager/connectors-list-manager.js'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; +import Checkbox from 'components/inputs/checkbox.js'; +import InputWithClipBoard from 'components/input-with-clip-board/input-with-clip-board.js'; +import Select from 'components/select/select.js'; +import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.js'; +import UnconfiguredTab from './unconfigured-tab.js'; +import RouterService from 'app/features/router/services/router-service'; +import MainPlus from 'components/main-plus/main-plus.js'; import { getCompanyApplication as getApplication, getCompanyApplications, -} from 'app/state/recoil/atoms/CompanyApplications'; +} from 'app/features/applications/state/company-applications'; + +import './calendar.scss'; const ExportView = props => { const [export_my_calendar, set_export_my_calendar] = useState(props.values.export_my_calendar); diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Calendar.scss b/twake/frontend/src/app/views/applications/calendar/calendar.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Calendar/Calendar.scss rename to twake/frontend/src/app/views/applications/calendar/calendar.scss diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Calendar.tsx b/twake/frontend/src/app/views/applications/calendar/calendar.tsx similarity index 65% rename from twake/frontend/src/app/scenes/Apps/Calendar/Calendar.tsx rename to twake/frontend/src/app/views/applications/calendar/calendar.tsx index 0c75643ba7..054c62830c 100644 --- a/twake/frontend/src/app/scenes/Apps/Calendar/Calendar.tsx +++ b/twake/frontend/src/app/views/applications/calendar/calendar.tsx @@ -1,7 +1,7 @@ import React from 'react'; -import { ViewConfiguration } from '../../../services/AppView/AppViewService'; -import { useTab } from '../../../state/recoil/hooks/useTabs'; -import CalendarContent from './CalendarContent'; +import { ViewConfiguration } from '../../../features/router/services/app-view-service'; +import { useTab } from '../../../features/tabs/hooks/use-tabs'; +import CalendarContent from './calendar-content'; type Props = { options: ViewConfiguration; diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Event.js b/twake/frontend/src/app/views/applications/calendar/event.js similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Calendar/Event.js rename to twake/frontend/src/app/views/applications/calendar/event.js diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/FullCalendar/FullCalendar.js b/twake/frontend/src/app/views/applications/calendar/full-calendar/full-calendar.js similarity index 97% rename from twake/frontend/src/app/scenes/Apps/Calendar/FullCalendar/FullCalendar.js rename to twake/frontend/src/app/views/applications/calendar/full-calendar/full-calendar.js index bd705ef712..556a310fa4 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/FullCalendar/FullCalendar.js +++ b/twake/frontend/src/app/views/applications/calendar/full-calendar/full-calendar.js @@ -16,13 +16,14 @@ import rrulePlugin from '@fullcalendar/rrule'; import '@fullcalendar/daygrid/main.css'; import '@fullcalendar/timegrid/main.css'; import '@fullcalendar/list/main.css'; -import CalendarService from 'services/Apps/Calendar/Calendar.js'; -import EventUI from 'components/Calendar/Event/Event.js'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import Languages from 'services/languages/languages'; +import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js'; +import EventUI from 'components/calendar/event/event.js'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import Languages from 'app/features/global/services/languages-service'; import moment from 'moment'; -import './FullCalendar.scss'; + +import './full-calendar.scss'; export default class FullCalendar extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/FullCalendar/FullCalendar.scss b/twake/frontend/src/app/views/applications/calendar/full-calendar/full-calendar.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Calendar/FullCalendar/FullCalendar.scss rename to twake/frontend/src/app/views/applications/calendar/full-calendar/full-calendar.scss diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/CalendarEditor.js b/twake/frontend/src/app/views/applications/calendar/modals/CalendarEditor.js similarity index 80% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/CalendarEditor.js rename to twake/frontend/src/app/views/applications/calendar/modals/CalendarEditor.js index e99b3fdd33..5c5991b066 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/CalendarEditor.js +++ b/twake/frontend/src/app/views/applications/calendar/modals/CalendarEditor.js @@ -1,10 +1,10 @@ import React, { Component } from 'react'; -import InputWithColor from 'components/Inputs/InputWithColor.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import Button from 'components/Buttons/Button.js'; -import Menu from 'components/Menus/Menu.js'; -import Languages from 'services/languages/languages'; +import InputWithColor from 'components/inputs/input-with-color.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import Button from 'components/buttons/button.js'; +import Menu from 'components/menus/menu.js'; +import Languages from 'app/features/global/services/languages-service'; export default class CalendarEditor extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventCreation.js b/twake/frontend/src/app/views/applications/calendar/modals/EventCreation.js similarity index 89% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventCreation.js rename to twake/frontend/src/app/views/applications/calendar/modals/EventCreation.js index 0e5a7ae1e7..8337132f07 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventCreation.js +++ b/twake/frontend/src/app/views/applications/calendar/modals/EventCreation.js @@ -1,19 +1,19 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import MediumPopupManager from 'app/components/Modal/ModalManager'; +import Languages from 'app/features/global/services/languages-service'; +import MediumPopupManager from 'app/components/modal/modal-manager'; import EventModification from './EventModification.js'; -import CalendarService from 'services/Apps/Calendar/Calendar.js'; -import Input from 'components/Inputs/Input.js'; -import InputIcon from 'components/Inputs/InputIcon.js'; +import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js'; +import Input from 'components/inputs/input.js'; +import InputIcon from 'components/inputs/input-icon.js'; import Participants from './Part/Participants.js'; import DateSelector from './Part/DateSelector.js'; -import CalendarSelector from 'components/Calendar/CalendarSelector/CalendarSelector.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Button from 'components/Buttons/Button.js'; -import Select from 'components/Select/Select.js'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import Icon from 'components/Icon/Icon.js'; +import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Button from 'components/buttons/button.js'; +import Select from 'components/select/select.js'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import Icon from 'components/icon/icon.js'; export default class EventCreation extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventDetails.js b/twake/frontend/src/app/views/applications/calendar/modals/EventDetails.js similarity index 90% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventDetails.js rename to twake/frontend/src/app/views/applications/calendar/modals/EventDetails.js index 14d5c9cacb..ed3ed0e8dc 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventDetails.js +++ b/twake/frontend/src/app/views/applications/calendar/modals/EventDetails.js @@ -1,21 +1,21 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; import moment from 'moment'; -import MediumPopupManager from 'app/components/Modal/ModalManager'; +import MediumPopupManager from 'app/components/modal/modal-manager'; import EventModification from './EventModification.js'; -import CalendarService from 'services/Apps/Calendar/Calendar.js'; +import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js'; import Participants from './Part/Participants.js'; -import CalendarSelector from 'components/Calendar/CalendarSelector/CalendarSelector.js'; -import AlertManager from 'services/AlertManager/AlertManager'; -import DateTimeUtils from 'services/utils/datetime.js'; -import Button from 'components/Buttons/Button.js'; -import Icon from 'components/Icon/Icon.js'; -import Tabs from 'components/Tabs/Tabs.js'; -import SearchService from 'services/search/search.js'; -import WorkspacesService from 'services/workspaces/workspaces.js'; -import UserService from 'services/user/UserService'; +import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.js'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import DateTimeUtils from 'app/features/global/utils/datetime.js'; +import Button from 'components/buttons/button.js'; +import Icon from 'components/icon/icon.js'; +import Tabs from 'components/tabs/tabs.js'; +import SearchService from 'app/deprecated/search/search.js'; +import WorkspacesService from 'app/deprecated/workspaces/workspaces.js'; +import UserService from 'app/features/users/services/current-user-service'; export default class EventDetails extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventModification.js b/twake/frontend/src/app/views/applications/calendar/modals/EventModification.js similarity index 87% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventModification.js rename to twake/frontend/src/app/views/applications/calendar/modals/EventModification.js index 028312a7ed..e432dd3e0b 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/EventModification.js +++ b/twake/frontend/src/app/views/applications/calendar/modals/EventModification.js @@ -1,21 +1,21 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import CalendarService from 'services/Apps/Calendar/Calendar.js'; -import Input from 'components/Inputs/Input.js'; -import InputIcon from 'components/Inputs/InputIcon.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import ReminderSelector from 'components/ReminderSelector/ReminderSelector.js'; +import Languages from 'app/features/global/services/languages-service'; +import CalendarService from 'app/deprecated/Apps/Calendar/Calendar.js'; +import Input from 'components/inputs/input.js'; +import InputIcon from 'components/inputs/input-icon.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import ReminderSelector from 'components/reminder-selector/reminder-selector.js'; import Participants from './Part/Participants.js'; -import AlertManager from 'services/AlertManager/AlertManager'; +import AlertManager from 'app/features/global/services/alert-manager-service'; import DateSelector from './Part/DateSelector.js'; -import AttachmentPicker from 'components/AttachmentPicker/AttachmentPicker.js'; -import CalendarSelector from 'components/Calendar/CalendarSelector/CalendarSelector.js'; -import Button from 'components/Buttons/Button.js'; -import Select from 'components/Select/Select.js'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import MediumPopupManager from 'app/components/Modal/ModalManager'; -import Icon from 'components/Icon/Icon.js'; +import AttachmentPicker from 'components/attachment-picker/attachment-picker.js'; +import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.js'; +import Button from 'components/buttons/button.js'; +import Select from 'components/select/select.js'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import MediumPopupManager from 'app/components/modal/modal-manager'; +import Icon from 'components/icon/icon.js'; import PerfectScrollbar from 'react-perfect-scrollbar'; import './Modals.scss'; diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/Modals.scss b/twake/frontend/src/app/views/applications/calendar/modals/Modals.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/Modals.scss rename to twake/frontend/src/app/views/applications/calendar/modals/Modals.scss diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/DateSelector.js b/twake/frontend/src/app/views/applications/calendar/modals/Part/DateSelector.js similarity index 93% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/DateSelector.js rename to twake/frontend/src/app/views/applications/calendar/modals/Part/DateSelector.js index 1528b59ae9..2dd5d6a85d 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/DateSelector.js +++ b/twake/frontend/src/app/views/applications/calendar/modals/Part/DateSelector.js @@ -1,11 +1,11 @@ /* eslint-disable react/no-direct-mutation-state */ import React, { Component } from 'react'; -import DateSelectorInput from 'components/Calendar/DatePicker.js'; -import TimeSelector from 'components/Calendar/TimeSelector.js'; -import Checkbox from 'components/Inputs/Checkbox.js'; -import Icon from 'components/Icon/Icon.js'; +import DateSelectorInput from 'components/calendar/date-picker.js'; +import TimeSelector from 'components/calendar/time-selector.js'; +import Checkbox from 'components/inputs/checkbox.js'; +import Icon from 'components/icon/icon.js'; import './DateSelector.scss'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; export default class DateSelector extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/DateSelector.scss b/twake/frontend/src/app/views/applications/calendar/modals/Part/DateSelector.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/DateSelector.scss rename to twake/frontend/src/app/views/applications/calendar/modals/Part/DateSelector.scss diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/Participants.js b/twake/frontend/src/app/views/applications/calendar/modals/Part/Participants.js similarity index 85% rename from twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/Participants.js rename to twake/frontend/src/app/views/applications/calendar/modals/Part/Participants.js index e8d69b6f27..b982db07af 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/Modals/Part/Participants.js +++ b/twake/frontend/src/app/views/applications/calendar/modals/Part/Participants.js @@ -1,8 +1,8 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import UserListManager from 'components/UserListManager/UserListManager'; -import Menu from 'components/Menus/Menu.js'; +import Languages from 'app/features/global/services/languages-service'; +import UserListManager from 'components/user-list-manager/user-list-manager'; +import Menu from 'components/menus/menu.js'; export default class Participants extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js b/twake/frontend/src/app/views/applications/calendar/unconfigured-tab.js similarity index 73% rename from twake/frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js rename to twake/frontend/src/app/views/applications/calendar/unconfigured-tab.js index 8024f0245e..c4e72c9319 100755 --- a/twake/frontend/src/app/scenes/Apps/Calendar/UnconfiguredTab.js +++ b/twake/frontend/src/app/views/applications/calendar/unconfigured-tab.js @@ -1,15 +1,16 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Menu from 'components/Menus/Menu.js'; -import ChannelsService from 'services/channels/channels.js'; -import Button from 'components/Buttons/Button.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import './Calendar.scss'; +import Languages from 'app/features/global/services/languages-service'; +import Menu from 'components/menus/menu.js'; +import ChannelsService from 'app/deprecated/channels/channels.js'; +import Button from 'components/buttons/button.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import RouterService from 'app/features/router/services/router-service'; +import CalendarSelector from 'components/calendar/calendar-selector/calendar-selector.js'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces'; -import CalendarSelector from 'components/Calendar/CalendarSelector/CalendarSelector.js'; -import AccessRightsService from 'app/services/AccessRightsService'; -import WorkspaceService from 'services/workspaces/workspaces'; +import './calendar.scss'; export default class UnconfiguredTab extends Component { constructor() { @@ -29,6 +30,7 @@ export default class UnconfiguredTab extends Component { if (this.props.saveTab) this.props.saveTab({ calendars: this.state.selected }); Menu.closeAll(); } + render() { var calendar_list = Collections.get('calendars').findBy({ workspace_id: RouterService.getStateFromRoute().workspaceId, diff --git a/twake/frontend/src/app/scenes/Apps/Drive/DriveContent.js b/twake/frontend/src/app/views/applications/drive/drive-content.js similarity index 94% rename from twake/frontend/src/app/scenes/Apps/Drive/DriveContent.js rename to twake/frontend/src/app/views/applications/drive/drive-content.js index 019a62ae4a..0246dcb6a2 100755 --- a/twake/frontend/src/app/scenes/Apps/Drive/DriveContent.js +++ b/twake/frontend/src/app/views/applications/drive/drive-content.js @@ -1,41 +1,42 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Icon from 'components/Icon/Icon.js'; -import Loader from 'components/Loader/Loader.js'; -import UploadZone from 'components/Uploads/UploadZone'; - -import Numbers from 'services/utils/Numbers'; -import FilePicker from 'components/Drive/FilePicker/FilePicker.js'; -import './Drive.scss'; -import DriveMultiSelector from 'components/Drive/DriveMultiSelector.js'; -import Menu from 'components/Menus/Menu.js'; -import MenusManager from 'app/components/Menus/MenusManager.js'; -import Workspaces from 'services/workspaces/workspaces.js'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Icon from 'components/icon/icon.js'; +import Loader from 'components/loader/loader.js'; +import UploadZone from 'components/uploads/upload-zone'; + +import Numbers from 'app/features/global/utils/Numbers'; +import FilePicker from 'components/drive/file-picker/file-picker.js'; +import DriveMultiSelector from 'components/drive/drive-multi-selector.js'; +import Menu from 'components/menus/menu.js'; +import MenusManager from 'app/components/menus/menus-manager.js'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; import ChevronRightIcon from '@material-ui/icons/ChevronRightOutlined'; import ChevronDownIcon from '@material-ui/icons/KeyboardArrowDownOutlined'; -import DriveService from 'services/Apps/Drive/Drive.js'; -import SelectionsManager from 'services/SelectionsManager/SelectionsManager.js'; +import DriveService from 'app/deprecated/Apps/Drive/Drive.js'; +import SelectionsManager from 'app/deprecated/SelectionsManager/SelectionsManager.js'; -import PathElement from './PathElement.js'; -import AlertManager from 'services/AlertManager/AlertManager'; +import PathElement from './path-element.js'; +import AlertManager from 'app/features/global/services/alert-manager-service'; -import UnconfiguredTab from './UnconfiguredTab.js'; -import Viewer from './Viewer/Viewer'; +import UnconfiguredTab from './unconfigured-tab.js'; +import Viewer from './viewer/viewer'; -import MainPlus from 'components/MainPlus/MainPlus.js'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; +import MainPlus from 'components/main-plus/main-plus.js'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; -import DriveList from './Lists/List.js'; +import DriveList from './lists/list.js'; import PerfectScrollbar from 'react-perfect-scrollbar'; -import { NewFolderInput, NewLinkInput, NewFileInput } from './DriveEditors'; -import { getCompanyApplications } from 'app/state/recoil/atoms/CompanyApplications'; -import Groups from 'services/workspaces/groups.js'; +import { NewFolderInput, NewLinkInput, NewFileInput } from './drive-editors'; +import { getCompanyApplications } from 'app/features/applications/state/company-applications'; +import Groups from 'app/deprecated/workspaces/groups.js'; + +import './drive.scss'; export default class Drive extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Apps/Drive/DriveEditors.tsx b/twake/frontend/src/app/views/applications/drive/drive-editors.tsx similarity index 91% rename from twake/frontend/src/app/scenes/Apps/Drive/DriveEditors.tsx rename to twake/frontend/src/app/views/applications/drive/drive-editors.tsx index c96f4e7109..0c21fbc4ff 100755 --- a/twake/frontend/src/app/scenes/Apps/Drive/DriveEditors.tsx +++ b/twake/frontend/src/app/views/applications/drive/drive-editors.tsx @@ -1,9 +1,9 @@ import React, { useState } from 'react'; -import MenusManager from 'app/components/Menus/MenusManager.js'; -import Button from 'components/Buttons/Button.js'; -import Input from 'components/Inputs/Input.js'; -import Menu from 'components/Menus/Menu.js'; -import Languages from 'services/languages/languages'; +import MenusManager from 'app/components/menus/menus-manager.js'; +import Button from 'components/buttons/button.js'; +import Input from 'components/inputs/input.js'; +import Menu from 'components/menus/menu.js'; +import Languages from 'app/features/global/services/languages-service'; export const NewFolderInput = (props: { value: string; createFolder: (name: string) => void }) => { const [value, setValue] = useState(props.value); diff --git a/twake/frontend/src/app/scenes/Apps/Drive/Drive.scss b/twake/frontend/src/app/views/applications/drive/drive.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Drive/Drive.scss rename to twake/frontend/src/app/views/applications/drive/drive.scss diff --git a/twake/frontend/src/app/scenes/Apps/Drive/Drive.tsx b/twake/frontend/src/app/views/applications/drive/drive.tsx similarity index 65% rename from twake/frontend/src/app/scenes/Apps/Drive/Drive.tsx rename to twake/frontend/src/app/views/applications/drive/drive.tsx index 8b163cc23a..86588e080f 100644 --- a/twake/frontend/src/app/scenes/Apps/Drive/Drive.tsx +++ b/twake/frontend/src/app/views/applications/drive/drive.tsx @@ -1,7 +1,7 @@ import React from 'react'; -import { ViewConfiguration } from '../../../services/AppView/AppViewService'; -import { useTab } from '../../../state/recoil/hooks/useTabs'; -import DriveContent from './DriveContent'; +import { ViewConfiguration } from '../../../features/router/services/app-view-service'; +import { useTab } from '../../../features/tabs/hooks/use-tabs'; +import DriveContent from './drive-content'; type Props = { options: ViewConfiguration; diff --git a/twake/frontend/src/app/scenes/Apps/Drive/Lists/List.js b/twake/frontend/src/app/views/applications/drive/lists/list.js similarity index 89% rename from twake/frontend/src/app/scenes/Apps/Drive/Lists/List.js rename to twake/frontend/src/app/views/applications/drive/lists/list.js index c682c66286..9fa763c08f 100755 --- a/twake/frontend/src/app/scenes/Apps/Drive/Lists/List.js +++ b/twake/frontend/src/app/views/applications/drive/lists/list.js @@ -1,11 +1,11 @@ import React, { Component } from 'react'; import { CSSTransition, TransitionGroup } from 'react-transition-group'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; -import Directory from 'components/Drive/Directory.js'; -import File from 'components/Drive/File'; -import AttachmentPicker from 'components/AttachmentPicker/AttachmentPicker.js'; -import DriveService from 'services/Apps/Drive/Drive.js'; +import Directory from 'components/drive/directory.js'; +import File from 'components/drive/file'; +import AttachmentPicker from 'components/attachment-picker/attachment-picker.js'; +import DriveService from 'app/deprecated/Apps/Drive/Drive.js'; class DelayedElement extends Component { render() { diff --git a/twake/frontend/src/app/scenes/Apps/Drive/PathElement.js b/twake/frontend/src/app/views/applications/drive/path-element.js similarity index 81% rename from twake/frontend/src/app/scenes/Apps/Drive/PathElement.js rename to twake/frontend/src/app/views/applications/drive/path-element.js index cc47824e80..e38234513b 100755 --- a/twake/frontend/src/app/scenes/Apps/Drive/PathElement.js +++ b/twake/frontend/src/app/views/applications/drive/path-element.js @@ -1,14 +1,14 @@ import React from 'react'; -import DriveElement from 'components/Drive/DriveElement.js'; -import DroppableZone from 'components/Draggable/DroppableZone.js'; -import Icon from 'components/Icon/Icon.js'; -import Menu from 'components/Menus/Menu.js'; -import DriveService from 'services/Apps/Drive/Drive.js'; -import SelectionsManager from 'services/SelectionsManager/SelectionsManager.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Emojione from 'components/Emojione/Emojione'; -import Languages from 'services/languages/languages'; -import { getCompanyApplication as getApplication } from 'app/state/recoil/atoms/CompanyApplications'; +import DriveElement from 'components/drive/drive-element.js'; +import DroppableZone from 'components/draggable/droppable-zone.js'; +import Icon from 'components/icon/icon.js'; +import Menu from 'components/menus/menu.js'; +import DriveService from 'app/deprecated/Apps/Drive/Drive.js'; +import SelectionsManager from 'app/deprecated/SelectionsManager/SelectionsManager.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Emojione from 'components/emojione/emojione'; +import Languages from 'app/features/global/services/languages-service'; +import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; export default class PathElement extends DriveElement { dropFile(data, directory) { diff --git a/twake/frontend/src/app/scenes/Apps/Drive/UnconfiguredTab.js b/twake/frontend/src/app/views/applications/drive/unconfigured-tab.js similarity index 86% rename from twake/frontend/src/app/scenes/Apps/Drive/UnconfiguredTab.js rename to twake/frontend/src/app/views/applications/drive/unconfigured-tab.js index 9cabd55ae6..55c97f3641 100755 --- a/twake/frontend/src/app/scenes/Apps/Drive/UnconfiguredTab.js +++ b/twake/frontend/src/app/views/applications/drive/unconfigured-tab.js @@ -1,12 +1,12 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import FilePicker from 'components/Drive/FilePicker/FilePicker.js'; -import Menu from 'components/Menus/Menu.js'; -import Button from 'components/Buttons/Button.js'; -import './Drive.scss'; -import AccessRightsService from 'app/services/AccessRightsService'; -import WorkspaceService from 'services/workspaces/workspaces'; +import Languages from 'app/features/global/services/languages-service'; +import FilePicker from 'components/drive/file-picker/file-picker.js'; +import Menu from 'components/menus/menu.js'; +import Button from 'components/buttons/button.js'; +import './drive.scss'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces'; export default class UnconfiguredTab extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Apps/Drive/Viewer/Viewer.scss b/twake/frontend/src/app/views/applications/drive/viewer/viewer.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Drive/Viewer/Viewer.scss rename to twake/frontend/src/app/views/applications/drive/viewer/viewer.scss diff --git a/twake/frontend/src/app/scenes/Apps/Drive/Viewer/Viewer.tsx b/twake/frontend/src/app/views/applications/drive/viewer/viewer.tsx similarity index 91% rename from twake/frontend/src/app/scenes/Apps/Drive/Viewer/Viewer.tsx rename to twake/frontend/src/app/views/applications/drive/viewer/viewer.tsx index 514aa48924..56923f00c1 100755 --- a/twake/frontend/src/app/scenes/Apps/Drive/Viewer/Viewer.tsx +++ b/twake/frontend/src/app/views/applications/drive/viewer/viewer.tsx @@ -1,20 +1,22 @@ import React, { Component } from 'react'; - -import Menu from 'components/Menus/Menu.js'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; +import { Typography } from 'antd'; import CloseIcon from '@material-ui/icons/CloseOutlined'; import DownloadIcon from '@material-ui/icons/CloudDownloadOutlined'; import OpenInNewIcon from '@material-ui/icons/OpenInNewOutlined'; -import DriveService from 'services/Apps/Drive/Drive.js'; -import Button from 'components/Buttons/Button.js'; -import ElectronService from 'services/electron/electron.js'; -import './Viewer.scss'; -import { Typography } from 'antd'; -import FeatureTogglesService, { FeatureNames } from 'app/services/FeatureTogglesService'; -import ModalManager from 'app/components/Modal/ModalManager'; -import InitService from 'app/services/InitService'; -import LockedOnlyOfficePopup from 'app/components/LockedFeaturesComponents/LockedOnlyOfficePopup/LockedOnlyOfficePopup'; + +import Menu from 'components/menus/menu.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import DriveService from 'app/deprecated/Apps/Drive/Drive.js'; +import Button from 'components/buttons/button.js'; +import ElectronService from 'app/features/global/framework/electron-service'; +import FeatureTogglesService, { + FeatureNames, +} from 'app/features/global/services/feature-toggles-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import LockedOnlyOfficePopup from 'app/components/locked-features-components/locked-only-office-popup/locked-only-office-popup'; + +import './viewer.scss'; type PropsType = { [key: string]: any }; type StateType = { [key: string]: any }; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/index.tsx b/twake/frontend/src/app/views/applications/messages/index.tsx similarity index 67% rename from twake/frontend/src/app/scenes/Apps/Messages/index.tsx rename to twake/frontend/src/app/views/applications/messages/index.tsx index b0dd09455c..da81f7db88 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/index.tsx +++ b/twake/frontend/src/app/views/applications/messages/index.tsx @@ -1,9 +1,10 @@ import React from 'react'; -import './Messages.scss'; -import { ChannelResource } from 'app/models/Channel'; -import Messages from './Messages'; -import { ViewConfiguration } from 'app/services/AppView/AppViewService'; +import { ChannelResource } from 'app/features/channels/types/channel'; +import Messages from './messages'; +import { ViewConfiguration } from 'app/features/router/services/app-view-service'; + +import './messages.scss'; type Props = { channel: ChannelResource; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.scss b/twake/frontend/src/app/views/applications/messages/input/input.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Input.scss rename to twake/frontend/src/app/views/applications/messages/input/input.scss diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx b/twake/frontend/src/app/views/applications/messages/input/input.tsx similarity index 86% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx rename to twake/frontend/src/app/views/applications/messages/input/input.tsx index d659097211..069d71b5c0 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Input.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/input.tsx @@ -3,32 +3,34 @@ import classNames from 'classnames'; import { Send } from 'react-feather'; import { EditorState } from 'draft-js'; import { Tooltip } from 'antd'; -import InputOptions from './Parts/InputOptions'; -import EphemeralMessages from './Parts/EphemeralMessages'; -import MessageEditorsManager from 'app/services/Apps/Messages/MessageEditorServiceFactory'; -import MessagesService from 'services/Apps/Messages/Messages'; -import PendingAttachments from './Parts/PendingAttachments'; -import RichTextEditorStateService from 'app/components/RichTextEditor/EditorStateService'; -import { EditorView } from 'app/components/RichTextEditor'; -import Languages from 'app/services/languages/languages'; -import { TextCount, TextCountService } from 'app/components/RichTextEditor/TextCount/'; -import UploadZone from 'app/components/Uploads/UploadZone'; -import Workspaces from 'services/workspaces/workspaces'; -import './Input.scss'; -import { FileType } from 'app/models/File'; -import { useUploadZones } from 'app/state/recoil/hooks/useUploadZones'; -import { useMessageEditor } from 'app/state/recoil/hooks/messages/useMessageEditor'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import { delayRequest } from 'app/services/utils/managedSearchRequest'; -import { useChannel } from 'app/state/recoil/hooks/channels/useChannel'; + +import InputOptions from './parts/InputOptions'; +import EphemeralMessages from './parts/EphemeralMessages'; +import MessageEditorsManager from 'app/features/messages/services/message-editor-service-factory'; +import MessagesService from 'app/features/messages/services/messages-service'; +import PendingAttachments from './parts/PendingAttachments'; +import RichTextEditorStateService from 'app/components/rich-text-editor/editor-state-service'; +import { EditorView } from 'app/components/rich-text-editor'; +import Languages from 'app/features/global/services/languages-service'; +import { TextCount, TextCountService } from 'app/components/rich-text-editor/text-count/'; +import UploadZone from 'app/components/uploads/upload-zone'; +import Workspaces from 'app/deprecated/workspaces/workspaces'; +import { FileType } from 'app/features/files/types/file'; +import { useUploadZones } from 'app/features/files/hooks/use-upload-zones'; +import { useMessageEditor } from 'app/features/messages/hooks/use-message-editor'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; +import { useChannel } from 'app/features/channels/hooks/use-channel'; import { useChannelWritingActivityEmit, useWritingDetector, -} from 'app/state/recoil/hooks/useChannelWritingActivity'; -import { getCompanyApplications } from 'app/state/recoil/atoms/CompanyApplications'; -import AlertManager from 'app/services/AlertManager/AlertManager'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; +} from 'app/features/channels/hooks/use-channel-writing-activity'; +import { getCompanyApplications } from 'app/features/applications/state/company-applications'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import { useMessage } from 'app/features/messages/hooks/use-message'; + +import './input.scss'; type Props = { messageId?: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/NewThread.tsx b/twake/frontend/src/app/views/applications/messages/input/new-thread.tsx similarity index 72% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/NewThread.tsx rename to twake/frontend/src/app/views/applications/messages/input/new-thread.tsx index 302abd60c4..390dc5dca1 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/NewThread.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/new-thread.tsx @@ -1,13 +1,14 @@ import React, { useState, useEffect, useContext } from 'react'; import { PlusCircle } from 'react-feather'; -import Thread from '../Parts/Thread'; -import ThreadSection from '../Parts/ThreadSection'; -import Input from './Input'; -import Languages from 'services/languages/languages'; -import MessageEditorsManager from 'app/services/Apps/Messages/MessageEditorServiceFactory'; -import './Input.scss'; -import { ViewContext } from 'app/scenes/Client/MainView/MainContent'; -import { useVisibleMessagesEditorLocation } from 'app/state/recoil/hooks/messages/useMessageEditor'; + +import Thread from '../parts/thread'; +import ThreadSection from '../parts/thread-section'; +import Input from './input'; +import Languages from 'app/features/global/services/languages-service'; +import { ViewContext } from 'app/views/client/main-view/MainContent'; +import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; + +import './input.scss'; type Props = { useButton?: boolean; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/Attachments.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/Attachments.tsx similarity index 89% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/Attachments.tsx rename to twake/frontend/src/app/views/applications/messages/input/parts/Attachments.tsx index ab5b1caf8f..af14764f6e 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/Attachments.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/parts/Attachments.tsx @@ -1,6 +1,6 @@ import { Card, Col, Row, Tooltip, Typography } from 'antd'; -import { FileType } from 'app/models/File'; -import '../Input.scss'; +import { FileType } from 'app/features/files/types/file'; +import '../input.scss'; import React from 'react'; type PropsType = { diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/EphemeralMessages.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/EphemeralMessages.tsx similarity index 74% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/EphemeralMessages.tsx rename to twake/frontend/src/app/views/applications/messages/input/parts/EphemeralMessages.tsx index e8d3415f98..0e1108f966 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/EphemeralMessages.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/parts/EphemeralMessages.tsx @@ -1,10 +1,10 @@ import React, { useEffect } from 'react'; -import Languages from 'services/languages/languages'; -import { useEphemeralMessages } from 'app/state/recoil/hooks/messages/useEphemeralMessages'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import MessageContent from '../../Message/Parts/MessageContent'; -import { MessageContext } from '../../Message/MessageWithReplies'; -import ThreadSection from '../../Parts/ThreadSection'; +import Languages from 'app/features/global/services/languages-service'; +import { useEphemeralMessages } from 'app/features/messages/hooks/use-ephemeral-messages'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import MessageContent from '../../message/parts/MessageContent'; +import { MessageContext } from '../../message/message-with-replies'; +import ThreadSection from '../../parts/thread-section'; type Props = { channelId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/InputOptions.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/InputOptions.tsx similarity index 90% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/InputOptions.tsx rename to twake/frontend/src/app/views/applications/messages/input/parts/InputOptions.tsx index d51b39729f..8eb0b10cc5 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/InputOptions.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/parts/InputOptions.tsx @@ -2,16 +2,16 @@ import React, { useState } from 'react'; import { EditorState } from 'draft-js'; import { Smile, Video, MoreHorizontal, Paperclip, Type } from 'react-feather'; import { Button, Tooltip } from 'antd'; -import EmojiPicker from 'components/EmojiPicker/EmojiPicker'; -import Menu from 'components/Menus/Menu'; -import MenusManager from 'app/components/Menus/MenusManager'; -import Languages from 'services/languages/languages'; -import WorkspacesApps from 'services/workspaces/workspaces_apps'; -import MessageEditorsManager from 'app/services/Apps/Messages/MessageEditorServiceFactory'; -import EditorToolbar from 'app/components/RichTextEditor/EditorToolbar'; -import { Application } from 'app/models/App'; -import { useCompanyApplications } from 'app/state/recoil/hooks/useCompanyApplications'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; +import EmojiPicker from 'components/emoji-picker/emoji-picker'; +import Menu from 'components/menus/menu'; +import MenusManager from 'app/components/menus/menus-manager'; +import Languages from 'app/features/global/services/languages-service'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps'; +import MessageEditorsManager from 'app/features/messages/services/message-editor-service-factory'; +import EditorToolbar from 'app/components/rich-text-editor/editor-toolbar'; +import { Application } from 'app/features/applications/types/application'; +import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; type Props = { channelId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/IsWriting.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/IsWriting.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/IsWriting.tsx rename to twake/frontend/src/app/views/applications/messages/input/parts/IsWriting.tsx index f6e9407ce7..08f870ed86 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/IsWriting.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/parts/IsWriting.tsx @@ -1,9 +1,9 @@ import React, { useEffect, useState } from 'react'; -import { useChannelWritingActivityState } from 'app/state/recoil/hooks/useChannelWritingActivity'; -import Languages from 'services/languages/languages'; -import WritingLoader from 'app/components/WritingLoader/WritingLoader'; -import { ChannelWritingActivityType } from 'app/state/recoil/atoms/ChannelWritingActivity'; +import { useChannelWritingActivityState } from 'app/features/channels/hooks/use-channel-writing-activity'; +import Languages from 'app/features/global/services/languages-service'; +import WritingLoader from 'app/components/writing-loader/writing-loader'; +import { ChannelWritingActivityType } from 'app/features/channels/state/channel-writing-activity'; type PropsType = { channelId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/MessageExternalFilePicker.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/MessageExternalFilePicker.tsx similarity index 69% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/MessageExternalFilePicker.tsx rename to twake/frontend/src/app/views/applications/messages/input/parts/MessageExternalFilePicker.tsx index 8960e10d62..d0f809a739 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/MessageExternalFilePicker.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/parts/MessageExternalFilePicker.tsx @@ -1,8 +1,8 @@ import React, { ReactNode, useEffect } from 'react'; -import { MessageFileType } from 'app/models/Message'; -import { useUploadZones } from 'app/state/recoil/hooks/useUploadZones'; -import { ChannelType } from 'app/models/Channel'; -import { useMessageEditor } from 'app/state/recoil/hooks/messages/useMessageEditor'; +import { MessageFileType } from 'app/features/messages/types/message'; +import { useUploadZones } from 'app/features/files/hooks/use-upload-zones'; +import { ChannelType } from 'app/features/channels/types/channel'; +import { useMessageEditor } from 'app/features/messages/hooks/use-message-editor'; export default (props: { children: ReactNode; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/PendingAttachments.tsx b/twake/frontend/src/app/views/applications/messages/input/parts/PendingAttachments.tsx similarity index 83% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/PendingAttachments.tsx rename to twake/frontend/src/app/views/applications/messages/input/parts/PendingAttachments.tsx index 9760b11133..9551c6ed0f 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/Parts/PendingAttachments.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/parts/PendingAttachments.tsx @@ -1,10 +1,10 @@ import React, { useEffect } from 'react'; import { Col, Row } from 'antd'; -import { useUploadZones } from 'app/state/recoil/hooks/useUploadZones'; -import '../Input.scss'; -import { MessageFileType } from 'app/models/Message'; +import { useUploadZones } from 'app/features/files/hooks/use-upload-zones'; +import '../input.scss'; +import { MessageFileType } from 'app/features/messages/types/message'; import _ from 'lodash'; -import PossiblyPendingAttachment from '../../Message/Parts/PossiblyPendingAttachment'; +import PossiblyPendingAttachment from '../../message/parts/PossiblyPendingAttachment'; type PropsType = { zoneId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Input/WritingUsers.tsx b/twake/frontend/src/app/views/applications/messages/input/writing-users.tsx similarity index 85% rename from twake/frontend/src/app/scenes/Apps/Messages/Input/WritingUsers.tsx rename to twake/frontend/src/app/views/applications/messages/input/writing-users.tsx index d179d4b792..a552f3a686 100755 --- a/twake/frontend/src/app/scenes/Apps/Messages/Input/WritingUsers.tsx +++ b/twake/frontend/src/app/views/applications/messages/input/writing-users.tsx @@ -1,9 +1,9 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import UserService from 'services/user/UserService'; -import MessagesService from 'services/Apps/Messages/Messages'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import UserService from 'app/features/users/services/current-user-service'; +import MessagesService from 'app/features/messages/services/messages-service'; type Props = { channelId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx b/twake/frontend/src/app/views/applications/messages/list-builder.tsx similarity index 94% rename from twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx rename to twake/frontend/src/app/views/applications/messages/list-builder.tsx index 2cc18e0d9b..8fe360d78e 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/ListBuilder.tsx +++ b/twake/frontend/src/app/views/applications/messages/list-builder.tsx @@ -1,7 +1,7 @@ import React, { ReactNode, Suspense, useEffect, useRef, useState } from 'react'; import { ItemContent, LogLevel, Virtuoso } from 'react-virtuoso'; -import Logger from 'app/services/Logger'; -import { WindowType } from 'app/state/recoil/hooks/messages/windows'; +import Logger from 'app/features/global/framework/logger-service'; +import { WindowType } from 'app/features/messages/hooks/use-add-to-windowed-list'; const logger = Logger.getLogger(`ListBuilder`); const START_INDEX = 1000000; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/_MessageList.tsx b/twake/frontend/src/app/views/applications/messages/message-list.tsx similarity index 95% rename from twake/frontend/src/app/scenes/Apps/Messages/_MessageList.tsx rename to twake/frontend/src/app/views/applications/messages/message-list.tsx index c481af3725..d19f725006 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/_MessageList.tsx +++ b/twake/frontend/src/app/views/applications/messages/message-list.tsx @@ -5,18 +5,18 @@ import { IndexLocationWithAlign, ListRange, Virtuoso, VirtuosoHandle } from 'rea import classNames from 'classnames'; import { Spin } from 'antd'; import { LoadingOutlined } from '@ant-design/icons'; -import Logger from 'app/services/Logger'; +import Logger from 'app/features/global/framework/logger-service'; import Message from './__old/_Message/MessageAndTimeSeparator'; -import GoToBottom from './Parts/GoToBottom'; -import { Message as MessageModel } from 'app/models/Message'; -import { MessageLoader } from 'app/services/Apps/Messages/MessageLoader'; +import GoToBottom from './parts/go-to-bottom'; +import { Message as MessageModel } from 'app/features/messages/types/message'; +import { MessageLoader } from 'app/features/messages/services/message-loader-service'; import MessageComponent from './__old/_Message/Message'; -import { FeedResponse } from 'app/services/Apps/Feed/FeedLoader'; -import MessageListServiceFactory from 'app/services/Apps/Messages/MessageListServiceFactory'; -import { MessageListService } from 'app/services/Apps/Messages/MessageListService'; -import { ChannelResource } from 'app/models/Channel'; -import LockedHistoryBanner from 'app/components/LockedFeaturesComponents/LockedHistoryBanner/LockedHistoryBanner'; -import InitService from 'app/services/InitService'; +import { FeedResponse } from 'app/deprecated/Apps/Feed/FeedLoader'; +import MessageListServiceFactory from 'app/features/messages/services/message-list-service-factory'; +import { MessageListService } from 'app/features/messages/services/message-list-service'; +import { ChannelResource } from 'app/features/channels/types/channel'; +import LockedHistoryBanner from 'app/components/locked-features-components/locked-history-banner/locked-history-banner'; +import InitService from 'app/features/global/services/init-service'; import _ from 'lodash'; import FirstMessage from './__old/_Message/Parts/FirstMessage/FirstMessage'; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/MessageWithReplies.tsx b/twake/frontend/src/app/views/applications/messages/message/message-with-replies.tsx similarity index 75% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/MessageWithReplies.tsx rename to twake/frontend/src/app/views/applications/messages/message/message-with-replies.tsx index 233b8c436b..a050b48e76 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/MessageWithReplies.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/message-with-replies.tsx @@ -1,13 +1,13 @@ import React, { Suspense, useContext, useState } from 'react'; -import Message from './Message'; -import Responses from './Responses'; -import ReplyBlock from './Parts/ReplyBlock'; -import LoadMoreReplies from './Parts/LoadMoreReplies'; -import { MessagesListContext } from '../MessagesList'; -import ThreadSection from '../Parts/ThreadSection'; -import Thread from '../Parts/Thread'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import ActivityMessage, { ActivityType } from './Parts/ChannelActivity/ActivityMessage'; +import Message from './message'; +import Responses from './responses'; +import ReplyBlock from './parts/ReplyBlock'; +import LoadMoreReplies from './parts/LoadMoreReplies'; +import { MessagesListContext } from '../messages-list'; +import ThreadSection from '../parts/thread-section'; +import Thread from '../parts/thread'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import ActivityMessage, { ActivityType } from './parts/ChannelActivity/ActivityMessage'; export const MessageContext = React.createContext({ companyId: '', threadId: '', id: '' }); diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.scss b/twake/frontend/src/app/views/applications/messages/message/message.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Message.scss rename to twake/frontend/src/app/views/applications/messages/message/message.scss diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.tsx b/twake/frontend/src/app/views/applications/messages/message/message.tsx similarity index 70% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Message.tsx rename to twake/frontend/src/app/views/applications/messages/message/message.tsx index a6a6889226..8ec6e38d1e 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Message.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/message.tsx @@ -1,5 +1,5 @@ import React, { Suspense } from 'react'; -import MessageContent from './Parts/MessageContent'; +import MessageContent from './parts/MessageContent'; type Props = {}; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Blocks.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.tsx similarity index 93% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Blocks.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/Blocks.tsx index c26539b553..07f708cddf 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Blocks.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/Blocks.tsx @@ -1,7 +1,7 @@ -import Twacode from 'app/components/Twacode/Twacode'; +import Twacode from 'app/components/twacode/twacode'; import React, { ReactNode, Suspense } from 'react'; import Markdown from 'markdown-to-jsx'; -import HighlightedCode from 'app/components/HighlightedCode/HighlightedCode'; +import HighlightedCode from 'app/components/highlighted-code/highlighted-code'; type Props = { blocks: any; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ChannelActivity/ActivityMessage.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/ChannelActivity/ActivityMessage.tsx similarity index 94% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ChannelActivity/ActivityMessage.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/ChannelActivity/ActivityMessage.tsx index c21aa33a27..339141b169 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ChannelActivity/ActivityMessage.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/ChannelActivity/ActivityMessage.tsx @@ -1,12 +1,12 @@ import React from 'react'; import { Row, Typography } from 'antd'; -import Languages from 'services/languages/languages'; -import Emojione from 'app/components/Emojione/Emojione'; -import User from 'app/components/Twacode/blocks/User'; -import { ChannelMemberType, ChannelType } from 'app/models/Channel'; -import { TabType } from 'app/models/Tab'; -import { getCompanyApplications } from 'app/state/recoil/atoms/CompanyApplications'; -import Groups from 'services/workspaces/groups.js'; +import Languages from 'app/features/global/services/languages-service'; +import Emojione from 'app/components/emojione/emojione'; +import User from 'app/components/twacode/blocks/user'; +import { ChannelMemberType, ChannelType } from 'app/features/channels/types/channel'; +import { TabType } from 'app/features/tabs/types/tab'; +import { getCompanyApplications } from 'app/features/applications/state/company-applications'; +import Groups from 'app/deprecated/workspaces/groups.js'; enum ChannelActivityEnum { CHANNEL_MEMBER_CREATED = 'channel:activity:member:created', diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/DeletedContent.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/DeletedContent.tsx similarity index 83% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/DeletedContent.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/DeletedContent.tsx index a97672ae59..d1b48b72dd 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/DeletedContent.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/DeletedContent.tsx @@ -1,12 +1,12 @@ import React, { useEffect, useState } from 'react'; -import UsersService from 'services/user/UserService'; -import userAsyncGet from 'services/user/AsyncGet'; -import MenuManager from 'app/components/Menus/MenusManager'; -import UserCard from 'app/components/UserCard/UserCard'; -import ChannelsService from 'services/channels/channels'; -import Languages from 'services/languages/languages'; +import UsersService from 'app/features/users/services/current-user-service'; +import userAsyncGet from 'app/features/users/utils/async-get'; +import MenuManager from 'app/components/menus/menus-manager'; +import UserCard from 'app/components/user-card/user-card'; +import ChannelsService from 'app/deprecated/channels/channels'; +import Languages from 'app/features/global/services/languages-service'; -import '../Message.scss'; +import '../message.scss'; import { Typography } from 'antd'; type PropsType = { userId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstMessage.scss b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstMessage.scss rename to twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.scss diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstMessage.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.tsx similarity index 76% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstMessage.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.tsx index 2933ae1a85..9a8b5ac194 100755 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstMessage.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstMessage.tsx @@ -1,6 +1,7 @@ import React from 'react'; -import Languages from 'services/languages/languages'; -import Emojione from 'components/Emojione/Emojione'; +import Languages from 'app/features/global/services/languages-service'; + +import Emojione from 'components/emojione/emojione'; import './FirstMessage.scss'; export default () => { diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstThreadMessage.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstThreadMessage.tsx similarity index 78% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstThreadMessage.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstThreadMessage.tsx index 5932e7ea0c..fe35175c33 100755 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/FirstMessage/FirstThreadMessage.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/FirstMessage/FirstThreadMessage.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import Languages from 'services/languages/languages'; -import Emojione from 'components/Emojione/Emojione'; +import Languages from 'app/features/global/services/languages-service'; +import Emojione from 'components/emojione/emojione'; import './FirstMessage.scss'; export default ({ noReplies }: { noReplies?: boolean }) => { diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/LoadMoreReplies.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/LoadMoreReplies.tsx similarity index 68% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/LoadMoreReplies.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/LoadMoreReplies.tsx index 7965f747cc..380ce80cad 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/LoadMoreReplies.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/LoadMoreReplies.tsx @@ -1,9 +1,9 @@ -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import { useThreadMessages } from 'app/state/recoil/hooks/messages/useThreadMessages'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import { useThreadMessages } from 'app/features/messages/hooks/use-thread-messages'; import React, { useContext } from 'react'; -import Languages from 'services/languages/languages'; -import ThreadSection from '../../Parts/ThreadSection'; -import { MessageContext } from '../MessageWithReplies'; +import Languages from 'app/features/global/services/languages-service'; +import ThreadSection from '../../parts/thread-section'; +import { MessageContext } from '../message-with-replies'; export default () => { const context = useContext(MessageContext); diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageAttachments.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageAttachments.tsx similarity index 85% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageAttachments.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/MessageAttachments.tsx index b35ac9a4bb..890e8c47f3 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageAttachments.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/MessageAttachments.tsx @@ -1,10 +1,10 @@ import React, { useContext, useEffect } from 'react'; import 'moment-timezone'; import { Row } from 'antd'; -import { MessageContext } from '../MessageWithReplies'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; +import { MessageContext } from '../message-with-replies'; +import { useMessage } from 'app/features/messages/hooks/use-message'; import PossiblyPendingAttachment from './PossiblyPendingAttachment'; -import { useUploadZones } from 'app/state/recoil/hooks/useUploadZones'; +import { useUploadZones } from 'app/features/files/hooks/use-upload-zones'; export default () => { const context = useContext(MessageContext); diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageContent.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageContent.tsx similarity index 88% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageContent.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/MessageContent.tsx index c5fa5d770d..23726cd9c3 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageContent.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/MessageContent.tsx @@ -4,21 +4,21 @@ import classNames from 'classnames'; import Reactions from './Reactions'; import Options from './Options'; import MessageHeader from './MessageHeader'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; import MessageEdition from './MessageEdition'; import DeletedContent from './DeletedContent'; import RetryButtons from './RetryButtons'; -import FileComponent from 'app/components/File/FileComponent'; +import FileComponent from 'app/components/file/file-component'; import { Row } from 'antd'; -import Globals from 'services/Globals'; -import { MessageContext } from '../MessageWithReplies'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; +import Globals from 'app/features/global/services/globals-twake-app-service'; +import { MessageContext } from '../message-with-replies'; +import { useMessage } from 'app/features/messages/hooks/use-message'; import Blocks from './Blocks'; -import { useVisibleMessagesEditorLocation } from 'app/state/recoil/hooks/messages/useMessageEditor'; -import { ViewContext } from 'app/scenes/Client/MainView/MainContent'; +import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; +import { ViewContext } from 'app/views/client/main-view/MainContent'; import PossiblyPendingAttachment from './PossiblyPendingAttachment'; import MessageAttachments from './MessageAttachments'; -import PseudoMarkdownCompiler from 'services/Twacode/pseudoMarkdownCompiler'; +import PseudoMarkdownCompiler from 'app/features/global/services/pseudo-markdown-compiler-service'; type Props = { linkToThread?: boolean; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageEdition.scss b/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageEdition.scss rename to twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.scss diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageEdition.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.tsx similarity index 77% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageEdition.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.tsx index 6447711205..5eaf9e6c28 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageEdition.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/MessageEdition.tsx @@ -1,24 +1,24 @@ import React, { useContext, useEffect, useState } from 'react'; import 'moment-timezone'; -import MessagesService from 'services/Apps/Messages/Messages'; -import MessageEditorsManager from 'app/services/Apps/Messages/MessageEditorServiceFactory'; -import MessageInput from '../../Input/Input'; -import Button from 'components/Buttons/Button.js'; -import PseudoMarkdownCompiler from 'services/Twacode/pseudoMarkdownCompiler'; -import AlertManager from 'app/services/AlertManager/AlertManager'; -import Languages from 'services/languages/languages'; -import { Message } from 'app/models/Message'; -import EditorToolbar from 'app/components/RichTextEditor/EditorToolbar'; -import RichTextEditorStateService from 'app/components/RichTextEditor/EditorStateService'; +import MessagesService from 'app/features/messages/services/messages-service'; +import MessageEditorsManager from 'app/features/messages/services/message-editor-service-factory'; +import MessageInput from '../../input/input'; +import Button from 'components/buttons/button.js'; +import PseudoMarkdownCompiler from 'app/features/global/services/pseudo-markdown-compiler-service'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import Languages from 'app/features/global/services/languages-service'; +import { Message } from 'app/features/messages/types/message'; +import EditorToolbar from 'app/components/rich-text-editor/editor-toolbar'; +import RichTextEditorStateService from 'app/components/rich-text-editor/editor-state-service'; import './MessageEdition.scss'; import { EditorState } from 'draft-js'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import { MessageContext } from '../MessageWithReplies'; -import { ViewContext } from 'app/scenes/Client/MainView/MainContent'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import { MessageContext } from '../message-with-replies'; +import { ViewContext } from 'app/views/client/main-view/MainContent'; import { useMessageEditor, useVisibleMessagesEditorLocation, -} from 'app/state/recoil/hooks/messages/useMessageEditor'; +} from 'app/features/messages/hooks/use-message-editor'; type Props = { /** diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageHeader.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/MessageHeader.tsx similarity index 78% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageHeader.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/MessageHeader.tsx index eb57ac5295..289bf25d34 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/MessageHeader.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/MessageHeader.tsx @@ -7,30 +7,30 @@ import { Typography } from 'antd'; import classNames from 'classnames'; import { AlertTriangle } from 'react-feather'; -import User from 'services/user/UserService'; -import ChannelsService from 'services/channels/channels.js'; -import MenusManager from 'app/components/Menus/MenusManager.js'; -import UserCard from 'app/components/UserCard/UserCard'; -import Emojione from 'components/Emojione/Emojione'; -import RouterServices from 'app/services/RouterService'; -import { NodeMessage } from 'app/models/Message'; -import Languages from 'services/languages/languages'; -import Loader from 'components/Loader/Loader.js'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import { MessageContext } from '../MessageWithReplies'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; -import useRouterChannel from 'app/state/recoil/hooks/router/useRouterChannel'; -import { useUser } from 'app/state/recoil/hooks/useUser'; -import { UserType } from 'app/models/User'; -import { useCompanyApplications } from 'app/state/recoil/hooks/useCompanyApplications'; +import User from 'app/features/users/services/current-user-service'; +import ChannelsService from 'app/deprecated/channels/channels.js'; +import MenusManager from 'app/components/menus/menus-manager.js'; +import UserCard from 'app/components/user-card/user-card'; +import Emojione from 'components/emojione/emojione'; +import RouterServices from 'app/features/router/services/router-service'; +import { NodeMessage } from 'app/features/messages/types/message'; +import Languages from 'app/features/global/services/languages-service'; +import Loader from 'components/loader/loader.js'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import { MessageContext } from '../message-with-replies'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import useRouterChannel from 'app/features/router/hooks/use-router-channel'; +import { useUser } from 'app/features/users/hooks/use-user'; +import { UserType } from 'app/features/users/types/user'; +import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; import { useRecoilState, useRecoilStateLoadable, useRecoilValue, useRecoilValueLoadable, } from 'recoil'; -import { UsersState } from 'app/state/recoil/atoms/Users'; -import { CompanyApplicationsStateFamily } from 'app/state/recoil/atoms/CompanyApplications'; +import { UsersState } from 'app/features/users/state/atoms/users'; +import { CompanyApplicationsStateFamily } from 'app/features/applications/state/company-applications'; type Props = { linkToThread?: boolean; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Options.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/Options.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Options.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/Options.tsx index 44ba0a2919..4d3b49905a 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Options.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/Options.tsx @@ -2,31 +2,31 @@ import React, { useContext } from 'react'; import 'moment-timezone'; import { MoreHorizontal, Smile, ArrowUpRight, Trash2 } from 'react-feather'; -import MessagesService from 'services/Apps/Messages/Messages'; -import EmojiPicker from 'components/EmojiPicker/EmojiPicker.js'; -import Menu from 'components/Menus/Menu.js'; -import MenusManager from 'app/components/Menus/MenusManager.js'; -import Languages from 'services/languages/languages'; -import AlertManager from 'services/AlertManager/AlertManager'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; -import User from 'services/user/UserService'; +import MessagesService from 'app/features/messages/services/messages-service'; +import EmojiPicker from 'components/emoji-picker/emoji-picker.js'; +import Menu from 'components/menus/menu.js'; +import MenusManager from 'app/components/menus/menus-manager.js'; +import Languages from 'app/features/global/services/languages-service'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; +import User from 'app/features/users/services/current-user-service'; import DragIndicator from '@material-ui/icons/DragIndicator'; -import MessageEditorsManager from 'app/services/Apps/Messages/MessageEditorServiceFactory'; -import RouterServices from 'app/services/RouterService'; -import { Application } from 'app/models/App'; -import { getCompanyApplications } from 'app/state/recoil/atoms/CompanyApplications'; -import Groups from 'services/workspaces/groups.js'; -import { MessageContext } from '../MessageWithReplies'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; -import useRouterChannel from 'app/state/recoil/hooks/router/useRouterChannel'; +import MessageEditorsManager from 'app/features/messages/services/message-editor-service-factory'; +import RouterServices from 'app/features/router/services/router-service'; +import { Application } from 'app/features/applications/types/application'; +import { getCompanyApplications } from 'app/features/applications/state/company-applications'; +import Groups from 'app/deprecated/workspaces/groups.js'; +import { MessageContext } from '../message-with-replies'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import useRouterChannel from 'app/features/router/hooks/use-router-channel'; import _ from 'lodash'; -import { useVisibleMessagesEditorLocation } from 'app/state/recoil/hooks/messages/useMessageEditor'; -import { ViewContext } from 'app/scenes/Client/MainView/MainContent'; -import SideViewService from 'app/services/AppView/SideViewService'; -import MainViewService from 'app/services/AppView/MainViewService'; -import Emojione from 'app/components/Emojione/Emojione'; +import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; +import { ViewContext } from 'app/views/client/main-view/MainContent'; +import SideViewService from 'app/features/router/services/side-view-service'; +import MainViewService from 'app/features/router/services/main-view-service'; +import Emojione from 'app/components/emojione/emojione'; type Props = { onOpen?: () => void; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/PossiblyPendingAttachment.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/PossiblyPendingAttachment.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/PossiblyPendingAttachment.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/PossiblyPendingAttachment.tsx index 1be8da04c8..f57dd8f7e0 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/PossiblyPendingAttachment.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/PossiblyPendingAttachment.tsx @@ -1,11 +1,11 @@ import React from 'react'; -import { useUpload } from 'app/state/recoil/hooks/useUpload'; -import FileComponent from 'app/components/File/FileComponent'; -import { DataFileType } from 'app/components/File/types'; -import { PendingFileRecoilType } from 'app/models/File'; +import { useUpload } from 'app/features/files/hooks/use-upload'; +import FileComponent from 'app/components/file/file-component'; +import { DataFileType } from 'app/components/file/types'; +import { PendingFileRecoilType } from 'app/features/files/types/file'; import _ from 'lodash'; -import FileUploadAPIClient from 'app/components/FileUploads/FileUploadAPIClient'; -import { MessageFileType } from 'app/models/Message'; +import FileUploadAPIClient from 'app/features/files/api/file-upload-api-client'; +import { MessageFileType } from 'app/features/messages/types/message'; type PropsType = { file: MessageFileType; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Reactions.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/Reactions.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Reactions.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/Reactions.tsx index b5ea4be6e3..3dd8c591f2 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/Reactions.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/Reactions.tsx @@ -1,13 +1,13 @@ import React, { useContext } from 'react'; -import User from 'services/user/UserService'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; +import User from 'app/features/users/services/current-user-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; import 'moment-timezone'; -import Emojione from 'components/Emojione/Emojione'; -import { ReactionType } from 'app/models/Message'; +import Emojione from 'components/emojione/emojione'; +import { ReactionType } from 'app/features/messages/types/message'; import { Tooltip } from 'antd'; import classNames from 'classnames'; -import { MessageContext } from '../MessageWithReplies'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; +import { MessageContext } from '../message-with-replies'; +import { useMessage } from 'app/features/messages/hooks/use-message'; import _ from 'lodash'; export default () => { diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ReplyBlock.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/ReplyBlock.tsx similarity index 70% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ReplyBlock.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/ReplyBlock.tsx index 01c3eecc57..837a48286c 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/ReplyBlock.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/ReplyBlock.tsx @@ -1,13 +1,13 @@ import React, { useContext } from 'react'; import { CornerDownRight } from 'react-feather'; -import ThreadSection from '../../Parts/ThreadSection'; -import Languages from 'services/languages/languages'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import { MessageContext } from '../MessageWithReplies'; -import { useVisibleMessagesEditorLocation } from 'app/state/recoil/hooks/messages/useMessageEditor'; -import { ViewContext } from 'app/scenes/Client/MainView/MainContent'; -import Input from '../../Input/Input'; -import useRouterChannel from 'app/state/recoil/hooks/router/useRouterChannel'; +import ThreadSection from '../../parts/thread-section'; +import Languages from 'app/features/global/services/languages-service'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import { MessageContext } from '../message-with-replies'; +import { useVisibleMessagesEditorLocation } from 'app/features/messages/hooks/use-message-editor'; +import { ViewContext } from 'app/views/client/main-view/MainContent'; +import Input from '../../input/input'; +import useRouterChannel from 'app/features/router/hooks/use-router-channel'; type Props = {}; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/RetryButtons.tsx b/twake/frontend/src/app/views/applications/messages/message/parts/RetryButtons.tsx similarity index 69% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/RetryButtons.tsx rename to twake/frontend/src/app/views/applications/messages/message/parts/RetryButtons.tsx index d2a58093db..9344b749e3 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Parts/RetryButtons.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/parts/RetryButtons.tsx @@ -1,8 +1,8 @@ -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import { useMessageEditor } from 'app/state/recoil/hooks/messages/useMessageEditor'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import { useMessageEditor } from 'app/features/messages/hooks/use-message-editor'; import React, { useContext, useEffect } from 'react'; -import Languages from 'services/languages/languages'; -import { MessageContext } from '../MessageWithReplies'; +import Languages from 'app/features/global/services/languages-service'; +import { MessageContext } from '../message-with-replies'; type Props = {}; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/Responses.tsx b/twake/frontend/src/app/views/applications/messages/message/responses.tsx similarity index 69% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/Responses.tsx rename to twake/frontend/src/app/views/applications/messages/message/responses.tsx index 8743e4127f..2198eded5c 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/Responses.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/responses.tsx @@ -1,8 +1,8 @@ import React from 'react'; -import { useThreadMessages } from 'app/state/recoil/hooks/messages/useThreadMessages'; -import Message from './Message'; -import { MessageContext } from './MessageWithReplies'; -import ThreadSection from '../Parts/ThreadSection'; +import { useThreadMessages } from 'app/features/messages/hooks/use-thread-messages'; +import Message from './message'; +import { MessageContext } from './message-with-replies'; +import ThreadSection from '../parts/thread-section'; type Props = { companyId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Message/TimeSeparator.tsx b/twake/frontend/src/app/views/applications/messages/message/time-separator.tsx similarity index 86% rename from twake/frontend/src/app/scenes/Apps/Messages/Message/TimeSeparator.tsx rename to twake/frontend/src/app/views/applications/messages/message/time-separator.tsx index a733287646..0e05074f99 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Message/TimeSeparator.tsx +++ b/twake/frontend/src/app/views/applications/messages/message/time-separator.tsx @@ -2,11 +2,11 @@ import React from 'react'; import Moment from 'react-moment'; import 'moment-timezone'; -import Languages from 'services/languages/languages'; -import CurrentUser from 'app/services/user/CurrentUser'; -import './Message.scss'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; -import { AtomMessageKey } from 'app/state/recoil/atoms/Messages'; +import Languages from 'app/features/global/services/languages-service'; +import CurrentUser from 'app/deprecated/user/CurrentUser'; +import './message.scss'; +import { useMessage } from 'app/features/messages/hooks/use-message'; +import { AtomMessageKey } from 'app/features/messages/state/atoms/messages'; type Props = { messageId: AtomMessageKey; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx b/twake/frontend/src/app/views/applications/messages/messages-list.tsx similarity index 76% rename from twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx rename to twake/frontend/src/app/views/applications/messages/messages-list.tsx index f0cf3b9cda..46d4a4107f 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/MessagesList.tsx +++ b/twake/frontend/src/app/views/applications/messages/messages-list.tsx @@ -1,13 +1,13 @@ import React, { Suspense, useEffect, useRef, useState } from 'react'; -import { useChannelMessages } from 'app/state/recoil/hooks/messages/useChannelMessages'; -import ListBuilder from './ListBuilder'; -import TimeSeparator from './Message/TimeSeparator'; -import MessageWithReplies from './Message/MessageWithReplies'; -import FirstMessage from './Message/Parts/FirstMessage/FirstMessage'; -import LockedHistoryBanner from 'app/components/LockedFeaturesComponents/LockedHistoryBanner/LockedHistoryBanner'; -import MessageHistoryService from 'app/services/Apps/Messages/MessageHistoryService'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; -import ChannelAPIClient from 'app/services/channels/ChannelAPIClient'; +import { useChannelMessages } from 'app/features/messages/hooks/use-channel-messages'; +import ListBuilder from './list-builder'; +import TimeSeparator from './message/time-separator'; +import MessageWithReplies from './message/message-with-replies'; +import FirstMessage from './message/parts/FirstMessage/FirstMessage'; +import LockedHistoryBanner from 'app/components/locked-features-components/locked-history-banner/locked-history-banner'; +import MessageHistoryService from 'app/features/messages/services/message-history-service'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; +import ChannelAPIClient from 'app/features/channels/api/channel-api-client'; type Props = { companyId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Messages.scss b/twake/frontend/src/app/views/applications/messages/messages.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Messages/Messages.scss rename to twake/frontend/src/app/views/applications/messages/messages.scss diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Messages.tsx b/twake/frontend/src/app/views/applications/messages/messages.tsx similarity index 79% rename from twake/frontend/src/app/scenes/Apps/Messages/Messages.tsx rename to twake/frontend/src/app/views/applications/messages/messages.tsx index 0c94c47f4e..06ca1e420b 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Messages.tsx +++ b/twake/frontend/src/app/views/applications/messages/messages.tsx @@ -1,10 +1,10 @@ import React, { Suspense } from 'react'; -import { ChannelResource } from 'app/models/Channel'; -import { ViewConfiguration } from 'app/services/AppView/AppViewService'; -import NewThread from './Input/NewThread'; -import MessagesList from './MessagesList'; -import ThreadMessagesList from './ThreadMessagesList'; -import IsWriting from './Input/Parts/IsWriting'; +import { ChannelResource } from 'app/features/channels/types/channel'; +import { ViewConfiguration } from 'app/features/router/services/app-view-service'; +import NewThread from './input/new-thread'; +import MessagesList from './messages-list'; +import ThreadMessagesList from './thread-messages-list'; +import IsWriting from './input/parts/IsWriting'; type Props = { channel: ChannelResource; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Parts/GoToBottom.tsx b/twake/frontend/src/app/views/applications/messages/parts/go-to-bottom.tsx similarity index 88% rename from twake/frontend/src/app/scenes/Apps/Messages/Parts/GoToBottom.tsx rename to twake/frontend/src/app/views/applications/messages/parts/go-to-bottom.tsx index b9fbcd5d55..aa553d0e41 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Parts/GoToBottom.tsx +++ b/twake/frontend/src/app/views/applications/messages/parts/go-to-bottom.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; import { ArrowDown } from 'react-feather'; type Props = { diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx b/twake/frontend/src/app/views/applications/messages/parts/thread-avatar.tsx similarity index 70% rename from twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx rename to twake/frontend/src/app/views/applications/messages/parts/thread-avatar.tsx index 8c19c7174a..c7c36ac5ff 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadAvatar.tsx +++ b/twake/frontend/src/app/views/applications/messages/parts/thread-avatar.tsx @@ -1,19 +1,19 @@ import React, { useContext } from 'react'; import 'moment-timezone'; -import User from 'services/user/UserService'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import Icon from 'components/Icon/Icon.js'; -import './Threads.scss'; -import { MessageContext } from '../Message/MessageWithReplies'; -import { useMessage } from 'app/state/recoil/hooks/messages/useMessage'; +import User from 'app/features/users/services/current-user-service'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import Icon from 'components/icon/icon.js'; +import './threads.scss'; +import { MessageContext } from '../message/message-with-replies'; +import { useMessage } from 'app/features/messages/hooks/use-message'; import { useRecoilState, useRecoilStateLoadable, useRecoilValue, useRecoilValueLoadable, } from 'recoil'; -import { CompanyApplicationsStateFamily } from 'app/state/recoil/atoms/CompanyApplications'; -import { UsersState } from 'app/state/recoil/atoms/Users'; +import { CompanyApplicationsStateFamily } from 'app/features/applications/state/company-applications'; +import { UsersState } from 'app/features/users/state/atoms/users'; type Props = { small?: boolean; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadSection.tsx b/twake/frontend/src/app/views/applications/messages/parts/thread-section.tsx similarity index 94% rename from twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadSection.tsx rename to twake/frontend/src/app/views/applications/messages/parts/thread-section.tsx index 7e24450195..e6f175f136 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Parts/ThreadSection.tsx +++ b/twake/frontend/src/app/views/applications/messages/parts/thread-section.tsx @@ -1,7 +1,7 @@ import React, { ReactNode, Suspense } from 'react'; import 'moment-timezone'; -import './Threads.scss'; -import ThreadAvatar from './ThreadAvatar'; +import './threads.scss'; +import ThreadAvatar from './thread-avatar'; type Props = { compact?: boolean; diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Parts/Thread.tsx b/twake/frontend/src/app/views/applications/messages/parts/thread.tsx similarity index 92% rename from twake/frontend/src/app/scenes/Apps/Messages/Parts/Thread.tsx rename to twake/frontend/src/app/views/applications/messages/parts/thread.tsx index 758089b99a..c511727143 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/Parts/Thread.tsx +++ b/twake/frontend/src/app/views/applications/messages/parts/thread.tsx @@ -1,6 +1,6 @@ import React, { ReactNode } from 'react'; -import './Threads.scss'; -import Draggable from 'components/Draggable/Draggable'; +import './threads.scss'; +import Draggable from 'components/draggable/draggable'; import classNames from 'classnames'; export const LoadingThread = ( diff --git a/twake/frontend/src/app/scenes/Apps/Messages/Parts/Threads.scss b/twake/frontend/src/app/views/applications/messages/parts/threads.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Messages/Parts/Threads.scss rename to twake/frontend/src/app/views/applications/messages/parts/threads.scss diff --git a/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx b/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx similarity index 79% rename from twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx rename to twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx index 14255f82d0..48dca772c2 100644 --- a/twake/frontend/src/app/scenes/Apps/Messages/ThreadMessagesList.tsx +++ b/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx @@ -1,10 +1,10 @@ import React from 'react'; -import ListBuilder from './ListBuilder'; -import TimeSeparator from './Message/TimeSeparator'; -import MessageWithReplies from './Message/MessageWithReplies'; -import FirstThreadMessage from './Message/Parts/FirstMessage/FirstThreadMessage'; -import { MessagesListContext } from './MessagesList'; -import { useThreadMessages } from 'app/state/recoil/hooks/messages/useThreadMessages'; +import ListBuilder from './list-builder'; +import TimeSeparator from './message/time-separator'; +import MessageWithReplies from './message/message-with-replies'; +import FirstThreadMessage from './message/parts/FirstMessage/FirstThreadMessage'; +import { MessagesListContext } from './messages-list'; +import { useThreadMessages } from 'app/features/messages/hooks/use-thread-messages'; type Props = { companyId: string; diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/BoardPicker/BoardPicker.js b/twake/frontend/src/app/views/applications/tasks/board-picker/board-picker.js similarity index 86% rename from twake/frontend/src/app/scenes/Apps/Tasks/BoardPicker/BoardPicker.js rename to twake/frontend/src/app/views/applications/tasks/board-picker/board-picker.js index 22f759f9c7..319a933f4f 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/BoardPicker/BoardPicker.js +++ b/twake/frontend/src/app/views/applications/tasks/board-picker/board-picker.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Workspaces from 'services/workspaces/workspaces.js'; -import Emojione from 'components/Emojione/Emojione'; -import Loader from 'components/Loader/Loader.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; +import Emojione from 'components/emojione/emojione'; +import Loader from 'components/loader/loader.js'; export default class BoardPicker extends React.Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Board.js b/twake/frontend/src/app/views/applications/tasks/board/Board.js similarity index 95% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Board.js rename to twake/frontend/src/app/views/applications/tasks/board/Board.js index 3ebee076fc..18d46b7774 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Board.js +++ b/twake/frontend/src/app/views/applications/tasks/board/Board.js @@ -1,23 +1,23 @@ import React from 'react'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; import { DragDropContext, Droppable } from 'react-beautiful-dnd'; -import List from './List/List.js'; +import List from './list/list.js'; import PerfectScrollbar from 'react-perfect-scrollbar'; -import Loader from 'components/Loader/Loader.js'; +import Loader from 'components/loader/loader.js'; import './Board.scss'; -import Emojione from 'components/Emojione/Emojione'; -import Rounded from 'components/Inputs/Rounded.js'; -import Menu from 'components/Menus/Menu.js'; -import ListEditor from './List/ListEditor.js'; -import TasksService from 'services/Apps/Tasks/Tasks.js'; -import Tabs from 'components/Tabs/Tabs.js'; -import Workspaces from 'services/workspaces/workspaces.js'; +import Emojione from 'components/emojione/emojione'; +import Rounded from 'components/inputs/rounded.js'; +import Menu from 'components/menus/menu.js'; +import ListEditor from './list/list-editor.js'; +import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; +import Tabs from 'components/tabs/tabs.js'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; import ChevronDownIcon from '@material-ui/icons/KeyboardArrowDownOutlined'; -import User from 'components/User/User.js'; -import MenusManager from 'app/components/Menus/MenusManager.js'; -import RouterService from 'app/services/RouterService'; +import User from 'components/user/user.js'; +import MenusManager from 'app/components/menus/menus-manager.js'; +import RouterService from 'app/features/router/services/router-service'; export default class Board extends React.Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Board.scss b/twake/frontend/src/app/views/applications/tasks/board/Board.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Board.scss rename to twake/frontend/src/app/views/applications/tasks/board/Board.scss diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/BoardEditor.js b/twake/frontend/src/app/views/applications/tasks/board/BoardEditor.js similarity index 82% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/BoardEditor.js rename to twake/frontend/src/app/views/applications/tasks/board/BoardEditor.js index d21d7d6f65..813ba88e06 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/BoardEditor.js +++ b/twake/frontend/src/app/views/applications/tasks/board/BoardEditor.js @@ -1,11 +1,11 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import MenuManager from 'app/components/Menus/MenusManager.js'; -import Workspaces from 'services/workspaces/workspaces.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import MenuManager from 'app/components/menus/menus-manager.js'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; -import InputWithIcon from 'components/Inputs/InputWithIcon'; -import Button from 'components/Buttons/Button.js'; +import InputWithIcon from 'components/inputs/input-with-icon'; +import Button from 'components/buttons/button.js'; export default class BoardEditor extends React.Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/AddTask.js b/twake/frontend/src/app/views/applications/tasks/board/list/add-task.js similarity index 91% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/List/AddTask.js rename to twake/frontend/src/app/views/applications/tasks/board/list/add-task.js index 40825716ba..15b60fd350 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/AddTask.js +++ b/twake/frontend/src/app/views/applications/tasks/board/list/add-task.js @@ -1,8 +1,8 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Input from 'components/Inputs/Input.js'; -import Button from 'components/Buttons/Button.js'; +import Languages from 'app/features/global/services/languages-service'; +import Input from 'components/inputs/input.js'; +import Button from 'components/buttons/button.js'; import OutsideClickHandler from 'react-outside-click-handler'; export default class AddTask extends React.Component { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/ListEditor.js b/twake/frontend/src/app/views/applications/tasks/board/list/list-editor.js similarity index 82% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/List/ListEditor.js rename to twake/frontend/src/app/views/applications/tasks/board/list/list-editor.js index 6b597bb48e..9c17fa27e5 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/ListEditor.js +++ b/twake/frontend/src/app/views/applications/tasks/board/list/list-editor.js @@ -1,11 +1,11 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import MenuManager from 'app/components/Menus/MenusManager.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import MenuManager from 'app/components/menus/menus-manager.js'; -import InputWithColor from 'components/Inputs/InputWithColor.js'; -import Button from 'components/Buttons/Button.js'; -import TasksService from 'services/Apps/Tasks/Tasks.js'; +import InputWithColor from 'components/inputs/input-with-color.js'; +import Button from 'components/buttons/button.js'; +import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; export default class ListEditor extends React.Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/List.js b/twake/frontend/src/app/views/applications/tasks/board/list/list.js similarity index 92% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/List/List.js rename to twake/frontend/src/app/views/applications/tasks/board/list/list.js index 64f73375bb..46ad594c96 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/List.js +++ b/twake/frontend/src/app/views/applications/tasks/board/list/list.js @@ -1,21 +1,21 @@ import React from 'react'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; import { Draggable, Droppable } from 'react-beautiful-dnd'; -import Task from '../Task/Task.js'; -import Icon from 'components/Icon/Icon.js'; -import MenusManager from 'app/components/Menus/MenusManager.js'; -import ListEditor from './ListEditor.js'; -import TasksService from 'services/Apps/Tasks/Tasks.js'; -import AlertManager from 'services/AlertManager/AlertManager'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; -import AddTask from './AddTask.js'; -import UserListManager from 'components/UserListManager/UserListManager'; +import Task from '../task/Task.js'; +import Icon from 'components/icon/icon.js'; +import MenusManager from 'app/components/menus/menus-manager.js'; +import ListEditor from './list-editor.js'; +import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; +import AddTask from './add-task.js'; +import UserListManager from 'components/user-list-manager/user-list-manager'; import PerfectScrollbar from 'react-perfect-scrollbar'; -import './List.scss'; -import '../Task/Task.scss'; +import './list.scss'; +import '../task/Task.scss'; export default class List extends React.Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/List/List.scss b/twake/frontend/src/app/views/applications/tasks/board/list/list.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/List/List.scss rename to twake/frontend/src/app/views/applications/tasks/board/list/list.scss diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Modal.scss b/twake/frontend/src/app/views/applications/tasks/board/task/Modal.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Modal.scss rename to twake/frontend/src/app/views/applications/tasks/board/task/Modal.scss diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Task.js b/twake/frontend/src/app/views/applications/tasks/board/task/Task.js similarity index 90% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Task.js rename to twake/frontend/src/app/views/applications/tasks/board/task/Task.js index dc03025598..d47f975539 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Task.js +++ b/twake/frontend/src/app/views/applications/tasks/board/task/Task.js @@ -1,18 +1,18 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; import { Draggable } from 'react-beautiful-dnd'; import './Task.scss'; -import TasksService from 'services/Apps/Tasks/Tasks.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; +import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; import TaskDetails from './TaskDetails.js'; -import MediumPopupManager from 'app/components/Modal/ModalManager'; -import Icon from 'components/Icon/Icon.js'; -import UserListManager from 'components/UserListManager/UserListManager'; -import TagPicker from 'components/TagPicker/TagPicker.js'; -import AttachmentPicker from 'components/AttachmentPicker/AttachmentPicker.js'; +import MediumPopupManager from 'app/components/modal/modal-manager'; +import Icon from 'components/icon/icon.js'; +import UserListManager from 'components/user-list-manager/user-list-manager'; +import TagPicker from 'components/tag-picker/tag-picker.js'; +import AttachmentPicker from 'components/attachment-picker/attachment-picker.js'; export default class Task extends React.Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Task.scss b/twake/frontend/src/app/views/applications/tasks/board/task/Task.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Task.scss rename to twake/frontend/src/app/views/applications/tasks/board/task/Task.scss diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskDetails.js b/twake/frontend/src/app/views/applications/tasks/board/task/TaskDetails.js similarity index 89% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskDetails.js rename to twake/frontend/src/app/views/applications/tasks/board/task/TaskDetails.js index eafa7f019b..2f96c32d1b 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskDetails.js +++ b/twake/frontend/src/app/views/applications/tasks/board/task/TaskDetails.js @@ -1,21 +1,21 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import UserListManager from 'components/UserListManager/UserListManager'; -import Button from 'components/Buttons/Button.js'; -import Menu from 'components/Menus/Menu.js'; -import TagPicker from 'components/TagPicker/TagPicker.js'; -import TasksService from 'services/Apps/Tasks/Tasks.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import UserListManager from 'components/user-list-manager/user-list-manager'; +import Button from 'components/buttons/button.js'; +import Menu from 'components/menus/menu.js'; +import TagPicker from 'components/tag-picker/tag-picker.js'; +import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; import TaskEditor from './TaskEditor.js'; -import MediumPopupManager from 'app/components/Modal/ModalManager'; -import Checklist from './Parts/Checklist.js'; +import MediumPopupManager from 'app/components/modal/modal-manager'; +import Checklist from './parts/Checklist.js'; import { ObjectModal, ObjectModalFormTitle, ObjectModalTitle, -} from 'components/ObjectModal/DeprecatedObjectModal.js'; -import Twacode from 'components/Twacode/Twacode'; -import AttachmentPicker from 'components/AttachmentPicker/AttachmentPicker.js'; +} from 'components/object-modal/deprecated-object-modal.js'; +import Twacode from 'components/twacode/twacode'; +import AttachmentPicker from 'components/attachment-picker/attachment-picker.js'; import moment from 'moment'; import './Modal.scss'; diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskEditor.js b/twake/frontend/src/app/views/applications/tasks/board/task/TaskEditor.js similarity index 86% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskEditor.js rename to twake/frontend/src/app/views/applications/tasks/board/task/TaskEditor.js index 317ea8a115..543508770b 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskEditor.js +++ b/twake/frontend/src/app/views/applications/tasks/board/task/TaskEditor.js @@ -1,21 +1,24 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Button from 'components/Buttons/Button.js'; -import ReminderSelector from 'components/ReminderSelector/ReminderSelector.js'; -import UserListManager from 'components/UserListManager/UserListManager'; -import Menu from 'components/Menus/Menu.js'; -import Input from 'components/Inputs/Input.js'; -import DateSelectorInput from 'components/Calendar/DatePicker.js'; -import TimeSelector from 'components/Calendar/TimeSelector.js'; -import Checkbox from 'components/Inputs/Checkbox.js'; -import MediumPopupManager from 'app/components/Modal/ModalManager'; -import Checklist from './Parts/Checklist.js'; -import TagPicker from 'components/TagPicker/TagPicker.js'; -import TasksService from 'services/Apps/Tasks/Tasks.js'; -import { ObjectModal, ObjectModalFormTitle } from 'components/ObjectModal/DeprecatedObjectModal.js'; -import PseudoMarkdownCompiler from 'services/Twacode/pseudoMarkdownCompiler'; -import AttachmentPicker from 'components/AttachmentPicker/AttachmentPicker.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Button from 'components/buttons/button.js'; +import ReminderSelector from 'components/reminder-selector/reminder-selector.js'; +import UserListManager from 'components/user-list-manager/user-list-manager'; +import Menu from 'components/menus/menu.js'; +import Input from 'components/inputs/input.js'; +import DateSelectorInput from 'components/calendar/date-picker.js'; +import TimeSelector from 'components/calendar/time-selector.js'; +import Checkbox from 'components/inputs/checkbox.js'; +import MediumPopupManager from 'app/components/modal/modal-manager'; +import Checklist from './parts/Checklist.js'; +import TagPicker from 'components/tag-picker/tag-picker.js'; +import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; +import { + ObjectModal, + ObjectModalFormTitle, +} from 'components/object-modal/deprecated-object-modal.js'; +import PseudoMarkdownCompiler from 'app/features/global/services/pseudo-markdown-compiler-service'; +import AttachmentPicker from 'components/attachment-picker/attachment-picker.js'; import './Modal.scss'; diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskElement.js b/twake/frontend/src/app/views/applications/tasks/board/task/TaskElement.js similarity index 98% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskElement.js rename to twake/frontend/src/app/views/applications/tasks/board/task/TaskElement.js index 76a57d398f..cb132815fd 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/TaskElement.js +++ b/twake/frontend/src/app/views/applications/tasks/board/task/TaskElement.js @@ -1,5 +1,5 @@ import React, { Component } from 'react'; -import Icon from 'components/Icon/Icon.js'; +import Icon from 'components/icon/icon.js'; import './Task.scss'; export default class TaskElement extends React.Component { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Parts/Checklist.js b/twake/frontend/src/app/views/applications/tasks/board/task/parts/Checklist.js similarity index 93% rename from twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Parts/Checklist.js rename to twake/frontend/src/app/views/applications/tasks/board/task/parts/Checklist.js index 8e4fff99db..769574d645 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Board/Task/Parts/Checklist.js +++ b/twake/frontend/src/app/views/applications/tasks/board/task/parts/Checklist.js @@ -1,9 +1,9 @@ import React from 'react'; -import Icon from 'components/Icon/Icon.js'; -import Checkbox from 'components/Inputs/Checkbox.js'; -import InputEnter from 'components/Inputs/InputEnter.js'; -import Button from 'components/Buttons/Button.js'; -import Languages from 'services/languages/languages'; +import Icon from 'components/icon/icon.js'; +import Checkbox from 'components/inputs/checkbox.js'; +import InputEnter from 'components/inputs/input-enter.js'; +import Button from 'components/buttons/button.js'; +import Languages from 'app/features/global/services/languages-service'; export default class Checklist extends React.Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/TasksContent.js b/twake/frontend/src/app/views/applications/tasks/tasks-content.js similarity index 88% rename from twake/frontend/src/app/scenes/Apps/Tasks/TasksContent.js rename to twake/frontend/src/app/views/applications/tasks/tasks-content.js index ce7c851abd..bc675f7b42 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/TasksContent.js +++ b/twake/frontend/src/app/views/applications/tasks/tasks-content.js @@ -1,33 +1,33 @@ import React, { Component } from 'react'; -import UnconfiguredTab from './UnconfiguredTab.js'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Emojione from 'components/Emojione/Emojione'; -import Loader from 'components/Loader/Loader.js'; -import TasksService from 'services/Apps/Tasks/Tasks.js'; -import WorkspacesUsers from 'services/workspaces/workspaces_users.ts'; -import Workspaces from 'services/workspaces/workspaces.js'; -import UserService from 'services/user/UserService'; -import Rounded from 'components/Inputs/Rounded.js'; -import Menu from 'components/Menus/Menu.js'; -import BoardEditor from './Board/BoardEditor.js'; +import UnconfiguredTab from './unconfigured-tab.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Emojione from 'components/emojione/emojione'; +import Loader from 'components/loader/loader.js'; +import TasksService from 'app/deprecated/Apps/Tasks/Tasks.js'; +import WorkspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; +import UserService from 'app/features/users/services/current-user-service'; +import Rounded from 'components/inputs/rounded.js'; +import Menu from 'components/menus/menu.js'; +import BoardEditor from './board/BoardEditor.js'; import MoreIcon from '@material-ui/icons/MoreHorizOutlined'; -import AlertManager from 'services/AlertManager/AlertManager'; -import { getCompanyApplications } from 'app/state/recoil/atoms/CompanyApplications'; -import ConnectorsListManager from 'components/ConnectorsListManager/ConnectorsListManager.js'; -import popupManager from 'services/popupManager/popupManager.js'; -import WorkspaceParameter from 'app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.js'; -import Globals from 'services/Globals'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; -import { getCompanyApplication as getApplication } from 'app/state/recoil/atoms/CompanyApplications'; -import Groups from 'services/workspaces/groups.js'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import { getCompanyApplications } from 'app/features/applications/state/company-applications'; +import ConnectorsListManager from 'components/connectors-list-manager/connectors-list-manager.js'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.js'; +import Globals from 'app/features/global/services/globals-twake-app-service'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; +import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; +import Groups from 'app/deprecated/workspaces/groups.js'; -import Board from './Board/Board.js'; +import Board from './board/Board.js'; -import './Tasks.scss'; -import UserListManager from 'app/components/UserListManager/UserListManager'; -import RouterService from 'app/services/RouterService'; +import './tasks.scss'; +import UserListManager from 'app/components/user-list-manager/user-list-manager'; +import RouterService from 'app/features/router/services/router-service'; export default class Tasks extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.scss b/twake/frontend/src/app/views/applications/tasks/tasks.scss similarity index 100% rename from twake/frontend/src/app/scenes/Apps/Tasks/Tasks.scss rename to twake/frontend/src/app/views/applications/tasks/tasks.scss diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx b/twake/frontend/src/app/views/applications/tasks/tasks.tsx similarity index 62% rename from twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx rename to twake/frontend/src/app/views/applications/tasks/tasks.tsx index f1c59084cc..244c478b95 100644 --- a/twake/frontend/src/app/scenes/Apps/Tasks/Tasks.tsx +++ b/twake/frontend/src/app/views/applications/tasks/tasks.tsx @@ -1,8 +1,8 @@ -import { ChannelResource } from 'app/models/Channel'; +import { ChannelResource } from 'app/features/channels/types/channel'; import React from 'react'; -import { ViewConfiguration } from '../../../services/AppView/AppViewService'; -import { useTab } from '../../../state/recoil/hooks/useTabs'; -import TasksContent from './TasksContent'; +import { ViewConfiguration } from '../../../features/router/services/app-view-service'; +import { useTab } from '../../../features/tabs/hooks/use-tabs'; +import TasksContent from './tasks-content'; type Props = { channel: ChannelResource; diff --git a/twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js b/twake/frontend/src/app/views/applications/tasks/unconfigured-tab.js similarity index 79% rename from twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js rename to twake/frontend/src/app/views/applications/tasks/unconfigured-tab.js index ea59907572..1eac225577 100755 --- a/twake/frontend/src/app/scenes/Apps/Tasks/UnconfiguredTab.js +++ b/twake/frontend/src/app/views/applications/tasks/unconfigured-tab.js @@ -1,13 +1,14 @@ import React, { Component } from 'react'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Languages from 'services/languages/languages'; -import BoardPicker from './BoardPicker/BoardPicker.js'; -import Menu from 'components/Menus/Menu.js'; -import ChannelsService from 'services/channels/channels.js'; -import Button from 'components/Buttons/Button.js'; -import AccessRightsService from 'app/services/AccessRightsService'; -import WorkspaceService from 'services/workspaces/workspaces'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Languages from 'app/features/global/services/languages-service'; +import BoardPicker from './board-picker/board-picker.js'; +import Menu from 'components/menus/menu.js'; +import ChannelsService from 'app/deprecated/channels/channels.js'; +import Button from 'components/buttons/button.js'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces'; +import RouterService from 'app/features/router/services/router-service'; export default class UnconfiguredTab extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/App.tsx b/twake/frontend/src/app/views/client/app.tsx similarity index 75% rename from twake/frontend/src/app/scenes/App.tsx rename to twake/frontend/src/app/views/client/app.tsx index 99a0dda550..8424bc315e 100755 --- a/twake/frontend/src/app/scenes/App.tsx +++ b/twake/frontend/src/app/views/client/app.tsx @@ -1,8 +1,8 @@ // eslint-disable-next-line @typescript-eslint/no-use-before-define import React, { Suspense } from 'react'; -import Client from 'app/scenes/Client/Client'; -import InitService from 'app/services/InitService'; +import Client from 'app/views/client'; +import InitService from 'app/features/global/services/init-service'; export default () => { const isAppReady = InitService.useWatcher(() => InitService.app_ready); diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsApps/ChannelsApps.tsx b/twake/frontend/src/app/views/client/channels-bar/ChannelsApps/ChannelsApps.tsx similarity index 86% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsApps/ChannelsApps.tsx rename to twake/frontend/src/app/views/client/channels-bar/ChannelsApps/ChannelsApps.tsx index 1990e8943a..0be131e453 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsApps/ChannelsApps.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/ChannelsApps/ChannelsApps.tsx @@ -1,15 +1,15 @@ import React, { Component } from 'react'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import Languages from 'services/languages/languages'; -import Workspaces from 'services/workspaces/workspaces.js'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import ChannelUI from 'app/scenes/Client/ChannelsBar/Parts/Channel/Channel'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import Languages from 'app/features/global/services/languages-service'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import ChannelUI from 'app/views/client/channels-bar/Parts/Channel/Channel'; import { useCompanyApplications, useCompanyApplicationsRealtime, -} from 'app/state/recoil/hooks/useCompanyApplications'; -import RouterService from 'app/services/RouterService'; +} from 'app/features/applications/hooks/use-company-applications'; +import RouterService from 'app/features/router/services/router-service'; // This should be deleted export default class ChannelsApps extends Component { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.scss b/twake/frontend/src/app/views/client/channels-bar/ChannelsBar.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.scss rename to twake/frontend/src/app/views/client/channels-bar/ChannelsBar.scss diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.tsx b/twake/frontend/src/app/views/client/channels-bar/ChannelsBar.tsx similarity index 71% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.tsx rename to twake/frontend/src/app/views/client/channels-bar/ChannelsBar.tsx index db59fcb264..f1b43c5604 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsBar.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/ChannelsBar.tsx @@ -9,23 +9,26 @@ import { CompanyApplications } from './ChannelsApps/ChannelsApps'; import ChannelsWorkspace from './ChannelsWorkspace/ChannelsWorkspace'; import ChannelsUser from './ChannelsUser/ChannelsUser'; import Footer from './Parts/Footer.js'; -import Shortcuts, { defaultShortcutsMap, ShortcutType } from 'app/services/ShortcutService'; -import AddUserButton from 'components/AddUserButton/AddUserButton'; -import Workspaces from 'services/workspaces/workspaces'; -import ModalManager from 'app/components/Modal/ModalManager'; +import Shortcuts, { + defaultShortcutsMap, + ShortcutType, +} from 'app/features/global/services/shortcut-service'; +import AddUserButton from 'components/add-user-button/add-user-button'; +import Workspaces from 'app/deprecated/workspaces/workspaces'; +import ModalManager from 'app/components/modal/modal-manager'; import WorkspaceChannelList from './Modals/WorkspaceChannelList'; -import ScrollWithHiddenComponents from 'app/components/ScrollHiddenComponents/ScrollWithHiddenComponents'; -import HiddenNotificationsButton from 'app/components/ScrollHiddenComponents/HiddenNotificationsButton'; -import AccessRightsService from 'app/services/AccessRightsService'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; +import ScrollWithHiddenComponents from 'app/components/scroll-hidden-components/scroll-with-hidden-components'; +import HiddenNotificationsButton from 'app/components/scroll-hidden-components/hidden-notifications-button'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; import './ChannelsBar.scss'; -import { useCurrentWorkspace } from 'app/state/recoil/hooks/useWorkspaces'; -import useChannelWritingActivity from 'app/state/recoil/hooks/useChannelWritingActivity'; -import { useChannelsBarLoader } from 'app/state/recoil/hooks/channels/useChannelsBarLoader'; -import { useFavoriteChannels } from 'app/state/recoil/hooks/channels/useFavoriteChannels'; -import { usePublicOrPrivateChannels } from 'app/state/recoil/hooks/channels/usePublicOrPrivateChannels'; -import { useDirectChannels } from 'app/state/recoil/hooks/channels/useDirectChannels'; +import { useCurrentWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; +import useChannelWritingActivity from 'app/features/channels/hooks/use-channel-writing-activity'; +import { useChannelsBarLoader } from 'app/features/channels/hooks/use-channels-bar-loader'; +import { useFavoriteChannels } from 'app/features/channels/hooks/use-favorite-channels'; +import { usePublicOrPrivateChannels } from 'app/features/channels/hooks/use-public-or-private-channels'; +import { useDirectChannels } from 'app/features/channels/hooks/use-direct-channels'; export default () => { const companyId = useRouterCompany(); diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsUser/ChannelsUser.tsx b/twake/frontend/src/app/views/client/channels-bar/ChannelsUser/ChannelsUser.tsx similarity index 78% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsUser/ChannelsUser.tsx rename to twake/frontend/src/app/views/client/channels-bar/ChannelsUser/ChannelsUser.tsx index 886206c7cd..1666f81fe4 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsUser/ChannelsUser.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/ChannelsUser/ChannelsUser.tsx @@ -1,17 +1,17 @@ import React, { useState } from 'react'; -import Languages from 'services/languages/languages'; -import RouterServices from 'app/services/RouterService'; -import { Collection } from 'services/CollectionsReact/Collections'; -import { ChannelResource } from 'app/models/Channel'; +import Languages from 'app/features/global/services/languages-service'; +import RouterServices from 'app/features/router/services/router-service'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import { ChannelResource } from 'app/features/channels/types/channel'; -import MediumPopupComponent from 'app/components/Modal/ModalManager'; -import NewDirectMessagesPopup from 'app/scenes/Client/ChannelsBar/Modals/NewDirectMessagesPopup'; -import ChannelCategory from 'app/scenes/Client/ChannelsBar/Parts/Channel/ChannelCategory'; +import MediumPopupComponent from 'app/components/modal/modal-manager'; +import NewDirectMessagesPopup from 'app/views/client/channels-bar/Modals/NewDirectMessagesPopup'; +import ChannelCategory from 'app/views/client/channels-bar/Parts/Channel/ChannelCategory'; import { Button } from 'antd'; import ChannelIntermediate from '../Parts/Channel/ChannelIntermediate'; -import ChannelsBarService from 'app/services/channels/ChannelsBarService'; -import AccessRightsService from 'app/services/AccessRightsService'; +import ChannelsBarService from 'app/features/channels/services/channels-bar-service'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; export default () => { const { companyId } = RouterServices.getStateFromRoute(); diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/ChannelsWorkspace.tsx b/twake/frontend/src/app/views/client/channels-bar/ChannelsWorkspace/ChannelsWorkspace.tsx similarity index 85% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/ChannelsWorkspace.tsx rename to twake/frontend/src/app/views/client/channels-bar/ChannelsWorkspace/ChannelsWorkspace.tsx index 5d09ed1173..59c0653c90 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/ChannelsWorkspace.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/ChannelsWorkspace/ChannelsWorkspace.tsx @@ -1,14 +1,14 @@ import React from 'react'; -import { ChannelResource, ChannelType } from 'app/models/Channel'; -import { Collection } from 'services/CollectionsReact/Collections'; -import RouterServices from 'app/services/RouterService'; +import { ChannelResource, ChannelType } from 'app/features/channels/types/channel'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import RouterServices from 'app/features/router/services/router-service'; import WorkspaceChannels from './WorkspaceChannel'; -import Languages from 'services/languages/languages'; -import ChannelsBarService from 'app/services/channels/ChannelsBarService'; -import { getDirectChannels, getMine } from 'app/services/channels/ChannelCollectionPath'; -import { useDirectChannels } from 'app/state/recoil/hooks/channels/useDirectChannels'; -import { usePublicOrPrivateChannels } from 'app/state/recoil/hooks/channels/usePublicOrPrivateChannels'; +import Languages from 'app/features/global/services/languages-service'; +import ChannelsBarService from 'app/features/channels/services/channels-bar-service'; +import { getDirectChannels, getMine } from 'app/deprecated/channels/ChannelCollectionPath'; +import { useDirectChannels } from 'app/features/channels/hooks/use-direct-channels'; +import { usePublicOrPrivateChannels } from 'app/features/channels/hooks/use-public-or-private-channels'; type channelCategoryType = { favorite: ChannelType[]; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/WorkspaceChannel.tsx b/twake/frontend/src/app/views/client/channels-bar/ChannelsWorkspace/WorkspaceChannel.tsx similarity index 75% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/WorkspaceChannel.tsx rename to twake/frontend/src/app/views/client/channels-bar/ChannelsWorkspace/WorkspaceChannel.tsx index c67c8a3a97..f649bfaedc 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/ChannelsWorkspace/WorkspaceChannel.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/ChannelsWorkspace/WorkspaceChannel.tsx @@ -1,21 +1,21 @@ import React from 'react'; -import { ChannelResource, ChannelType } from 'app/models/Channel'; +import { ChannelResource, ChannelType } from 'app/features/channels/types/channel'; -import Languages from 'services/languages/languages'; -import ModalManager from 'app/components/Modal/ModalManager'; -import { Collection } from 'services/CollectionsReact/Collections'; +import Languages from 'app/features/global/services/languages-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; import ChannelCategory from '../Parts/Channel/ChannelCategory'; import ChannelIntermediate from '../Parts/Channel/ChannelIntermediate'; -import ChannelWorkspaceEditor from 'scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor'; -import WorkspaceChannelList from 'scenes/Client/ChannelsBar/Modals/WorkspaceChannelList'; +import ChannelWorkspaceEditor from 'app/views/client/channels-bar/Modals/ChannelWorkspaceEditor'; +import WorkspaceChannelList from 'app/views/client/channels-bar/Modals/WorkspaceChannelList'; -import Menu from 'components/Menus/Menu.js'; -import Icon from 'components/Icon/Icon'; -import AccessRightsService from 'app/services/AccessRightsService'; -import RouterServices from 'services/RouterService'; +import Menu from 'components/menus/menu.js'; +import Icon from 'app/components/icon/icon'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import RouterServices from 'app/features/router/services/router-service'; type Props = { collection: Collection; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelMembersList.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelMembersList.tsx similarity index 85% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelMembersList.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/ChannelMembersList.tsx index 81cbfa1e49..a55c33fb14 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelMembersList.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelMembersList.tsx @@ -3,21 +3,25 @@ import { Col, Row, Typography, Input } from 'antd'; import { Search } from 'react-feather'; import PerfectScrollbar from 'react-perfect-scrollbar'; -import { ChannelMemberResource, ChannelResource, ChannelType } from 'app/models/Channel'; -import { UserType } from 'app/models/User'; - -import Strings from 'services/utils/strings.js'; -import Languages from 'services/languages/languages'; -import UsersService from 'services/user/UserService'; -import Collections from 'services/CollectionsReact/Collections'; -import MemberChannelRow from 'scenes/Client/ChannelsBar/Parts/Header/MemberChannelRow'; - -import ObjectModal from 'components/ObjectModal/ObjectModal'; -import DepreciatedCollections from 'app/services/Depreciated/Collections/Collections.js'; -import { useUsersListener } from 'app/services/user/hooks/useUsersListener'; -import UserAPIClient from 'app/services/user/UserAPIClient'; -import { WorkspaceUserType } from 'app/models/Workspace'; -import { delayRequest } from 'app/services/utils/managedSearchRequest'; +import { + ChannelMemberResource, + ChannelResource, + ChannelType, +} from 'app/features/channels/types/channel'; +import { UserType } from 'app/features/users/types/user'; + +import Strings from 'app/features/global/utils/strings.js'; +import Languages from 'app/features/global/services/languages-service'; +import UsersService from 'app/features/users/services/current-user-service'; +import Collections from 'app/deprecated/CollectionsReact/Collections'; +import MemberChannelRow from 'app/views/client/channels-bar/Parts/Header/MemberChannelRow'; + +import ObjectModal from 'components/object-modal/object-modal'; +import DepreciatedCollections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import { useUsersListener } from 'app/features/users/hooks/use-users-listener'; +import UserAPIClient from 'app/features/users/api/user-api-client'; +import { WorkspaceUserType } from 'app/features/workspaces/types/workspace'; +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; type PropsType = { closable?: boolean; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelTemplateEditor.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelTemplateEditor.tsx similarity index 87% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelTemplateEditor.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/ChannelTemplateEditor.tsx index 315a85d112..e3d8452840 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelTemplateEditor.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelTemplateEditor.tsx @@ -1,13 +1,13 @@ import React, { FC, useState, useEffect } from 'react'; -import Languages from 'services/languages/languages'; -import InputWithIcon from 'components/Inputs/InputWithIcon'; -import { ChannelResource, ChannelType } from 'app/models/Channel'; +import Languages from 'app/features/global/services/languages-service'; +import InputWithIcon from 'components/inputs/input-with-icon'; +import { ChannelResource, ChannelType } from 'app/features/channels/types/channel'; import { Select, Typography, Checkbox, Input } from 'antd'; -import InputWithSelect from 'app/components/Inputs/InputWithSelect'; -import { Collection } from 'services/CollectionsReact/Collections'; -import RouterServices from 'app/services/RouterService'; -import AccessRightsService from 'app/services/AccessRightsService'; -import { usePublicOrPrivateChannels } from 'app/state/recoil/hooks/channels/usePublicOrPrivateChannels'; +import InputWithSelect from 'app/components/inputs/input-with-select'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import RouterServices from 'app/features/router/services/router-service'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import { usePublicOrPrivateChannels } from 'app/features/channels/hooks/use-public-or-private-channels'; type PropsType = { channel: ChannelType | undefined; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelWorkspaceEditor.tsx similarity index 81% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/ChannelWorkspaceEditor.tsx index 9f565d77ec..4cc89da56c 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelWorkspaceEditor.tsx @@ -1,18 +1,18 @@ import React, { FC, useState } from 'react'; -import Languages from 'services/languages/languages'; -import ChannelTemplateEditor from 'app/scenes/Client/ChannelsBar/Modals/ChannelTemplateEditor'; -import ModalManager from 'app/components/Modal/ModalManager'; -import ObjectModal from 'components/ObjectModal/ObjectModal'; -import Collections from 'app/services/CollectionsReact/Collections'; -import { ChannelType, ChannelResource } from 'app/models/Channel'; +import Languages from 'app/features/global/services/languages-service'; +import ChannelTemplateEditor from 'app/views/client/channels-bar/Modals/ChannelTemplateEditor'; +import ModalManager from 'app/components/modal/modal-manager'; +import ObjectModal from 'components/object-modal/object-modal'; +import Collections from 'app/deprecated/CollectionsReact/Collections'; +import { ChannelType, ChannelResource } from 'app/features/channels/types/channel'; import { Button } from 'antd'; import ChannelMembersList from './ChannelMembersList'; -import RouterServices from 'app/services/RouterService'; +import RouterServices from 'app/features/router/services/router-service'; import _ from 'lodash'; -import MainViewService from 'app/services/AppView/MainViewService'; -import ChannelAPIClient from 'app/services/channels/ChannelAPIClient'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; +import MainViewService from 'app/features/router/services/main-view-service'; +import ChannelAPIClient from 'app/features/channels/api/channel-api-client'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; type Props = { title: string; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/GuestManagement.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/GuestManagement.tsx similarity index 86% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/GuestManagement.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/GuestManagement.tsx index acab777d3f..f1c4ca3924 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/GuestManagement.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/GuestManagement.tsx @@ -2,15 +2,19 @@ import React, { useEffect, useState } from 'react'; import PerfectScrollbar from 'react-perfect-scrollbar'; import { capitalize } from 'lodash'; import { Input, Row, Typography } from 'antd'; -import ObjectModal from 'app/components/ObjectModal/ObjectModal'; -import RouterService from 'app/services/RouterService'; +import ObjectModal from 'app/components/object-modal/object-modal'; +import RouterService from 'app/features/router/services/router-service'; import MemberChannelRow from '../Parts/Header/MemberChannelRow'; -import { ChannelMemberResource, ChannelResource, ChannelType } from 'app/models/Channel'; -import Collections from 'services/CollectionsReact/Collections'; -import { PendingEmailResource } from 'app/models/PendingEmail'; -import GuestManagementService from 'app/services/GuestMember/GuestManagementService'; -import WorkspacesUsers from 'services/workspaces/workspaces_users'; -import Languages from 'services/languages/languages'; +import { + ChannelMemberResource, + ChannelResource, + ChannelType, +} from 'app/features/channels/types/channel'; +import Collections from 'app/deprecated/CollectionsReact/Collections'; +import { PendingEmailResource } from 'app/features/workspace-members/types/pending-email'; +import GuestManagementService from 'app/features/channel-members/service/guest-management-service'; +import WorkspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; +import Languages from 'app/features/global/services/languages-service'; type PropsType = { channel: ChannelType; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/NewDirectMessagesPopup.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/NewDirectMessagesPopup.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/NewDirectMessagesPopup.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/NewDirectMessagesPopup.tsx index e50b7e3e33..169587ddc0 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/NewDirectMessagesPopup.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/NewDirectMessagesPopup.tsx @@ -1,14 +1,14 @@ import React, { FC, useState } from 'react'; -import Languages from 'services/languages/languages'; -import MediumPopupComponent from 'app/components/Modal/ModalManager'; -import ObjectModal from 'components/ObjectModal/ObjectModal'; -import UserListManager from 'components/UserListManager/UserListManager'; -import RouterServices from 'app/services/RouterService'; -import ChannelsService from 'services/channels/channels.js'; -import ModalManager from 'app/components/Modal/ModalManager'; +import Languages from 'app/features/global/services/languages-service'; +import MediumPopupComponent from 'app/components/modal/modal-manager'; +import ObjectModal from 'components/object-modal/object-modal'; +import UserListManager from 'components/user-list-manager/user-list-manager'; +import RouterServices from 'app/features/router/services/router-service'; +import ChannelsService from 'app/deprecated/channels/channels.js'; +import ModalManager from 'app/components/modal/modal-manager'; import { Button, Typography } from 'antd'; -import ChannelWorkspaceEditor from 'scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor'; +import ChannelWorkspaceEditor from 'app/views/client/channels-bar/Modals/ChannelWorkspaceEditor'; import { Trans } from 'react-i18next'; const NewDirectMessagesPopup: FC = () => { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList.tsx similarity index 79% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList.tsx index be0cb7ac5a..18cf4dc60b 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList.tsx @@ -1,22 +1,24 @@ import React, { useEffect, useRef, useState } from 'react'; import { Input, Row, Typography } from 'antd'; -import Languages from 'services/languages/languages'; -import Icon from 'components/Icon/Icon'; -import ObjectModal from 'components/ObjectModal/ObjectModal'; -import listService, { GenericChannel } from 'services/search/searchListManager'; +import Languages from 'app/features/global/services/languages-service'; +import Icon from 'app/components/icon/icon'; +import ObjectModal from 'components/object-modal/object-modal'; +import listService, { + GenericChannel, +} from 'app/features/global/services/search-list-manager-service'; import SearchListContainer from './WorkspaceChannelList/SearchListContainer'; -import ChannelsService from 'services/channels/channels.js'; -import RouterServices from 'app/services/RouterService'; -import ModalManager from 'app/components/Modal/ModalManager'; -import { UserType } from 'app/models/User'; -import UsersService from 'services/user/UserService'; -import { ChannelType } from 'app/models/Channel'; -import { Collection } from 'services/CollectionsReact/Collections'; +import ChannelsService from 'app/deprecated/channels/channels.js'; +import RouterServices from 'app/features/router/services/router-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import { UserType } from 'app/features/users/types/user'; +import UsersService from 'app/features/users/services/current-user-service'; +import { ChannelType } from 'app/features/channels/types/channel'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; import PerfectScrollbar from 'react-perfect-scrollbar'; -import { delayRequest } from 'app/services/utils/managedSearchRequest'; -import ChannelMembersAPIClient from 'app/services/channels/ChannelMembersAPIClient'; -import ChannelsReachableAPIClient from 'app/services/channels/ChannelsReachableAPIClient'; -import { useFavoriteChannels } from 'app/state/recoil/hooks/channels/useFavoriteChannels'; +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; +import ChannelMembersAPIClient from 'app/features/channel-members/api/channel-members-api-client'; +import ChannelsReachableAPIClient from 'app/features/channels/api/channels-reachable-api-client'; +import { useFavoriteChannels } from 'app/features/channels/hooks/use-favorite-channels'; export default () => { const [search, setSearch] = useState(''); diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/ChannelRow.scss b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/ChannelRow.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/ChannelRow.scss rename to twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/ChannelRow.scss diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/DirectChannelRow.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/DirectChannelRow.tsx similarity index 79% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/DirectChannelRow.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/DirectChannelRow.tsx index ce4ee12542..fe83cccd2b 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/DirectChannelRow.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/DirectChannelRow.tsx @@ -1,11 +1,11 @@ import React, { createRef, useEffect } from 'react'; import { Col, Row, Typography } from 'antd'; -import { getUserParts } from 'app/components/Member/UserParts'; +import { getUserParts } from 'app/components/member/user-parts'; import './ChannelRow.scss'; -import ChannelsService from 'services/channels/channels.js'; -import RouterServices from 'app/services/RouterService'; -import ModalManager from 'app/components/Modal/ModalManager'; -import UserServices from 'services/user/UserService'; +import ChannelsService from 'app/deprecated/channels/channels.js'; +import RouterServices from 'app/features/router/services/router-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import UserServices from 'app/features/users/services/current-user-service'; type PropsType = { userIds: string[]; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/SearchListContainer.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/SearchListContainer.tsx similarity index 77% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/SearchListContainer.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/SearchListContainer.tsx index 4e101cc7de..8b7f10dcb5 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/SearchListContainer.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/SearchListContainer.tsx @@ -1,13 +1,13 @@ import { Divider } from 'antd'; -import { ChannelResource, ChannelType } from 'app/models/Channel'; -import { UserType } from 'app/models/User'; -import { Collection } from 'services/CollectionsReact/Collections'; -import RouterServices from 'services/RouterService'; +import { ChannelResource, ChannelType } from 'app/features/channels/types/channel'; +import { UserType } from 'app/features/users/types/user'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import RouterServices from 'app/features/router/services/router-service'; import React from 'react'; import DirectChannelRow from './DirectChannelRow'; import WorkspaceChannelRow from './WorkspaceChannelRow'; -import { GenericChannel } from 'services/search/searchListManager'; -import { usePublicOrPrivateChannels } from 'app/state/recoil/hooks/channels/usePublicOrPrivateChannels'; +import { GenericChannel } from 'app/features/global/services/search-list-manager-service'; +import { usePublicOrPrivateChannels } from 'app/features/channels/hooks/use-public-or-private-channels'; type PropsType = { list: GenericChannel[]; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx similarity index 77% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx rename to twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx index c650ec0d23..6edb63f4cc 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList/WorkspaceChannelRow.tsx @@ -2,16 +2,16 @@ import React, { createRef, useEffect } from 'react'; import { Col, Row, Tag, Typography } from 'antd'; import { capitalize } from 'lodash'; -import Languages from 'services/languages/languages'; -import Icon from 'components/Icon/Icon'; -import RouterServices from 'app/services/RouterService'; -import { ChannelType } from 'app/models/Channel'; -import Emojione from 'app/components/Emojione/Emojione'; -import UsersService from 'services/user/UserService'; -import ModalManager from 'app/components/Modal/ModalManager'; -import ChannelsReachableAPIClient from 'app/services/channels/ChannelsReachableAPIClient'; -import { useFavoriteChannels } from 'app/state/recoil/hooks/channels/useFavoriteChannels'; -import ChannelMembersAPIClient from 'app/services/channels/ChannelMembersAPIClient'; +import Languages from 'app/features/global/services/languages-service'; +import Icon from 'app/components/icon/icon'; +import RouterServices from 'app/features/router/services/router-service'; +import { ChannelType } from 'app/features/channels/types/channel'; +import Emojione from 'app/components/emojione/emojione'; +import UsersService from 'app/features/users/services/current-user-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import ChannelsReachableAPIClient from 'app/features/channels/api/channels-reachable-api-client'; +import { useFavoriteChannels } from 'app/features/channels/hooks/use-favorite-channels'; +import ChannelMembersAPIClient from 'app/features/channel-members/api/channel-members-api-client'; import './ChannelRow.scss'; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/Channel.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.scss rename to twake/frontend/src/app/views/client/channels-bar/Parts/Channel/Channel.scss diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/Channel.tsx similarity index 81% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/Channel/Channel.tsx index 3ad4dafe1a..120108eda0 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/Channel.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/Channel.tsx @@ -2,22 +2,22 @@ import React from 'react'; import { Tooltip } from 'antd'; import { Calendar, CheckSquare, Folder, Star } from 'react-feather'; -import Icon from 'components/Icon/Icon'; -import { Application } from 'app/models/App'; -import WindowState from 'services/utils/window'; -import Emojione from 'components/Emojione/Emojione'; -import { ChannelResource } from 'app/models/Channel'; -import AvatarComponent from 'app/components/Avatar/Avatar'; -import Beacon from 'app/components/ScrollHiddenComponents/Beacon'; -import MainViewService from 'app/services/AppView/MainViewService'; -import { Collection } from 'app/services/CollectionsReact/Collections'; -import useRouterChannelSelected from 'app/state/recoil/hooks/router/useRouterChannelSelected'; +import Icon from 'app/components/icon/icon'; +import { Application } from 'app/features/applications/types/application'; +import WindowState from 'app/features/global/utils/window'; +import Emojione from 'components/emojione/emojione'; +import { ChannelResource } from 'app/features/channels/types/channel'; +import AvatarComponent from 'app/components/avatar/avatar'; +import Beacon from 'app/components/scroll-hidden-components/beacon'; +import MainViewService from 'app/features/router/services/main-view-service'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import useRouterChannelSelected from 'app/features/router/hooks/use-router-channel-selected'; import './Channel.scss'; import useChannelWritingActivity, { useChannelWritingActivityState, -} from 'app/state/recoil/hooks/useChannelWritingActivity'; -import WritingLoader from 'app/components/WritingLoader/WritingLoader'; +} from 'app/features/channels/hooks/use-channel-writing-activity'; +import WritingLoader from 'app/components/writing-loader/writing-loader'; type Props = { collection?: Collection; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelCategory.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelCategory.tsx similarity index 94% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelCategory.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelCategory.tsx index f11e22ceb0..0a0cd642ad 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelCategory.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelCategory.tsx @@ -1,5 +1,5 @@ import React, { FC } from 'react'; -import Icon from 'components/Icon/Icon'; +import Icon from 'app/components/icon/icon'; import './Channel.scss'; type PropsType = { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelIntermediate.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelIntermediate.tsx similarity index 83% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelIntermediate.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelIntermediate.tsx index df190b3982..cae6f8f794 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelIntermediate.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelIntermediate.tsx @@ -2,12 +2,12 @@ import React, { useState, useEffect } from 'react'; import ChannelUI from './Channel'; import ChannelMenu from './ChannelMenu'; -import { ChannelResource, ChannelType } from 'app/models/Channel'; -import { Collection } from 'services/CollectionsReact/Collections'; -import { getUserParts } from 'app/components/Member/UserParts'; -import { NotificationResource } from 'app/models/Notification'; -import { useUsersListener } from 'app/services/user/hooks/useUsersListener'; -import { useSetChannel } from 'app/state/recoil/hooks/channels/useChannel'; +import { ChannelResource, ChannelType } from 'app/features/channels/types/channel'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import { getUserParts } from 'app/components/member/user-parts'; +import { NotificationResource } from 'app/features/users/types/notification-types'; +import { useUsersListener } from 'app/features/users/hooks/use-users-listener'; +import { useSetChannel } from 'app/features/channels/hooks/use-channel'; import _ from 'lodash'; type Props = { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelMenu.tsx similarity index 81% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelMenu.tsx index 84401be980..af5ae30272 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Channel/ChannelMenu.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Channel/ChannelMenu.tsx @@ -1,32 +1,32 @@ // eslint-disable-next-line @typescript-eslint/no-use-before-define import React from 'react'; -import { ChannelMemberType, ChannelType } from 'app/models/Channel'; -import ChannelMembersList from 'scenes/Client/ChannelsBar/Modals/ChannelMembersList'; -import Icon from 'components/Icon/Icon'; -import Menu from 'components/Menus/Menu'; -import { Collection } from 'services/CollectionsReact/Collections'; -import Languages from 'services/languages/languages'; -import AlertManager from 'services/AlertManager/AlertManager'; -import UserService from 'services/user/UserService'; -import ModalManager from 'app/components/Modal/ModalManager'; -import ChannelWorkspaceEditor from 'app/scenes/Client/ChannelsBar/Modals/ChannelWorkspaceEditor'; -import Notifications from 'app/services/user/UserNotifications'; -import AccessRightsService from 'app/services/AccessRightsService'; -import { NotificationResource } from 'app/models/Notification'; -import RouterServices from 'app/services/RouterService'; -import GuestManagement from 'app/scenes/Client/ChannelsBar/Modals/GuestManagement'; -import { useFeatureToggles } from 'app/components/LockedFeaturesComponents/FeatureTogglesHooks'; -import LockedGuestsPopup from 'app/components/LockedFeaturesComponents/LockedGuestsPopup/LockedGuestsPopup'; -import InitService from 'app/services/InitService'; -import ChannelsMineAPIClient from 'app/services/channels/ChannelsMineAPIClient'; -import ChannelMembersAPIClient from 'app/services/channels/ChannelMembersAPIClient'; -import { isDirectChannel, isPrivateChannel } from 'app/services/channels/utils'; -import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; -import { ToasterService as Toaster } from 'app/services/Toaster'; -import { useFavoriteChannels } from 'app/state/recoil/hooks/channels/useFavoriteChannels'; -import FeatureTogglesService from 'app/services/FeatureTogglesService'; +import { ChannelMemberType, ChannelType } from 'app/features/channels/types/channel'; +import ChannelMembersList from 'app/views/client/channels-bar/Modals/ChannelMembersList'; +import Icon from 'app/components/icon/icon'; +import Menu from 'components/menus/menu'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import Languages from 'app/features/global/services/languages-service'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import UserService from 'app/features/users/services/current-user-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import ChannelWorkspaceEditor from 'app/views/client/channels-bar/Modals/ChannelWorkspaceEditor'; +import Notifications from 'app/features/users/services/user-notifications-service'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import { NotificationResource } from 'app/features/users/types/notification-types'; +import RouterServices from 'app/features/router/services/router-service'; +import GuestManagement from 'app/views/client/channels-bar/Modals/GuestManagement'; +import { useFeatureToggles } from 'app/components/locked-features-components/feature-toggles-hooks'; +import LockedGuestsPopup from 'app/components/locked-features-components/locked-guests-popup/locked-guests-popup'; +import InitService from 'app/features/global/services/init-service'; +import ChannelsMineAPIClient from 'app/features/channels/api/channels-mine-api-client'; +import ChannelMembersAPIClient from 'app/features/channel-members/api/channel-members-api-client'; +import { isDirectChannel, isPrivateChannel } from 'app/features/channels/utils/utils'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import { ToasterService as Toaster } from 'app/features/global/services/toaster-service'; +import { useFavoriteChannels } from 'app/features/channels/hooks/use-favorite-channels'; +import FeatureTogglesService from 'app/features/global/services/feature-toggles-service'; type PropsType = { channel: ChannelType; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.scss diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx similarity index 80% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx index c5b9f98e92..0ddd9ca51e 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader.tsx @@ -2,14 +2,14 @@ import React from 'react'; import { Avatar, Badge, Skeleton } from 'antd'; -import UserService from 'services/user/UserService'; -import Icon from 'components/Icon/Icon.js'; -import Emojione from 'components/Emojione/Emojione'; +import UserService from 'app/features/users/services/current-user-service'; +import Icon from 'app/components/icon/icon.js'; +import Emojione from 'components/emojione/emojione'; import NotificationDelay from '../Notifications/NotificationDelay'; import './CompanyHeader.scss'; -import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; -import { useCurrentWorkspace } from 'app/state/recoil/hooks/useWorkspaces'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import { useCurrentWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; type PropsType = { onClickUser?: (event: any) => void; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CurrentUser.js b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CurrentUser.js similarity index 79% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CurrentUser.js rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CurrentUser.js index a121185298..85c25e00a3 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/CurrentUser.js +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/CurrentUser.js @@ -1,31 +1,33 @@ // eslint-disable-next-line no-use-before-define import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import UserService from 'services/user/UserService'; -import CurrentUserService from 'app/services/user/CurrentUser'; -import MenusManager from 'app/components/Menus/MenusManager.js'; -import LoginService from 'app/services/login/LoginService'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import WorkspacesUsers from 'services/workspaces/workspaces_users'; -import ListenUsers from 'services/user/ListenUsers'; -import UserParameter from 'app/scenes/Client/Popup/UserParameter/UserParameter.js'; -import InputWithIcon from 'components/Inputs/InputWithIcon'; -import WorkspaceParameter from 'app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.js'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; -import NotificationParameters from 'services/user/notification_parameters.js'; -import CreateWorkspacePage from 'app/scenes/Client/Popup/CreateWorkspacePage/CreateWorkspacePage.js'; -import CompanyHeaderUI from 'app/scenes/Client/ChannelsBar/Parts/CurrentUser/CompanyHeader/CompanyHeader'; -import ModalManagerDepreciated from 'services/popupManager/popupManager'; -import InitService from 'app/services/InitService'; -import AccessRightsService from 'services/AccessRightsService'; -import Workspaces from 'services/workspaces/workspaces.js'; -import FeatureTogglesService, { FeatureNames } from 'app/services/FeatureTogglesService'; -import LockedWorkspacePopup from 'app/components/LockedFeaturesComponents/LockedWorkspacePopup/LockedWorkspacePopup'; -import ModalManager from 'app/components/Modal/ModalManager'; -import CompanyMessagesCounter from 'components/CompanyMessagesCounter/CompanyMessagesCounter'; -import ConsoleService from 'app/services/Console/ConsoleService'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import UserService from 'app/features/users/services/current-user-service'; +import CurrentUserService from 'app/deprecated/user/CurrentUser'; +import MenusManager from 'app/components/menus/menus-manager.js'; +import LoginService from 'app/features/auth/login-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import WorkspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; +import ListenUsers from 'app/features/users/services/listen-users-service'; +import UserParameter from 'app/views/client/popup/UserParameter/UserParameter.js'; +import InputWithIcon from 'components/inputs/input-with-icon'; +import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.js'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; +import NotificationParameters from 'app/deprecated/user/notification_parameters.js'; +import CreateWorkspacePage from 'app/views/client/popup/CreateWorkspacePage/CreateWorkspacePage.js'; +import CompanyHeaderUI from 'app/views/client/channels-bar/Parts/CurrentUser/CompanyHeader/CompanyHeader'; +import ModalManagerDepreciated from 'app/deprecated/popupManager/popupManager'; +import InitService from 'app/features/global/services/init-service'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; +import FeatureTogglesService, { + FeatureNames, +} from 'app/features/global/services/feature-toggles-service'; +import LockedWorkspacePopup from 'app/components/locked-features-components/locked-workspace-popup/locked-workspace-popup'; +import ModalManager from 'app/components/modal/modal-manager'; +import CompanyMessagesCounter from 'components/company-messages-counter/company-messages-counter'; +import ConsoleService from 'app/features/console/services/console-service'; import MenuCompanyHeader from './MenuCompanyHeader'; import SaveNewStatus from './SaveNewStatus'; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/MenuCompanyHeader.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/MenuCompanyHeader.tsx similarity index 80% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/MenuCompanyHeader.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/MenuCompanyHeader.tsx index 924c890110..25eb78bc24 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/MenuCompanyHeader.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/MenuCompanyHeader.tsx @@ -1,7 +1,7 @@ import environment from 'app/environment/environment'; -import { CurrentCompanyLogo } from 'app/scenes/Client/WorkspacesBar/Components/CompanySelector'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; -import { useCurrentWorkspace } from 'app/state/recoil/hooks/useWorkspaces'; +import { CurrentCompanyLogo } from 'app/views/client/workspaces-bar/components/CompanySelector'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; +import { useCurrentWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; import React from 'react'; export default () => { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/Notifications/NotificationBell.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/Notifications/NotificationBell.tsx similarity index 89% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/Notifications/NotificationBell.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/Notifications/NotificationBell.tsx index 9a779726a5..3e276814f1 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/Notifications/NotificationBell.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/Notifications/NotificationBell.tsx @@ -1,11 +1,11 @@ import React from 'react'; import moment from 'moment'; -import Menu from 'components/Menus/Menu'; -import Icon from 'components/Icon/Icon.js'; +import Menu from 'components/menus/menu'; +import Icon from 'app/components/icon/icon.js'; -import Languages from 'services/languages/languages'; -import NotificationPreferences from 'app/services/user/NotificationPreferences'; +import Languages from 'app/features/global/services/languages-service'; +import NotificationPreferences from 'app/deprecated/user/NotificationPreferences'; type PropsType = { preferences: any; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/Notifications/NotificationDelay.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/Notifications/NotificationDelay.tsx similarity index 73% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/Notifications/NotificationDelay.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/Notifications/NotificationDelay.tsx index d62bcdc0e2..56873ff022 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/Notifications/NotificationDelay.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/Notifications/NotificationDelay.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { isEmpty } from 'lodash'; import NotificationBell from './NotificationBell'; -import { Collection } from 'services/CollectionsReact/Collections'; -import { NotificationPreferencesResource } from 'app/models/NotificationPreferences'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import { NotificationPreferencesResource } from 'app/features/users/types/notification-preferences-type'; export default () => { const url = '/notifications/v1/preferences/'; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/SaveNewStatus.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/SaveNewStatus.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/SaveNewStatus.scss rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/SaveNewStatus.scss diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/SaveNewStatus.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/SaveNewStatus.tsx similarity index 87% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/SaveNewStatus.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/SaveNewStatus.tsx index 9e8d4061f3..9fbb83226c 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/CurrentUser/SaveNewStatus.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/CurrentUser/SaveNewStatus.tsx @@ -2,10 +2,10 @@ import React, { useCallback, useState, useRef, useEffect } from 'react'; import { Button, Input } from 'antd'; import classNames from 'classnames'; -import Languages from 'services/languages/languages'; -import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; -import MenusManager from 'app/components/Menus/MenusManager'; -import InputWithIcon from 'app/components/Inputs/InputWithIcon'; +import Languages from 'app/features/global/services/languages-service'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import MenusManager from 'app/components/menus/menus-manager'; +import InputWithIcon from 'app/components/inputs/input-with-icon'; import './SaveNewStatus.scss'; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer.js b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer.js similarity index 71% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer.js rename to twake/frontend/src/app/views/client/channels-bar/Parts/Footer.js index b22be341e3..28ce22e687 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer.js +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer.js @@ -1,12 +1,12 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Groups from 'services/workspaces/groups.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import InitService from 'services/InitService'; -import UserService from 'services/user/UserService'; +import Languages from 'app/features/global/services/languages-service'; +import Groups from 'app/deprecated/workspaces/groups.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import InitService from 'app/features/global/services/init-service'; +import UserService from 'app/features/users/services/current-user-service'; -import FooterUI from 'app/scenes/Client/ChannelsBar/Parts/Footer/Footer.js'; +import FooterUI from 'app/views/client/channels-bar/Parts/Footer/Footer.js'; export default class Footer extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer/Footer.js b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.js similarity index 86% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer/Footer.js rename to twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.js index cd7559559a..c8cdda5d27 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer/Footer.js +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.js @@ -2,11 +2,11 @@ import React, { Component } from 'react'; import './Footer.scss'; -import Icon from 'components/Icon/Icon.js'; -import InitService from 'services/InitService'; -import Languages from 'services/languages/languages'; -import Globals from 'services/Globals'; -import Menu from 'components/Menus/Menu.js'; +import Icon from 'app/components/icon/icon.js'; +import InitService from 'app/features/global/services/init-service'; +import Languages from 'app/features/global/services/languages-service'; +import Globals from 'app/features/global/services/globals-twake-app-service'; +import Menu from 'components/menus/menu.js'; export default class Footer extends React.Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer/Footer.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Footer/Footer.scss rename to twake/frontend/src/app/views/client/channels-bar/Parts/Footer/Footer.scss diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Header/MemberChannelRow.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/Header/MemberChannelRow.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Header/MemberChannelRow.scss rename to twake/frontend/src/app/views/client/channels-bar/Parts/Header/MemberChannelRow.scss diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Header/MemberChannelRow.tsx b/twake/frontend/src/app/views/client/channels-bar/Parts/Header/MemberChannelRow.tsx similarity index 87% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Header/MemberChannelRow.tsx rename to twake/frontend/src/app/views/client/channels-bar/Parts/Header/MemberChannelRow.tsx index 2eca5c95e5..e6ed02c29a 100644 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Header/MemberChannelRow.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Header/MemberChannelRow.tsx @@ -3,20 +3,20 @@ import React, { useState } from 'react'; import { Button, Col, Row, Tag, Typography } from 'antd'; import { Mail, PlusCircle, Trash } from 'react-feather'; -import { ChannelMemberResource } from 'app/models/Channel'; -import { getUserParts } from 'app/components/Member/UserParts'; -import Languages from 'services/languages/languages'; +import { ChannelMemberResource } from 'app/features/channels/types/channel'; +import { getUserParts } from 'app/components/member/user-parts'; +import Languages from 'app/features/global/services/languages-service'; import './MemberChannelRow.scss'; -import Menu from 'app/components/Menus/Menu'; -import Icon from 'app/components/Icon/Icon'; -import AccessRightsService from 'app/services/AccessRightsService'; -import RouterServices from 'services/RouterService'; -import Collection from 'app/services/Collections/Collection'; -import UsersService from 'services/user/UserService'; -import ModalManager from 'app/components/Modal/ModalManager'; -import { PendingEmailResource } from 'app/models/PendingEmail'; -import GuestManagementService from 'app/services/GuestMember/GuestManagementService'; -import UserService from 'services/user/UserService'; +import Menu from 'app/components/menus/menu'; +import Icon from 'app/components/icon/icon'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import RouterServices from 'app/features/router/services/router-service'; +import Collection from 'app/deprecated/CollectionsV2/Collection'; +import UsersService from 'app/features/users/services/current-user-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import { PendingEmailResource } from 'app/features/workspace-members/types/pending-email'; +import GuestManagementService from 'app/features/channel-members/service/guest-management-service'; +import UserService from 'app/features/users/services/current-user-service'; const { Text } = Typography; diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial.js b/twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial.js similarity index 82% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial.js rename to twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial.js index bb44598bc0..c26d1fdd9f 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial.js +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial.js @@ -1,23 +1,23 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; -import Emojione from 'components/Emojione/Emojione'; -import UserService from 'services/user/UserService'; -import CurrentUserService from 'app/services/user/CurrentUser'; -import ElectronService from 'services/electron/electron.js'; -import AlertManager from 'services/AlertManager/AlertManager'; +import Languages from 'app/features/global/services/languages-service'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; +import Emojione from 'components/emojione/emojione'; +import UserService from 'app/features/users/services/current-user-service'; +import CurrentUserService from 'app/deprecated/user/CurrentUser'; +import ElectronService from 'app/features/global/framework/electron-service'; +import AlertManager from 'app/features/global/services/alert-manager-service'; -import Workspaces from 'services/workspaces/workspaces.js'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import WorkspaceParameter from 'app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.js'; -import WorkspacesUsers from 'services/workspaces/workspaces_users'; -import UserParameter from 'app/scenes/Client/Popup/UserParameter/UserParameter.js'; -import popupManager from 'services/popupManager/popupManager.js'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import WorkspaceParameter from 'app/views/client/popup/WorkspaceParameter/WorkspaceParameter.js'; +import WorkspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; +import UserParameter from 'app/views/client/popup/UserParameter/UserParameter.js'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; -import TutorialUI from 'app/scenes/Client/ChannelsBar/Parts/Tutorial/Tutorial.js'; +import TutorialUI from 'app/views/client/channels-bar/Parts/Tutorial/Tutorial.js'; -import Globals from 'services/Globals'; +import Globals from 'app/features/global/services/globals-twake-app-service'; export default class Tutorial extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial/Tutorial.js b/twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial/Tutorial.js similarity index 94% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial/Tutorial.js rename to twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial/Tutorial.js index 05a780c095..b5bfd0edef 100755 --- a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial/Tutorial.js +++ b/twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial/Tutorial.js @@ -2,8 +2,8 @@ import React, { Component } from 'react'; import './Tutorial.scss'; -import Icon from 'components/Icon/Icon.js'; -import Emojione from 'components/Emojione/Emojione'; +import Icon from 'app/components/icon/icon.js'; +import Emojione from 'components/emojione/emojione'; export default class Tutorial extends React.Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial/Tutorial.scss b/twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial/Tutorial.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/ChannelsBar/Parts/Tutorial/Tutorial.scss rename to twake/frontend/src/app/views/client/channels-bar/Parts/Tutorial/Tutorial.scss diff --git a/twake/frontend/src/app/scenes/Client/Client.tsx b/twake/frontend/src/app/views/client/index.tsx similarity index 57% rename from twake/frontend/src/app/scenes/Client/Client.tsx rename to twake/frontend/src/app/views/client/index.tsx index 2cdf1879e0..aaaf8983d6 100755 --- a/twake/frontend/src/app/scenes/Client/Client.tsx +++ b/twake/frontend/src/app/views/client/index.tsx @@ -4,27 +4,27 @@ import { Menu } from 'react-feather'; import { Layout } from 'antd'; import classNames from 'classnames'; -import Languages from 'services/languages/languages'; -import PopupService from 'services/popupManager/popupManager.js'; -import PopupComponent from 'components/PopupComponent/PopupComponent.js'; -import MainView from './MainView/MainView'; -import DraggableBodyLayer from 'components/Draggable/DraggableBodyLayer.js'; -import MenusBodyLayer from 'components/Menus/MenusBodyLayer.js'; -import DriveUploadViewer from 'components/Uploads/UploadViewer.js'; -import ChatUploadsViewer from 'app/components/FileUploads/UploadsViewer'; -import ConfigBodyLayer from 'components/Configurators/ConfigBodyLayer.js'; -import Viewer from 'scenes/Apps/Drive/Viewer/Viewer'; -import ModalComponent from 'app/components/Modal/ModalComponent'; -import ConnectionIndicator from 'components/ConnectionIndicator/ConnectionIndicator'; -import SearchPopup from 'components/SearchPopup/SearchPopup.js'; -import NewVersionComponent from 'components/NewVersion/NewVersionComponent'; -import SideBars, { LoadingSidebar } from './SideBars'; -import CompanyStatusComponent from 'app/components/OnBoarding/CompanyStatusComponent'; -import UserContext from 'app/state/recoil/integration/UserContext'; -import { useCurrentUser, useCurrentUserRealtime } from 'app/state/recoil/hooks/useCurrentUser'; -import { useFeatureToggles } from 'app/components/LockedFeaturesComponents/FeatureTogglesHooks'; +import Languages from 'app/features/global/services/languages-service'; +import PopupService from 'app/deprecated/popupManager/popupManager.js'; +import PopupComponent from 'components/popup-component/popup-component.js'; +import MainView from './main-view/MainView'; +import DraggableBodyLayer from 'components/draggable/draggable-body-layer.js'; +import MenusBodyLayer from 'components/menus/menus-body-layer.js'; +import DriveUploadViewer from 'components/uploads/upload-viewer.js'; +import ChatUploadsViewer from 'app/components/file-uploads/uploads-viewer'; +import ConfigBodyLayer from 'components/configurators/config-body-layer.js'; +import Viewer from 'app/views/applications/drive/viewer/viewer'; +import ModalComponent from 'app/components/modal/modal-component'; +import ConnectionIndicator from 'components/connection-indicator/connection-indicator'; +import SearchPopup from 'components/search-popup/search-popup.js'; +import NewVersionComponent from 'components/new-version/new-version-component'; +import SideBars, { LoadingSidebar } from './side-bars'; +import CompanyStatusComponent from 'app/components/on-boarding/company-status-component'; +import UserContext from 'app/features/users/state/integration/user-context'; +import { useCurrentUser, useCurrentUserRealtime } from 'app/features/users/hooks/use-current-user'; +import { useFeatureToggles } from 'app/components/locked-features-components/feature-toggles-hooks'; -import './Client.scss'; +import './styles.scss'; export default React.memo((): JSX.Element => { const [menuIsOpen, setMenuIsOpen] = useState(false); diff --git a/twake/frontend/src/app/scenes/Client/MainView/AppView/AppView.tsx b/twake/frontend/src/app/views/client/main-view/AppView/AppView.tsx similarity index 79% rename from twake/frontend/src/app/scenes/Client/MainView/AppView/AppView.tsx rename to twake/frontend/src/app/views/client/main-view/AppView/AppView.tsx index e56ac0d921..a593c521df 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/AppView/AppView.tsx +++ b/twake/frontend/src/app/views/client/main-view/AppView/AppView.tsx @@ -1,10 +1,10 @@ import React, { FC } from 'react'; -import Messages from 'app/scenes/Apps/Messages'; -import Drive from 'app/scenes/Apps/Drive/Drive'; -import Calendar from 'app/scenes/Apps/Calendar/CalendarContent'; -import Tasks from 'app/scenes/Apps/Tasks/Tasks'; +import Messages from 'app/views/applications/messages'; +import Drive from 'app/views/applications/drive/drive'; +import Calendar from 'app/views/applications/calendar/calendar-content'; +import Tasks from 'app/views/applications/tasks/tasks'; import NoApp from '../NoApp'; -import AppViewService from 'app/services/AppView/AppViewService'; +import AppViewService from 'app/features/router/services/app-view-service'; type PropsType = { viewService: AppViewService; diff --git a/twake/frontend/src/app/scenes/Client/MainView/AppView/ViewName.tsx b/twake/frontend/src/app/views/client/main-view/AppView/ViewName.tsx similarity index 76% rename from twake/frontend/src/app/scenes/Client/MainView/AppView/ViewName.tsx rename to twake/frontend/src/app/views/client/main-view/AppView/ViewName.tsx index 2186652e76..aa53136093 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/AppView/ViewName.tsx +++ b/twake/frontend/src/app/views/client/main-view/AppView/ViewName.tsx @@ -1,8 +1,8 @@ import React, { FC } from 'react'; -import AppViewService from 'app/services/AppView/AppViewService'; -import Languages from 'services/languages/languages'; -import { ChannelResource } from 'app/models/Channel'; -import { useWorkspace } from 'app/state/recoil/hooks/useWorkspaces'; +import AppViewService from 'app/features/router/services/app-view-service'; +import Languages from 'app/features/global/services/languages-service'; +import { ChannelResource } from 'app/features/channels/types/channel'; +import { useWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; type PropsType = { id: string; diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainContent.tsx b/twake/frontend/src/app/views/client/main-view/MainContent.tsx similarity index 95% rename from twake/frontend/src/app/scenes/Client/MainView/MainContent.tsx rename to twake/frontend/src/app/views/client/main-view/MainContent.tsx index f2d0155e13..0b8cd6c8b8 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainContent.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainContent.tsx @@ -3,8 +3,8 @@ import React, { FC, Suspense } from 'react'; import { Layout } from 'antd'; import Tabs from './Tabs/Tabs'; import AppView from './AppView/AppView'; -import SideViewService from 'app/services/AppView/SideViewService'; -import MainViewService from 'app/services/AppView/MainViewService'; +import SideViewService from 'app/features/router/services/side-view-service'; +import MainViewService from 'app/features/router/services/main-view-service'; import { X } from 'react-feather'; import ViewName from './AppView/ViewName'; diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ApplicationHeader/ApplicationHeader.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/ApplicationHeader/ApplicationHeader.tsx similarity index 73% rename from twake/frontend/src/app/scenes/Client/MainView/MainHeader/ApplicationHeader/ApplicationHeader.tsx rename to twake/frontend/src/app/views/client/main-view/MainHeader/ApplicationHeader/ApplicationHeader.tsx index e9bf9be9d6..2dda5e0756 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ApplicationHeader/ApplicationHeader.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainHeader/ApplicationHeader/ApplicationHeader.tsx @@ -1,14 +1,14 @@ import React from 'react'; import { Col, Input, Row, Typography } from 'antd'; -import Icon from 'app/components/Icon/Icon'; +import Icon from 'app/components/icon/icon'; import { capitalize } from 'lodash'; -import { ChannelResource } from 'app/models/Channel'; -import RouterServices from 'app/services/RouterService'; -import DepreciatedCollections from 'app/services/Depreciated/Collections/Collections'; -import Languages from 'services/languages/languages'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; +import { ChannelResource } from 'app/features/channels/types/channel'; +import RouterServices from 'app/features/router/services/router-service'; +import DepreciatedCollections from 'app/deprecated/CollectionsV1/Collections/Collections'; +import Languages from 'app/features/global/services/languages-service'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; import SearchInput from '../Search'; -import MainViewService from 'app/services/AppView/MainViewService'; +import MainViewService from 'app/features/router/services/main-view-service'; export default (): JSX.Element => { const application = MainViewService.getConfiguration().app; diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelAvatars.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelAvatars.tsx similarity index 62% rename from twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelAvatars.tsx rename to twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelAvatars.tsx index 1cdc19ac02..bf8083b52a 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelAvatars.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelAvatars.tsx @@ -1,8 +1,8 @@ -import RouterServices from 'app/services/RouterService'; -import { getUserParts } from 'app/components/Member/UserParts'; -import Collections from 'app/services/CollectionsReact/Collections'; -import { ChannelMemberResource } from 'app/models/Channel'; -import { useUsersListener } from 'app/services/user/hooks/useUsersListener'; +import RouterServices from 'app/features/router/services/router-service'; +import { getUserParts } from 'app/components/member/user-parts'; +import Collections from 'app/deprecated/CollectionsReact/Collections'; +import { ChannelMemberResource } from 'app/features/channels/types/channel'; +import { useUsersListener } from 'app/features/users/hooks/use-users-listener'; export default (props: { workspaceId: string }): JSX.Element => { const { companyId, channelId } = RouterServices.getStateFromRoute(); diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelHeader.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelHeader.tsx similarity index 83% rename from twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelHeader.tsx rename to twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelHeader.tsx index 20644a2db4..8248800ffc 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelHeader.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelHeader.tsx @@ -2,18 +2,18 @@ import React from 'react'; import { Lock } from 'react-feather'; import { Button, Col, Row, Typography } from 'antd'; -import Emojione from 'app/components/Emojione/Emojione'; -import ModalManager from 'app/components/Modal/ModalManager'; -import ChannelMembersList from 'scenes/Client/ChannelsBar/Modals/ChannelMembersList'; -import RouterServices from 'app/services/RouterService'; +import Emojione from 'app/components/emojione/emojione'; +import ModalManager from 'app/components/modal/modal-manager'; +import ChannelMembersList from 'app/views/client/channels-bar/Modals/ChannelMembersList'; +import RouterServices from 'app/features/router/services/router-service'; import SearchInput from '../Search'; import ChannelUsersHeader from './ChannelUsersHeader'; -import PseudoMarkdownCompiler from 'services/Twacode/pseudoMarkdownCompiler'; +import PseudoMarkdownCompiler from 'app/features/global/services/pseudo-markdown-compiler-service'; import ChannelAvatars from './ChannelAvatars'; -import Languages from 'services/languages/languages'; -import ChannelsBarService from 'app/services/channels/ChannelsBarService'; -import { useUsersListener } from 'app/services/user/hooks/useUsersListener'; -import { useChannel } from 'app/state/recoil/hooks/channels/useChannel'; +import Languages from 'app/features/global/services/languages-service'; +import ChannelsBarService from 'app/features/channels/services/channels-bar-service'; +import { useUsersListener } from 'app/features/users/hooks/use-users-listener'; +import { useChannel } from 'app/features/channels/hooks/use-channel'; export default (): JSX.Element => { const { companyId, workspaceId, channelId } = RouterServices.getStateFromRoute(); diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelUsersHeader.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelUsersHeader.tsx similarity index 77% rename from twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelUsersHeader.tsx rename to twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelUsersHeader.tsx index 3efd879482..3d59ff7951 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/ChannelHeader/ChannelUsersHeader.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainHeader/ChannelHeader/ChannelUsersHeader.tsx @@ -1,9 +1,9 @@ import React from 'react'; import { Typography, Col } from 'antd'; -import { ChannelType } from 'app/models/Channel'; -import { getUserParts } from 'app/components/Member/UserParts'; -import { useUsersListener } from 'app/services/user/hooks/useUsersListener'; +import { ChannelType } from 'app/features/channels/types/channel'; +import { getUserParts } from 'app/components/member/user-parts'; +import { useUsersListener } from 'app/features/users/hooks/use-users-listener'; type Props = { channel: ChannelType; diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/MainHeader.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/MainHeader.tsx similarity index 83% rename from twake/frontend/src/app/scenes/Client/MainView/MainHeader/MainHeader.tsx rename to twake/frontend/src/app/views/client/main-view/MainHeader/MainHeader.tsx index ecca08cbaa..772f570d8b 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/MainHeader.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainHeader/MainHeader.tsx @@ -1,9 +1,9 @@ import React, { FC } from 'react'; import { Layout, Divider } from 'antd'; import ChannelBar from './ChannelHeader/ChannelHeader'; -import MainViewService from 'app/services/AppView/MainViewService'; +import MainViewService from 'app/features/router/services/main-view-service'; import ApplicationBar from './ApplicationHeader/ApplicationHeader'; -import RouterServices from 'app/services/RouterService'; +import RouterServices from 'app/features/router/services/router-service'; const MainHeader: FC<{}> = () => { const { channelId } = RouterServices.getStateFromRoute(); diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/Search.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Client/MainView/MainHeader/Search.tsx rename to twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx index 0b4a50ceba..7fad61db3a 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainHeader/Search.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx @@ -1,10 +1,10 @@ import { Button, Col, Input, Row } from 'antd'; import React from 'react'; import { Search } from 'react-feather'; -import SearchService from 'services/search/search.js'; -import RouterServices from 'services/RouterService'; -import AccessRightsService from 'app/services/AccessRightsService'; -import Languages from 'services/languages/languages'; +import SearchService from 'app/deprecated/search/search.js'; +import RouterServices from 'app/features/router/services/router-service'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import Languages from 'app/features/global/services/languages-service'; export default (): JSX.Element => { const { workspaceId, companyId } = RouterServices.getStateFromRoute(); diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainView.scss b/twake/frontend/src/app/views/client/main-view/MainView.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/MainView/MainView.scss rename to twake/frontend/src/app/views/client/main-view/MainView.scss diff --git a/twake/frontend/src/app/scenes/Client/MainView/MainView.tsx b/twake/frontend/src/app/views/client/main-view/MainView.tsx similarity index 74% rename from twake/frontend/src/app/scenes/Client/MainView/MainView.tsx rename to twake/frontend/src/app/views/client/main-view/MainView.tsx index f97ea6e00c..ee22abfa5b 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/MainView.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainView.tsx @@ -5,14 +5,14 @@ import { Layout } from 'antd'; import MainHeader from './MainHeader/MainHeader'; import MainContent from './MainContent'; import NoApp from './NoApp'; -import ChannelsBarService from 'app/services/channels/ChannelsBarService'; -import { useWatcher } from 'app/services/Observable/Observable'; -import AccountStatusComponent from 'app/components/OnBoarding/AccountStatusComponent'; -import CompanyBillingBanner from 'app/components/OnBoarding/CompanyBillingBanner'; +import ChannelsBarService from 'app/features/channels/services/channels-bar-service'; +import { useWatcher } from 'app/deprecated/Observable/Observable'; +import AccountStatusComponent from 'app/components/on-boarding/account-status-component'; +import CompanyBillingBanner from 'app/components/on-boarding/company-billing-banner'; import './MainView.scss'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; -import useRouterChannel from 'app/state/recoil/hooks/router/useRouterChannel'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import useRouterChannel from 'app/features/router/hooks/use-router-channel'; type PropsType = { className?: string; diff --git a/twake/frontend/src/app/scenes/Client/MainView/NoApp.tsx b/twake/frontend/src/app/views/client/main-view/NoApp.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Client/MainView/NoApp.tsx rename to twake/frontend/src/app/views/client/main-view/NoApp.tsx index aa3a25213a..82acdeeb2a 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/NoApp.tsx +++ b/twake/frontend/src/app/views/client/main-view/NoApp.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; export default () => { return ( diff --git a/twake/frontend/src/app/scenes/Client/MainView/PublicMainView.js b/twake/frontend/src/app/views/client/main-view/PublicMainView.js similarity index 83% rename from twake/frontend/src/app/scenes/Client/MainView/PublicMainView.js rename to twake/frontend/src/app/views/client/main-view/PublicMainView.js index 5585b3b3a5..11fcf7a6ee 100755 --- a/twake/frontend/src/app/scenes/Client/MainView/PublicMainView.js +++ b/twake/frontend/src/app/views/client/main-view/PublicMainView.js @@ -1,13 +1,13 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections'; -import Drive from 'app/scenes/Apps/Drive/DriveContent'; -import Api from 'services/Api'; -import RouterService from 'services/RouterService'; -import MenusBodyLayer from 'components/Menus/MenusBodyLayer'; -import Viewer from 'scenes/Apps/Drive/Viewer/Viewer'; -import { addApiUrlIfNeeded } from 'app/services/utils/URLUtils'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections'; +import Drive from 'app/views/applications/drive/drive-content'; +import Api from 'app/features/global/framework/api-service'; +import RouterService from 'app/features/router/services/router-service'; +import MenusBodyLayer from 'components/menus/menus-body-layer'; +import Viewer from 'app/views/applications/drive/viewer/viewer'; +import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; import './MainView.scss'; diff --git a/twake/frontend/src/app/scenes/Client/MainView/Tabs/DefaultChannelTab.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/DefaultChannelTab.tsx similarity index 79% rename from twake/frontend/src/app/scenes/Client/MainView/Tabs/DefaultChannelTab.tsx rename to twake/frontend/src/app/views/client/main-view/Tabs/DefaultChannelTab.tsx index c4c286cf5a..02df0a60bf 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/Tabs/DefaultChannelTab.tsx +++ b/twake/frontend/src/app/views/client/main-view/Tabs/DefaultChannelTab.tsx @@ -1,22 +1,22 @@ import React from 'react'; import classNames from 'classnames'; -import RouterServices from 'app/services/RouterService'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import Menu from 'components/Menus/Menu.js'; +import RouterServices from 'app/features/router/services/router-service'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import Menu from 'components/menus/menu.js'; import { MoreHorizontal, MessageCircle } from 'react-feather'; -import Languages from 'services/languages/languages'; -import popupManager from 'services/popupManager/popupManager.js'; -import WorkspaceParameter from '../../Popup/WorkspaceParameter/WorkspaceParameter'; -import { Application } from 'app/models/App'; -import { ChannelResource } from 'app/models/Channel'; -import Collections from 'services/CollectionsReact/Collections'; -import ConnectorsListManager from 'app/components/ConnectorsListManager/ConnectorsListManager'; -import MainViewService from 'app/services/AppView/MainViewService'; +import Languages from 'app/features/global/services/languages-service'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import WorkspaceParameter from '../../popup/WorkspaceParameter/WorkspaceParameter'; +import { Application } from 'app/features/applications/types/application'; +import { ChannelResource } from 'app/features/channels/types/channel'; +import Collections from 'app/deprecated/CollectionsReact/Collections'; +import ConnectorsListManager from 'app/components/connectors-list-manager/connectors-list-manager'; +import MainViewService from 'app/features/router/services/main-view-service'; import { isArray } from 'lodash'; -import AccessRightsService from 'app/services/AccessRightsService'; -import { getCompanyApplication as getApplication } from 'app/state/recoil/atoms/CompanyApplications'; -import { getCompanyApplications } from 'app/state/recoil/atoms/CompanyApplications'; -import Groups from 'services/workspaces/groups.js'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; +import { getCompanyApplications } from 'app/features/applications/state/company-applications'; +import Groups from 'app/deprecated/workspaces/groups.js'; export default ({ selected }: { selected: boolean }): JSX.Element => { const { companyId, workspaceId, channelId } = RouterServices.getStateFromRoute(); diff --git a/twake/frontend/src/app/scenes/Client/MainView/Tabs/Tab.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/Tab.tsx similarity index 78% rename from twake/frontend/src/app/scenes/Client/MainView/Tabs/Tab.tsx rename to twake/frontend/src/app/views/client/main-view/Tabs/Tab.tsx index 66b10a11a6..e8038eae9e 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/Tabs/Tab.tsx +++ b/twake/frontend/src/app/views/client/main-view/Tabs/Tab.tsx @@ -1,18 +1,18 @@ import React from 'react'; import classNames from 'classnames'; -import { TabType } from 'app/models/Tab'; -import RouterServices from 'app/services/RouterService'; +import { TabType } from 'app/features/tabs/types/tab'; +import RouterServices from 'app/features/router/services/router-service'; import TabsTemplateEditor from './TabsTemplateEditor'; -import ModalManager from 'app/components/Modal/ModalManager'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import Menu from 'components/Menus/Menu.js'; +import ModalManager from 'app/components/modal/modal-manager'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import Menu from 'components/menus/menu.js'; import { MoreHorizontal } from 'react-feather'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; import { capitalize } from 'lodash'; -import AccessRightsService from 'app/services/AccessRightsService'; -import MainViewService from 'app/services/AppView/MainViewService'; -import { getCompanyApplication as getApplication } from 'app/state/recoil/atoms/CompanyApplications'; -import { useTab } from 'app/state/recoil/hooks/useTabs'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import MainViewService from 'app/features/router/services/main-view-service'; +import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; +import { useTab } from 'app/features/tabs/hooks/use-tabs'; type PropsType = { tabId: string; diff --git a/twake/frontend/src/app/scenes/Client/MainView/Tabs/Tabs.scss b/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/MainView/Tabs/Tabs.scss rename to twake/frontend/src/app/views/client/main-view/Tabs/Tabs.scss diff --git a/twake/frontend/src/app/scenes/Client/MainView/Tabs/Tabs.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.tsx similarity index 71% rename from twake/frontend/src/app/scenes/Client/MainView/Tabs/Tabs.tsx rename to twake/frontend/src/app/views/client/main-view/Tabs/Tabs.tsx index 27eeadd321..60884b133a 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/Tabs/Tabs.tsx +++ b/twake/frontend/src/app/views/client/main-view/Tabs/Tabs.tsx @@ -1,18 +1,18 @@ import React from 'react'; import { Plus } from 'react-feather'; -import { TabType } from 'app/models/Tab'; +import { TabType } from 'app/features/tabs/types/tab'; import TabsTemplateEditor from './TabsTemplateEditor'; -import ModalManager from 'app/components/Modal/ModalManager'; -import RouterServices from 'app/services/RouterService'; -import DefaultChannelTab from 'app/scenes/Client/MainView/Tabs/DefaultChannelTab'; -import Tab from 'app/scenes/Client/MainView/Tabs/Tab'; -import UserService from 'services/user/UserService'; -import useTabs from 'app/state/recoil/hooks/useTabs'; -import AccessRightsService from 'app/services/AccessRightsService'; -import useRouterCompany from '../../../../state/recoil/hooks/router/useRouterCompany'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; -import useRouterTab from 'app/state/recoil/hooks/router/useRouterTab'; +import ModalManager from 'app/components/modal/modal-manager'; +import RouterServices from 'app/features/router/services/router-service'; +import DefaultChannelTab from 'app/views/client/main-view/Tabs/DefaultChannelTab'; +import Tab from 'app/views/client/main-view/Tabs/Tab'; +import UserService from 'app/features/users/services/current-user-service'; +import useTabs from 'app/features/tabs/hooks/use-tabs'; +import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; +import useRouterCompany from '../../../../features/router/hooks/use-router-company'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import useRouterTab from 'app/features/router/hooks/use-router-tab'; import './Tabs.scss'; diff --git a/twake/frontend/src/app/scenes/Client/MainView/Tabs/TabsTemplateEditor.tsx b/twake/frontend/src/app/views/client/main-view/Tabs/TabsTemplateEditor.tsx similarity index 80% rename from twake/frontend/src/app/scenes/Client/MainView/Tabs/TabsTemplateEditor.tsx rename to twake/frontend/src/app/views/client/main-view/Tabs/TabsTemplateEditor.tsx index 360aefe988..4017c67ffc 100644 --- a/twake/frontend/src/app/scenes/Client/MainView/Tabs/TabsTemplateEditor.tsx +++ b/twake/frontend/src/app/views/client/main-view/Tabs/TabsTemplateEditor.tsx @@ -1,17 +1,17 @@ import React, { useState, useEffect } from 'react'; import { Button, Row, Input, Select } from 'antd'; -import { Application, AppType } from 'app/models/App'; -import Groups from 'services/workspaces/groups.js'; -import { TabType } from 'app/models/Tab'; -import Icon from 'app/components/Icon/Icon'; -import ModalManager from 'app/components/Modal/ModalManager'; -import ObjectModal from 'components/ObjectModal/ObjectModal'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; -import Languages from 'services/languages/languages'; -import { getCompanyApplications } from 'app/state/recoil/atoms/CompanyApplications'; -import { useCompanyApplications } from 'app/state/recoil/hooks/useCompanyApplications'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; +import { Application, AppType } from 'app/features/applications/types/application'; +import Groups from 'app/deprecated/workspaces/groups.js'; +import { TabType } from 'app/features/tabs/types/tab'; +import Icon from 'app/components/icon/icon'; +import ModalManager from 'app/components/modal/modal-manager'; +import ObjectModal from 'components/object-modal/object-modal'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; +import Languages from 'app/features/global/services/languages-service'; +import { getCompanyApplications } from 'app/features/applications/state/company-applications'; +import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; const { Option } = Select; diff --git a/twake/frontend/src/app/scenes/Client/Popup/AddUser/AddUser.scss b/twake/frontend/src/app/views/client/popup/AddUser/AddUser.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/AddUser/AddUser.scss rename to twake/frontend/src/app/views/client/popup/AddUser/AddUser.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/AddUser/AddUserByEmail.tsx b/twake/frontend/src/app/views/client/popup/AddUser/AddUserByEmail.tsx similarity index 85% rename from twake/frontend/src/app/scenes/Client/Popup/AddUser/AddUserByEmail.tsx rename to twake/frontend/src/app/views/client/popup/AddUser/AddUserByEmail.tsx index 06edbf5448..9a70e5241d 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/AddUser/AddUserByEmail.tsx +++ b/twake/frontend/src/app/views/client/popup/AddUser/AddUserByEmail.tsx @@ -1,11 +1,11 @@ import React, { useState } from 'react'; import { Button, Typography } from 'antd'; -import Languages from 'services/languages/languages'; -import popupManager from 'services/popupManager/popupManager.js'; -import AutoHeight from 'app/components/AutoHeight/AutoHeight'; -import ConsoleService from 'app/services/Console/ConsoleService'; -import RouterServices from 'services/RouterService'; -import WorkspacesUsers from 'services/workspaces/workspaces_users'; +import Languages from 'app/features/global/services/languages-service'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import AutoHeight from 'app/components/auto-height/auto-height'; +import ConsoleService from 'app/features/console/services/console-service'; +import RouterServices from 'app/features/router/services/router-service'; +import WorkspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; import './AddUser.scss'; import MagicLinks from './MagicLinks'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/AddUser/MagicLinks.scss b/twake/frontend/src/app/views/client/popup/AddUser/MagicLinks.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/AddUser/MagicLinks.scss rename to twake/frontend/src/app/views/client/popup/AddUser/MagicLinks.scss diff --git a/twake/frontend/src/app/views/client/popup/AddUser/MagicLinks.tsx b/twake/frontend/src/app/views/client/popup/AddUser/MagicLinks.tsx new file mode 100644 index 0000000000..609655b6b9 --- /dev/null +++ b/twake/frontend/src/app/views/client/popup/AddUser/MagicLinks.tsx @@ -0,0 +1,107 @@ +import React, { useEffect, useState } from 'react'; +import { Button, Input, Space, message } from 'antd'; +import { DeleteOutlined, RetweetOutlined } from '@ant-design/icons'; +import Languages from 'app/features/global/services/languages-service'; +import RouterServices from 'app/features/router/services/router-service'; +import './MagicLinks.scss'; +import { MagicLinksGeneratorService } from 'app/features/workspaces/services/magic-links-service'; + +type PropsType = { + [key: string]: any; +}; + +export default (props: PropsType): JSX.Element => { + const { companyId, workspaceId } = RouterServices.getStateFromRoute(); + const [ready, setReady] = useState(false); + const [currentToken, setCurrentToken] = useState(); + const [link, setLink] = useState(); + const [disabled, setDisabled] = useState(false); + const [loading, setLoading] = useState(false); + const [showButtons, setShowButtons] = useState(false); + + const busy = (val: boolean) => { + setLoading(val); + setDisabled(val); + }; + + const magicLinksService = new MagicLinksGeneratorService(companyId!, workspaceId!, busy); + + /* eslint-disable react-hooks/exhaustive-deps */ + useEffect(() => { + init(); + }, []); + /* eslint-enable react-hooks/exhaustive-deps */ + + useEffect(() => { + setLink(`${window.location.origin}/join/${currentToken}`); + }, [currentToken]); + + const init = () => { + magicLinksService.getCurrentTokens().then(resources => { + setCurrentToken(resources ? resources[0].token : undefined); + setReady(true); + }); + }; + + const onGenerateBtnClick = () => { + magicLinksService.recreateToken().then(resource => setCurrentToken(resource.token)); + message.success(Languages.t('scenes.app.popup.adduser.magiclinks.new_link_generated')); + }; + + const onDeleteBtnClick = () => { + if (currentToken) { + magicLinksService.deleteToken(currentToken).then(() => setCurrentToken(undefined)); + } + }; + + const onCopyBtnClick = () => { + navigator.clipboard.writeText(link!); + message.success(Languages.t('scenes.app.popup.adduser.magiclinks.copied_to_clipboard')); + }; + + const onMouseOver = () => setShowButtons(true); + const onMouseLeave = () => setShowButtons(false); + + const suffix = ( +
+ + +
+ ); + + const TokenInput = () => ( + + ); + + const DeleteButton = () => ( + + ); + + return ready ? ( +
+ + {Languages.t('scenes.app.popup.adduser.magiclinks.genrator_info')} +
+ {currentToken ? : } +
+
+
+ ) : ( + <> + ); +}; diff --git a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/AppsParameters.js b/twake/frontend/src/app/views/client/popup/AppsParameters/AppsParameters.js similarity index 85% rename from twake/frontend/src/app/scenes/Client/Popup/AppsParameters/AppsParameters.js rename to twake/frontend/src/app/views/client/popup/AppsParameters/AppsParameters.js index 04b0811b1b..82b8e9cb72 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/AppsParameters.js +++ b/twake/frontend/src/app/views/client/popup/AppsParameters/AppsParameters.js @@ -1,15 +1,15 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import LoginService from 'app/services/login/LoginService'; -import popupManager from 'services/popupManager/popupManager.js'; -import userService from 'services/user/UserService'; -import currentUserService from 'app/services/user/CurrentUser'; -import WorkspaceApps from './Pages/WorkspaceApps.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import LoginService from 'app/features/auth/login-service'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import userService from 'app/features/users/services/current-user-service'; +import currentUserService from 'app/deprecated/user/CurrentUser'; +import WorkspaceApps from './Pages/WorkspaceApps.js.js.js.js'; import WorkspaceAppsInformations from './Pages/WorkspaceAppsInformations.js'; import TwacodeTester from './Pages/TwacodeTester.js'; -import MenuList from 'components/Menus/MenuComponent.js'; +import MenuList from 'components/menus/menu-component.js'; import './AppsParameters.scss'; export default class AppsParameters extends Component { diff --git a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/AppsParameters.scss b/twake/frontend/src/app/views/client/popup/AppsParameters/AppsParameters.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/AppsParameters/AppsParameters.scss rename to twake/frontend/src/app/views/client/popup/AppsParameters/AppsParameters.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/Pages.scss b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/Pages.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/Pages.scss rename to twake/frontend/src/app/views/client/popup/AppsParameters/Pages/Pages.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/TwacodeTester.js b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/TwacodeTester.js similarity index 96% rename from twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/TwacodeTester.js rename to twake/frontend/src/app/views/client/popup/AppsParameters/Pages/TwacodeTester.js index a6eef13ed5..3d5ac6b73f 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/TwacodeTester.js +++ b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/TwacodeTester.js @@ -1,8 +1,8 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import AutoHeight from 'components/AutoHeight/AutoHeight.js'; -import Twacode from 'components/Twacode/Twacode'; +import Languages from 'app/features/global/services/languages-service'; +import AutoHeight from 'components/auto-height/auto-height.js'; +import Twacode from 'components/twacode/twacode'; import './Pages.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsCreator.js b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsCreator.js similarity index 90% rename from twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsCreator.js rename to twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsCreator.js index 69e33be190..5b38ec0962 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsCreator.js +++ b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsCreator.js @@ -1,12 +1,12 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import workspaceService from 'services/workspaces/workspaces.js'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import AlertManager from 'services/AlertManager/AlertManager'; -import Api from 'services/Api'; -import Input from 'components/Inputs/Input.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import workspaceService from 'app/deprecated/workspaces/workspaces.js'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import Api from 'app/features/global/framework/api-service'; +import Input from 'components/inputs/input.js'; import './Pages.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsEditor.js b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsEditor.js similarity index 95% rename from twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsEditor.js rename to twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsEditor.js index 4a2420fec5..ccab0d3836 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsEditor.js +++ b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsEditor.js @@ -1,25 +1,25 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import workspaceService from 'services/workspaces/workspaces.js'; -import Emojione from 'components/Emojione/Emojione'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import Attribute from 'components/Parameters/Attribute.js'; -import AlertManager from 'services/AlertManager/AlertManager'; -import Api from 'services/Api'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import workspaceService from 'app/deprecated/workspaces/workspaces.js'; +import Emojione from 'components/emojione/emojione'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import Attribute from 'components/parameters/attribute.js'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import Api from 'app/features/global/framework/api-service'; import WorkspaceAppsCreator from './WorkspaceAppsCreator.js'; -import Switch from 'components/Inputs/Switch'; -import AutoHeight from 'components/AutoHeight/AutoHeight.js'; -import TagPicker from 'components/TagPicker/TagPicker.js'; -import Icon from 'components/Icon/Icon.js'; -import InputWithClipBoard from 'components/InputWithClipBoard/InputWithClipBoard.js'; -import Input from 'components/Inputs/Input.js'; -import InlineTagPicker from 'app/components/InlineTagPicker/InlineTagPicker'; -import { getCompanyApplication as getApplication } from 'app/state/recoil/atoms/CompanyApplications'; +import Switch from 'components/inputs/switch'; +import AutoHeight from 'components/auto-height/auto-height.js'; +import TagPicker from 'components/tag-picker/tag-picker.js'; +import Icon from 'app/components/icon/icon.js'; +import InputWithClipBoard from 'components/input-with-clip-board/input-with-clip-board.js'; +import Input from 'components/inputs/input.js'; +import InlineTagPicker from 'app/components/inline-tag-picker/inline-tag-picker'; +import { getCompanyApplication as getApplication } from 'app/features/applications/state/company-applications'; import './Pages.scss'; -import WorkspacesApp from 'services/workspaces/workspaces_apps.js'; +import WorkspacesApp from 'app/deprecated/workspaces/workspaces_apps.js'; export default class WorkspaceAppsEditor extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsInformations.js b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsInformations.js similarity index 83% rename from twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsInformations.js rename to twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsInformations.js index df6f8beece..4a040c3487 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/AppsParameters/Pages/WorkspaceAppsInformations.js +++ b/twake/frontend/src/app/views/client/popup/AppsParameters/Pages/WorkspaceAppsInformations.js @@ -1,9 +1,9 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import InputWithClipBoard from 'components/InputWithClipBoard/InputWithClipBoard.js'; -import workspaceService from 'services/workspaces/workspaces.js'; -import userService from 'services/user/UserService'; +import Languages from 'app/features/global/services/languages-service'; +import InputWithClipBoard from 'components/input-with-clip-board/input-with-clip-board.js'; +import workspaceService from 'app/deprecated/workspaces/workspaces.js'; +import userService from 'app/features/users/services/current-user-service'; import './Pages.scss'; export default class WorkspaceAppsInformations extends Component { diff --git a/twake/frontend/src/app/scenes/Client/Popup/CreateCompanyView/CreateCompanyView.js b/twake/frontend/src/app/views/client/popup/CreateCompanyView/CreateCompanyView.js similarity index 95% rename from twake/frontend/src/app/scenes/Client/Popup/CreateCompanyView/CreateCompanyView.js rename to twake/frontend/src/app/views/client/popup/CreateCompanyView/CreateCompanyView.js index f533836233..730b53bd0f 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/CreateCompanyView/CreateCompanyView.js +++ b/twake/frontend/src/app/views/client/popup/CreateCompanyView/CreateCompanyView.js @@ -1,17 +1,17 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import LoginService from 'app/services/login/LoginService'; -import popupManager from 'services/popupManager/popupManager.js'; -import Emojione from 'components/Emojione/Emojione'; -import StepCounter from 'components/StepCounter/StepCounter.js'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; +import Languages from 'app/features/global/services/languages-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import LoginService from 'app/features/auth/login-service'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import Emojione from 'components/emojione/emojione'; +import StepCounter from 'components/step-counter/step-counter.js'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; import './CreateCompanyView.scss'; -import Input from 'components/Inputs/Input.js'; -import CurrentUser from 'app/services/user/CurrentUser'; -import InitService from 'services/InitService'; -import AddUserByEmail from 'app/scenes/Client/Popup/AddUser/AddUserByEmail'; +import Input from 'components/inputs/input.js'; +import CurrentUser from 'app/deprecated/user/CurrentUser'; +import InitService from 'app/features/global/services/init-service'; +import AddUserByEmail from 'app/views/client/popup/AddUser/AddUserByEmail'; export default class CreateCompanyView extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Client/Popup/CreateCompanyView/CreateCompanyView.scss b/twake/frontend/src/app/views/client/popup/CreateCompanyView/CreateCompanyView.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/CreateCompanyView/CreateCompanyView.scss rename to twake/frontend/src/app/views/client/popup/CreateCompanyView/CreateCompanyView.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/CreateWorkspacePage/CreateWorkspacePage.js b/twake/frontend/src/app/views/client/popup/CreateWorkspacePage/CreateWorkspacePage.js similarity index 87% rename from twake/frontend/src/app/scenes/Client/Popup/CreateWorkspacePage/CreateWorkspacePage.js rename to twake/frontend/src/app/views/client/popup/CreateWorkspacePage/CreateWorkspacePage.js index fc5d399ff0..73f826bef6 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/CreateWorkspacePage/CreateWorkspacePage.js +++ b/twake/frontend/src/app/views/client/popup/CreateWorkspacePage/CreateWorkspacePage.js @@ -1,14 +1,14 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import GroupService from 'services/workspaces/groups.js'; -import popupManager from 'services/popupManager/popupManager.js'; -import Emojione from 'components/Emojione/Emojione'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import Input from 'components/Inputs/Input.js'; -import AddUserByEmail from 'app/scenes/Client/Popup/AddUser/AddUserByEmail'; -import InitService from 'app/services/InitService'; +import Languages from 'app/features/global/services/languages-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import GroupService from 'app/deprecated/workspaces/groups.js'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import Emojione from 'components/emojione/emojione'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import Input from 'components/inputs/input.js'; +import AddUserByEmail from 'app/views/client/popup/AddUser/AddUserByEmail'; +import InitService from 'app/features/global/services/init-service'; import './CreateWorkspacePage.scss'; export default class CreateWorkspacePage extends Component { diff --git a/twake/frontend/src/app/scenes/Client/Popup/CreateWorkspacePage/CreateWorkspacePage.scss b/twake/frontend/src/app/views/client/popup/CreateWorkspacePage/CreateWorkspacePage.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/CreateWorkspacePage/CreateWorkspacePage.scss rename to twake/frontend/src/app/views/client/popup/CreateWorkspacePage/CreateWorkspacePage.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/SecondMail/SecondMail.js b/twake/frontend/src/app/views/client/popup/SecondMail/SecondMail.js similarity index 92% rename from twake/frontend/src/app/scenes/Client/Popup/SecondMail/SecondMail.js rename to twake/frontend/src/app/views/client/popup/SecondMail/SecondMail.js index 34d8a5fad8..b03442fa32 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/SecondMail/SecondMail.js +++ b/twake/frontend/src/app/views/client/popup/SecondMail/SecondMail.js @@ -1,14 +1,14 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import userService from 'services/user/UserService'; -import loginService from 'app/services/login/LoginService'; -import AccountService from 'services/login/account'; -import popupManager from 'services/popupManager/popupManager.js'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import Input from 'components/Inputs/Input.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import userService from 'app/features/users/services/current-user-service'; +import loginService from 'app/features/auth/login-service'; +import AccountService from 'app/deprecated/login/account'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import Input from 'components/inputs/input.js'; import './SecondMail.scss'; export default class SecondMail extends Component { diff --git a/twake/frontend/src/app/scenes/Client/Popup/SecondMail/SecondMail.scss b/twake/frontend/src/app/views/client/popup/SecondMail/SecondMail.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/SecondMail/SecondMail.scss rename to twake/frontend/src/app/views/client/popup/SecondMail/SecondMail.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/UserParameter/Pages/Notifications.tsx b/twake/frontend/src/app/views/client/popup/UserParameter/Pages/Notifications.tsx similarity index 94% rename from twake/frontend/src/app/scenes/Client/Popup/UserParameter/Pages/Notifications.tsx rename to twake/frontend/src/app/views/client/popup/UserParameter/Pages/Notifications.tsx index 9d11889223..9837ba7910 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/UserParameter/Pages/Notifications.tsx +++ b/twake/frontend/src/app/views/client/popup/UserParameter/Pages/Notifications.tsx @@ -2,20 +2,20 @@ import React, { useState, useRef } from 'react'; import { Input } from 'antd'; import { isEqual } from 'lodash'; -import Languages from 'services/languages/languages'; -import NotificationParameters from 'services/user/notification_parameters.js'; -import { Collection } from 'services/CollectionsReact/Collections'; -import NotificationPreferences from 'app/services/user/NotificationPreferences'; +import Languages from 'app/features/global/services/languages-service'; +import NotificationParameters from 'app/deprecated/user/notification_parameters.js'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import NotificationPreferences from 'app/deprecated/user/NotificationPreferences'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import Attribute from 'components/Parameters/Attribute.js'; -import Switch from 'components/Inputs/Switch'; -import Radio from 'components/Inputs/Radio.js'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import Attribute from 'components/parameters/attribute.js'; +import Switch from 'components/inputs/switch'; +import Radio from 'components/inputs/radio.js'; import { preferencesType, NotificationPreferencesResource, -} from 'app/models/NotificationPreferences'; +} from 'app/features/users/types/notification-preferences-type'; export default () => { const loading = useRef(true); diff --git a/twake/frontend/src/app/scenes/Client/Popup/UserParameter/UserParameter.js b/twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.js similarity index 97% rename from twake/frontend/src/app/scenes/Client/Popup/UserParameter/UserParameter.js rename to twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.js index 3dadb14f4b..248fa4b1a3 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/UserParameter/UserParameter.js +++ b/twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.js @@ -1,18 +1,18 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import LoginService from 'app/services/login/LoginService'; -import popupManager from 'services/popupManager/popupManager.js'; -import userService from 'services/user/UserService'; -import currentUserService from 'app/services/user/CurrentUser'; -import uploadService from 'services/uploadManager/uploadManager.js'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import Attribute from 'components/Parameters/Attribute.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import LoginService from 'app/features/auth/login-service'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import userService from 'app/features/users/services/current-user-service'; +import currentUserService from 'app/deprecated/user/CurrentUser'; +import uploadService from 'app/deprecated/uploadManager/upload-manager.js'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import Attribute from 'components/parameters/attribute.js'; import Notifications from './Pages/Notifications'; -import MenuList from 'components/Menus/MenuComponent.js'; +import MenuList from 'components/menus/menu-component.js'; import './UserParameter.scss'; -import Input from 'components/Inputs/Input.js'; +import Input from 'components/inputs/input.js'; export default class UserParameter extends Component { constructor(props) { diff --git a/twake/frontend/src/app/scenes/Client/Popup/UserParameter/UserParameter.scss b/twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/UserParameter/UserParameter.scss rename to twake/frontend/src/app/views/client/popup/UserParameter/UserParameter.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/ApplicationsStyles.scss b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/ApplicationsStyles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/ApplicationsStyles.scss rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/ApplicationsStyles.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/ApplicationsTable.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/ApplicationsTable.tsx similarity index 86% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/ApplicationsTable.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/ApplicationsTable.tsx index cc50609545..75397402c8 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/ApplicationsTable.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/ApplicationsTable.tsx @@ -4,13 +4,13 @@ import { ColumnsType } from 'antd/lib/table'; import useBreakpoint from 'antd/lib/grid/hooks/useBreakpoint'; import { Divider, Table, Typography, Row, Input, Col, Button } from 'antd'; -import { Application } from 'app/models/App'; -import Languages from 'services/languages/languages'; -import { useApplications } from 'app/state/recoil/hooks/useApplications'; -import { useCompanyApplications } from 'app/state/recoil/hooks/useCompanyApplications'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; -import { delayRequest } from 'app/services/utils/managedSearchRequest'; -import AvatarComponent from 'app/components/Avatar/Avatar'; +import { Application } from 'app/features/applications/types/application'; +import Languages from 'app/features/global/services/languages-service'; +import { useApplications } from 'app/features/applications/hooks/use-applications'; +import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; +import AvatarComponent from 'app/components/avatar/avatar'; import './ApplicationsStyles.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationPopup.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/CompanyApplicationPopup.tsx similarity index 91% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationPopup.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/CompanyApplicationPopup.tsx index 6bf82e45be..a80dccd932 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationPopup.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/CompanyApplicationPopup.tsx @@ -5,12 +5,12 @@ import { capitalize } from 'lodash'; import { Check } from 'react-feather'; import { Tabs, Button, Typography, Col, Tag, Descriptions, Row, Divider } from 'antd'; -import { Application, ApplicationAccess } from 'app/models/App'; -import Languages from 'services/languages/languages'; -import AvatarComponent from 'app/components/Avatar/Avatar'; -import ObjectModal from 'app/components/ObjectModal/ObjectModal'; -import ModalManager from 'app/components/Modal/ModalManager'; -import { useCompanyApplications } from 'app/state/recoil/hooks/useCompanyApplications'; +import { Application, ApplicationAccess } from 'app/features/applications/types/application'; +import Languages from 'app/features/global/services/languages-service'; +import AvatarComponent from 'app/components/avatar/avatar'; +import ObjectModal from 'app/components/object-modal/object-modal'; +import ModalManager from 'app/components/modal/modal-manager'; +import { useCompanyApplications } from 'app/features/applications/hooks/use-company-applications'; import './ApplicationsStyles.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx similarity index 88% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx index c287d071db..cd7d61d3b8 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Applications/CompanyApplicationsTable.tsx @@ -4,21 +4,21 @@ import { ColumnsType } from 'antd/lib/table'; import { MoreHorizontal } from 'react-feather'; import { Divider, Table, Typography, Row, Col, Button, Grid } from 'antd'; -import { Application } from 'app/models/App'; -import Languages from 'services/languages/languages'; -import ModalManager from 'app/components/Modal/ModalManager'; -import AvatarComponent from 'app/components/Avatar/Avatar'; +import { Application } from 'app/features/applications/types/application'; +import Languages from 'app/features/global/services/languages-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import AvatarComponent from 'app/components/avatar/avatar'; import CompanyApplicationPopup from './CompanyApplicationPopup'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; import { useCompanyApplications, useCompanyApplicationsRealtime, -} from 'app/state/recoil/hooks/useCompanyApplications'; -import Menu from 'components/Menus/Menu'; -import WorkspacesApps from 'services/workspaces/workspaces_apps.js'; +} from 'app/features/applications/hooks/use-company-applications'; +import Menu from 'components/menus/menu'; +import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; import './ApplicationsStyles.scss'; -import AlertManager from 'app/services/AlertManager/AlertManager'; +import AlertManager from 'app/features/global/services/alert-manager-service'; type ColumnObjectType = { key: number } & Application; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CompanyIdendity.js b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CompanyIdendity.js similarity index 91% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CompanyIdendity.js rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CompanyIdendity.js index ae503e9b6b..bd2d766466 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CompanyIdendity.js +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CompanyIdendity.js @@ -1,13 +1,13 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections'; -import groupService from 'services/workspaces/groups'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout'; -import Attribute from 'components/Parameters/Attribute'; -import uploadService from 'services/uploadManager/uploadManager'; -import Input from 'components/Inputs/Input'; -import { addApiUrlIfNeeded } from 'app/services/utils/URLUtils'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections'; +import groupService from 'app/deprecated/workspaces/groups'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout'; +import Attribute from 'components/parameters/attribute'; +import uploadService from 'app/deprecated/uploadManager/upload-manager'; +import Input from 'components/inputs/input'; +import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; import './Pages.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CompanyIntegrations.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CompanyIntegrations.tsx similarity index 87% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CompanyIntegrations.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CompanyIntegrations.tsx index 7df8978b4c..f77667364c 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CompanyIntegrations.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CompanyIntegrations.tsx @@ -2,7 +2,7 @@ import React, { Suspense } from 'react'; import { Typography } from 'antd'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; import ApplicationsTable from './Applications/ApplicationsTable'; import CompanyApplicationsTable from './Applications/CompanyApplicationsTable'; import './Pages.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CreateCompanyAccount.js b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CreateCompanyAccount.js similarity index 90% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CreateCompanyAccount.js rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CreateCompanyAccount.js index deff69f6aa..7f02173ab5 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/CreateCompanyAccount.js +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/CreateCompanyAccount.js @@ -1,17 +1,17 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import AlertManager from 'services/AlertManager/AlertManager'; -import Input from 'components/Inputs/Input.js'; -import Button from 'components/Buttons/Button.js'; -import MediumPopupManager from 'app/components/Modal/ModalManager'; +import Languages from 'app/features/global/services/languages-service'; +import AlertManager from 'app/features/global/services/alert-manager-service'; +import Input from 'components/inputs/input.js'; +import Button from 'components/buttons/button.js'; +import MediumPopupManager from 'app/components/modal/modal-manager'; import { ObjectModal, ObjectModalFormTitle, ObjectModalTitle, -} from 'components/ObjectModal/DeprecatedObjectModal.js'; -import Api from 'services/Api'; -import Workspaces from 'services/workspaces/workspaces.js'; +} from 'components/object-modal/deprecated-object-modal.js'; +import Api from 'app/features/global/framework/api-service'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; import './Pages.scss'; export default class CreateCompanyAccount extends Component { diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Pages.scss b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Pages.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Pages.scss rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Pages.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/DeleteWorkspacePopup.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/DeleteWorkspacePopup.tsx similarity index 87% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/DeleteWorkspacePopup.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/DeleteWorkspacePopup.tsx index fc5d048ea5..ca923a998b 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/DeleteWorkspacePopup.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/DeleteWorkspacePopup.tsx @@ -5,14 +5,14 @@ import classNames from 'classnames'; import { AlertTriangle } from 'react-feather'; import { Alert, Button, Checkbox, Input, Row, Typography } from 'antd'; -import Logger from 'app/services/Logger'; -import { WorkspaceType, WorkspaceUserType } from 'app/models/Workspace'; -import Languages from 'app/services/languages/languages'; -import ObjectModal from 'app/components/ObjectModal/ObjectModal'; -import WorkspaceAPIClient from 'app/services/workspaces/WorkspaceAPIClient'; -import RouterService from 'app/services/RouterService'; -import ModalManager from 'app/components/Modal/ModalManager'; -import WorkspaceUserAPIClient from 'app/services/workspaces/WorkspaceUserAPIClient'; +import Logger from 'app/features/global/framework/logger-service'; +import { WorkspaceType, WorkspaceUserType } from 'app/features/workspaces/types/workspace'; +import Languages from 'app/features/global/services/languages-service'; +import ObjectModal from 'app/components/object-modal/object-modal'; +import WorkspaceAPIClient from 'app/features/workspaces/api/workspace-api-client'; +import RouterService from 'app/features/router/services/router-service'; +import ModalManager from 'app/components/modal/modal-manager'; +import WorkspaceUserAPIClient from 'app/features/workspace-members/api/workspace-members-api-client'; import './styles.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/WorkspaceIdentity.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/WorkspaceIdentity.tsx similarity index 94% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/WorkspaceIdentity.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/WorkspaceIdentity.tsx index 34ead51247..d7d5efe73c 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/WorkspaceIdentity.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/WorkspaceIdentity.tsx @@ -3,16 +3,16 @@ import React, { Suspense, useEffect, useRef, useState } from 'react'; import { isEqual } from 'lodash'; import { Avatar, Button, Col, Descriptions, Divider, Input, Row, Switch, Typography } from 'antd'; -import Languages from 'services/languages/languages'; -import { useCurrentWorkspace } from 'app/state/recoil/hooks/useWorkspaces'; -import AvatarComponent from 'app/components/Avatar/Avatar'; -import ModalManager from 'app/components/Modal/ModalManager'; +import Languages from 'app/features/global/services/languages-service'; +import { useCurrentWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; +import AvatarComponent from 'app/components/avatar/avatar'; +import ModalManager from 'app/components/modal/modal-manager'; import DeleteWorkspacePopup from './DeleteWorkspacePopup'; import WorkspaceAPIClient, { WorkspaceUpdateResource, -} from 'app/services/workspaces/WorkspaceAPIClient'; -import { ToasterService as Toaster } from 'app/services/Toaster'; -import { addApiUrlIfNeeded } from 'app/services/utils/URLUtils'; +} from 'app/features/workspaces/api/workspace-api-client'; +import { ToasterService as Toaster } from 'app/features/global/services/toaster-service'; +import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; const { Item } = Descriptions; const { Text, Title, Link } = Typography; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/styles.scss b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/Workspace/styles.scss rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/Workspace/styles.scss diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartner.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartner.tsx similarity index 81% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartner.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartner.tsx index d4a0f1d1be..d97a6d70b8 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartner.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartner.tsx @@ -1,16 +1,16 @@ import React, { useState } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import groupService from 'services/workspaces/groups.js'; -import workspacesUsers from 'services/workspaces/workspaces_users'; -import Switch from 'components/Inputs/Switch'; -import workspaceUserRightsService from 'services/workspaces/WorkspaceUserRights'; -import popupManager from 'services/popupManager/popupManager.js'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import groupService from 'app/deprecated/workspaces/groups.js'; +import workspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; +import Switch from 'components/inputs/switch'; +import workspaceUserRightsService from 'app/features/workspaces/services/workspace-user-rights-service'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; import './Pages.scss'; -import Pending from 'app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending'; -import Members from 'app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members'; +import Pending from 'app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending'; +import Members from 'app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members'; import { Row, Col, Button, Input, Typography, Divider } from 'antd'; import AddUserByEmail from '../../AddUser/AddUserByEmail'; import { Search } from 'react-feather'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx similarity index 90% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx index 124b2d0c6a..b25d95772b 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx @@ -1,23 +1,23 @@ import React, { useState, useEffect } from 'react'; import _ from 'lodash'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; import { Table, Row, Col, Typography, Divider } from 'antd'; -import AlertManager from 'services/AlertManager/AlertManager'; +import AlertManager from 'app/features/global/services/alert-manager-service'; import EditIcon from '@material-ui/icons/MoreHorizOutlined'; -import Menu from 'components/Menus/Menu.js'; +import Menu from 'components/menus/menu.js'; import { ColumnsType } from 'antd/lib/table'; -import UserService from 'services/user/UserService'; -import workspacesUsers from 'services/workspaces/workspaces_users'; -import workspaceUserRightsService from 'services/workspaces/WorkspaceUserRights'; -import InitService from 'app/services/InitService'; +import UserService from 'app/features/users/services/current-user-service'; +import workspacesUsers from 'app/features/workspace-members/services/workspace-members-service'; +import workspaceUserRightsService from 'app/features/workspaces/services/workspace-user-rights-service'; +import InitService from 'app/features/global/services/init-service'; import { ChevronUp, ChevronsUp } from 'react-feather'; import useBreakpoint from 'antd/lib/grid/hooks/useBreakpoint'; -import Api from 'app/services/Api'; -import ConsoleService from 'app/services/Console/ConsoleService'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import { delayRequest } from 'app/services/utils/managedSearchRequest'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; +import Api from 'app/features/global/framework/api-service'; +import ConsoleService from 'app/features/console/services/console-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; type ColumnObjectType = { [key: string]: any }; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx similarity index 89% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx index 78f05622cc..322f027ba3 100644 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Pending.tsx @@ -1,14 +1,14 @@ import React, { useEffect, useState } from 'react'; -import Languages from 'services/languages/languages'; +import Languages from 'app/features/global/services/languages-service'; import { Divider, Table, Typography } from 'antd'; -import Menu from 'components/Menus/Menu.js'; -import workspaceUserRightsService from 'services/workspaces/WorkspaceUserRights'; +import Menu from 'components/menus/menu.js'; +import workspaceUserRightsService from 'app/features/workspaces/services/workspace-user-rights-service'; import EditIcon from '@material-ui/icons/MoreHorizOutlined'; import { ColumnsType } from 'antd/lib/table'; -import Api from 'app/services/Api'; +import Api from 'app/features/global/framework/api-service'; import useBreakpoint from 'antd/lib/grid/hooks/useBreakpoint'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; type PendingEmailResourceType = { company_role: string; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.js b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/WorkspaceParameter.js similarity index 88% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.js rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/WorkspaceParameter.js index 5a5cfbe057..bcd9c895e4 100755 --- a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.js +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/WorkspaceParameter.js @@ -1,20 +1,20 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import LoginService from 'app/services/login/LoginService'; -import popupManager from 'services/popupManager/popupManager.js'; -import userService from 'services/user/UserService'; -import currentUserService from 'app/services/user/CurrentUser'; +import Languages from 'app/features/global/services/languages-service'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import LoginService from 'app/features/auth/login-service'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; +import userService from 'app/features/users/services/current-user-service'; +import currentUserService from 'app/deprecated/user/CurrentUser'; import WorkspaceIdentity from './Pages/Workspace/WorkspaceIdentity'; import CompanyIntegration from './Pages/CompanyIntegrations'; import WorkspacePartner from './Pages/WorkspacePartner'; import CompanyIdendity from './Pages/CompanyIdendity.js'; -import WorkspaceUserRights from 'services/workspaces/WorkspaceUserRights'; -import WorkspaceService from 'services/workspaces/workspaces.js'; -import MenuList from 'components/Menus/MenuComponent.js'; -import InitService from 'app/services/InitService'; -import ConsoleService from 'app/services/Console/ConsoleService'; +import WorkspaceUserRights from 'app/features/workspaces/services/workspace-user-rights-service'; +import WorkspaceService from 'app/deprecated/workspaces/workspaces.js'; +import MenuList from 'components/menus/menu-component.js'; +import InitService from 'app/features/global/services/init-service'; +import ConsoleService from 'app/features/console/services/console-service'; import './WorkspaceParameter.scss'; diff --git a/twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.scss b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/WorkspaceParameter.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Popup/WorkspaceParameter/WorkspaceParameter.scss rename to twake/frontend/src/app/views/client/popup/WorkspaceParameter/WorkspaceParameter.scss diff --git a/twake/frontend/src/app/scenes/Client/SideBars.tsx b/twake/frontend/src/app/views/client/side-bars.tsx similarity index 59% rename from twake/frontend/src/app/scenes/Client/SideBars.tsx rename to twake/frontend/src/app/views/client/side-bars.tsx index 2d75f24674..dbd0904d35 100755 --- a/twake/frontend/src/app/scenes/Client/SideBars.tsx +++ b/twake/frontend/src/app/views/client/side-bars.tsx @@ -2,14 +2,15 @@ import React from 'react'; import { Layout } from 'antd'; -import ChannelsBar, { LoadingChannelBar } from './ChannelsBar/ChannelsBar'; -import WorkspacesBar, { LoadingWorkspaceBar } from './WorkspacesBar/WorkspacesBar'; +import ChannelsBar, { LoadingChannelBar } from './channels-bar/ChannelsBar'; +import WorkspacesBar, { LoadingWorkspaceBar } from './workspaces-bar'; -import './WorkspacesBar/WorkspacesBar.scss'; -import { useWorkspaceLoader } from 'app/state/recoil/hooks/useWorkspaces'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import useRouterWorkspace from 'app/state/recoil/hooks/router/useRouterWorkspace'; -import { useCurrentCompanyRealtime } from '../../state/recoil/hooks/useCompanies'; +import { useWorkspaceLoader } from 'app/features/workspaces/hooks/use-workspaces'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import { useCurrentCompanyRealtime } from '../../features/companies/hooks/use-companies'; + +import './workspaces-bar/styles.scss'; export default () => { const companyId = useRouterCompany(); diff --git a/twake/frontend/src/app/scenes/Client/Client.scss b/twake/frontend/src/app/views/client/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/Client.scss rename to twake/frontend/src/app/views/client/styles.scss diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/CompanySelector/index.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/index.tsx similarity index 84% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/CompanySelector/index.tsx rename to twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/index.tsx index f920d09921..02e4d471fd 100644 --- a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/CompanySelector/index.tsx +++ b/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/index.tsx @@ -2,15 +2,15 @@ import React, { ReactNode } from 'react'; import classNames from 'classnames'; import { capitalize } from 'lodash'; -import Menu from 'components/Menus/Menu'; -import { addApiUrlIfNeeded } from 'app/services/utils/URLUtils'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; -import RouterService from 'app/services/RouterService'; -import Languages from 'services/languages/languages'; -import PopupService from 'services/popupManager/popupManager.js'; +import Menu from 'components/menus/menu'; +import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; +import RouterService from 'app/features/router/services/router-service'; +import Languages from 'app/features/global/services/languages-service'; +import PopupService from 'app/deprecated/popupManager/popupManager.js'; import './styles.scss'; -import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; type MenuObjectType = { [key: string]: any }; diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/CompanySelector/styles.scss b/twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/CompanySelector/styles.scss rename to twake/frontend/src/app/views/client/workspaces-bar/components/CompanySelector/styles.scss diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/NoCompanies.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies.tsx old mode 100755 new mode 100644 similarity index 72% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/NoCompanies.tsx rename to twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies.tsx index a51cc43117..7b228c28b6 --- a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/NoCompanies.tsx +++ b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoCompanies.tsx @@ -1,22 +1,22 @@ import React, { Component } from 'react'; -import Emojione from 'components/Emojione/Emojione'; -import Collections from 'app/services/Depreciated/Collections/Collections.js'; -import LoginService from 'app/services/login/LoginService'; +import Emojione from 'components/emojione/emojione'; +import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; +import LoginService from 'app/features/auth/login-service'; -import Languages from 'services/languages/languages'; -import Groups from 'services/workspaces/groups.js'; -import Workspaces from 'services/workspaces/workspaces.js'; -import popupManager from 'services/popupManager/popupManager.js'; +import Languages from 'app/features/global/services/languages-service'; +import Groups from 'app/deprecated/workspaces/groups.js'; +import Workspaces from 'app/deprecated/workspaces/workspaces.js'; +import popupManager from 'app/deprecated/popupManager/popupManager.js'; -import CreateCompanyView from '../../../Popup/CreateCompanyView/CreateCompanyView.js'; -import SecondMail from '../../../Popup/SecondMail/SecondMail.js'; -import InitService from 'services/InitService'; - -import './style.scss'; -import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; +import CreateCompanyView from '../../../popup/CreateCompanyView/CreateCompanyView.js'; +import SecondMail from '../../../popup/SecondMail/SecondMail.js'; +import InitService from 'app/features/global/services/init-service'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; import CompanySelector from '../CompanySelector/index'; +import './styles.scss'; + export default class WelcomePage extends Component { private retrying: boolean = false; constructor(props: {}) { diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/NoWorkspaces.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces.tsx old mode 100755 new mode 100644 similarity index 83% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/NoWorkspaces.tsx rename to twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces.tsx index 6acb3601f5..a21cc41882 --- a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/NoWorkspaces.tsx +++ b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/NoWorkspaces.tsx @@ -1,12 +1,13 @@ import React, { Suspense } from 'react'; -import LoginService from 'app/services/login/LoginService'; -import Languages from 'services/languages/languages'; +import LoginService from 'app/features/auth/login-service'; +import Languages from 'app/features/global/services/languages-service'; import CompanySelector, { CurrentCompanyLogo } from '../CompanySelector/index'; import { Button } from 'antd'; -import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; -import { useCurrentCompany } from 'app/state/recoil/hooks/useCompanies'; -import './style.scss'; -import InitService from 'app/services/InitService'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import { useCurrentCompany } from 'app/features/companies/hooks/use-companies'; +import InitService from 'app/features/global/services/init-service'; + +import './styles.scss'; export default () => { const retry = () => { diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/style.scss b/twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/styles.scss old mode 100755 new mode 100644 similarity index 100% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/NoWorkspaces/style.scss rename to twake/frontend/src/app/views/client/workspaces-bar/components/NoWorkspaces/styles.scss diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/Workspace.scss b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/Workspace.scss rename to twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.scss diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/Workspace.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.tsx similarity index 65% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/Workspace.tsx rename to twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.tsx index 9e69a069d5..c81924feff 100755 --- a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/Workspace.tsx +++ b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/Workspace.tsx @@ -1,10 +1,10 @@ // eslint-disable-next-line @typescript-eslint/no-use-before-define import React from 'react'; -import WorkspacesService from 'services/workspaces/workspaces'; +import WorkspacesService from 'app/deprecated/workspaces/workspaces'; import WorkspaceIcon from './WorkspaceIcon'; -import { WorkspaceType } from 'app/models/Workspace'; -import useRouterWorkspaceSelected from 'app/state/recoil/hooks/router/useRouterWorkspaceSelected'; +import { WorkspaceType } from 'app/features/workspaces/types/workspace'; +import useRouterWorkspaceSelected from 'app/features/router/hooks/use-router-workspace-selected'; import './Workspace.scss'; diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/WorkspaceIcon.tsx b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/WorkspaceIcon.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/WorkspaceIcon.tsx rename to twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/WorkspaceIcon.tsx index 974997386f..f662322e1d 100755 --- a/twake/frontend/src/app/scenes/Client/WorkspacesBar/Components/Workspace/WorkspaceIcon.tsx +++ b/twake/frontend/src/app/views/client/workspaces-bar/components/Workspace/WorkspaceIcon.tsx @@ -3,10 +3,10 @@ import React from 'react'; import classNames from 'classnames'; import { Skeleton } from 'antd'; -import { NotificationResource } from 'app/models/Notification'; -import { Collection } from 'app/services/CollectionsReact/Collections'; -import { addApiUrlIfNeeded } from 'app/services/utils/URLUtils'; -import { WorkspaceType } from 'app/models/Workspace'; +import { NotificationResource } from 'app/features/users/types/notification-types'; +import { Collection } from 'app/deprecated/CollectionsReact/Collections'; +import { addApiUrlIfNeeded } from 'app/features/global/utils/URLUtils'; +import { WorkspaceType } from 'app/features/workspaces/types/workspace'; type Props = { workspace: WorkspaceType; diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.tsx b/twake/frontend/src/app/views/client/workspaces-bar/index.tsx similarity index 69% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.tsx rename to twake/frontend/src/app/views/client/workspaces-bar/index.tsx index 5eadd1f166..e894c5f7be 100755 --- a/twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.tsx +++ b/twake/frontend/src/app/views/client/workspaces-bar/index.tsx @@ -2,15 +2,15 @@ import React, { useEffect } from 'react'; import PerfectScrollbar from 'react-perfect-scrollbar'; import { Layout, Skeleton } from 'antd'; -import { WorkspaceType } from 'app/models/Workspace'; -import Workspace from './Components/Workspace/Workspace'; -import { useWorkspaces } from 'app/state/recoil/hooks/useWorkspaces'; -import useRouterCompany from 'app/state/recoil/hooks/router/useRouterCompany'; -import { LoadingWorkspaceIcon } from './Components/Workspace/WorkspaceIcon'; -import CompanySelector from './Components/CompanySelector'; - -import './WorkspacesBar.scss'; -import { useCurrentCompanyRealtime } from '../../../state/recoil/hooks/useCompanies'; +import { WorkspaceType } from 'app/features/workspaces/types/workspace'; +import Workspace from './components/Workspace/Workspace'; +import { useWorkspaces } from 'app/features/workspaces/hooks/use-workspaces'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import { LoadingWorkspaceIcon } from './components/Workspace/WorkspaceIcon'; +import CompanySelector from './components/CompanySelector'; +import { useCurrentCompanyRealtime } from '../../../features/companies/hooks/use-companies'; + +import './styles.scss'; export default () => { const companyId = useRouterCompany(); diff --git a/twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.scss b/twake/frontend/src/app/views/client/workspaces-bar/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Client/WorkspacesBar/WorkspacesBar.scss rename to twake/frontend/src/app/views/client/workspaces-bar/styles.scss diff --git a/twake/frontend/src/app/scenes/Error/ErrorBoundary.tsx b/twake/frontend/src/app/views/error/error-boundary.tsx similarity index 87% rename from twake/frontend/src/app/scenes/Error/ErrorBoundary.tsx rename to twake/frontend/src/app/views/error/error-boundary.tsx index 7c909e4a56..fb3cdee124 100755 --- a/twake/frontend/src/app/scenes/Error/ErrorBoundary.tsx +++ b/twake/frontend/src/app/views/error/error-boundary.tsx @@ -1,6 +1,7 @@ import React from 'react'; -import RouterServices from 'app/services/RouterService'; -import 'app/ui.scss'; +import RouterServices from 'app/features/router/services/router-service'; + +import 'app/styles/ui.less'; export default class ErrorBoundary extends React.Component<{}, { hasError: boolean }> { static lastError: any = null; diff --git a/twake/frontend/src/app/scenes/Error/Error.tsx b/twake/frontend/src/app/views/error/index.tsx similarity index 86% rename from twake/frontend/src/app/scenes/Error/Error.tsx rename to twake/frontend/src/app/views/error/index.tsx index ff10ba453b..9d9a504ab6 100644 --- a/twake/frontend/src/app/scenes/Error/Error.tsx +++ b/twake/frontend/src/app/views/error/index.tsx @@ -1,10 +1,12 @@ import React from 'react'; -import Languages from 'services/languages/languages'; -import Emojione from 'components/Emojione/Emojione'; -import './Error.scss'; -import RouterServices from 'app/services/RouterService'; -import InitService from 'services/InitService'; -import ErrorBoundary from './ErrorBoundary'; + +import Languages from 'app/features/global/services/languages-service'; +import Emojione from 'components/emojione/emojione'; +import RouterServices from 'app/features/router/services/router-service'; +import InitService from 'app/features/global/services/init-service'; +import ErrorBoundary from './error-boundary'; + +import './styles.scss'; export default () => { let state = ErrorBoundary.lastError; diff --git a/twake/frontend/src/app/scenes/Error/Error.scss b/twake/frontend/src/app/views/error/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Error/Error.scss rename to twake/frontend/src/app/views/error/styles.scss diff --git a/twake/frontend/src/app/scenes/Integration/Components/Apps.js b/twake/frontend/src/app/views/integration/components/apps.js similarity index 100% rename from twake/frontend/src/app/scenes/Integration/Components/Apps.js rename to twake/frontend/src/app/views/integration/components/apps.js diff --git a/twake/frontend/src/app/scenes/Integration/Integration.tsx b/twake/frontend/src/app/views/integration/index.tsx similarity index 92% rename from twake/frontend/src/app/scenes/Integration/Integration.tsx rename to twake/frontend/src/app/views/integration/index.tsx index fa334ac6b2..c9763a86bb 100644 --- a/twake/frontend/src/app/scenes/Integration/Integration.tsx +++ b/twake/frontend/src/app/views/integration/index.tsx @@ -1,7 +1,9 @@ import React from 'react'; -import InitService from 'services/InitService'; -import Apps from './Components/Apps.js'; -import './Integration.scss'; + +import InitService from 'app/features/global/services/init-service'; +import Apps from './components/apps.js'; + +import './styles.scss'; export default (props: { children: React.ReactNode }): JSX.Element => { const server_infos = InitService.useWatcher( diff --git a/twake/frontend/src/app/scenes/Integration/Integration.scss b/twake/frontend/src/app/views/integration/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Integration/Integration.scss rename to twake/frontend/src/app/views/integration/styles.scss diff --git a/twake/frontend/src/app/views/join/index.tsx b/twake/frontend/src/app/views/join/index.tsx new file mode 100644 index 0000000000..813fa2d4f3 --- /dev/null +++ b/twake/frontend/src/app/views/join/index.tsx @@ -0,0 +1,151 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +import React, { useEffect, useState } from 'react'; +import { useParams } from 'react-router-dom'; +import { useCookies } from 'react-cookie'; +import { Button, Col, Divider, Layout, Row, Space, Typography } from 'antd'; + +import { + MagicLinksJoinResponse, + MagicLinksJoinService, +} from 'app/features/workspaces/services/magic-links-service'; +import Languages from 'app/features/global/services/languages-service'; +import RouterService from 'app/features/router/services/router-service'; +import InitService from 'app/features/global/services/init-service'; + +import './styles.scss'; + +const { Title, Text } = Typography; + +type PropsType = { + [key: string]: any; +}; + +type JoinError = { + title: string; + description: string; +}; + +export default (props: PropsType): JSX.Element => { + const [error, setError] = useState(); + const [info, setInfo] = useState(); + const [busy, setBusy] = useState(false); + const [cookies, setCookie] = useCookies(['pending-redirect']); + + const params = useParams() as any; + let service = new MagicLinksJoinService(params.token, (val: boolean) => setBusy(val)); + + useEffect(() => { + service + .getInfo() + .then(info => { + setInfo(info); + }) + .catch(() => + setError({ + title: Languages.t('scenes.join.wrong_link_title'), + description: Languages.t('scenes.join.wrong_link_description'), + }), + ); + }, []); + + const onJoinAccountBtnClick = () => { + if (!info) return null; + + if (info.auth_required) { + const origin = document.location.origin; + const currentPage = document.location.href; + const authUrl = `${InitService.server_infos?.configuration?.accounts?.console?.authority}/oauth2/authorize?invite=0&redirect_uri=${origin}`; + setCookie('pending-redirect', currentPage, { path: '/', maxAge: 60 * 60 }); + setBusy(true); + document.location.href = authUrl; + } else { + service + .join() + .then(resource => { + setBusy(true); + document.location.replace( + RouterService.generateRouteFromState({ + workspaceId: resource.workspace.id, + companyId: resource.company.id, + }), + ); + }) + .catch(err => { + setError(err.message); + }); + } + }; + + const onCreateCompanyBtnClick = () => { + console.log('onCreateCompanyBtnClick'); + }; + + return ( + + + + + {!error && !info && {Languages.t('scenes.join.loading')}} + + {error && ( + + + {error.title}{' '} + <span role="img" aria-label=""> + ✋ + </span> + + {error.description} + + + + )} + + {info && ( + + + {Languages.t('scenes.join.join_workspace_from_company', [ + info.company.name, + info.workspace.name, + ])}{' '} + <span role="img" aria-label=""> + 👋 + </span> + + {Languages.t('scenes.join.twake_description')} + + {info.auth_required ? ( + + ) : ( + + )} + + )} + + + + + ); +}; diff --git a/twake/frontend/src/app/scenes/Join/Join.scss b/twake/frontend/src/app/views/join/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Join/Join.scss rename to twake/frontend/src/app/views/join/styles.scss diff --git a/twake/frontend/src/app/scenes/Login/Console/ConsoleLogin.tsx b/twake/frontend/src/app/views/login/console/console-login.tsx similarity index 62% rename from twake/frontend/src/app/scenes/Login/Console/ConsoleLogin.tsx rename to twake/frontend/src/app/views/login/console/console-login.tsx index 2df5ce9d95..d334a30e4b 100644 --- a/twake/frontend/src/app/scenes/Login/Console/ConsoleLogin.tsx +++ b/twake/frontend/src/app/views/login/console/console-login.tsx @@ -1,7 +1,7 @@ // eslint-disable-next-line @typescript-eslint/no-use-before-define import React from 'react'; -import { useCurrentUser } from 'app/state/recoil/hooks/useCurrentUser'; -import RouterService from 'app/services/RouterService'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import RouterService from 'app/features/router/services/router-service'; export default () => { const { user } = useCurrentUser(); diff --git a/twake/frontend/src/app/scenes/Login/Internal/Error/Error.tsx b/twake/frontend/src/app/views/login/internal/error/index.tsx similarity index 79% rename from twake/frontend/src/app/scenes/Login/Internal/Error/Error.tsx rename to twake/frontend/src/app/views/login/internal/error/index.tsx index 44ca1ebda8..4ce90dc864 100755 --- a/twake/frontend/src/app/scenes/Login/Internal/Error/Error.tsx +++ b/twake/frontend/src/app/views/login/internal/error/index.tsx @@ -1,9 +1,9 @@ import React from 'react'; -import Languages from 'services/languages/languages'; -import Emojione from 'components/Emojione/Emojione'; -import './Error.scss'; +import Languages from 'app/features/global/services/languages-service'; +import Emojione from 'components/emojione/emojione'; +import './styles.scss'; import { Button } from 'antd'; -import LoginService from 'app/services/login/LoginService'; +import LoginService from 'app/features/auth/login-service'; export default () => { return ( diff --git a/twake/frontend/src/app/scenes/Login/Internal/Error/Error.scss b/twake/frontend/src/app/views/login/internal/error/styles.scss similarity index 100% rename from twake/frontend/src/app/scenes/Login/Internal/Error/Error.scss rename to twake/frontend/src/app/views/login/internal/error/styles.scss diff --git a/twake/frontend/src/app/scenes/Login/Internal/ForgotPassword/ForgotPassword.js b/twake/frontend/src/app/views/login/internal/forgot-password/index.js similarity index 96% rename from twake/frontend/src/app/scenes/Login/Internal/ForgotPassword/ForgotPassword.js rename to twake/frontend/src/app/views/login/internal/forgot-password/index.js index c46f551672..061656f453 100755 --- a/twake/frontend/src/app/scenes/Login/Internal/ForgotPassword/ForgotPassword.js +++ b/twake/frontend/src/app/views/login/internal/forgot-password/index.js @@ -1,12 +1,12 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import LoginService from 'app/services/login/LoginService'; -import AccountService from 'services/login/account.js'; -import Emojione from 'components/Emojione/Emojione'; -import StepCounter from 'components/StepCounter/StepCounter.js'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import Input from 'components/Inputs/Input.js'; +import Languages from 'app/features/global/services/languages-service'; +import LoginService from 'app/features/auth/login-service'; +import AccountService from 'app/deprecated/login/account.js'; +import Emojione from 'components/emojione/emojione'; +import StepCounter from 'components/step-counter/step-counter.js'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import Input from 'components/inputs/input.js'; import { Typography } from 'antd'; export default class ForgotPassword extends Component { diff --git a/twake/frontend/src/app/scenes/Login/Internal/InternalLogin.tsx b/twake/frontend/src/app/views/login/internal/internal-login.tsx similarity index 81% rename from twake/frontend/src/app/scenes/Login/Internal/InternalLogin.tsx rename to twake/frontend/src/app/views/login/internal/internal-login.tsx index 80f5b29577..4f7e6fcfc6 100755 --- a/twake/frontend/src/app/scenes/Login/Internal/InternalLogin.tsx +++ b/twake/frontend/src/app/views/login/internal/internal-login.tsx @@ -1,18 +1,19 @@ -import React, { useEffect, useState } from 'react'; +import React, { useEffect } from 'react'; +import { Typography } from 'antd'; -import Globals from 'services/Globals'; -import Languages from 'services/languages/languages'; -import InitService from 'services/InitService'; -import LoginService from 'app/services/login/LoginService'; -import Icon from 'components/Icon/Icon.js'; -import './login.scss'; +import Globals from 'app/features/global/services/globals-twake-app-service'; +import Languages from 'app/features/global/services/languages-service'; +import InitService from 'app/features/global/services/init-service'; +import LoginService from 'app/features/auth/login-service'; +import Icon from 'app/components/icon/icon.js'; -import LoginView from './LoginView/LoginView.js'; -import Signin from './Signin/Signin.js'; -import VerifyMail from './VerifyMail/VerifyMail.js'; -import ForgotPassword from './ForgotPassword/ForgotPassword.js'; -import Error from './Error/Error'; -import { Typography } from 'antd'; +import LoginView from './login-view/login-view.js'; +import Signin from './signin/signin.js'; +import VerifyMail from './verify-mail/verify-mail.js'; +import ForgotPassword from './forgot-password/index.js'; +import Error from './error'; + +import './login.scss'; export default () => { LoginService.useListener(); @@ -36,7 +37,7 @@ export default () => { } return ( -
+
{server_infos_loaded && !server_infos?.configuration?.branding?.name && (
)} diff --git a/twake/frontend/src/app/scenes/Login/Internal/LoginView/LoginView.js b/twake/frontend/src/app/views/login/internal/login-view/login-view.js similarity index 93% rename from twake/frontend/src/app/scenes/Login/Internal/LoginView/LoginView.js rename to twake/frontend/src/app/views/login/internal/login-view/login-view.js index 8ead88918e..cd19847570 100755 --- a/twake/frontend/src/app/scenes/Login/Internal/LoginView/LoginView.js +++ b/twake/frontend/src/app/views/login/internal/login-view/login-view.js @@ -1,11 +1,11 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import LoginService from 'app/services/login/LoginService'; -import Emojione from 'components/Emojione/Emojione'; -import Button from 'components/Buttons/Button.js'; -import Input from 'components/Inputs/Input.js'; -import InitService from 'services/InitService'; +import Languages from 'app/features/global/services/languages-service'; +import LoginService from 'app/features/auth/login-service'; +import Emojione from 'components/emojione/emojione'; +import Button from 'components/buttons/button.js'; +import Input from 'components/inputs/input.js'; +import InitService from 'app/features/global/services/init-service'; import { Typography } from 'antd'; export default class LoginView extends Component { constructor() { diff --git a/twake/frontend/src/app/scenes/Login/Internal/login.scss b/twake/frontend/src/app/views/login/internal/login.scss similarity index 100% rename from twake/frontend/src/app/scenes/Login/Internal/login.scss rename to twake/frontend/src/app/views/login/internal/login.scss diff --git a/twake/frontend/src/app/scenes/Login/Internal/Signin/Signin.js b/twake/frontend/src/app/views/login/internal/signin/signin.js similarity index 94% rename from twake/frontend/src/app/scenes/Login/Internal/Signin/Signin.js rename to twake/frontend/src/app/views/login/internal/signin/signin.js index 3db54a8bfe..61af92b326 100755 --- a/twake/frontend/src/app/scenes/Login/Internal/Signin/Signin.js +++ b/twake/frontend/src/app/views/login/internal/signin/signin.js @@ -1,14 +1,14 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import LoginService from 'app/services/login/LoginService'; -import AccountService from 'services/login/account'; -import Emojione from 'components/Emojione/Emojione'; -import StepCounter from 'components/StepCounter/StepCounter.js'; -import ButtonWithTimeout from 'components/Buttons/ButtonWithTimeout.js'; -import Input from 'components/Inputs/Input.js'; -import Checkbox from 'components/Inputs/Checkbox.js'; -import InitService from 'services/InitService'; +import Languages from 'app/features/global/services/languages-service'; +import LoginService from 'app/features/auth/login-service'; +import AccountService from 'app/deprecated/login/account'; +import Emojione from 'components/emojione/emojione'; +import StepCounter from 'components/step-counter/step-counter.js'; +import ButtonWithTimeout from 'components/buttons/button-with-timeout.js'; +import Input from 'components/inputs/input.js'; +import Checkbox from 'components/inputs/checkbox.js'; +import InitService from 'app/features/global/services/init-service'; export default class Signin extends Component { constructor() { super(); diff --git a/twake/frontend/src/app/scenes/Login/Internal/VerifyMail/VerifyMail.js b/twake/frontend/src/app/views/login/internal/verify-mail/verify-mail.js similarity index 90% rename from twake/frontend/src/app/scenes/Login/Internal/VerifyMail/VerifyMail.js rename to twake/frontend/src/app/views/login/internal/verify-mail/verify-mail.js index 0c0ea51399..2381e72984 100755 --- a/twake/frontend/src/app/scenes/Login/Internal/VerifyMail/VerifyMail.js +++ b/twake/frontend/src/app/views/login/internal/verify-mail/verify-mail.js @@ -1,10 +1,10 @@ import React, { Component } from 'react'; -import Languages from 'services/languages/languages'; -import LoginService from 'app/services/login/LoginService'; -import AccountService from 'services/login/account'; -import Emojione from 'components/Emojione/Emojione'; -import WindowState from 'services/utils/window'; +import Languages from 'app/features/global/services/languages-service'; +import LoginService from 'app/features/auth/login-service'; +import AccountService from 'app/deprecated/login/account'; +import Emojione from 'components/emojione/emojione'; +import WindowState from 'app/features/global/utils/window'; export default class VerifyMail extends Component { constructor() { diff --git a/twake/frontend/src/app/views/login/login.tsx b/twake/frontend/src/app/views/login/login.tsx new file mode 100644 index 0000000000..7fd6a0029f --- /dev/null +++ b/twake/frontend/src/app/views/login/login.tsx @@ -0,0 +1,17 @@ +// eslint-disable-next-line @typescript-eslint/no-use-before-define +import React, { lazy, Suspense } from 'react'; + +import InitService from 'app/features/global/services/init-service'; + +const InternalLogin = lazy(() => import('app/views/login/internal/internal-login')); +const ConsoleLogin = lazy(() => import('app/views/login/console/console-login')); + +export default () => ( + }> + {InitService.server_infos?.configuration?.accounts.type === 'console' ? ( + + ) : ( + + )} + +); diff --git a/twake/frontend/src/app/scenes/Login/Logout.tsx b/twake/frontend/src/app/views/login/logout.tsx similarity index 82% rename from twake/frontend/src/app/scenes/Login/Logout.tsx rename to twake/frontend/src/app/views/login/logout.tsx index b3b5d93dbf..d598f38d2e 100644 --- a/twake/frontend/src/app/scenes/Login/Logout.tsx +++ b/twake/frontend/src/app/views/login/logout.tsx @@ -1,7 +1,7 @@ // eslint-disable-next-line @typescript-eslint/no-use-before-define import React, { useEffect } from 'react'; -import LoginService from 'app/services/login/LoginService'; +import LoginService from 'app/features/auth/login-service'; export default () => { useEffect(() => { @@ -14,4 +14,4 @@ export default () => { }, []); return <>; -}; \ No newline at end of file +}; diff --git a/twake/frontend/tsconfig.paths.json b/twake/frontend/tsconfig.paths.json index a25b11b6b5..8d93b8126f 100644 --- a/twake/frontend/tsconfig.paths.json +++ b/twake/frontend/tsconfig.paths.json @@ -4,11 +4,12 @@ "paths": { "app/*": ["./src/app/*"], "environment/*": ["./src/app/environment/*"], - "common/*": ["./src/app/common/*"], "components/*": ["./src/app/components/*"], + "features/*": ["./src/app/features/*"], "services/*": ["./src/app/services/*"], - "scenes/*": ["./src/app/scenes/*"], - "apps/*": ["./src/app/apps/*"] + "deprecated/*": ["./src/app/deprecated/*"], + "styles/*": ["./src/app/styles/*"], + "views/*": ["./src/app/views/*"] } } } From 2f0f2ac8a9fada52b526677006f75e08d0382f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Vieira?= <36481167+stephanevieira75@users.noreply.github.com> Date: Wed, 26 Jan 2022 16:34:37 +0100 Subject: [PATCH 023/276] =?UTF-8?q?=F0=9F=9B=A0=20#1861=20Fix=20onboarding?= =?UTF-8?q?=20tour=20to=20show=20only=20once=20(#1902)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #1861 Fix onboarding tour to show only once * #1861 usetiful-token environment should be optional --- twake/frontend/src/app/environment/types.ts | 1 + .../app/features/global/hooks/use-usetiful.ts | 34 +++++++++++++++++++ twake/frontend/src/app/views/client/index.tsx | 3 ++ 3 files changed, 38 insertions(+) create mode 100644 twake/frontend/src/app/features/global/hooks/use-usetiful.ts diff --git a/twake/frontend/src/app/environment/types.ts b/twake/frontend/src/app/environment/types.ts index c74054ec9f..34a55e039d 100644 --- a/twake/frontend/src/app/environment/types.ts +++ b/twake/frontend/src/app/environment/types.ts @@ -7,6 +7,7 @@ export type EnvironmentType = { websocket_url: string; sentry_dsn?: string | boolean; + usetiful_token?: string; }; export type EnvironmentVersionType = { diff --git a/twake/frontend/src/app/features/global/hooks/use-usetiful.ts b/twake/frontend/src/app/features/global/hooks/use-usetiful.ts new file mode 100644 index 0000000000..8388d331a2 --- /dev/null +++ b/twake/frontend/src/app/features/global/hooks/use-usetiful.ts @@ -0,0 +1,34 @@ +import { useEffect } from 'react'; + +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import Globals from 'app/features/global/services/globals-twake-app-service'; +import Logger from 'app/features/global/framework/logger-service'; + +let initiatedService = false; +const logger = Logger.getLogger(`app/features/global/use-usetiful`); +export default function useUsetiful() { + const { user } = useCurrentUser(); + + useEffect(() => { + if (user && !initiatedService) { + initiatedService = true; + + if (Globals.environment.usetiful_token?.length) { + (window as any).usetifulTags = user.id; + (function (w, d, s) { + var a = d.getElementsByTagName('head')[0]; + var r = d.createElement('script'); + r.async = true; + r.src = s; + r.setAttribute('id', 'usetifulScript'); + r.dataset.token = Globals.environment.usetiful_token; + a.appendChild(r); + })(window, document, 'https://www.usetiful.com/dist/usetiful.js'); + } + } else { + if (!initiatedService) { + logger.warn(`Usetiful not enabled`); + } + } + }, [user]); +} diff --git a/twake/frontend/src/app/views/client/index.tsx b/twake/frontend/src/app/views/client/index.tsx index aaaf8983d6..b6fb761be7 100755 --- a/twake/frontend/src/app/views/client/index.tsx +++ b/twake/frontend/src/app/views/client/index.tsx @@ -23,6 +23,7 @@ import CompanyStatusComponent from 'app/components/on-boarding/company-status-co import UserContext from 'app/features/users/state/integration/user-context'; import { useCurrentUser, useCurrentUserRealtime } from 'app/features/users/hooks/use-current-user'; import { useFeatureToggles } from 'app/components/locked-features-components/feature-toggles-hooks'; +import useUsetiful from 'app/features/global/hooks/use-usetiful'; import './styles.scss'; @@ -32,6 +33,8 @@ export default React.memo((): JSX.Element => { useCurrentUserRealtime(); const { FeatureToggles, activeFeatureNames } = useFeatureToggles(); + useUsetiful(); + PopupService.useListener(); Languages.useListener(); From 558583ef6a313e73c223847ba770f8faba8c13d9 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Thu, 27 Jan 2022 09:54:53 +0100 Subject: [PATCH 024/276] =?UTF-8?q?=E2=9A=A1=EF=B8=8F=20Make=20it=20faster?= =?UTF-8?q?=20when=20getting=20users=20included=20in=20messages=20(#1905)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Make it faster when getting users included in messages * Fix #1891 * Fix #1807 * Fix #1880 and #1890 * Do not do unwanted saves * Fix node-fetch version not compatible * Should detect changes in message files array too --- twake/backend/node/package.json | 9 +- .../messages/services/messages/service.ts | 25 ++-- .../messages/web/controllers/views.ts | 13 +- .../node/src/services/messages/web/routes.ts | 8 +- twake/backend/node/src/services/user/api.ts | 1 + .../services/user/services/users/service.ts | 11 ++ twake/backend/node/yarn.lock | 119 ++++++++++-------- twake/frontend/yarn.lock | 14 +-- 8 files changed, 116 insertions(+), 84 deletions(-) diff --git a/twake/backend/node/package.json b/twake/backend/node/package.json index d3610530e5..85c9f6f6dc 100644 --- a/twake/backend/node/package.json +++ b/twake/backend/node/package.json @@ -64,7 +64,7 @@ "@types/mongodb": "^4.0.7", "@types/node": "^14.11.2", "@types/node-cron": "^3.0.0", - "@types/node-fetch": "^2.5.10", + "@types/node-fetch": "^2.5.12", "@types/node-uuid": "^0.0.28", "@types/pdf-image": "^2.0.1", "@types/pino": "^6.3.2", @@ -98,8 +98,8 @@ }, "dependencies": { "@elastic/elasticsearch": "7", - "@sentry/node": "^6.13.3", - "@sentry/tracing": "^6.13.3", + "@sentry/node": "^6.15.0", + "@sentry/tracing": "^6.15.0", "amqp-connection-manager": "^3.7.0", "amqplib": "^0.7.1", "analytics-node": "^5.0.0", @@ -126,8 +126,9 @@ "moment": "^2.29.1", "mongodb": "^4.1.0", "multistream": "^4.1.0", + "node-cache": "^5.1.2", "node-cron": "^3.0.0", - "node-fetch": "^2.6.5", + "node-fetch": "^2.6.6", "node-uuid": "^1.4.8", "ora": "^5.4.0", "pdf2pic": "^2.1.4", diff --git a/twake/backend/node/src/services/messages/services/messages/service.ts b/twake/backend/node/src/services/messages/services/messages/service.ts index ae40b96e37..34f42cff08 100644 --- a/twake/backend/node/src/services/messages/services/messages/service.ts +++ b/twake/backend/node/src/services/messages/services/messages/service.ts @@ -459,11 +459,7 @@ export class ThreadMessagesService implements MessageThreadMessagesServiceAPI { const users: UserObject[] = []; for (const id of ids) { - users.push( - await this.user.formatUser( - await this.user.users.get({ id }, { user: { id: null, server_request: true } }), - ), - ); + users.push(await this.user.formatUser(await this.user.users.getCached({ id }))); } let application = null; @@ -576,6 +572,8 @@ export class ThreadMessagesService implements MessageThreadMessagesServiceAPI { return message; } + let didChange = false; + files = files.map(f => { f.message_id = message.id; return f; @@ -598,10 +596,11 @@ export class ThreadMessagesService implements MessageThreadMessagesServiceAPI { } //Ensure all files in the file object are in the message + const previousMessageFiles = message.files; message.files = []; for (const file of files) { - const entity = - existingMsgFiles.filter(e => sameFile(e.metadata, file.metadata))[0] || new MessageFile(); + const existing = existingMsgFiles.filter(e => sameFile(e.metadata, file.metadata))[0]; + const entity = existing || new MessageFile(); entity.message_id = message.id; entity.id = file.id || undefined; entity.company_id = file.company_id; @@ -634,12 +633,20 @@ export class ThreadMessagesService implements MessageThreadMessagesServiceAPI { entity.metadata = file.metadata; - await this.msgFilesRepository.save(entity); + if (!existing || !_.isEqual(existing.metadata, entity.metadata)) { + didChange = true; + + await this.msgFilesRepository.save(entity); + } message.files.push(entity); } - await this.repository.save(message); + if (!_.isEqual(previousMessageFiles.sort(), message.files.sort())) didChange = true; + + if (didChange) { + await this.repository.save(message); + } return message; } diff --git a/twake/backend/node/src/services/messages/web/controllers/views.ts b/twake/backend/node/src/services/messages/web/controllers/views.ts index b3ef64138b..2d0fd5b0d6 100644 --- a/twake/backend/node/src/services/messages/web/controllers/views.ts +++ b/twake/backend/node/src/services/messages/web/controllers/views.ts @@ -19,18 +19,10 @@ import { import { keyBy } from "lodash"; import { RealtimeServiceAPI } from "../../../../core/platform/services/realtime/api"; -export class ViewsController - implements - CrudController< - ResourceGetResponse, - ResourceCreateResponse, - ResourceListResponse, - ResourceDeleteResponse - > -{ +export class ViewsController { constructor(protected realtime: RealtimeServiceAPI, protected service: MessageServiceAPI) {} - async list( + async feed( request: FastifyRequest<{ Querystring: MessageViewListQueryParameters; Params: { @@ -68,6 +60,7 @@ export class ViewsController let entities = []; if (request.query.include_users) { + //Fixme, this takes a very long time for (const msg of resources.getEntities()) { entities.push(await this.service.messages.includeUsersInMessageWithReplies(msg)); } diff --git a/twake/backend/node/src/services/messages/web/routes.ts b/twake/backend/node/src/services/messages/web/routes.ts index 575730216b..111814a44d 100644 --- a/twake/backend/node/src/services/messages/web/routes.ts +++ b/twake/backend/node/src/services/messages/web/routes.ts @@ -136,28 +136,28 @@ const routes: FastifyPluginCallback<{ service: MessageServiceAPI; realtime: Real method: "GET", url: "/companies/:company_id/workspaces/:workspace_id/channels/:channel_id/feed", preValidation: [fastify.authenticate], - handler: viewsController.list.bind(viewsController), + handler: viewsController.feed.bind(viewsController), }); fastify.route({ method: "GET", url: "/companies/:company_id/files", preValidation: [fastify.authenticate], - handler: viewsController.list.bind(viewsController), + handler: viewsController.feed.bind(viewsController), }); fastify.route({ method: "GET", url: "/companies/:company_id/bookmarks", preValidation: [fastify.authenticate], - handler: viewsController.list.bind(viewsController), + handler: viewsController.feed.bind(viewsController), }); fastify.route({ method: "GET", url: "/companies/:company_id/inbox", preValidation: [fastify.authenticate], - handler: viewsController.list.bind(viewsController), + handler: viewsController.feed.bind(viewsController), }); fastify.route({ diff --git a/twake/backend/node/src/services/user/api.ts b/twake/backend/node/src/services/user/api.ts index 2997e4f01c..4622ae6f18 100644 --- a/twake/backend/node/src/services/user/api.ts +++ b/twake/backend/node/src/services/user/api.ts @@ -52,6 +52,7 @@ export interface UsersServiceAPI context?: ExecutionContext, ): Promise>; + getCached(pk: UserPrimaryKey): Promise; getByUsername(username: string): Promise; getByEmail(email: string): Promise; getByEmails(email: string[]): Promise; diff --git a/twake/backend/node/src/services/user/services/users/service.ts b/twake/backend/node/src/services/user/services/users/service.ts index 49eda75a67..a94b66b962 100644 --- a/twake/backend/node/src/services/user/services/users/service.ts +++ b/twake/backend/node/src/services/user/services/users/service.ts @@ -32,6 +32,7 @@ import { PlatformServicesAPI } from "../../../../core/platform/services/platform import { isNumber } from "lodash"; import { RealtimeSaved } from "../../../../core/platform/framework"; import { getUserRoom } from "../../realtime"; +import NodeCache from "node-cache"; export class UserService implements UsersServiceAPI { version: "1"; @@ -40,6 +41,7 @@ export class UserService implements UsersServiceAPI { companyUserRepository: Repository; extUserRepository: Repository; private deviceRepository: Repository; + private cache: NodeCache; constructor(private platformServices: PlatformServicesAPI) {} @@ -60,6 +62,8 @@ export class UserService implements UsersServiceAPI { Device, ); + this.cache = new NodeCache({ stdTTL: 0.2, checkperiod: 120 }); + return this; } @@ -206,6 +210,13 @@ export class UserService implements UsersServiceAPI { return await this.repository.findOne(pk); } + async getCached(pk: UserPrimaryKey): Promise { + if (this.cache.has(pk.id)) return this.cache.get(pk.id); + const entity = await this.get(pk); + this.cache.set(pk.id, entity); + return entity; + } + async getByUsername(username: string): Promise { return await this.repository.findOne({ username_canonical: (username || "").toLocaleLowerCase(), diff --git a/twake/backend/node/yarn.lock b/twake/backend/node/yarn.lock index 909484e654..52d71d9b3a 100644 --- a/twake/backend/node/yarn.lock +++ b/twake/backend/node/yarn.lock @@ -1225,72 +1225,72 @@ component-type "^1.2.1" join-component "^1.1.0" -"@sentry/core@6.13.3": - version "6.13.3" - resolved "https://registry.npmjs.org/@sentry/core/-/core-6.13.3.tgz" - integrity sha512-obm3SjgCk8A7nB37b2AU1eq1q7gMoJRrGMv9VRIyfcG0Wlz/5lJ9O3ohUk+YZaaVfZMxXn6hFtsBiOWmlv7IIA== - dependencies: - "@sentry/hub" "6.13.3" - "@sentry/minimal" "6.13.3" - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" +"@sentry/core@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" + integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== + dependencies: + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" tslib "^1.9.3" -"@sentry/hub@6.13.3": - version "6.13.3" - resolved "https://registry.npmjs.org/@sentry/hub/-/hub-6.13.3.tgz" - integrity sha512-eYppBVqvhs5cvm33snW2sxfcw6G20/74RbBn+E4WDo15hozis89kU7ZCJDOPkXuag3v1h9igns/kM6PNBb41dw== +"@sentry/hub@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" + integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== dependencies: - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" tslib "^1.9.3" -"@sentry/minimal@6.13.3": - version "6.13.3" - resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.13.3.tgz" - integrity sha512-63MlYYRni3fs5Bh8XBAfVZ+ctDdWg0fapSTP1ydIC37fKvbE+5zhyUqwrEKBIiclEApg1VKX7bkKxVdu/vsFdw== +"@sentry/minimal@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" + integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== dependencies: - "@sentry/hub" "6.13.3" - "@sentry/types" "6.13.3" + "@sentry/hub" "6.17.2" + "@sentry/types" "6.17.2" tslib "^1.9.3" -"@sentry/node@^6.13.3": - version "6.13.3" - resolved "https://registry.npmjs.org/@sentry/node/-/node-6.13.3.tgz" - integrity sha512-ZeZSw+TcPcf4e0j7iEqNMtoVmz+WFW/TEoGokXIwysZqSgchKdAXDHqn+CqUqFan7d76JcJmzztAUK2JruQ2Kg== +"@sentry/node@^6.15.0": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" + integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== dependencies: - "@sentry/core" "6.13.3" - "@sentry/hub" "6.13.3" - "@sentry/tracing" "6.13.3" - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" + "@sentry/core" "6.17.2" + "@sentry/hub" "6.17.2" + "@sentry/tracing" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/tracing@6.13.3", "@sentry/tracing@^6.13.3": - version "6.13.3" - resolved "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.13.3.tgz" - integrity sha512-yyOFIhqlprPM0g4f35Icear3eZk2mwyYcGEzljJfY2iU6pJwj1lzia5PfSwiCW7jFGMmlBJNhOAIpfhlliZi8Q== +"@sentry/tracing@6.17.2", "@sentry/tracing@^6.15.0": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" + integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== dependencies: - "@sentry/hub" "6.13.3" - "@sentry/minimal" "6.13.3" - "@sentry/types" "6.13.3" - "@sentry/utils" "6.13.3" + "@sentry/hub" "6.17.2" + "@sentry/minimal" "6.17.2" + "@sentry/types" "6.17.2" + "@sentry/utils" "6.17.2" tslib "^1.9.3" -"@sentry/types@6.13.3": - version "6.13.3" - resolved "https://registry.npmjs.org/@sentry/types/-/types-6.13.3.tgz" - integrity sha512-Vrz5CdhaTRSvCQjSyIFIaV9PodjAVFkzJkTRxyY7P77RcegMsRSsG1yzlvCtA99zG9+e6MfoJOgbOCwuZids5A== +"@sentry/types@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" + integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== -"@sentry/utils@6.13.3": - version "6.13.3" - resolved "https://registry.npmjs.org/@sentry/utils/-/utils-6.13.3.tgz" - integrity sha512-zYFuFH3MaYtBZTeJ4Yajg7pDf0pM3MWs3+9k5my9Fd+eqNcl7dYQYJbT9gyC0HXK1QI4CAMNNlHNl4YXhF91ag== +"@sentry/utils@6.17.2": + version "6.17.2" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" + integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== dependencies: - "@sentry/types" "6.13.3" + "@sentry/types" "6.17.2" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": @@ -1523,9 +1523,9 @@ resolved "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.0.tgz" integrity sha512-RNBIyVwa/1v2r8/SqK8tadH2sJlFRAo5Ghac/cOcCv4Kp94m0I03UmAh9WVhCqS9ZdB84dF3x47p9aTw8E4c4A== -"@types/node-fetch@^2.5.10": +"@types/node-fetch@^2.5.12": version "2.5.12" - resolved "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== dependencies: "@types/node" "*" @@ -2629,6 +2629,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone@2.x: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + clone@^1.0.2: version "1.0.4" resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" @@ -5823,6 +5828,13 @@ node-addon-api@^4.1.0: resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz" integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q== +node-cache@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" + integrity sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg== + dependencies: + clone "2.x" + node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz" @@ -5835,13 +5847,20 @@ node-cron@^3.0.0: dependencies: moment-timezone "^0.5.31" -node-fetch@^2.6.1, node-fetch@^2.6.5: +node-fetch@^2.6.1: version "2.6.6" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz" integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.6: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" diff --git a/twake/frontend/yarn.lock b/twake/frontend/yarn.lock index 5ba8363934..4cfbca46e6 100644 --- a/twake/frontend/yarn.lock +++ b/twake/frontend/yarn.lock @@ -8123,10 +8123,10 @@ flush-write-stream@^1.0.0: readable-stream "^2.3.6" follow-redirects@^1.0.0: - version "1.14.4" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.4.tgz#838fdf48a8bbdd79e52ee51fb1c94e3ed98b9379" - integrity sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g== - + version "1.14.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.7.tgz#2004c02eb9436eee9a21446a6477debf17e81685" + integrity sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" @@ -11455,9 +11455,9 @@ nan@^2.12.1, nan@^2.13.2: integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== nanoid@^3.1.28: - version "3.1.30" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.30.tgz#63f93cc548d2a113dc5dfbc63bfa09e2b9b64362" - integrity sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ== + version "3.2.0" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.2.0.tgz#62667522da6673971cca916a6d3eff3f415ff80c" + integrity sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA== nanomatch@^1.2.9: version "1.2.13" From 77946154075515328e34360d0c2650c87fbc1d85 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Thu, 27 Jan 2022 12:43:33 +0100 Subject: [PATCH 025/276] =?UTF-8?q?=F0=9F=9B=A0=20Fix=20company=20schema?= =?UTF-8?q?=20(#1908)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- twake/backend/node/src/services/user/web/routes.ts | 4 ++-- twake/backend/node/src/services/user/web/schemas.ts | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/twake/backend/node/src/services/user/web/routes.ts b/twake/backend/node/src/services/user/web/routes.ts index dd8bd7bbde..412785982b 100644 --- a/twake/backend/node/src/services/user/web/routes.ts +++ b/twake/backend/node/src/services/user/web/routes.ts @@ -71,7 +71,7 @@ const routes: FastifyPluginCallback<{ url: `${usersUrl}/:id/companies`, preHandler: accessControl, preValidation: [fastify.authenticate], - //schema: getUserCompaniesSchema, //Fixme currently not working because we don't know features in advances and so it doesn't pass + schema: getUserCompaniesSchema, //Fixme currently not working because we don't know features in advances and so it doesn't pass handler: usersController.getUserCompanies.bind(usersController), }); @@ -80,7 +80,7 @@ const routes: FastifyPluginCallback<{ method: "GET", url: "/companies/:id", preValidation: [fastify.authenticateOptional], - //schema: getCompanySchema, //Fixme currently not working because we don't know features in advances and so it doesn't pass + schema: getCompanySchema, //Fixme currently not working because we don't know features in advances and so it doesn't pass handler: usersController.getCompany.bind(usersController), }); diff --git a/twake/backend/node/src/services/user/web/schemas.ts b/twake/backend/node/src/services/user/web/schemas.ts index b075736b2c..c0a5bd89aa 100644 --- a/twake/backend/node/src/services/user/web/schemas.ts +++ b/twake/backend/node/src/services/user/web/schemas.ts @@ -62,6 +62,16 @@ const companyObjectSchema = { name: { type: "string" }, features: { type: "object", + properties: { + "chat:edit_files": { type: "boolean" }, + "chat:guests": { type: "boolean" }, + "chat:message_history": { type: "boolean" }, + "chat:multiple_workspaces": { type: "boolean" }, + "chat:unlimited_storage": { type: "boolean" }, + guests: { type: "number" }, + members: { type: "number" }, + storage: { type: "number" }, + }, }, }, }, From f4db43897f5f8e5f3d2f618cce96cce991ef2578 Mon Sep 17 00:00:00 2001 From: Roman Bykovskiy <8026787@gmail.com> Date: Mon, 31 Jan 2022 13:07:37 +0300 Subject: [PATCH 026/276] =?UTF-8?q?=F0=9F=8C=9F=20Application=20node=20(#1?= =?UTF-8?q?909)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Move the notifyApp to node (on endpoint /applications/:application_id/event Hooks events coming from Twake signed * typo fix * final fixes and checks * back to origins * super merge w develop * merge * tests fix --- twake/backend/node/package-lock.json | 16387 +--------------- .../node/src/cli/cmds/applications_cmds/ls.ts | 6 +- .../src/cli/cmds/applications_cmds/publish.ts | 10 +- .../cli/cmds/applications_cmds/unpublish.ts | 10 +- .../cmds/generate_cmds/users-and-companies.ts | 7 + .../platform/framework/api/crud-service.ts | 22 +- .../src/core/platform/framework/pubsub.ts | 10 +- .../core/platform/services/realtime/index.ts | 9 +- .../core/platform/services/realtime/types.ts | 14 + .../node/src/services/applications/api.ts | 9 + .../applications/services/applications.ts | 89 + .../web/controllers/applications.ts | 150 +- .../src/services/applications/web/routes.ts | 43 +- .../src/services/applications/web/schemas.ts | 14 + .../src/services/applications/web/types.ts | 9 + .../applicationsapi/web/controllers/index.ts | 52 +- .../services/applicationsapi/web/routes.ts | 11 +- .../services/applicationsapi/web/schemas.ts | 12 + .../src/services/applicationsapi/web/types.ts | 6 + .../services/channel/default/service.ts | 4 +- .../channel/pending-emails/service.ts | 4 +- .../channels/services/channel/service.ts | 32 +- .../channels/services/member/service.ts | 24 +- .../channels/web/controllers/channel.ts | 6 +- .../channels/web/controllers/member.ts | 8 +- .../services/channels/web/controllers/tab.ts | 4 +- .../src/services/console/clients/remote.ts | 22 +- .../src/services/console/web/controller.ts | 12 +- .../node/src/services/files/services/index.ts | 4 +- .../messages/services/messages/service.ts | 1 - .../notifications/services/badges/service.ts | 4 +- .../services/mobile-push/service.ts | 4 +- .../services/preferences/service.ts | 4 +- .../user/services/companies/service.ts | 6 +- .../services/user/services/users/service.ts | 10 +- .../node/src/services/user/web/controller.ts | 10 +- .../workspaces/services/workspace/service.ts | 12 +- .../controllers/workspace-invite-tokens.ts | 10 +- .../web/controllers/workspace-users.ts | 10 +- .../workspaces/web/controllers/workspaces.ts | 12 +- twake/backend/node/src/utils/handleError.ts | 6 +- .../node/src/utils/password-encoder.ts | 4 +- .../application/application-events.spec.ts | 133 + twake/backend/node/test/e2e/setup/index.ts | 13 +- twake/backend/node/test/e2e/utils.api.ts | 34 +- twake/backend/node/yarn.lock | 14421 +++++++------- .../configurators/config-body-layer.js | 19 +- .../deprecated/workspaces/workspaces_apps.js | 10 +- .../app/features/global/hooks/use-realtime.ts | 26 +- .../features/global/types/realtime-types.ts | 24 +- .../features/users/hooks/use-current-user.ts | 64 +- .../workspaces/hooks/use-workspaces.ts | 4 +- 52 files changed, 8140 insertions(+), 23691 deletions(-) create mode 100644 twake/backend/node/test/e2e/application/application-events.spec.ts diff --git a/twake/backend/node/package-lock.json b/twake/backend/node/package-lock.json index ca4b527d1b..66afb4d62c 100644 --- a/twake/backend/node/package-lock.json +++ b/twake/backend/node/package-lock.json @@ -1,16259 +1,8 @@ { "name": "@twake/twake-backend", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "@twake/twake-backend", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "@elastic/elasticsearch": "7", - "@sentry/node": "^6.13.3", - "@sentry/tracing": "^6.13.3", - "amqp-connection-manager": "^3.7.0", - "amqplib": "^0.7.1", - "analytics-node": "^5.0.0", - "axios": "^0.21.3", - "bcrypt": "^5.0.1", - "cassandra-driver": "^4.6.0", - "class-transformer": "^0.3.1", - "cli-table": "^0.3.6", - "config": "^3.3.2", - "deep-object-diff": "^1.1.0", - "fastify": "3.22.1", - "fastify-cors": "^4.1.0", - "fastify-formbody": "^5.0.0", - "fastify-jwt": "^2.2.0", - "fastify-multipart": "4.0.3", - "fastify-plugin": "^2.3.4", - "fastify-sensible": "^3.0.1", - "fastify-swagger": "^4.12.6", - "fastify-websocket": "^2.0.11", - "generate-password": "^1.6.0", - "lodash": "^4.17.21", - "match-all": "^1.2.6", - "minio": "^7.0.18", - "moment": "^2.29.1", - "mongodb": "^4.1.0", - "multistream": "^4.1.0", - "node-cron": "^3.0.0", - "node-fetch": "^2.6.5", - "node-uuid": "^1.4.8", - "ora": "^5.4.0", - "pdf2pic": "^2.1.4", - "pino": "^6.8.0", - "reflect-metadata": "^0.1.13", - "rxjs": "^6.6.3", - "sharp": "^0.29.0", - "socket.io": "^2.3.0", - "socket.io-client": "^2.3.1", - "socket.io-redis": "^5.4.0", - "socketio-jwt": "^4.6.2", - "unoconv-promise": "^1.0.8", - "uuid": "^8.3.2", - "uuid-time": "^1.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "twake-cli": "bin/twake-cli" - }, - "devDependencies": { - "@babel/core": "^7.11.6", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-decorators": "^7.10.5", - "@babel/preset-env": "^7.11.5", - "@babel/preset-typescript": "^7.10.4", - "@types/amqp-connection-manager": "^2.0.10", - "@types/analytics-node": "^3.1.5", - "@types/bcrypt": "^5.0.0", - "@types/busboy": "^0.2.3", - "@types/chai": "^4.2.12", - "@types/cli-table": "^0.3.0", - "@types/config": "0.0.36", - "@types/eslint": "^7.2.3", - "@types/fastify-multipart": "^0.7.0", - "@types/jest": "^26.0.14", - "@types/lodash": "^4.14.165", - "@types/minio": "^7.0.7", - "@types/mongodb": "^4.0.7", - "@types/node": "^14.11.2", - "@types/node-cron": "^3.0.0", - "@types/node-fetch": "^2.5.10", - "@types/node-uuid": "^0.0.28", - "@types/pdf-image": "^2.0.1", - "@types/pino": "^6.3.2", - "@types/sharp": "^0.28.5", - "@types/socket.io": "^2.1.11", - "@types/socket.io-client": "^1.4.34", - "@types/socket.io-redis": "^1.0.26", - "@types/supertest": "2.0.4", - "@types/uuid": "^8.3.0", - "@types/ws": "^7.2.7", - "@typescript-eslint/eslint-plugin": "^4.2.0", - "@typescript-eslint/parser": "^4.2.0", - "babel-jest": "^26.5.2", - "babel-plugin-parameter-decorator": "^1.0.16", - "chai": "^4.2.0", - "eslint": "^7.10.0", - "eslint-config-prettier": "^6.15.0", - "eslint-plugin-prettier": "^3.1.4", - "form-auto-content": "^2.2.0", - "jest": "^26.6.3", - "nodemon": "2.0.4", - "pino-pretty": "^4.7.1", - "prettier": "^2.1.2", - "rimraf": "^3.0.2", - "supertest": "4.0.2", - "ts-jest": "^26.4.0", - "ts-node": "^9.0.0", - "ts-node-dev": "^1.1.8", - "tsc-watch": "^4.2.9", - "typescript": "^4.0.3" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz", - "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz", - "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-split-export-declaration": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "regexpu-core": "^4.7.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", - "dev": true, - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", - "dev": true, - "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz", - "integrity": "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", - "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-decorators": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", - "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.7", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", - "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz", - "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz", - "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz", - "integrity": "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", - "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz", - "integrity": "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.8", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz", - "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz", - "integrity": "sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.15.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/plugin-syntax-typescript": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz", - "integrity": "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.9", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.9", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.7", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.15.0", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.9", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@babel/plugin-transform-regenerator": "^7.14.5", - "@babel/plugin-transform-reserved-words": "^7.14.5", - "@babel/plugin-transform-shorthand-properties": "^7.14.5", - "@babel/plugin-transform-spread": "^7.14.6", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.15.0", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.16.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz", - "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-transform-typescript": "^7.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz", - "integrity": "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.9", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@cnakazawa/watch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", - "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", - "dev": true, - "dependencies": { - "exec-sh": "^0.3.2", - "minimist": "^1.2.0" - }, - "bin": { - "watch": "cli.js" - }, - "engines": { - "node": ">=0.1.95" - } - }, - "node_modules/@elastic/elasticsearch": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.14.0.tgz", - "integrity": "sha512-BlxqykcNtdBxo0mF7UQ1OsUxoVOOnEaeF70u2N4jpePih9paCOOotTWfFSDrtEw0TWv1CZlzCGD3TD5+8ASx8A==", - "dependencies": { - "debug": "^4.3.1", - "hpagent": "^0.1.1", - "ms": "^2.1.3", - "secure-json-parse": "^2.4.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@fastify/ajv-compiler": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz", - "integrity": "sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==", - "dependencies": { - "ajv": "^6.12.6" - } - }, - "node_modules/@hapi/bourne": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz", - "integrity": "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", - "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^26.6.2", - "jest-util": "^26.6.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", - "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/reporters": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-changed-files": "^26.6.2", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-resolve-dependencies": "^26.6.3", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "jest-watcher": "^26.6.2", - "micromatch": "^4.0.2", - "p-each-series": "^2.1.0", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", - "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/fake-timers": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", - "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@sinonjs/fake-timers": "^6.0.1", - "@types/node": "*", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/globals": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", - "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/types": "^26.6.2", - "expect": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/reporters": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", - "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.4", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^4.0.3", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "jest-haste-map": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^7.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "node-notifier": "^8.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/source-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", - "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.4", - "source-map": "^0.6.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", - "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", - "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-runner": "^26.6.3", - "jest-runtime": "^26.6.3" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", - "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^26.6.2", - "babel-plugin-istanbul": "^6.0.0", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-haste-map": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-util": "^26.6.2", - "micromatch": "^4.0.2", - "pirates": "^4.0.1", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", - "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", - "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", - "dependencies": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - } - }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@segment/loosely-validate-event": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz", - "integrity": "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==", - "dependencies": { - "component-type": "^1.2.1", - "join-component": "^1.1.0" - } - }, - "node_modules/@sentry/core": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.13.3.tgz", - "integrity": "sha512-obm3SjgCk8A7nB37b2AU1eq1q7gMoJRrGMv9VRIyfcG0Wlz/5lJ9O3ohUk+YZaaVfZMxXn6hFtsBiOWmlv7IIA==", - "dependencies": { - "@sentry/hub": "6.13.3", - "@sentry/minimal": "6.13.3", - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.13.3.tgz", - "integrity": "sha512-eYppBVqvhs5cvm33snW2sxfcw6G20/74RbBn+E4WDo15hozis89kU7ZCJDOPkXuag3v1h9igns/kM6PNBb41dw==", - "dependencies": { - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.13.3.tgz", - "integrity": "sha512-63MlYYRni3fs5Bh8XBAfVZ+ctDdWg0fapSTP1ydIC37fKvbE+5zhyUqwrEKBIiclEApg1VKX7bkKxVdu/vsFdw==", - "dependencies": { - "@sentry/hub": "6.13.3", - "@sentry/types": "6.13.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.13.3.tgz", - "integrity": "sha512-ZeZSw+TcPcf4e0j7iEqNMtoVmz+WFW/TEoGokXIwysZqSgchKdAXDHqn+CqUqFan7d76JcJmzztAUK2JruQ2Kg==", - "license": "BSD-3-Clause", - "dependencies": { - "@sentry/core": "6.13.3", - "@sentry/hub": "6.13.3", - "@sentry/tracing": "6.13.3", - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.13.3.tgz", - "integrity": "sha512-yyOFIhqlprPM0g4f35Icear3eZk2mwyYcGEzljJfY2iU6pJwj1lzia5PfSwiCW7jFGMmlBJNhOAIpfhlliZi8Q==", - "license": "MIT", - "dependencies": { - "@sentry/hub": "6.13.3", - "@sentry/minimal": "6.13.3", - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.13.3.tgz", - "integrity": "sha512-Vrz5CdhaTRSvCQjSyIFIaV9PodjAVFkzJkTRxyY7P77RcegMsRSsG1yzlvCtA99zG9+e6MfoJOgbOCwuZids5A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.13.3.tgz", - "integrity": "sha512-zYFuFH3MaYtBZTeJ4Yajg7pDf0pM3MWs3+9k5my9Fd+eqNcl7dYQYJbT9gyC0HXK1QI4CAMNNlHNl4YXhF91ag==", - "dependencies": { - "@sentry/types": "6.13.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", - "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@types/amqp-connection-manager": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@types/amqp-connection-manager/-/amqp-connection-manager-2.0.12.tgz", - "integrity": "sha512-2GX1jG6ECpEXQF0X68gTTZc8MQ8GA0dM2mAd1irTpWlKzGKlGzCBtb1YnqLHozNNsoLtGI6UXSp0q06jU1LA6g==", - "dev": true, - "dependencies": { - "@types/amqplib": "*" - } - }, - "node_modules/@types/amqplib": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.8.2.tgz", - "integrity": "sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA==", - "dev": true, - "dependencies": { - "@types/bluebird": "*", - "@types/node": "*" - } - }, - "node_modules/@types/analytics-node": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.5.tgz", - "integrity": "sha512-zSqNpyzF3hcweslf7ttqB03iZvxtymUh820SAXaFhox5Y5Qa7bYmrdOi4IW050OHrKmtq4SE4kE1XeE1mK+zrQ==", - "dev": true - }, - "node_modules/@types/babel__core": { - "version": "7.1.15", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", - "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", - "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/bcrypt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz", - "integrity": "sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/bluebird": { - "version": "3.5.36", - "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz", - "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==", - "dev": true - }, - "node_modules/@types/busboy": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@types/busboy/-/busboy-0.2.4.tgz", - "integrity": "sha512-f+ZCVjlcN8JW/zf3iR0GqO4gjOUlltMTtZjn+YR1mlK+MVu6esTiIecO0/GQlmYQPQLdBnc7+5vG3Xb+SkvFLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.2.21", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz", - "integrity": "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==", - "dev": true - }, - "node_modules/@types/cli-table": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.0.tgz", - "integrity": "sha512-QnZUISJJXyhyD6L1e5QwXDV/A5i2W1/gl6D6YMc8u0ncPepbv/B4w3S+izVvtAg60m6h+JP09+Y/0zF2mojlFQ==", - "dev": true - }, - "node_modules/@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", - "dev": true - }, - "node_modules/@types/config": { - "version": "0.0.36", - "resolved": "https://registry.npmjs.org/@types/config/-/config-0.0.36.tgz", - "integrity": "sha512-EoAeT1MyFWh2BJvBDEFInY714bQBbHOAucqxqqhprhbBFqr+B7fuN5T9CJqUIGDzvwubnKKRqmSo6yPo0aSpNw==", - "dev": true - }, - "node_modules/@types/cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==", - "dev": true - }, - "node_modules/@types/engine.io": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.7.tgz", - "integrity": "sha512-qNjVXcrp+1sS8YpRUa714r0pgzOwESdW5UjHL7D/2ZFdBX0BXUXtg1LUrp+ylvqbvMcMWUy73YpRoxPN2VoKAQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", - "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/fastify-multipart": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@types/fastify-multipart/-/fastify-multipart-0.7.0.tgz", - "integrity": "sha512-dKK9S8nBesXhSfUlgyGE7mNJ5a1TxiBeIalJFdPbUj5bJywgjo3ixpm+LcIpTK2UwQ10OWptny/Kjc3GprREtg==", - "deprecated": "This is a stub types definition. fastify-multipart provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "fastify-multipart": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", - "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "26.0.24", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz", - "integrity": "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==", - "dev": true, - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.5.tgz", - "integrity": "sha512-OGqtHQ7N5/Ap/TUwO6IgHDuLiAoTmHhGpNvgkCm/F4N6pKzx/RBSfr2OXZSwC6vkfnsEdb6+7DNZVtiXiwdwFw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/lodash": { - "version": "4.14.172", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz", - "integrity": "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==", - "dev": true - }, - "node_modules/@types/long": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz", - "integrity": "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" - }, - "node_modules/@types/minio": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/minio/-/minio-7.0.9.tgz", - "integrity": "sha512-aMalbSDDB+TV9m3fVMD4E2vJR3XVAtOcf9t5Iq+PHnc5D0ti3LMXjaxGKXmllicliaBrh0gzURLrs44n/Jl43g==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mongodb": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-4.0.7.tgz", - "integrity": "sha512-lPUYPpzA43baXqnd36cZ9xxorprybxXDzteVKCPAdp14ppHtFJHnXYvNpmBvtMUTb5fKXVv6sVbzo1LHkWhJlw==", - "deprecated": "mongodb provides its own types. @types/mongodb is no longer needed.", - "dev": true, - "dependencies": { - "mongodb": "*" - } - }, - "node_modules/@types/node": { - "version": "14.17.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.11.tgz", - "integrity": "sha512-n2OQ+0Bz6WEsUjrvcHD1xZ8K+Kgo4cn9/w94s1bJS690QMUWfJPW/m7CCb7gPkA1fcYwL2UpjXP/rq/Eo41m6w==" - }, - "node_modules/@types/node-cron": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.0.tgz", - "integrity": "sha512-RNBIyVwa/1v2r8/SqK8tadH2sJlFRAo5Ghac/cOcCv4Kp94m0I03UmAh9WVhCqS9ZdB84dF3x47p9aTw8E4c4A==", - "dev": true - }, - "node_modules/@types/node-fetch": { - "version": "2.5.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz", - "integrity": "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/node-uuid": { - "version": "0.0.28", - "resolved": "https://registry.npmjs.org/@types/node-uuid/-/node-uuid-0.0.28.tgz", - "integrity": "sha1-QWVbXOY7LzN0xOgmtN0h5ykFjj0=", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/pdf-image": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/pdf-image/-/pdf-image-2.0.1.tgz", - "integrity": "sha512-WSG+F90yd53I2iA3/MiRolRmP0hT0GLkfdq2CYg1sW1AmsWK9bitc9v0EaakkMvFebESzoU/P4vsUhYnDz/OYw==", - "dev": true - }, - "node_modules/@types/pino": { - "version": "6.3.11", - "resolved": "https://registry.npmjs.org/@types/pino/-/pino-6.3.11.tgz", - "integrity": "sha512-S7+fLONqSpHeW9d7TApUqO6VN47KYgOXhCNKwGBVLHObq8HhaAYlVqUNdfnvoXjCMiwE5xcPm/5R2ZUh8bgaXQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/pino-pretty": "*", - "@types/pino-std-serializers": "*", - "sonic-boom": "^2.1.0" - } - }, - "node_modules/@types/pino-pretty": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/@types/pino-pretty/-/pino-pretty-4.7.1.tgz", - "integrity": "sha512-l1ntNXdpVWsnPYUk5HyO5Lxfr38zLCgxVfEn/9Zhhm+nGF04/BiIou/m8XPwvoVZLV+livUo79VdHXMJPfUYxA==", - "dev": true, - "dependencies": { - "@types/pino": "*" - } - }, - "node_modules/@types/pino-std-serializers": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-2.4.1.tgz", - "integrity": "sha512-17XcksO47M24IVTVKPeAByWUd3Oez7EbIjXpSbzMPhXVzgjGtrOa49gKBwxH9hb8dKv58OelsWQ+A1G1l9S3wQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==", - "dev": true - }, - "node_modules/@types/redis": { - "version": "2.8.31", - "resolved": "https://registry.npmjs.org/@types/redis/-/redis-2.8.31.tgz", - "integrity": "sha512-daWrrTDYaa5iSDFbgzZ9gOOzyp2AJmYK59OlG/2KGBgYWF3lfs8GDKm1c//tik5Uc93hDD36O+qLPvzDolChbA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/sharp": { - "version": "0.28.6", - "resolved": "https://registry.npmjs.org/@types/sharp/-/sharp-0.28.6.tgz", - "integrity": "sha512-AjKjo5vk5mkcTrWL0U1zFUdCp/uqLebvbe7ezAJx0tgp6ST9JmfsYK1q1lpjfPM5S1YQ1wr5uboPSu2S8UO9yw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/socket.io": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.13.tgz", - "integrity": "sha512-JRgH3nCgsWel4OPANkhH8TelpXvacAJ9VeryjuqCDiaVDMpLysd6sbt0dr6Z15pqH3p2YpOT3T1C5vQ+O/7uyg==", - "dev": true, - "dependencies": { - "@types/engine.io": "*", - "@types/node": "*", - "@types/socket.io-parser": "*" - } - }, - "node_modules/@types/socket.io-client": { - "version": "1.4.36", - "resolved": "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.36.tgz", - "integrity": "sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag==", - "dev": true - }, - "node_modules/@types/socket.io-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/socket.io-parser/-/socket.io-parser-3.0.0.tgz", - "integrity": "sha512-Ry/rbTE6HQNL9eu3LpL1Ocup5VexXu1bSSGlSho/IR5LuRc8YvxwSNJ3JxqTltVJEATLbZkMQETSbxfKNgp4Ew==", - "deprecated": "This is a stub types definition. socket.io-parser provides its own type definitions, so you do not need this installed.", - "dev": true, - "dependencies": { - "socket.io-parser": "*" - } - }, - "node_modules/@types/socket.io-redis": { - "version": "1.0.27", - "resolved": "https://registry.npmjs.org/@types/socket.io-redis/-/socket.io-redis-1.0.27.tgz", - "integrity": "sha512-oyJPDjn5Dnci3wZD2bd1jfPsJkqvTwoNGpOIF+/+P45cOn4zrYsUO9mcGN/shoxIlCz6bcdRhSRXWwZFGQc1PA==", - "dev": true, - "dependencies": { - "@types/redis": "*", - "@types/socket.io": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=", - "dev": true - }, - "node_modules/@types/strip-json-comments": { - "version": "0.0.30", - "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", - "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", - "dev": true - }, - "node_modules/@types/superagent": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.12.tgz", - "integrity": "sha512-1GQvD6sySQPD6p9EopDFI3f5OogdICl1sU/2ij3Esobz/RtL9fWZZDPmsuv7eiy5ya+XNiPAxUcI3HIUTJa+3A==", - "dev": true, - "dependencies": { - "@types/cookiejar": "*", - "@types/node": "*" - } - }, - "node_modules/@types/supertest": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.4.tgz", - "integrity": "sha512-0TvOJ+6XVMSImgqc2ClNllfVffCxHQhFbsbwOGzGTjdFydoaG052LPqnP8SnmSlnokOcQiPPcbz+Yi30LxWPyA==", - "dev": true, - "dependencies": { - "@types/superagent": "*" - } - }, - "node_modules/@types/uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==", - "dev": true - }, - "node_modules/@types/webidl-conversions": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", - "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" - }, - "node_modules/@types/whatwg-url": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", - "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", - "dependencies": { - "@types/node": "*", - "@types/webidl-conversions": "*" - } - }, - "node_modules/@types/ws": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", - "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "15.0.14", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz", - "integrity": "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.3.tgz", - "integrity": "sha512-tBgfA3K/3TsZY46ROGvoRxQr1wBkclbVqRQep97MjVHJzcRBURRY3sNFqLk0/Xr//BY5hM9H2p/kp+6qim85SA==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "4.29.3", - "@typescript-eslint/scope-manager": "4.29.3", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.3.tgz", - "integrity": "sha512-ffIvbytTVWz+3keg+Sy94FG1QeOvmV9dP2YSdLFHw/ieLXWCa3U1TYu8IRCOpMv2/SPS8XqhM1+ou1YHsdzKrg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.29.3", - "@typescript-eslint/types": "4.29.3", - "@typescript-eslint/typescript-estree": "4.29.3", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.3.tgz", - "integrity": "sha512-jrHOV5g2u8ROghmspKoW7pN8T/qUzk0+DITun0MELptvngtMrwUJ1tv5zMI04CYVEUsSrN4jV7AKSv+I0y0EfQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "4.29.3", - "@typescript-eslint/types": "4.29.3", - "@typescript-eslint/typescript-estree": "4.29.3", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.3.tgz", - "integrity": "sha512-x+w8BLXO7iWPkG5mEy9bA1iFRnk36p/goVlYobVWHyDw69YmaH9q6eA+Fgl7kYHmFvWlebUTUfhtIg4zbbl8PA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.29.3", - "@typescript-eslint/visitor-keys": "4.29.3" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.3.tgz", - "integrity": "sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz", - "integrity": "sha512-45oQJA0bxna4O5TMwz55/TpgjX1YrAPOI/rb6kPgmdnemRZx/dB0rsx+Ku8jpDvqTxcE1C/qEbVHbS3h0hflag==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.29.3", - "@typescript-eslint/visitor-keys": "4.29.3", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.29.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz", - "integrity": "sha512-MGGfJvXT4asUTeVs0Q2m+sY63UsfnA+C/FDgBKV3itLBmM9H0u+URcneePtkd0at1YELmZK6HSolCqM4Fzs6yA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "4.29.3", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@zxing/text-encoding": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", - "optional": true - }, - "node_modules/abab": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", - "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/abstract-logging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz", - "integrity": "sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/amqp-connection-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-3.7.0.tgz", - "integrity": "sha512-pWlrXVQNnSV9Jsewq6wnZjddzlHI/gZroDdmMEYfsqaAUa2V2ENCXbDdoi0r/GVesxueY/Yb8nBO024lfdtdPQ==", - "license": "MIT", - "dependencies": { - "promise-breaker": "^5.0.0" - }, - "engines": { - "node": ">=10.0.0", - "npm": ">5.0.0" - }, - "peerDependencies": { - "amqplib": "*" - } - }, - "node_modules/amqplib": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/amqplib/-/amqplib-0.7.1.tgz", - "integrity": "sha512-KePK3tTOLGU4emTo+PwSDMbc123jrxo13FpRpim1LzJoSlQrIBB2/kMeCC40jK/Zb0olHGaABjLqXDsdK46iLA==", - "dependencies": { - "bitsyntax": "~0.1.0", - "bluebird": "^3.7.2", - "buffer-more-ints": "~1.0.0", - "readable-stream": "1.x >=1.1.9", - "safe-buffer": "~5.2.1", - "url-parse": "~1.5.1" - }, - "engines": { - "node": ">=0.8 <=15" - } - }, - "node_modules/analytics-node": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/analytics-node/-/analytics-node-5.0.0.tgz", - "integrity": "sha512-eU/lPK6V3hmmv7hnJ8762zExL7WvcpVeBL6RgGZ8yQZQewk08VbbHk0M5GAlhruyh0ZT+/IBPW3Q/SYVhjexNQ==", - "dependencies": { - "@segment/loosely-validate-event": "^2.0.0", - "axios": "^0.21.1", - "axios-retry": "^3.0.2", - "lodash.isstring": "^4.0.1", - "md5": "^2.2.1", - "ms": "^2.0.0", - "remove-trailing-slash": "^0.1.0", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", - "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", - "dev": true, - "dependencies": { - "string-width": "^3.0.0" - } - }, - "node_modules/ansi-align/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "dependencies": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-align/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" - }, - "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/args/-/args-5.0.1.tgz", - "integrity": "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==", - "dev": true, - "dependencies": { - "camelcase": "5.0.0", - "chalk": "2.4.2", - "leven": "2.1.0", - "mri": "1.1.4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/args/node_modules/camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/args/node_modules/leven": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", - "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-parallel": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz", - "integrity": "sha1-j3hTCJJu1apHjEfmTRszS2wMlH0=" - }, - "node_modules/array-series": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz", - "integrity": "sha1-3103v8XC7wdV4qpPkv6ufUtaly8=" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "engines": { - "node": "*" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.1.tgz", - "integrity": "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", - "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/avvio": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz", - "integrity": "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==", - "dependencies": { - "archy": "^1.0.0", - "debug": "^4.0.0", - "fastq": "^1.6.1", - "queue-microtask": "^1.1.2" - } - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/axios-retry": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz", - "integrity": "sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==", - "dependencies": { - "is-retry-allowed": "^1.1.0" - } - }, - "node_modules/babel-jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", - "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", - "dev": true, - "dependencies": { - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/babel__core": "^7.1.7", - "babel-plugin-istanbul": "^6.0.0", - "babel-preset-jest": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", - "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^4.0.0", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", - "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/babel-plugin-parameter-decorator": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/babel-plugin-parameter-decorator/-/babel-plugin-parameter-decorator-1.0.16.tgz", - "integrity": "sha512-yUT2WPTUg1JaPmRGRSF557m1HJ9vdFQInRWOkiOyO5a9HhqlXffJu+fQ2xd5+qU/35ICMrrk9eWKsHCairKA9w==", - "dev": true - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz", - "integrity": "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", - "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^26.6.2", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-arraybuffer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", - "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/bcrypt": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", - "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bitsyntax": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz", - "integrity": "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==", - "dependencies": { - "buffer-more-ints": "~1.0.0", - "debug": "~2.6.9", - "safe-buffer": "~5.1.2" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/bitsyntax/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/bitsyntax/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/bitsyntax/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" - }, - "node_modules/block-stream2": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz", - "integrity": "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==", - "dependencies": { - "readable-stream": "^3.4.0" - } - }, - "node_modules/block-stream2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/block-stream2/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" - }, - "node_modules/boxen": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", - "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^5.3.1", - "chalk": "^3.0.0", - "cli-boxes": "^2.2.0", - "string-width": "^4.1.0", - "term-size": "^2.1.0", - "type-fest": "^0.8.1", - "widest-line": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/boxen/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/boxen/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/boxen/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/boxen/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.16.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz", - "integrity": "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001251", - "colorette": "^1.3.0", - "electron-to-chromium": "^1.3.811", - "escalade": "^3.1.1", - "node-releases": "^1.1.75" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/bs-logger": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", - "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "2.x" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/bson": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.0.tgz", - "integrity": "sha512-WoSOKryfrKx0aqhPz/DJsUlrMlOL+hkW+469Q5z5E/EQWF2xilOH7h/s5HH4j9iLRzVDwKFwVNQ3Mba16srmlw==", - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-more-ints": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz", - "integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" - }, - "node_modules/busboy": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz", - "integrity": "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==", - "dependencies": { - "dicer": "0.3.0" - }, - "engines": { - "node": ">=4.5.0" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001251", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz", - "integrity": "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/capture-exit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", - "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", - "dev": true, - "dependencies": { - "rsvp": "^4.8.4" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/cassandra-driver": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.6.3.tgz", - "integrity": "sha512-npW670TXjTHrdb15LUFN01wssb9vvz6SuNYcppesoKcUXx3Q29nXVhRtnvsnkG0BaSnDGvCCR4udrzYLsbh+sg==", - "dependencies": { - "@types/long": "^4.0.0", - "@types/node": ">=8", - "adm-zip": "^0.5.3", - "long": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "engines": { - "node": "*" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cjs-module-lexer": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", - "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", - "dev": true - }, - "node_modules/class-transformer": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.3.1.tgz", - "integrity": "sha512-cKFwohpJbuMovS8xVLmn8N2AUbAuc8pVo4zEfsUVo8qgECOogns1WVk/FkOZoxhOPTyTYFckuoH+13FO+MQ8GA==" - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz", - "integrity": "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz", - "integrity": "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==", - "dependencies": { - "colors": "1.0.3" - }, - "engines": { - "node": ">= 0.2.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", - "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", - "dev": true - }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" - }, - "node_modules/component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" - }, - "node_modules/component-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz", - "integrity": "sha1-ikeQFwAjjk/DIml3EjAibyS0Fak=" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/config": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/config/-/config-3.3.6.tgz", - "integrity": "sha512-Hj5916C5HFawjYJat1epbyY2PlAgLpBtDUlr0MxGLgo3p5+7kylyvnRY18PqJHgnNWXcdd0eWDemT7eYWuFgwg==", - "dependencies": { - "json5": "^2.1.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/convert-source-map/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.2.tgz", - "integrity": "sha512-4lUshXtBXsdmp8cDWh6KKiHUg40AjiuPD3bOWkNVsr1xkAhpUqCjaZ8lB1bKx9Gb5fXcbRbFJ4f4qpRIRTuJqQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.7", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "engines": { - "node": "*" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/dateformat": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.5.1.tgz", - "integrity": "sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", - "dev": true - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "node_modules/deep-object-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz", - "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==" - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dependencies": { - "clone": "^1.0.2" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "node_modules/denque": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", - "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dicer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz", - "integrity": "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==", - "dependencies": { - "streamsearch": "0.1.2" - }, - "engines": { - "node": ">=4.5.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", - "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/dynamic-dedupe": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", - "integrity": "sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=", - "dev": true, - "dependencies": { - "xtend": "^4.0.0" - } - }, - "node_modules/dynamic-dedupe/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/electron-to-chromium": { - "version": "1.3.816", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.816.tgz", - "integrity": "sha512-/AvJPIJldO0NkwkfpUD7u1e4YEGRFBQpFuvl9oGCcVgWOObsZB1loxVGeVUJB9kmvfsBUUChPYdgRzx6+AKNyg==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", - "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding-negotiator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/encoding-negotiator/-/encoding-negotiator-2.0.1.tgz", - "integrity": "sha512-GSK7qphNR4iPcejfAlZxKDoz3xMhnspwImK+Af5WhePS9jUpK/Oh7rUdyENWu+9rgDflOCTmAojBsgsvM8neAQ==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz", - "integrity": "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "~7.4.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/engine.io-client": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz", - "integrity": "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==", - "dependencies": { - "component-emitter": "~1.3.0", - "component-inherit": "0.0.3", - "debug": "~3.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "ws": "~7.4.2", - "xmlhttprequest-ssl": "~1.6.2", - "yeast": "0.1.2" - } - }, - "node_modules/engine.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/engine.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/engine.io-client/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/engine.io-parser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz", - "integrity": "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==", - "dependencies": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.4", - "blob": "0.0.5", - "has-binary2": "~1.0.2" - } - }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/engine.io/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.18.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz", - "integrity": "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==", - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.3", - "is-string": "^1.0.6", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", - "dev": true, - "dependencies": { - "get-stdin": "^6.0.0" - }, - "bin": { - "eslint-config-prettier-check": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=3.14.1" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.11.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz", - "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" - } - }, - "node_modules/exec-sh": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", - "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", - "dev": true - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", - "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-styles": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-regex-util": "^26.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/expect/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-decode-uri-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-json-stringify": { - "version": "2.7.8", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.8.tgz", - "integrity": "sha512-HRSGwEWe0/5EH7GEaWg1by4dInnBb1WFf4umMPr+lL5xb0VP0VbpNGklp4L0/BseD+BmtIZpjqJjnLFwaQ21dg==", - "dependencies": { - "ajv": "^6.11.0", - "deepmerge": "^4.2.2", - "rfdc": "^1.2.0", - "string-similarity": "^4.0.1" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fast-redact": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz", - "integrity": "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-safe-stringify": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", - "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" - }, - "node_modules/fast-xml-parser": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", - "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==", - "bin": { - "xml2js": "cli.js" - }, - "funding": { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - }, - "node_modules/fastfall": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz", - "integrity": "sha1-P+4DMxpJ0dObPN96XpzWb0dee5Q=", - "dependencies": { - "reusify": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fastify": { - "version": "3.22.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-3.22.1.tgz", - "integrity": "sha512-TeA4+TzI7VuJrjTNqoxtSXwPEYfCwpT8j9Z3j9WrL8nrt+1bE9G0rP9hLJyvbg4it56p68YsHVhKOee69xyfmA==", - "dependencies": { - "@fastify/ajv-compiler": "^1.0.0", - "abstract-logging": "^2.0.0", - "avvio": "^7.1.2", - "fast-json-stringify": "^2.5.2", - "fastify-error": "^0.3.0", - "fastify-warning": "^0.2.0", - "find-my-way": "^4.1.0", - "flatstr": "^1.0.12", - "light-my-request": "^4.2.0", - "pino": "^6.13.0", - "proxy-addr": "^2.0.7", - "rfdc": "^1.1.4", - "secure-json-parse": "^2.0.0", - "semver": "^7.3.2", - "tiny-lru": "^7.0.0" - } - }, - "node_modules/fastify-cors": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fastify-cors/-/fastify-cors-4.1.0.tgz", - "integrity": "sha512-Vr4AgypDkRwG16cs1ORnYItZx6FMN+gCpHvP3/nzNZL1HFzf7U/NaSgmC784VqtK8yiqSXZEoTGCsmzeSp8JVw==", - "dependencies": { - "fastify-plugin": "^2.0.0", - "vary": "^1.1.2" - } - }, - "node_modules/fastify-error": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.1.tgz", - "integrity": "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==" - }, - "node_modules/fastify-formbody": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/fastify-formbody/-/fastify-formbody-5.1.0.tgz", - "integrity": "sha512-dLFQ8gMQeLuV45J72svDbrp6CZ3hxsaiK2dd3vzoiCs9wEmCSbbJV+/afQl1cfvf19+NfCIzYVQIg1r4yO4Epw==", - "dependencies": { - "fastify-plugin": "^3.0.0" - } - }, - "node_modules/fastify-formbody/node_modules/fastify-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", - "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" - }, - "node_modules/fastify-jwt": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/fastify-jwt/-/fastify-jwt-2.5.0.tgz", - "integrity": "sha512-QXOSfo65OxSk30TTecLh8J0LEmuQJwRPqXMDvPA9HfLdsX/xPdq/QSvQFvR5Aj1kwrFFjsyb1SNAOQmbkmpj4w==", - "dependencies": { - "@types/jsonwebtoken": "^8.5.0", - "fastify-plugin": "^3.0.0", - "http-errors": "^1.8.0", - "jsonwebtoken": "^8.5.1", - "steed": "^1.1.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fastify-jwt/node_modules/fastify-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", - "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" - }, - "node_modules/fastify-multipart": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fastify-multipart/-/fastify-multipart-4.0.3.tgz", - "integrity": "sha512-RyouqARMlSgTudcPCDmxVN07YEDWojT5iQ+AkjX7DcQ+Y65hHzrOqrNveu5gs+lEIg5afGaH5ESHCNCOZYlveQ==", - "dependencies": { - "busboy": "^0.3.1", - "deepmerge": "^4.2.2", - "end-of-stream": "^1.4.4", - "fastify-error": "^0.3.0", - "fastify-plugin": "^3.0.0", - "hexoid": "^1.0.0", - "stream-wormhole": "^1.1.0" - } - }, - "node_modules/fastify-multipart/node_modules/fastify-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", - "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" - }, - "node_modules/fastify-plugin": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-2.3.4.tgz", - "integrity": "sha512-I+Oaj6p9oiRozbam30sh39BiuiqBda7yK2nmSPVwDCfIBlKnT8YB3MY+pRQc2Fcd07bf6KPGklHJaQ2Qu81TYQ==", - "dependencies": { - "semver": "^7.3.2" - } - }, - "node_modules/fastify-plugin/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fastify-sensible": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fastify-sensible/-/fastify-sensible-3.1.1.tgz", - "integrity": "sha512-qWGsLEcc8VmLpbbWY7VJwXwWISsGBH9H4J2QeIc+l5Ov3a1lYs7ZaSnr0X8dkffdvzr9iy8wQyIuthpKTy5sZA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fastify-plugin": "^3.0.0", - "forwarded": "^0.1.2", - "http-errors": "^1.7.3", - "type-is": "^1.6.18", - "vary": "^1.1.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/fastify-sensible/node_modules/fastify-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", - "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" - }, - "node_modules/fastify-static": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fastify-static/-/fastify-static-4.2.3.tgz", - "integrity": "sha512-uFRgwYXZwLKyaMrByf10efO+HTjAPqyQOlUthoGljQKGCfbwUeTeE7EHadsDWeN7NMeqBE617RamVh9uqatuUw==", - "dependencies": { - "content-disposition": "^0.5.3", - "encoding-negotiator": "^2.0.1", - "fastify-plugin": "^3.0.0", - "glob": "^7.1.4", - "readable-stream": "^3.4.0", - "send": "^0.17.1" - } - }, - "node_modules/fastify-static/node_modules/fastify-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", - "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" - }, - "node_modules/fastify-static/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fastify-static/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/fastify-swagger": { - "version": "4.12.6", - "resolved": "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.12.6.tgz", - "integrity": "sha512-XuHyi+aPQETMsB5oOw5m8j8hror/08MSa/7Gpxon3Mu2ZtlulG8q8/XmBGB1UM0WDRifGw456IgO7kVQVPLU8A==", - "dependencies": { - "fastify-plugin": "^3.0.0", - "fastify-static": "^4.0.0", - "js-yaml": "^4.0.0", - "json-schema-resolver": "^1.3.0", - "openapi-types": "^9.1.0" - } - }, - "node_modules/fastify-swagger/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/fastify-swagger/node_modules/fastify-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", - "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" - }, - "node_modules/fastify-swagger/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/fastify-warning": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz", - "integrity": "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" - }, - "node_modules/fastify-websocket": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fastify-websocket/-/fastify-websocket-2.1.0.tgz", - "integrity": "sha512-u5zClCarOHctvzKq76Gc0rDwtWfU7pw+JGYETfSu77YzZ/uzXLDX4jB70vLliUc3nqK0zXFRDK2/KnEnfdF9Kw==", - "dependencies": { - "fastify-plugin": "^3.0.0", - "find-my-way": "^3.0.5", - "ws": "^7.4.2" - } - }, - "node_modules/fastify-websocket/node_modules/fastify-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz", - "integrity": "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" - }, - "node_modules/fastify-websocket/node_modules/find-my-way": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-3.0.5.tgz", - "integrity": "sha512-FweGg0cv1sBX8z7WhvBX5B5AECW4Zdh/NiB38Oa0qwSNIyPgRBCl/YjxuZn/rz38E/MMBHeVKJ22i7W3c626Gg==", - "dependencies": { - "fast-decode-uri-component": "^1.0.1", - "safe-regex2": "^2.0.0", - "semver-store": "^0.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fastify/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fastparallel": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fastparallel/-/fastparallel-2.4.0.tgz", - "integrity": "sha512-sacwQ7wwKlQXsa7TN24UvMBLZNLmVcPhmxccC9riFqb3N+fSczJL8eWdnZodZ/KijGVgNBBfvF/NeXER08uXnQ==", - "dependencies": { - "reusify": "^1.0.4", - "xtend": "^4.0.2" - } - }, - "node_modules/fastparallel/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/fastq": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz", - "integrity": "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fastseries": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/fastseries/-/fastseries-1.7.2.tgz", - "integrity": "sha1-0izhO5Qz3/M4jZHb1ri9qbIaD0s=", - "dependencies": { - "reusify": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/fastseries/node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-my-way": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-4.3.3.tgz", - "integrity": "sha512-5E4bRdaATB1MewjOCBjx4xvD205a4t2ripCnXB+YFhYEJ0NABtrcC7XLXLq0TPoFe/WYGUFqys3Qk3HCOGeNcw==", - "dependencies": { - "fast-decode-uri-component": "^1.0.1", - "fast-deep-equal": "^3.1.3", - "safe-regex2": "^2.0.0", - "semver-store": "^0.3.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatstr": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz", - "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" - }, - "node_modules/flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", - "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "node_modules/form-auto-content": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/form-auto-content/-/form-auto-content-2.2.0.tgz", - "integrity": "sha512-OT4qi6hNGc+fJJGieTjy+WmV1nDhg4ULATNR0Fx92YUIy9gPw8odX3z8c+IiivWITzTg8j4TcKKbsAku8l2dwQ==", - "dev": true, - "dependencies": { - "form-data": "^3.0.0" - }, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz", - "integrity": "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==", - "dev": true, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/generate-password": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/generate-password/-/generate-password-1.6.1.tgz", - "integrity": "sha512-JvtWSiN4KVmF6kBFi89Uz9LLN7l/EuGZYiKrIxddFlKcjSgc3D3va0Z5faooNwN85O0VBlt/ZtTdqhbQKhAOyw==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", - "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", - "dev": true, - "dependencies": { - "ini": "1.3.7" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/gm": { - "version": "1.23.1", - "resolved": "https://registry.npmjs.org/gm/-/gm-1.23.1.tgz", - "integrity": "sha1-Lt7rlYCE0PjqeYjl2ZWxx9/BR3c=", - "dependencies": { - "array-parallel": "~0.1.3", - "array-series": "~0.1.5", - "cross-spawn": "^4.0.0", - "debug": "^3.1.0" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/gm/node_modules/cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", - "dependencies": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "node_modules/gm/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/gm/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/gm/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/gm/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true, - "optional": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", - "dependencies": { - "isarray": "2.0.1" - } - }, - "node_modules/has-binary2/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "node_modules/has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/hpagent": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz", - "integrity": "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==" - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", - "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "optional": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", - "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", - "dev": true, - "dependencies": { - "global-dirs": "^2.0.1", - "is-path-inside": "^3.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", - "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.7.tgz", - "integrity": "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==", - "dependencies": { - "available-typed-arrays": "^1.0.4", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "optional": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", - "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", - "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", - "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "import-local": "^3.0.2", - "jest-cli": "^26.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-changed-files": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", - "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "execa": "^4.0.0", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", - "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", - "dev": true, - "dependencies": { - "@jest/core": "^26.6.3", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "import-local": "^3.0.2", - "is-ci": "^2.0.0", - "jest-config": "^26.6.3", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "prompts": "^2.0.1", - "yargs": "^15.4.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/jest-cli/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-config": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", - "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/test-sequencer": "^26.6.3", - "@jest/types": "^26.6.2", - "babel-jest": "^26.6.3", - "chalk": "^4.0.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.4", - "jest-environment-jsdom": "^26.6.2", - "jest-environment-node": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-jasmine2": "^26.6.3", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", - "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", - "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", - "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", - "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2", - "jsdom": "^16.4.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-environment-node": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", - "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", - "dev": true, - "dependencies": { - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "jest-mock": "^26.6.2", - "jest-util": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-get-type": { - "version": "26.3.0", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", - "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-haste-map": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", - "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.4", - "jest-regex-util": "^26.0.0", - "jest-serializer": "^26.6.2", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "micromatch": "^4.0.2", - "sane": "^4.0.3", - "walker": "^1.0.7" - }, - "engines": { - "node": ">= 10.14.2" - }, - "optionalDependencies": { - "fsevents": "^2.1.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", - "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.1.0", - "@jest/environment": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^26.6.2", - "is-generator-fn": "^2.0.0", - "jest-each": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "pretty-format": "^26.6.2", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", - "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", - "dev": true, - "dependencies": { - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", - "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", - "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.2", - "pretty-format": "^26.6.2", - "slash": "^3.0.0", - "stack-utils": "^2.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", - "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "26.0.0", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", - "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", - "dev": true, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", - "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^26.6.2", - "read-pkg-up": "^7.0.1", - "resolve": "^1.18.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", - "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-snapshot": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", - "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.7.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-docblock": "^26.0.0", - "jest-haste-map": "^26.6.2", - "jest-leak-detector": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "jest-runtime": "^26.6.3", - "jest-util": "^26.6.2", - "jest-worker": "^26.6.2", - "source-map-support": "^0.5.6", - "throat": "^5.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "26.6.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", - "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", - "dev": true, - "dependencies": { - "@jest/console": "^26.6.2", - "@jest/environment": "^26.6.2", - "@jest/fake-timers": "^26.6.2", - "@jest/globals": "^26.6.2", - "@jest/source-map": "^26.6.2", - "@jest/test-result": "^26.6.2", - "@jest/transform": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/yargs": "^15.0.0", - "chalk": "^4.0.0", - "cjs-module-lexer": "^0.6.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.4", - "jest-config": "^26.6.3", - "jest-haste-map": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-mock": "^26.6.2", - "jest-regex-util": "^26.0.0", - "jest-resolve": "^26.6.2", - "jest-snapshot": "^26.6.2", - "jest-util": "^26.6.2", - "jest-validate": "^26.6.2", - "slash": "^3.0.0", - "strip-bom": "^4.0.0", - "yargs": "^15.4.1" - }, - "bin": { - "jest-runtime": "bin/jest-runtime.js" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", - "dev": true, - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jest-serializer": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", - "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", - "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0", - "@jest/types": "^26.6.2", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.0.0", - "chalk": "^4.0.0", - "expect": "^26.6.2", - "graceful-fs": "^4.2.4", - "jest-diff": "^26.6.2", - "jest-get-type": "^26.3.0", - "jest-haste-map": "^26.6.2", - "jest-matcher-utils": "^26.6.2", - "jest-message-util": "^26.6.2", - "jest-resolve": "^26.6.2", - "natural-compare": "^1.4.0", - "pretty-format": "^26.6.2", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", - "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "@types/node": "*", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.4", - "is-ci": "^2.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", - "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "camelcase": "^6.0.0", - "chalk": "^4.0.0", - "jest-get-type": "^26.3.0", - "leven": "^3.1.0", - "pretty-format": "^26.6.2" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", - "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^26.6.2", - "@jest/types": "^26.6.2", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^26.6.2", - "string-length": "^4.0.1" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jmespath": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", - "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/join-component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz", - "integrity": "sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU=" - }, - "node_modules/joycon": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz", - "integrity": "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz", - "integrity": "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-resolver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/json-schema-resolver/-/json-schema-resolver-1.3.0.tgz", - "integrity": "sha512-EX7W1r8aZ/T3j8GbbBxPXi60bnsELfT90OiA1QrbGMvwzVSbyMNOAzvMFcFb8m7gKCXZLJpGe+cJOvWgoFl29A==", - "dependencies": { - "debug": "^4.1.1", - "rfdc": "^1.1.4", - "uri-js": "^4.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", - "integrity": "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg=" - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/light-my-request": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-4.4.4.tgz", - "integrity": "sha512-nxYLB+Lke3wGQ55HQIo/CjSS18xGyHRF0y/u7YxEwp1YsqQTxObteBXYHZY3ELSvYmqy0pRLTWbI5//zRYTXlg==", - "dependencies": { - "ajv": "^8.1.0", - "cookie": "^0.4.0", - "fastify-warning": "^0.2.0", - "readable-stream": "^3.6.0", - "set-cookie-parser": "^2.4.1" - } - }, - "node_modules/light-my-request/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/light-my-request/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/light-my-request/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/light-my-request/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/long": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/long/-/long-2.4.0.tgz", - "integrity": "sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8=", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/makeerror": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", - "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", - "dev": true, - "dependencies": { - "tmpl": "1.0.x" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", - "dev": true - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/match-all": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", - "optional": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.49.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", - "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.32", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", - "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", - "dependencies": { - "mime-db": "1.49.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/minio": { - "version": "7.0.19", - "resolved": "https://registry.npmjs.org/minio/-/minio-7.0.19.tgz", - "integrity": "sha512-DOGKauWLdmj0/y2QKXdnrhqyzRFEnUteHi6q382uujg9TjSDrA84BiQVppS2Ew6V8Rcg+2IaRkF4GR34zw9sIA==", - "dependencies": { - "async": "^3.1.0", - "block-stream2": "^2.0.0", - "es6-error": "^4.1.1", - "fast-xml-parser": "^3.17.5", - "json-stream": "^1.0.0", - "lodash": "^4.17.21", - "mime-types": "^2.1.14", - "mkdirp": "^0.5.1", - "querystring": "0.2.0", - "through2": "^3.0.1", - "web-encoding": "^1.1.5", - "xml": "^1.0.0", - "xml2js": "^0.4.15" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.33", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz", - "integrity": "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==", - "dependencies": { - "moment": ">= 2.9.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mongodb": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.0.tgz", - "integrity": "sha512-Gx9U9MsFWgJ3E0v4oHAdWvYTGBznNYPCkhmD/3i/kPTY/URnPfHD5/6VoKUFrdgQTK3icFiM9976hVbqCRBO9Q==", - "dependencies": { - "bson": "^4.4.0", - "denque": "^1.5.0", - "mongodb-connection-string-url": "^1.0.1" - }, - "engines": { - "node": ">=12.9.0" - }, - "optionalDependencies": { - "saslprep": "^1.0.0" - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-1.1.2.tgz", - "integrity": "sha512-mp5lv4guWuykOpkwNNqQ0tKKytuJUjL/aC/bu/DqoJVWL5NSh4j/u+gJ+EiOdweLujHyq6JZZqcTVipHhL5xRg==", - "dependencies": { - "@types/whatwg-url": "^8.0.0", - "whatwg-url": "^8.4.0" - } - }, - "node_modules/mri": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz", - "integrity": "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/multistream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", - "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "once": "^1.4.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/multistream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/multistream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-abi": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", - "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", - "dependencies": { - "semver": "^5.4.1" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - }, - "node_modules/node-cleanup": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", - "integrity": "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=", - "dev": true - }, - "node_modules/node-cron": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.0.tgz", - "integrity": "sha512-DDwIvvuCwrNiaU7HEivFDULcaQualDv7KoNlB/UU1wPW0n1tDEmBJKhEIE6DlF2FuoOHcNbLJ8ITL2Iv/3AWmA==", - "dependencies": { - "moment-timezone": "^0.5.31" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true - }, - "node_modules/node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-notifier": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", - "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", - "dev": true, - "optional": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "optional": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-releases": { - "version": "1.1.75", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz", - "integrity": "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==", - "dev": true - }, - "node_modules/node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "deprecated": "Use uuid module instead", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/nodemon": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz", - "integrity": "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chokidar": "^3.2.2", - "debug": "^3.2.6", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.7", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.2", - "update-notifier": "^4.0.0" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/notepack.io": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/notepack.io/-/notepack.io-2.2.0.tgz", - "integrity": "sha512-9b5w3t5VSH6ZPosoYnyDONnUTF8o0UkBw7JLA6eBlYJWyGT1Q3vQa8Hmuj1/X6RYvHjjygBDgw6fJhe0JEojfw==" - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nwsapi": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", - "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/openapi-types": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-9.2.0.tgz", - "integrity": "sha512-3x0gg8DxhpZ5MVki7AK6jmMdVIZASmVGo9CoUtD+nksLdkqz7EzWKdfS9Oxxq1J7idnZV0b3LjqcvizfKFySpQ==" - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ora/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseqs": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz", - "integrity": "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" - }, - "node_modules/parseuri": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz", - "integrity": "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "engines": { - "node": "*" - } - }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "dev": true, - "dependencies": { - "through": "~2.3" - } - }, - "node_modules/pdf2pic": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/pdf2pic/-/pdf2pic-2.1.4.tgz", - "integrity": "sha512-8QOCvxZlYs7wsmBQbqpIApSWD/eqgXMQU+4VM0vWrXifLgXS+Ns3484sUa1Q7ddr+gwnruq/xKHzu7x1scqX6w==", - "dependencies": { - "fs-extra": "^9.1.0", - "gm": "^1.23.1" - }, - "funding": { - "type": "paypal", - "url": "https://www.paypal.me/yakovmeister" - } - }, - "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pino": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/pino/-/pino-6.13.1.tgz", - "integrity": "sha512-QQf67BU+cANnc/2U+wzUV20UjO5oBryWpnNyKshdLfT9BdeiXlh9wxLGmOjAuBWMYITdMs+BtJSQQNlGRNbWpA==", - "dependencies": { - "fast-redact": "^3.0.0", - "fast-safe-stringify": "^2.0.8", - "fastify-warning": "^0.2.0", - "flatstr": "^1.0.12", - "pino-std-serializers": "^3.1.0", - "quick-format-unescaped": "^4.0.3", - "sonic-boom": "^1.0.2" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-pretty": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.8.0.tgz", - "integrity": "sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw==", - "dev": true, - "dependencies": { - "@hapi/bourne": "^2.0.0", - "args": "^5.0.1", - "chalk": "^4.0.0", - "dateformat": "^4.5.1", - "fast-safe-stringify": "^2.0.7", - "jmespath": "^0.15.0", - "joycon": "^2.2.5", - "pump": "^3.0.0", - "readable-stream": "^3.6.0", - "rfdc": "^1.3.0", - "split2": "^3.1.1", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "pino-pretty": "bin.js" - } - }, - "node_modules/pino-pretty/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pino-pretty/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/pino-pretty/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pino-pretty/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/pino-pretty/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pino-pretty/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pino-pretty/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/pino-pretty/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pino-std-serializers": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz", - "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" - }, - "node_modules/pino/node_modules/sonic-boom": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz", - "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==", - "dependencies": { - "atomic-sleep": "^1.0.0", - "flatstr": "^1.0.12" - } - }, - "node_modules/pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", - "dev": true, - "dependencies": { - "node-modules-regexp": "^1.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prebuild-install": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", - "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", - "dependencies": { - "detect-libc": "^1.0.3", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.21.0", - "npmlog": "^4.0.1", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^3.0.3", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz", - "integrity": "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", - "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", - "dev": true, - "dependencies": { - "@jest/types": "^26.6.2", - "ansi-regex": "^5.0.0", - "ansi-styles": "^4.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/pretty-format/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-breaker": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz", - "integrity": "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA==" - }, - "node_modules/prompts": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", - "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ps-tree": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz", - "integrity": "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==", - "dev": true, - "dependencies": { - "event-stream": "=3.3.4" - }, - "bin": { - "ps-tree": "bin/ps-tree.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz", - "integrity": "sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg==" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redis": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz", - "integrity": "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==", - "dependencies": { - "denque": "^1.5.0", - "redis-commands": "^1.7.0", - "redis-errors": "^1.2.0", - "redis-parser": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-redis" - } - }, - "node_modules/redis-commands": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz", - "integrity": "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" - }, - "node_modules/redis-errors": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", - "integrity": "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=", - "engines": { - "node": ">=4" - } - }, - "node_modules/redis-parser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz", - "integrity": "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=", - "dependencies": { - "redis-errors": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.2.0", - "regjsgen": "^0.5.1", - "regjsparser": "^0.6.4", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/remove-trailing-slash": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz", - "integrity": "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==" - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rsvp": { - "version": "4.8.5", - "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", - "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", - "dev": true, - "engines": { - "node": "6.* || >= 7.*" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/safe-regex/node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/safe-regex2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", - "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", - "dependencies": { - "ret": "~0.2.0" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sane": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", - "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dev": true, - "dependencies": { - "@cnakazawa/watch": "^1.0.3", - "anymatch": "^2.0.0", - "capture-exit": "^2.0.0", - "exec-sh": "^0.3.2", - "execa": "^1.0.0", - "fb-watchman": "^2.0.0", - "micromatch": "^3.1.4", - "minimist": "^1.1.1", - "walker": "~1.0.5" - }, - "bin": { - "sane": "src/cli.js" - }, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/sane/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/sane/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/sane/node_modules/execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sane/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/sane/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/sane/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sane/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/saslprep": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", - "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/secure-json-parse": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz", - "integrity": "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==" - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-store": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz", - "integrity": "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==" - }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/send/node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "node_modules/send/node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "node_modules/set-cookie-parser": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz", - "integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==" - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/sharp": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.29.1.tgz", - "integrity": "sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ==", - "hasInstallScript": true, - "dependencies": { - "color": "^4.0.1", - "detect-libc": "^1.0.3", - "node-addon-api": "^4.1.0", - "prebuild-install": "^6.1.4", - "semver": "^7.3.5", - "simple-get": "^3.1.0", - "tar-fs": "^2.1.1", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=12.13.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/sharp/node_modules/node-addon-api": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz", - "integrity": "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true, - "optional": true - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", - "dependencies": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-get/node_modules/decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", - "dependencies": { - "mimic-response": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-get/node_modules/mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/socket.io": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz", - "integrity": "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==", - "dependencies": { - "debug": "~4.1.0", - "engine.io": "~3.5.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.4.0", - "socket.io-parser": "~3.4.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" - }, - "node_modules/socket.io-client": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz", - "integrity": "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==", - "dependencies": { - "backo2": "1.0.2", - "component-bind": "1.0.0", - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "engine.io-client": "~3.5.0", - "has-binary2": "~1.0.2", - "indexof": "0.0.1", - "parseqs": "0.0.6", - "parseuri": "0.0.6", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - } - }, - "node_modules/socket.io-client/node_modules/debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/socket.io-client/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "node_modules/socket.io-client/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/socket.io-client/node_modules/socket.io-parser": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz", - "integrity": "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==", - "dependencies": { - "component-emitter": "~1.3.0", - "debug": "~3.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socket.io-parser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", - "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", - "dev": true, - "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-redis": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/socket.io-redis/-/socket.io-redis-5.4.0.tgz", - "integrity": "sha512-yCQm/Sywd3d08WXUfZRxt6O+JV2vWoPgWK6GVjiM0GkBtq5cpLOk8oILRPKbzTv1VEtSYmK41q0xzcgDinMbmQ==", - "dependencies": { - "debug": "~4.1.0", - "notepack.io": "~2.2.0", - "redis": "^3.0.0", - "socket.io-adapter": "~1.1.0", - "uid2": "0.0.3" - } - }, - "node_modules/socket.io-redis/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/socket.io/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/socket.io/node_modules/isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" - }, - "node_modules/socket.io/node_modules/socket.io-parser": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz", - "integrity": "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==", - "dependencies": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" - } - }, - "node_modules/socketio-jwt": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/socketio-jwt/-/socketio-jwt-4.6.2.tgz", - "integrity": "sha512-bcCnit/cCvqtC921Gwuqor+LpLKrpREmPACVgLfdbFBL95w2nPF7lOxsOxyeRrhc5Kot/1jUSW5+kLo23zJIMA==", - "dependencies": { - "jsonwebtoken": "^8.3.0", - "xtend": "~2.1.2" - } - }, - "node_modules/sonic-boom": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.1.0.tgz", - "integrity": "sha512-x2j9LXx27EDlyZEC32gBM+scNVMdPutU7FIKV2BOTKCnPrp7bY5BsplCMQ4shYYR3IhDSIrEXoqb6GlS+z7KyQ==", - "dev": true, - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", - "optional": true, - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/split2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/split2/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/steed": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/steed/-/steed-1.1.3.tgz", - "integrity": "sha1-8VJd1a2xLrIb90dJU3Zo1iW5q8U=", - "dependencies": { - "fastfall": "^1.5.0", - "fastparallel": "^2.2.0", - "fastq": "^1.3.0", - "fastseries": "^1.7.0", - "reusify": "^1.0.0" - } - }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "dev": true, - "dependencies": { - "duplexer": "~0.1.1" - } - }, - "node_modules/stream-wormhole": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz", - "integrity": "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/string-argv": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.2.tgz", - "integrity": "sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA==", - "dev": true, - "engines": { - "node": ">=0.6.19" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-similarity": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz", - "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", - "dev": true, - "dependencies": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/superagent/node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/superagent/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/superagent/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/superagent/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/superagent/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/supertest": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz", - "integrity": "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^3.8.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/table/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/table/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar": { - "version": "6.1.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.10.tgz", - "integrity": "sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/term-size": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", - "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/throat": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", - "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/tiny-lru": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz", - "integrity": "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", - "dev": true - }, - "node_modules/to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/touch/node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/tough-cookie": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", - "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.1.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", - "dev": true, - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/ts-jest": { - "version": "26.5.6", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz", - "integrity": "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==", - "dev": true, - "dependencies": { - "bs-logger": "0.x", - "buffer-from": "1.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^26.1.0", - "json5": "2.x", - "lodash": "4.x", - "make-error": "1.x", - "mkdirp": "1.x", - "semver": "7.x", - "yargs-parser": "20.x" - }, - "bin": { - "ts-jest": "cli.js" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "jest": ">=26 <27", - "typescript": ">=3.8 <5.0" - } - }, - "node_modules/ts-jest/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/ts-node-dev": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.1.8.tgz", - "integrity": "sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.1", - "dynamic-dedupe": "^0.3.0", - "minimist": "^1.2.5", - "mkdirp": "^1.0.4", - "resolve": "^1.0.0", - "rimraf": "^2.6.1", - "source-map-support": "^0.5.12", - "tree-kill": "^1.2.2", - "ts-node": "^9.0.0", - "tsconfig": "^7.0.0" - }, - "bin": { - "ts-node-dev": "lib/bin.js", - "tsnd": "lib/bin.js" - }, - "engines": { - "node": ">=0.8.0" - }, - "peerDependencies": { - "node-notifier": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/ts-node-dev/node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-node-dev/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/tsc-watch": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/tsc-watch/-/tsc-watch-4.5.0.tgz", - "integrity": "sha512-aXhN4jY+1YEcn/NwCQ/+fHqU43EqOpW+pS+933EPsVEsrKhvyrodPDIjQsk1a1niFrabAK3RIBrRbAslVefEbQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "node-cleanup": "^2.1.2", - "ps-tree": "^1.2.0", - "string-argv": "^0.1.1", - "strip-ansi": "^6.0.0" - }, - "bin": { - "tsc-watch": "index.js" - }, - "engines": { - "node": ">=8.17.0" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/tsconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", - "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", - "dev": true, - "dependencies": { - "@types/strip-bom": "^3.0.0", - "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" - } - }, - "node_modules/tsconfig/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tsconfig/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "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" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uid2": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz", - "integrity": "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undefsafe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz", - "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==", - "dev": true, - "dependencies": { - "debug": "^2.2.0" - } - }, - "node_modules/undefsafe/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/undefsafe/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unoconv-promise": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/unoconv-promise/-/unoconv-promise-1.0.8.tgz", - "integrity": "sha512-YBVskYpnYj5KQS5aCnE+a+n7jFOmL9dOKzfymw5mKsZhO2K6LrBLAGzReXpOU3x77tTEeJzZYTgrhqIbtF9Acw==", - "dependencies": { - "chai": "^4.2.0", - "debug": "^4.1.1", - "mime": "^2.4.0" - } - }, - "node_modules/unoconv-promise/node_modules/mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/update-notifier": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", - "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", - "dev": true, - "dependencies": { - "boxen": "^4.2.0", - "chalk": "^3.0.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.3.1", - "is-npm": "^4.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.0.0", - "pupa": "^2.0.1", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/update-notifier/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/update-notifier/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.12.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", - "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/uuid-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/uuid-time/-/uuid-time-1.0.0.tgz", - "integrity": "sha1-i7GPpwiZh+8lsMQEcZATPPo6FMY=" - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", - "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", - "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", - "dev": true, - "dependencies": { - "makeerror": "1.0.x" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/web-encoding": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz", - "integrity": "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==", - "dependencies": { - "util": "^0.12.3" - }, - "optionalDependencies": { - "@zxing/text-encoding": "0.9.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "engines": { - "node": ">=10.4" - } - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "node_modules/which-typed-array": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.6.tgz", - "integrity": "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==", - "dependencies": { - "available-typed-arrays": "^1.0.4", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.5", - "foreach": "^2.0.5", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dependencies": { - "string-width": "^1.0.2 || 2" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/widest-line/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=" - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xmlhttprequest-ssl": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz", - "integrity": "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "dependencies": { - "object-keys": "~0.4.0" - }, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/xtend/node_modules/object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - }, "dependencies": { "@babel/code-frame": { "version": "7.14.5", @@ -18021,47 +1770,47 @@ } }, "@sentry/core": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.13.3.tgz", - "integrity": "sha512-obm3SjgCk8A7nB37b2AU1eq1q7gMoJRrGMv9VRIyfcG0Wlz/5lJ9O3ohUk+YZaaVfZMxXn6hFtsBiOWmlv7IIA==", - "requires": { - "@sentry/hub": "6.13.3", - "@sentry/minimal": "6.13.3", - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-6.17.2.tgz", + "integrity": "sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==", + "requires": { + "@sentry/hub": "6.17.2", + "@sentry/minimal": "6.17.2", + "@sentry/types": "6.17.2", + "@sentry/utils": "6.17.2", "tslib": "^1.9.3" } }, "@sentry/hub": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.13.3.tgz", - "integrity": "sha512-eYppBVqvhs5cvm33snW2sxfcw6G20/74RbBn+E4WDo15hozis89kU7ZCJDOPkXuag3v1h9igns/kM6PNBb41dw==", + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-6.17.2.tgz", + "integrity": "sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==", "requires": { - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", + "@sentry/types": "6.17.2", + "@sentry/utils": "6.17.2", "tslib": "^1.9.3" } }, "@sentry/minimal": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.13.3.tgz", - "integrity": "sha512-63MlYYRni3fs5Bh8XBAfVZ+ctDdWg0fapSTP1ydIC37fKvbE+5zhyUqwrEKBIiclEApg1VKX7bkKxVdu/vsFdw==", + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.17.2.tgz", + "integrity": "sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==", "requires": { - "@sentry/hub": "6.13.3", - "@sentry/types": "6.13.3", + "@sentry/hub": "6.17.2", + "@sentry/types": "6.17.2", "tslib": "^1.9.3" } }, "@sentry/node": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.13.3.tgz", - "integrity": "sha512-ZeZSw+TcPcf4e0j7iEqNMtoVmz+WFW/TEoGokXIwysZqSgchKdAXDHqn+CqUqFan7d76JcJmzztAUK2JruQ2Kg==", - "requires": { - "@sentry/core": "6.13.3", - "@sentry/hub": "6.13.3", - "@sentry/tracing": "6.13.3", - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-6.17.2.tgz", + "integrity": "sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==", + "requires": { + "@sentry/core": "6.17.2", + "@sentry/hub": "6.17.2", + "@sentry/tracing": "6.17.2", + "@sentry/types": "6.17.2", + "@sentry/utils": "6.17.2", "cookie": "^0.4.1", "https-proxy-agent": "^5.0.0", "lru_map": "^0.3.3", @@ -18069,28 +1818,28 @@ } }, "@sentry/tracing": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.13.3.tgz", - "integrity": "sha512-yyOFIhqlprPM0g4f35Icear3eZk2mwyYcGEzljJfY2iU6pJwj1lzia5PfSwiCW7jFGMmlBJNhOAIpfhlliZi8Q==", - "requires": { - "@sentry/hub": "6.13.3", - "@sentry/minimal": "6.13.3", - "@sentry/types": "6.13.3", - "@sentry/utils": "6.13.3", + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.17.2.tgz", + "integrity": "sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==", + "requires": { + "@sentry/hub": "6.17.2", + "@sentry/minimal": "6.17.2", + "@sentry/types": "6.17.2", + "@sentry/utils": "6.17.2", "tslib": "^1.9.3" } }, "@sentry/types": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.13.3.tgz", - "integrity": "sha512-Vrz5CdhaTRSvCQjSyIFIaV9PodjAVFkzJkTRxyY7P77RcegMsRSsG1yzlvCtA99zG9+e6MfoJOgbOCwuZids5A==" + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-6.17.2.tgz", + "integrity": "sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==" }, "@sentry/utils": { - "version": "6.13.3", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.13.3.tgz", - "integrity": "sha512-zYFuFH3MaYtBZTeJ4Yajg7pDf0pM3MWs3+9k5my9Fd+eqNcl7dYQYJbT9gyC0HXK1QI4CAMNNlHNl4YXhF91ag==", + "version": "6.17.2", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-6.17.2.tgz", + "integrity": "sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==", "requires": { - "@sentry/types": "6.13.3", + "@sentry/types": "6.17.2", "tslib": "^1.9.3" } }, @@ -18741,8 +2490,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "acorn-walk": { "version": "7.2.0", @@ -20545,8 +4293,7 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" } } }, @@ -20584,8 +4331,7 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" } } }, @@ -23441,8 +7187,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "dev": true, - "requires": {} + "dev": true }, "jest-regex-util": { "version": "26.0.0", @@ -24522,11 +8267,6 @@ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", "dev": true }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=" - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -24535,6 +8275,11 @@ "yallist": "^4.0.0" } }, + "lru_map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", + "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=" + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -24869,6 +8614,21 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, + "node-cache": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz", + "integrity": "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==", + "requires": { + "clone": "2.x" + }, + "dependencies": { + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + } + } + }, "node-cleanup": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz", @@ -27317,11 +11077,6 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "string-argv": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.1.2.tgz", @@ -27386,6 +11141,11 @@ "define-properties": "^1.1.3" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -28636,8 +12396,7 @@ "ws": { "version": "7.5.3", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", - "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", - "requires": {} + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" }, "xdg-basedir": { "version": "4.0.0", diff --git a/twake/backend/node/src/cli/cmds/applications_cmds/ls.ts b/twake/backend/node/src/cli/cmds/applications_cmds/ls.ts index ab74d8df82..d4a2f8c5c6 100644 --- a/twake/backend/node/src/cli/cmds/applications_cmds/ls.ts +++ b/twake/backend/node/src/cli/cmds/applications_cmds/ls.ts @@ -16,9 +16,9 @@ const services = [ "pubsub", "platform-services", "applications", - // "auth", - // "realtime", - // "websocket", + "auth", + "realtime", + "websocket", // "user", "search", "database", diff --git a/twake/backend/node/src/cli/cmds/applications_cmds/publish.ts b/twake/backend/node/src/cli/cmds/applications_cmds/publish.ts index 345e38819c..f247244f4d 100644 --- a/twake/backend/node/src/cli/cmds/applications_cmds/publish.ts +++ b/twake/backend/node/src/cli/cmds/applications_cmds/publish.ts @@ -18,14 +18,14 @@ const services = [ "pubsub", "platform-services", "applications", - // "auth", - // "realtime", - // "websocket", - // "user", + "auth", + "realtime", + "websocket", + "user", "search", "database", "webserver", - // "statistics", + "statistics", ]; const command: yargs.CommandModule = { diff --git a/twake/backend/node/src/cli/cmds/applications_cmds/unpublish.ts b/twake/backend/node/src/cli/cmds/applications_cmds/unpublish.ts index ddf08c5e68..79028b4ca4 100644 --- a/twake/backend/node/src/cli/cmds/applications_cmds/unpublish.ts +++ b/twake/backend/node/src/cli/cmds/applications_cmds/unpublish.ts @@ -18,14 +18,14 @@ const services = [ "pubsub", "platform-services", "applications", - // "auth", - // "realtime", - // "websocket", - // "user", + "auth", + "realtime", + "websocket", + "user", "search", "database", "webserver", - // "statistics", + "statistics", ]; const command: yargs.CommandModule = { diff --git a/twake/backend/node/src/cli/cmds/generate_cmds/users-and-companies.ts b/twake/backend/node/src/cli/cmds/generate_cmds/users-and-companies.ts index 08ba851714..d8b764f947 100644 --- a/twake/backend/node/src/cli/cmds/generate_cmds/users-and-companies.ts +++ b/twake/backend/node/src/cli/cmds/generate_cmds/users-and-companies.ts @@ -19,6 +19,13 @@ type CLIArgs = { }; const services = [ + "storage", + "counter", + "applications", + "statistics", + "auth", + "realtime", + "push", "platform-services", "user", "search", diff --git a/twake/backend/node/src/core/platform/framework/api/crud-service.ts b/twake/backend/node/src/core/platform/framework/api/crud-service.ts index 329a6057fe..b715ce4214 100644 --- a/twake/backend/node/src/core/platform/framework/api/crud-service.ts +++ b/twake/backend/node/src/core/platform/framework/api/crud-service.ts @@ -125,25 +125,29 @@ export interface ExecutionContext { transport?: "http" | "ws"; } -export class CrudExeption extends Error { +export class CrudException extends Error { constructor(readonly details: string, readonly status: number) { super(); this.message = details; } - static badRequest(details: string): CrudExeption { - return new CrudExeption(details, 400); + static badRequest(details: string): CrudException { + return new CrudException(details, 400); } - static notFound(details: string): CrudExeption { - return new CrudExeption(details, 404); + static notFound(details: string): CrudException { + return new CrudException(details, 404); } - static forbidden(details: string): CrudExeption { - return new CrudExeption(details, 403); + static forbidden(details: string): CrudException { + return new CrudException(details, 403); } - static notImplemented(details: string): CrudExeption { - return new CrudExeption(details, 501); + static notImplemented(details: string): CrudException { + return new CrudException(details, 501); + } + + static badGateway(details: string): CrudException { + return new CrudException(details, 502); } } diff --git a/twake/backend/node/src/core/platform/framework/pubsub.ts b/twake/backend/node/src/core/platform/framework/pubsub.ts index b6b74e4452..ccf300761a 100644 --- a/twake/backend/node/src/core/platform/framework/pubsub.ts +++ b/twake/backend/node/src/core/platform/framework/pubsub.ts @@ -1,11 +1,9 @@ import { Subject } from "rxjs"; import { logger as rootLogger } from "./logger"; -const logger = rootLogger.child( - { - component: "twake.core.platform.framework.pubsub" - } -) +const logger = rootLogger.child({ + component: "twake.core.platform.framework.pubsub", +}); /** * A local event bus in the platform. Used by platform components and services to communicate using publish subscribe. @@ -29,7 +27,7 @@ class EventBus { } catch (err) { logger.warn({ err }, "Error while calling listener"); } - } + }, }); return this; diff --git a/twake/backend/node/src/core/platform/services/realtime/index.ts b/twake/backend/node/src/core/platform/services/realtime/index.ts index 4dafc56861..d74ba85f48 100644 --- a/twake/backend/node/src/core/platform/services/realtime/index.ts +++ b/twake/backend/node/src/core/platform/services/realtime/index.ts @@ -3,11 +3,11 @@ import { SkipCLI } from "../../framework/decorators/skip"; import { localEventBus } from "../../framework/pubsub"; import WebSocketAPI from "../../services/websocket/provider"; import AuthServiceAPI from "../auth/provider"; -import { RealtimeEventBus, RealtimeServiceAPI, RealtimeRoomManager } from "./api"; +import { RealtimeEventBus, RealtimeRoomManager, RealtimeServiceAPI } from "./api"; import { eventBus } from "./bus"; import RealtimeEntityManager from "./services/entity-manager"; import RoomManagerImpl from "./services/room-manager"; -import { RealtimeLocalBusEvent } from "./types"; +import { RealtimeBaseBusEvent, RealtimeLocalBusEvent } from "./types"; @Consumes(["websocket", "auth"]) @ServiceName("realtime") @@ -34,6 +34,11 @@ export default class RealtimeService this.entityManager = new RealtimeEntityManager(ws); this.entityManager.init(); + localEventBus.subscribe("realtime:event", (event: RealtimeBaseBusEvent) => { + event.data._type = event.type; + ws.getIo().to(event.room).emit("realtime:event", { name: event.room, data: event.data }); + }); + localEventBus.subscribe("realtime:publish", (data: RealtimeLocalBusEvent) => { this.getBus().publish(data.topic, data.event); }); diff --git a/twake/backend/node/src/core/platform/services/realtime/types.ts b/twake/backend/node/src/core/platform/services/realtime/types.ts index 02f7eda879..0c65b11120 100644 --- a/twake/backend/node/src/core/platform/services/realtime/types.ts +++ b/twake/backend/node/src/core/platform/services/realtime/types.ts @@ -37,6 +37,20 @@ export class RealtimeEntityEvent { // the action result which fired this event result: EntityOperationResult | null; } + +export class RealtimeApplicationEvent { + action: "configure" | "close_configure"; + application: unknown; + form: unknown; + hidden_data: unknown; +} + +export class RealtimeBaseBusEvent { + room: string; + type: string; + data: T; +} + export class RealtimeLocalBusEvent { event: RealtimeEntityEvent; topic: string; diff --git a/twake/backend/node/src/services/applications/api.ts b/twake/backend/node/src/services/applications/api.ts index cfcffc537f..08538affe2 100644 --- a/twake/backend/node/src/services/applications/api.ts +++ b/twake/backend/node/src/services/applications/api.ts @@ -51,6 +51,15 @@ export interface MarketplaceApplicationServiceAPI extends TwakeServiceProvider, publish(pk: ApplicationPrimaryKey): Promise; unpublish(pk: ApplicationPrimaryKey): Promise; + + notifyApp( + application_id: string, + connection_id: string, + user_id: string, + type: string, + name: string, + content: any, + ): Promise; } export interface CompanyApplicationServiceAPI diff --git a/twake/backend/node/src/services/applications/services/applications.ts b/twake/backend/node/src/services/applications/services/applications.ts index 2fb378deb2..5fdc0964c8 100644 --- a/twake/backend/node/src/services/applications/services/applications.ts +++ b/twake/backend/node/src/services/applications/services/applications.ts @@ -10,7 +10,9 @@ import { logger } from "../../../core/platform/framework"; import { PlatformServicesAPI } from "../../../core/platform/services/platform-services"; import { CreateResult, + CrudException, DeleteResult, + EntityOperationResult, ExecutionContext, ListResult, OperationType, @@ -20,6 +22,25 @@ import { } from "../../../core/platform/framework/api/crud-service"; import SearchRepository from "../../../core/platform/services/search/repository"; import assert from "assert"; +import { logger as log } from "../../../core/platform/framework"; +import axios, { AxiosInstance, AxiosResponse } from "axios"; +import * as crypto from "crypto"; +import { isObject } from "lodash"; +import { localEventBus } from "../../../core/platform/framework/pubsub"; +import { + RealtimeApplicationEvent, + RealtimeBaseBusEvent, + RealtimeEntityActionType, + RealtimeEntityEvent, + RealtimeLocalBusEvent, + ResourcePath, +} from "../../../core/platform/services/realtime/types"; +import { getThreadMessagePath } from "../../messages/web/realtime"; +import { ThreadExecutionContext } from "../../messages/types"; +import { Message } from "../../messages/entities/messages"; +import { eventBus } from "../../../core/platform/services/realtime/bus"; +import { getNotificationRoomName } from "../../notifications/services/realtime"; +import { v1 as uuid } from "uuid"; export function getService(platformService: PlatformServicesAPI): MarketplaceApplicationServiceAPI { return new ApplicationService(platformService); @@ -149,4 +170,72 @@ class ApplicationService implements MarketplaceApplicationServiceAPI { entity.publication.published = false; await this.repository.save(entity); } + + async notifyApp( + application_id: string, + connection_id: string, + user_id: string, + type: string, + name: string, + content: any, + ): Promise { + const app = await this.get({ id: application_id }); + if (!app) { + throw CrudException.notFound("Application not found"); + } + + if (!app.api.hooksUrl) { + throw CrudException.badRequest("Application hooksUrl is not defined"); + } + + const payload = { + type, + name, + content, + connection_id: connection_id, + user_id: user_id, + }; + + const signature = crypto + .createHmac("sha256", app.api.privateKey) + .update(JSON.stringify(payload)) + .digest("hex"); + + return await axios + .post(app.api.hooksUrl, payload, { + headers: { + "Content-Type": "application/json", + "X-Twake-Signature": signature, + }, + }) + + .then(({ data }) => data) + .catch(e => { + log.error(e.message); + const r = e.response; + + if (!r) { + throw CrudException.badGateway("Can't connect remote application"); + } + + let msg = r.data; + + if (isObject(msg)) { + // parse typical responses + if (r.data.message) { + msg = r.data.message; + } else if (r.data.error) { + msg = r.data.error; + } else { + msg = JSON.stringify(r.data); + } + } + + if (r.status == 403) { + throw CrudException.forbidden(msg); + } else { + throw CrudException.badRequest(msg); + } + }); + } } diff --git a/twake/backend/node/src/services/applications/web/controllers/applications.ts b/twake/backend/node/src/services/applications/web/controllers/applications.ts index 7b36ab3389..fa9e8af2e1 100644 --- a/twake/backend/node/src/services/applications/web/controllers/applications.ts +++ b/twake/backend/node/src/services/applications/web/controllers/applications.ts @@ -3,6 +3,7 @@ import { ApplicationServiceAPI } from "../../api"; import { CrudController } from "../../../../core/platform/services/webserver/types"; import { PaginationQueryParameters, + ResourceCreateResponse, ResourceDeleteResponse, ResourceGetResponse, ResourceListResponse, @@ -13,11 +14,14 @@ import Application, { PublicApplicationObject, } from "../../entities/application"; import { - CrudExeption, + CrudException, ExecutionContext, } from "../../../../core/platform/framework/api/crud-service"; import _ from "lodash"; import { randomBytes } from "crypto"; +import { ApplicationEventRequestBody } from "../types"; +import { logger as log } from "../../../../core/platform/framework"; +import { hasCompanyAdminLevel } from "../../../../utils/company"; export class ApplicationController implements @@ -74,64 +78,71 @@ export class ApplicationController ): Promise> { // const context = getExecutionContext(request); - const app = request.body; - const now = new Date().getTime(); + try { + const app = request.body; + const now = new Date().getTime(); - let entity: Application; + let entity: Application; - if (request.params.application_id) { - entity = await this.service.applications.get({ - id: request.params.application_id, - }); + if (request.params.application_id) { + entity = await this.service.applications.get({ + id: request.params.application_id, + }); - if (!entity) { - throw CrudExeption.notFound("Application not found"); - } - - entity.publication.requested = app.publication.requested; + if (!entity) { + throw CrudException.notFound("Application not found"); + } - if (entity.publication.published) { - if ( - !_.isEqual( - _.pick(entity, "identity", "api", "access", "display"), - _.pick(app, "identity", "api", "access", "display"), - ) - ) { - throw CrudExeption.badRequest("You can't update applications details while it published"); + entity.publication.requested = app.publication.requested; + + if (entity.publication.published) { + if ( + !_.isEqual( + _.pick(entity, "identity", "api", "access", "display"), + _.pick(app, "identity", "api", "access", "display"), + ) + ) { + throw CrudException.badRequest( + "You can't update applications details while it published", + ); + } } - } - entity.identity = app.identity; - entity.api.hooksUrl = app.api.hooksUrl; - entity.api.allowedIps = app.api.allowedIps; - entity.access = app.access; - entity.display = app.display; + entity.identity = app.identity; + entity.api.hooksUrl = app.api.hooksUrl; + entity.api.allowedIps = app.api.allowedIps; + entity.access = app.access; + entity.display = app.display; - entity.stats.updatedAt = now; - entity.stats.version++; + entity.stats.updatedAt = now; + entity.stats.version++; - const res = await this.service.applications.save(entity); - entity = res.entity; - } else { - // INSERT + const res = await this.service.applications.save(entity); + entity = res.entity; + } else { + // INSERT - app.is_default = false; - app.publication.published = false; - app.api.privateKey = randomBytes(32).toString("base64"); + app.is_default = false; + app.publication.published = false; + app.api.privateKey = randomBytes(32).toString("base64"); - app.stats = { - createdAt: now, - updatedAt: now, - version: 0, - }; + app.stats = { + createdAt: now, + updatedAt: now, + version: 0, + }; - const res = await this.service.applications.save(app); - entity = res.entity; - } + const res = await this.service.applications.save(app); + entity = res.entity; + } - return { - resource: entity.getApplicationObject(), - }; + return { + resource: entity.getApplicationObject(), + }; + } catch (e) { + log.error(e); + throw e; + } } async delete( @@ -154,8 +165,49 @@ export class ApplicationController }; } - async event(request: FastifyRequest<{ Params: { application_id: string } }>) { - return { error: "Not implemented (yet)" }; + async event( + request: FastifyRequest<{ + Body: ApplicationEventRequestBody; + Params: { application_id: string }; + }>, + reply: FastifyReply, + ): Promise> { + const context = getExecutionContext(request); + + const content = request.body.content; + + const applicationEntity = await this.service.applications.get({ + id: request.params.application_id, + }); + + if (!applicationEntity) { + throw CrudException.notFound("Application not found"); + } + + if (applicationEntity.company_id != request.body.company_id) { + throw CrudException.badRequest("You can't manage application of another company"); + } + + const companyUser = await this.service.companies.getCompanyUser( + { id: applicationEntity.company_id }, + { id: context.user.id }, + ); + + if (!companyUser || !hasCompanyAdminLevel(companyUser.role)) + throw CrudException.forbidden("You must be company admin"); + + const hookResponse = await this.service.applications.notifyApp( + request.params.application_id, + request.body.connection_id, + context.user.id, + request.body.type, + request.body.name, + content, + ); + + return { + resource: hookResponse, + }; } } diff --git a/twake/backend/node/src/services/applications/web/routes.ts b/twake/backend/node/src/services/applications/web/routes.ts index 8c6f0d9356..ef4605cd53 100644 --- a/twake/backend/node/src/services/applications/web/routes.ts +++ b/twake/backend/node/src/services/applications/web/routes.ts @@ -3,10 +3,11 @@ import { RealtimeServiceAPI } from "../../../core/platform/services/realtime/api import { ApplicationServiceAPI } from "../api"; import { ApplicationController } from "./controllers/applications"; import { CompanyApplicationController } from "./controllers/company-applications"; -import { WorkspaceBaseRequest } from "../../workspaces/web/types"; + import Application from "../entities/application"; import assert from "assert"; -import { applicationPostSchema } from "./schemas"; +import { applicationEventHookSchema, applicationPostSchema } from "./schemas"; +import { logger as log } from "../../../core/platform/framework"; const applicationsUrl = "/applications"; const companyApplicationsUrl = "/companies/:company_id/applications"; @@ -22,23 +23,28 @@ const routes: FastifyPluginCallback<{ ); const adminCheck = async (request: FastifyRequest<{ Body: Application }>) => { - const companyId = request.body.company_id; - const userId = request.currentUser.id; - assert(companyId, "company_id is not defined"); - const companyUser = await options.service.companies.getCompanyUser( - { id: companyId }, - { id: userId }, - ); - - if (!companyUser) { - const company = await options.service.companies.getCompany({ id: companyId }); - if (!company) { - throw fastify.httpErrors.notFound(`Company ${companyId} not found`); + try { + const companyId = request.body.company_id; + const userId = request.currentUser.id; + assert(companyId, "company_id is not defined"); + const companyUser = await options.service.companies.getCompanyUser( + { id: companyId }, + { id: userId }, + ); + + if (!companyUser) { + const company = await options.service.companies.getCompany({ id: companyId }); + if (!company) { + throw fastify.httpErrors.notFound(`Company ${companyId} not found`); + } + throw fastify.httpErrors.forbidden("User does not belong to this company"); } - throw fastify.httpErrors.forbidden("User does not belong to this company"); - } - if (companyUser.role !== "admin") { - throw fastify.httpErrors.forbidden("You must be an admin of this company"); + if (companyUser.role !== "admin") { + throw fastify.httpErrors.forbidden("You must be an admin of this company"); + } + } catch (e) { + log.error(e); + throw e; } }; @@ -128,6 +134,7 @@ const routes: FastifyPluginCallback<{ method: "POST", url: `${applicationsUrl}/:application_id/event`, preValidation: [fastify.authenticate], + schema: applicationEventHookSchema, handler: applicationController.event.bind(applicationController), }); diff --git a/twake/backend/node/src/services/applications/web/schemas.ts b/twake/backend/node/src/services/applications/web/schemas.ts index 7a0cb64b0f..9fd6ef79cf 100644 --- a/twake/backend/node/src/services/applications/web/schemas.ts +++ b/twake/backend/node/src/services/applications/web/schemas.ts @@ -115,3 +115,17 @@ export const applicationPostSchema = { }, }, }; + +export const applicationEventHookSchema = { + body: { + type: "object", + properties: { + company_id: { type: "string" }, + workspace_id: { type: "string" }, + type: { type: "string" }, + name: { type: "string" }, + content: {}, + }, + required: ["company_id", "workspace_id", "type", "content"], + }, +}; diff --git a/twake/backend/node/src/services/applications/web/types.ts b/twake/backend/node/src/services/applications/web/types.ts index d340c9c596..8653771269 100644 --- a/twake/backend/node/src/services/applications/web/types.ts +++ b/twake/backend/node/src/services/applications/web/types.ts @@ -3,3 +3,12 @@ import { ExecutionContext } from "../../../core/platform/framework/api/crud-serv export interface CompanyExecutionContext extends ExecutionContext { company: { id: string }; } + +export interface ApplicationEventRequestBody { + company_id: string; + workspace_id: string; + connection_id: string; + type: string; + name?: string; + content: any; +} diff --git a/twake/backend/node/src/services/applicationsapi/web/controllers/index.ts b/twake/backend/node/src/services/applicationsapi/web/controllers/index.ts index 3441a5b3fc..8954009b5e 100644 --- a/twake/backend/node/src/services/applicationsapi/web/controllers/index.ts +++ b/twake/backend/node/src/services/applicationsapi/web/controllers/index.ts @@ -1,17 +1,19 @@ -import { FastifyReply, FastifyRequest, FastifyInstance, HTTPMethods } from "fastify"; +import { FastifyInstance, FastifyReply, FastifyRequest, HTTPMethods } from "fastify"; import { ApplicationsApiServiceAPI } from "../../api"; -import Application, { ApplicationObject } from "../../../applications/entities/application"; +import { ApplicationObject } from "../../../applications/entities/application"; import { ApplicationApiExecutionContext, ApplicationLoginRequest, ApplicationLoginResponse, + ConfigureRequest, } from "../types"; import { ResourceGetResponse } from "../../../../utils/types"; -import { logger as log } from "../../../../core/platform/framework"; +import { CrudException } from "../../../../core/platform/framework/api/crud-service"; +import { localEventBus } from "../../../../core/platform/framework/pubsub"; import { - CrudExeption, - ExecutionContext, -} from "../../../../core/platform/framework/api/crud-service"; + RealtimeApplicationEvent, + RealtimeBaseBusEvent, +} from "../../../../core/platform/services/realtime/types"; export class ApplicationsApiController { constructor(readonly service: ApplicationsApiServiceAPI) {} @@ -40,21 +42,41 @@ export class ApplicationsApiController { id: context.application_id, }); if (!entity) { - throw CrudExeption.notFound("Application not found"); + throw CrudException.notFound("Application not found"); } return { resource: entity.getApplicationObject() }; } - async configure(request: FastifyRequest<{}>, reply: FastifyReply) { - return { error: "Not implemented (yet)" }; - } + async configure(request: FastifyRequest<{ Body: ConfigureRequest }>, reply: FastifyReply) { + const app_id = request.currentUser.application_id; - async closeConfigure( - request: FastifyRequest<{ Params: { configuration_id: string } }>, - reply: FastifyReply, - ) { - return { error: "Not implemented (yet)" }; + const application = await this.service.applicationService.applications.get({ id: app_id }); + + if (!application) { + throw CrudException.forbidden("Application not found"); + } + + const body = request.body; + + const data = { + action: "configure", + application: { + id: app_id, + identity: application.identity, + }, + form: body.form, + connection_id: body.connection_id, + hidden_data: {}, + }; + + localEventBus.publish("realtime:event", { + room: "/me/" + body.user_id, + type: "application", + data, + } as RealtimeBaseBusEvent); + + return { status: "ok" }; } async proxy(request: FastifyRequest<{}>, reply: FastifyReply, fastify: FastifyInstance) { diff --git a/twake/backend/node/src/services/applicationsapi/web/routes.ts b/twake/backend/node/src/services/applicationsapi/web/routes.ts index 2133ffc18f..c50a48c791 100644 --- a/twake/backend/node/src/services/applicationsapi/web/routes.ts +++ b/twake/backend/node/src/services/applicationsapi/web/routes.ts @@ -1,9 +1,9 @@ import { FastifyInstance, FastifyPluginCallback, FastifyRequest } from "fastify"; import { ApplicationsApiServiceAPI } from "../api"; import { ApplicationsApiController } from "./controllers"; -import { WorkspaceUsersBaseRequest } from "../../workspaces/web/types"; import { ApplicationApiBaseRequest } from "./types"; import { logger as log } from "../../../core/platform/framework"; +import { configureRequestSchema } from "./schemas"; const routes: FastifyPluginCallback<{ service: ApplicationsApiServiceAPI }> = ( fastify: FastifyInstance, @@ -40,17 +40,10 @@ const routes: FastifyPluginCallback<{ service: ApplicationsApiServiceAPI }> = ( method: "POST", url: "/console/v1/configure", preValidation: [fastify.authenticate], + schema: configureRequestSchema, handler: controller.configure.bind(controller), }); - //Close a configuration popup on the client side - fastify.route({ - method: "DELETE", - url: "/console/v1/configure/:configuration_id", - preValidation: [fastify.authenticate], - handler: controller.closeConfigure.bind(controller), - }); - //Get myself as an application fastify.route({ method: "POST", diff --git a/twake/backend/node/src/services/applicationsapi/web/schemas.ts b/twake/backend/node/src/services/applicationsapi/web/schemas.ts index 3ef6f70ae8..1ee1b3706a 100644 --- a/twake/backend/node/src/services/applicationsapi/web/schemas.ts +++ b/twake/backend/node/src/services/applicationsapi/web/schemas.ts @@ -2,3 +2,15 @@ export const applicationsSchema = { type: "object", properties: {}, }; + +export const configureRequestSchema = { + body: { + type: "object", + properties: { + user_id: { type: "string" }, + connection_id: { type: "string" }, + form: {}, + }, + required: ["user_id", "connection_id"], + }, +}; diff --git a/twake/backend/node/src/services/applicationsapi/web/types.ts b/twake/backend/node/src/services/applicationsapi/web/types.ts index 80a893c533..04556d9e69 100644 --- a/twake/backend/node/src/services/applicationsapi/web/types.ts +++ b/twake/backend/node/src/services/applicationsapi/web/types.ts @@ -15,3 +15,9 @@ export interface ApplicationLoginResponse { export interface ApplicationApiExecutionContext extends ExecutionContext { application_id: string; } + +export interface ConfigureRequest { + user_id: string; + connection_id: string; + form?: any; +} diff --git a/twake/backend/node/src/services/channels/services/channel/default/service.ts b/twake/backend/node/src/services/channels/services/channel/default/service.ts index 5b179f930c..bb294fdccd 100644 --- a/twake/backend/node/src/services/channels/services/channel/default/service.ts +++ b/twake/backend/node/src/services/channels/services/channel/default/service.ts @@ -11,7 +11,7 @@ import { DeleteResult, Paginable, ListResult, - CrudExeption, + CrudException, } from "../../../../../core/platform/framework/api/crud-service"; import { ChannelExecutionContext } from "../../../types"; import DefaultChannelListener from "./listener"; @@ -84,7 +84,7 @@ export default class DefaultChannelServiceImpl implements DefaultChannelService const defaultChannel = await this.get(pk); if (!defaultChannel) { - throw CrudExeption.notFound("Default channel has not been found"); + throw CrudException.notFound("Default channel has not been found"); } await this.repository.remove(defaultChannel); diff --git a/twake/backend/node/src/services/channels/services/channel/pending-emails/service.ts b/twake/backend/node/src/services/channels/services/channel/pending-emails/service.ts index 267c148f03..2720451cbe 100644 --- a/twake/backend/node/src/services/channels/services/channel/pending-emails/service.ts +++ b/twake/backend/node/src/services/channels/services/channel/pending-emails/service.ts @@ -10,7 +10,7 @@ import { SaveResult, DeleteResult, ListResult, - CrudExeption, + CrudException, Pagination, } from "../../../../../core/platform/framework/api/crud-service"; import { ChannelExecutionContext } from "../../../types"; @@ -85,7 +85,7 @@ export default class ChannelPendingEmailsService implements ChannelPendingEmailS const pendingEmail = await this.get(pk); if (!pendingEmail) { - throw CrudExeption.notFound("Channel pendingEmail has not been found"); + throw CrudException.notFound("Channel pendingEmail has not been found"); } await this.repository.remove(pendingEmail); diff --git a/twake/backend/node/src/services/channels/services/channel/service.ts b/twake/backend/node/src/services/channels/services/channel/service.ts index d0465ceb87..3b7440bb67 100644 --- a/twake/backend/node/src/services/channels/services/channel/service.ts +++ b/twake/backend/node/src/services/channels/services/channel/service.ts @@ -7,7 +7,7 @@ import { RealtimeUpdated, } from "../../../../core/platform/framework"; import { - CrudExeption, + CrudException, DeleteResult, ListResult, OperationType, @@ -136,7 +136,7 @@ export class Service implements ChannelService { channelToUpdate = await this.get(this.getPrimaryKey(channel)); if (!channelToUpdate) { - throw CrudExeption.notFound("Channel not found"); + throw CrudException.notFound("Channel not found"); } const isChannelOwner = this.isChannelOwner(channelToUpdate, context.user); @@ -156,13 +156,13 @@ export class Service implements ChannelService { const fields = Object.keys(channelDiff) as Array>; if (!fields.length) { - throw CrudExeption.badRequest("Nothing to update"); + throw CrudException.badRequest("Nothing to update"); } const updatableFields = fields.filter(field => updatableParameters[field]); if (!updatableFields.length) { - throw CrudExeption.badRequest("Current user can not update requested fields"); + throw CrudException.badRequest("Current user can not update requested fields"); } channelToSave = cloneDeep(channelToUpdate); @@ -183,7 +183,7 @@ export class Service implements ChannelService { if (mode === OperationType.CREATE) { if (isPrivateChannel && isDefaultChannel) { - throw CrudExeption.badRequest("Private channel can not be default"); + throw CrudException.badRequest("Private channel can not be default"); } if (isDirectChannel) { @@ -192,7 +192,7 @@ export class Service implements ChannelService { logger.info("Direct channel creation with members %o", options.members); if (context.workspace.workspace_id !== ChannelVisibility.DIRECT) { - throw CrudExeption.badRequest("Direct Channel creation error: bad workspace"); + throw CrudException.badRequest("Direct Channel creation error: bad workspace"); } const directChannel = await this.getDirectChannelInCompany( @@ -220,12 +220,12 @@ export class Service implements ChannelService { return saveResult; } else { //Fixme: remove directChannel instance - throw CrudExeption.badRequest("table inconsistency"); + throw CrudException.badRequest("table inconsistency"); } } } else { if (!channel.name) { - throw CrudExeption.badRequest("'name' is required"); + throw CrudException.badRequest("'name' is required"); } } @@ -272,7 +272,7 @@ export class Service implements ChannelService { async update(pk: ChannelPrimaryKey, channel: Channel): Promise> { // TODO: Do the update by hand then save if (!pk.id) { - throw CrudExeption.badRequest("Channel id is required for update"); + throw CrudException.badRequest("Channel id is required for update"); } // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -295,13 +295,13 @@ export class Service implements ChannelService { const channelToDelete = await this.channelRepository.findOne(this.getPrimaryKey(pk)); if (!channelToDelete) { - throw new CrudExeption("Channel not found", 404); + throw new CrudException("Channel not found", 404); } const directChannel = isDirectChannel(channelToDelete); if (directChannel) { - throw new CrudExeption("Direct channel can not be deleted", 400); + throw new CrudException("Direct channel can not be deleted", 400); } const isWorkspaceAdmin = @@ -310,7 +310,7 @@ export class Service implements ChannelService { const isChannelOwner = this.isChannelOwner(channelToDelete, context.user); if (!isWorkspaceAdmin && !isChannelOwner) { - throw new CrudExeption("Channel can not be deleted", 400); + throw new CrudException("Channel can not be deleted", 400); } await this.channelRepository.remove(channelToDelete); @@ -536,13 +536,13 @@ export class Service implements ChannelService { const channel = await this.get(pk); if (!channel) { - throw CrudExeption.notFound("Channel not found"); + throw CrudException.notFound("Channel not found"); } const member = await this.channelService.members.isChannelMember(user, channel); if (!member) { - throw CrudExeption.badRequest("User is not channel member"); + throw CrudException.badRequest("User is not channel member"); } // Updating the member will also publish a message in the pubsub channel @@ -565,13 +565,13 @@ export class Service implements ChannelService { const channel = await this.get(pk); if (!channel) { - throw CrudExeption.notFound("Channel not found"); + throw CrudException.notFound("Channel not found"); } const member = await this.channelService.members.isChannelMember(user, channel); if (!member) { - throw CrudExeption.badRequest("User is not channel member"); + throw CrudException.badRequest("User is not channel member"); } // do nothing here but send a notification so that notification service is updated... diff --git a/twake/backend/node/src/services/channels/services/member/service.ts b/twake/backend/node/src/services/channels/services/member/service.ts index 48d92282ce..fec646e0f5 100644 --- a/twake/backend/node/src/services/channels/services/member/service.ts +++ b/twake/backend/node/src/services/channels/services/member/service.ts @@ -1,7 +1,7 @@ import { getLogger, RealtimeDeleted, RealtimeSaved } from "../../../../core/platform/framework"; import { CreateResult, - CrudExeption, + CrudException, DeleteResult, ListResult, OperationType, @@ -161,7 +161,7 @@ export class Service implements MemberService { const channel = await this.channelService.channels.get(context.channel); if (!channel) { - throw CrudExeption.notFound("Channel does not exists"); + throw CrudException.notFound("Channel does not exists"); } const memberToUpdate = await this.userChannelsRepository.findOne(this.getPrimaryKey(member)); @@ -173,7 +173,7 @@ export class Service implements MemberService { const isCurrentUser = this.isCurrentUser(memberToUpdate, context.user); if (!isCurrentUser) { - throw CrudExeption.badRequest(`Channel member ${member.user_id} can not be updated`); + throw CrudException.badRequest(`Channel member ${member.user_id} can not be updated`); } const updatableParameters: Partial> = { @@ -193,7 +193,7 @@ export class Service implements MemberService { const updatableFields = fields.filter(field => updatableParameters[field]); if (!updatableFields.length) { - throw CrudExeption.badRequest("Current user can not update requested fields"); + throw CrudException.badRequest("Current user can not update requested fields"); } memberToSave = cloneDeep(memberToUpdate); @@ -247,7 +247,7 @@ export class Service implements MemberService { new CreateResult("channel_member", memberToSave), ); } else { - throw CrudExeption.badRequest(`User ${member.user_id} is not allowed to join this channel`); + throw CrudException.badRequest(`User ${member.user_id} is not allowed to join this channel`); } } @@ -285,16 +285,16 @@ export class Service implements MemberService { const channel = await this.channelService.channels.get(context.channel); if (!channel) { - throw CrudExeption.notFound("Channel does not exists"); + throw CrudException.notFound("Channel does not exists"); } if (!memberToDelete) { - throw CrudExeption.notFound("Channel member not found"); + throw CrudException.notFound("Channel member not found"); } if (ChannelEntity.isDirectChannel(channel)) { if (!this.isCurrentUser(memberToDelete, context.user)) { - throw CrudExeption.badRequest("User can not remove other users from direct channel"); + throw CrudException.badRequest("User can not remove other users from direct channel"); } } @@ -302,7 +302,7 @@ export class Service implements MemberService { const canLeave = await this.canLeavePrivateChannel(context.user, channel); if (!canLeave) { - throw CrudExeption.badRequest("User can not leave the private channel"); + throw CrudException.badRequest("User can not leave the private channel"); } } @@ -330,14 +330,14 @@ export class Service implements MemberService { }); if (!channel) { - throw CrudExeption.notFound("Channel not found"); + throw CrudException.notFound("Channel not found"); } if (ChannelEntity.isDirectChannel(channel) || ChannelEntity.isPrivateChannel(channel)) { const isMember = await this.isChannelMember(context.user, channel); if (!isMember) { - throw CrudExeption.badRequest("User does not have enough rights to get channels"); + throw CrudException.badRequest("User does not have enough rights to get channels"); } } @@ -416,7 +416,7 @@ export class Service implements MemberService { ListResult<{ channel: ChannelEntity; added: boolean; member?: ChannelMember; err?: Error }> > { if (!channel) { - throw CrudExeption.badRequest("Channel is required"); + throw CrudException.badRequest("Channel is required"); } logger.debug( "Add users %o to channel %o", diff --git a/twake/backend/node/src/services/channels/web/controllers/channel.ts b/twake/backend/node/src/services/channels/web/controllers/channel.ts index 0024562197..cb5da89a47 100644 --- a/twake/backend/node/src/services/channels/web/controllers/channel.ts +++ b/twake/backend/node/src/services/channels/web/controllers/channel.ts @@ -2,7 +2,7 @@ import { plainToClass } from "class-transformer"; import { FastifyReply, FastifyRequest } from "fastify"; import { CreateResult, - CrudExeption, + CrudException, Pagination, } from "../../../../core/platform/framework/api/crud-service"; import { CrudController } from "../../../../core/platform/services/webserver/types"; @@ -81,14 +81,14 @@ export class ChannelCrudController let channel = await this.service.get(this.getPrimaryKey(request), getExecutionContext(request)); if (!channel) { - throw CrudExeption.notFound(`Channel ${request.params.id} not found`); + throw CrudException.notFound(`Channel ${request.params.id} not found`); } if (Channel.isDirectChannel(channel) || Channel.isPrivateChannel(channel)) { const isMember = await this.membersService.isChannelMember(request.currentUser, channel); if (!isMember) { - throw CrudExeption.badRequest("User does not have enough rights to get channel"); + throw CrudException.badRequest("User does not have enough rights to get channel"); } } diff --git a/twake/backend/node/src/services/channels/web/controllers/member.ts b/twake/backend/node/src/services/channels/web/controllers/member.ts index 6f0f4f20b7..a38c99ea40 100644 --- a/twake/backend/node/src/services/channels/web/controllers/member.ts +++ b/twake/backend/node/src/services/channels/web/controllers/member.ts @@ -1,5 +1,5 @@ import { CrudController } from "../../../../core/platform/services/webserver/types"; -import { CrudExeption, Pagination } from "../../../../core/platform/framework/api/crud-service"; +import { CrudException, Pagination } from "../../../../core/platform/framework/api/crud-service"; import { ChannelMember, ChannelMemberPrimaryKey } from "../../entities"; import { MemberService } from "../../provider"; import { @@ -51,7 +51,7 @@ export class ChannelMemberCrudController reply: FastifyReply, ): Promise> { if (!isCurrentUser(request.params.member_id, request.currentUser)) { - throw CrudExeption.badRequest("User does not have enough rights to get member"); + throw CrudException.badRequest("User does not have enough rights to get member"); } const resource = await this.service.get( @@ -60,7 +60,7 @@ export class ChannelMemberCrudController ); if (!resource) { - throw CrudExeption.notFound(`Channel member ${request.params.member_id} not found`); + throw CrudException.notFound(`Channel member ${request.params.member_id} not found`); } return { @@ -106,7 +106,7 @@ export class ChannelMemberCrudController }); if (!isCurrentUser(entity.user_id, request.currentUser)) { - throw CrudExeption.badRequest("Current user can not update this member"); + throw CrudException.badRequest("Current user can not update this member"); } try { diff --git a/twake/backend/node/src/services/channels/web/controllers/tab.ts b/twake/backend/node/src/services/channels/web/controllers/tab.ts index cc341470bf..a160ea8f7f 100644 --- a/twake/backend/node/src/services/channels/web/controllers/tab.ts +++ b/twake/backend/node/src/services/channels/web/controllers/tab.ts @@ -1,5 +1,5 @@ import { CrudController } from "../../../../core/platform/services/webserver/types"; -import { CrudExeption, Pagination } from "../../../../core/platform/framework/api/crud-service"; +import { CrudException, Pagination } from "../../../../core/platform/framework/api/crud-service"; import { ChannelTab, ChannelTabPrimaryKey } from "../../entities"; import { TabService } from "../../provider"; import { @@ -55,7 +55,7 @@ export class ChannelTabCrudController ); if (!resource) { - throw CrudExeption.notFound(`Channel member ${request.params.tab_id} not found`); + throw CrudException.notFound(`Channel member ${request.params.tab_id} not found`); } return { diff --git a/twake/backend/node/src/services/console/clients/remote.ts b/twake/backend/node/src/services/console/clients/remote.ts index 1730b66a1f..67d5adf389 100644 --- a/twake/backend/node/src/services/console/clients/remote.ts +++ b/twake/backend/node/src/services/console/clients/remote.ts @@ -20,7 +20,7 @@ import Company, { CompanySearchKey, getInstance as getCompanyInstance, } from "../../user/entities/company"; -import { CrudExeption } from "../../../core/platform/framework/api/crud-service"; +import { CrudException } from "../../../core/platform/framework/api/crud-service"; import UserServiceAPI from "../../user/api"; import coalesce from "../../../utils/coalesce"; import { logger } from "../../../core/platform/framework/logger"; @@ -221,7 +221,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { const userDTO = await this.fetchUserInfo(code); if (!userDTO) { - throw CrudExeption.badRequest("User not found on Console"); + throw CrudException.badRequest("User not found on Console"); } const roles = userDTO.roles; @@ -230,7 +230,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { if (!user) { if (!userDTO.email) { - throw CrudExeption.badRequest("Email is required"); + throw CrudException.badRequest("Email is required"); } let username = userDTO.email @@ -240,12 +240,12 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { .replace(/ +/g, "_"); if (await this.userService.users.isEmailAlreadyInUse(userDTO.email)) { - throw CrudExeption.badRequest("Console user not created because email already exists"); + throw CrudException.badRequest("Console user not created because email already exists"); } username = await this.userService.users.getAvailableUsername(username); if (!username) { - throw CrudExeption.badRequest("Console user not created because username already exists"); + throw CrudException.badRequest("Console user not created because username already exists"); } user = getInstance({}); @@ -301,7 +301,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { const roleName = role.roleCode; const company = await getCompanyByCode(companyConsoleCode); if (!company) { - throw CrudExeption.notFound(`Company ${companyConsoleCode} not found`); + throw CrudException.notFound(`Company ${companyConsoleCode} not found`); } //Make sure user is active, if not we remove it if (role.status !== "deactivated") { @@ -332,7 +332,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { const user = await this.userService.users.getByConsoleId(consoleUserId); if (!user) { - throw CrudExeption.notFound(`User ${consoleUserId} doesn't exists`); + throw CrudException.notFound(`User ${consoleUserId} doesn't exists`); } await this.userService.companies.removeUserFromCompany({ id: company.id }, { id: user.id }); } @@ -371,7 +371,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { .then(({ data }) => data.company) .catch(e => { if (e.response.status === 401) { - throw CrudExeption.forbidden("Bad console credentials"); + throw CrudException.forbidden("Bad console credentials"); } throw e; }); @@ -389,7 +389,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { .then(({ data }) => data) .catch(e => { if (e.response.status === 401) { - throw CrudExeption.forbidden("Bad console credentials"); + throw CrudException.forbidden("Bad console credentials"); } throw e; }); @@ -407,7 +407,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { .then(({ data }) => data) .catch(e => { if (e.response?.status === 401) { - throw CrudExeption.forbidden("Bad access token credentials"); + throw CrudException.forbidden("Bad access token credentials"); } throw e; }); @@ -431,7 +431,7 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { .then(({ data }) => data) .catch(e => { if (e.response.status === 401) { - throw CrudExeption.forbidden("Bad credentials"); + throw CrudException.forbidden("Bad credentials"); } throw e; }); diff --git a/twake/backend/node/src/services/console/web/controller.ts b/twake/backend/node/src/services/console/web/controller.ts index bcb3122735..8ce8872e66 100644 --- a/twake/backend/node/src/services/console/web/controller.ts +++ b/twake/backend/node/src/services/console/web/controller.ts @@ -12,7 +12,7 @@ import { ConsoleOptions, } from "../types"; import Company from "../../user/entities/company"; -import { CrudExeption } from "../../../core/platform/framework/api/crud-service"; +import { CrudException } from "../../../core/platform/framework/api/crud-service"; import PasswordEncoder from "../../../utils/password-encoder"; import { AccessToken } from "../../../utils/types"; import AuthServiceAPI from "../../../core/platform/services/auth/provider"; @@ -41,7 +41,7 @@ export class ConsoleController { } else if (request.body.email && request.body.password) { return { access_token: await this.authByPassword(request.body.email, request.body.password) }; } else { - throw CrudExeption.badRequest("remote_access_token or email+password are required"); + throw CrudException.badRequest("remote_access_token or email+password are required"); } } @@ -203,7 +203,7 @@ export class ConsoleController { break; default: logger.info("Event not recognized"); - throw CrudExeption.notImplemented("Unimplemented"); + throw CrudException.notImplemented("Unimplemented"); } } catch (e) { reply.status(400); @@ -259,7 +259,7 @@ export class ConsoleController { private async authByPassword(email: string, password: string): Promise { const user = await this.userService.users.getByEmail(email); if (!user) { - throw CrudExeption.forbidden("User doesn't exists"); + throw CrudException.forbidden("User doesn't exists"); } // allow to login in development mode with any password. This can be used to test without the console provider because the password is not stored locally... @@ -269,7 +269,7 @@ export class ConsoleController { }); if (!(await this.passwordEncoder.isPasswordValid(storedPassword, password, salt))) { - throw CrudExeption.forbidden("Password doesn't match"); + throw CrudException.forbidden("Password doesn't match"); } } else if (process.env.NODE_ENV === "development") { logger.warn("ERROR_NOTONPROD: YOU ARE RUNNING IN DEVELOPMENT MODE, AUTH IS DISABLED!!!"); @@ -286,7 +286,7 @@ export class ConsoleController { const userDTO = await client.getUserByAccessToken(accessToken); const user = await client.updateLocalUserFromConsole(userDTO._id); if (!user) { - throw CrudExeption.notFound(`User details not found for access token ${accessToken}`); + throw CrudException.notFound(`User details not found for access token ${accessToken}`); } return this.authService.generateJWT(user.id, user.email_canonical, { track: user?.preferences?.allow_tracking || false, diff --git a/twake/backend/node/src/services/files/services/index.ts b/twake/backend/node/src/services/files/services/index.ts index a4e565724c..7a4bb899d9 100644 --- a/twake/backend/node/src/services/files/services/index.ts +++ b/twake/backend/node/src/services/files/services/index.ts @@ -16,7 +16,7 @@ import { import { PreviewFinishedProcessor } from "./preview"; import _ from "lodash"; import { getDownloadRoute, getThumbnailRoute } from "../web/routes"; -import { DeleteResult, CrudExeption } from "../../../core/platform/framework/api/crud-service"; +import { DeleteResult, CrudException } from "../../../core/platform/framework/api/crud-service"; export function getService( databaseService: DatabaseServiceAPI, @@ -266,7 +266,7 @@ class Service implements FileServiceAPI { const fileToDelete = await this.repository.findOne({ id, company_id: context.company.id }); if (!fileToDelete) { - throw new CrudExeption("File not found", 404); + throw new CrudException("File not found", 404); } await this.repository.remove(fileToDelete); diff --git a/twake/backend/node/src/services/messages/services/messages/service.ts b/twake/backend/node/src/services/messages/services/messages/service.ts index 34f42cff08..95d67e4d93 100644 --- a/twake/backend/node/src/services/messages/services/messages/service.ts +++ b/twake/backend/node/src/services/messages/services/messages/service.ts @@ -4,7 +4,6 @@ import { DeleteResult, ListResult, Pagination, - CrudExeption, } from "../../../../core/platform/framework/api/crud-service"; import { ResourcePath } from "../../../../core/platform/services/realtime/types"; import { logger, RealtimeSaved, TwakeContext } from "../../../../core/platform/framework"; diff --git a/twake/backend/node/src/services/notifications/services/badges/service.ts b/twake/backend/node/src/services/notifications/services/badges/service.ts index b2de3d564a..4b8666dc4d 100644 --- a/twake/backend/node/src/services/notifications/services/badges/service.ts +++ b/twake/backend/node/src/services/notifications/services/badges/service.ts @@ -7,7 +7,7 @@ import { ListResult, OperationType, Paginable, - CrudExeption, + CrudException, Pagination, } from "../../../../core/platform/framework/api/crud-service"; import { UserNotificationBadgeServiceAPI } from "../../api"; @@ -112,7 +112,7 @@ export class UserNotificationBadgeService implements UserNotificationBadgeServic filter: Pick, ): Promise> { if (!company_id || !user_id) { - throw CrudExeption.badRequest("company_id and user_id are required"); + throw CrudException.badRequest("company_id and user_id are required"); } return this.repository.find({ diff --git a/twake/backend/node/src/services/notifications/services/mobile-push/service.ts b/twake/backend/node/src/services/notifications/services/mobile-push/service.ts index 6cc207f4ac..4ca6f3d528 100644 --- a/twake/backend/node/src/services/notifications/services/mobile-push/service.ts +++ b/twake/backend/node/src/services/notifications/services/mobile-push/service.ts @@ -3,7 +3,7 @@ import { DatabaseServiceAPI } from "../../../../core/platform/services/database/ import { PushNotificationMessage } from "../../types"; import { PushServiceAPI } from "../../../../core/platform/services/push/api"; import User, { TYPE as UserType } from "../../../user/entities/user"; -import { CrudExeption } from "../../../../core/platform/framework/api/crud-service"; +import { CrudException } from "../../../../core/platform/framework/api/crud-service"; export class MobilePushService { name: "MobilePushService"; @@ -25,7 +25,7 @@ export class MobilePushService { const user = await this.userRepository.findOne({ id: userId }); if (!user) { - throw CrudExeption.notFound(`User ${userId} not found`); + throw CrudException.notFound(`User ${userId} not found`); } const notification = { diff --git a/twake/backend/node/src/services/notifications/services/preferences/service.ts b/twake/backend/node/src/services/notifications/services/preferences/service.ts index 26b0cb357f..c1ee0a2ef5 100644 --- a/twake/backend/node/src/services/notifications/services/preferences/service.ts +++ b/twake/backend/node/src/services/notifications/services/preferences/service.ts @@ -1,7 +1,7 @@ import { DatabaseServiceAPI } from "../../../../core/platform/services/database/api"; import { UserNotificationPreferencesAPI } from "../../api"; import { - CrudExeption, + CrudException, ListResult, SaveResult, OperationType, @@ -58,7 +58,7 @@ export class NotificationPreferencesService implements UserNotificationPreferenc filter: Pick, ): Promise> { if (!workspace_id || !company_id || !user_id) { - throw CrudExeption.badRequest("workspace_id, company_id and user_id are required"); + throw CrudException.badRequest("workspace_id, company_id and user_id are required"); } return await this.repository.find({ diff --git a/twake/backend/node/src/services/user/services/companies/service.ts b/twake/backend/node/src/services/user/services/companies/service.ts index c41450a001..12cffcc3f9 100644 --- a/twake/backend/node/src/services/user/services/companies/service.ts +++ b/twake/backend/node/src/services/user/services/companies/service.ts @@ -1,7 +1,7 @@ import _, { merge } from "lodash"; import { - CrudExeption, + CrudException, DeleteResult, ExecutionContext, ListResult, @@ -272,7 +272,7 @@ export class CompanyService implements CompaniesServiceAPI { external_id: searchKey.identity_provider_id, }); if (!extCompany) { - throw CrudExeption.notFound(`Company ${searchKey.identity_provider_id} not found`); + throw CrudException.notFound(`Company ${searchKey.identity_provider_id} not found`); } await this.externalCompanyRepository.remove(extCompany); searchKey.id = extCompany.company_id; @@ -280,7 +280,7 @@ export class CompanyService implements CompaniesServiceAPI { const company = await this.getCompany({ id: searchKey.id }); if (!company) { - throw CrudExeption.notFound(`Company ${searchKey.id} not found`); + throw CrudException.notFound(`Company ${searchKey.id} not found`); } await this.companyRepository.remove(company); diff --git a/twake/backend/node/src/services/user/services/users/service.ts b/twake/backend/node/src/services/user/services/users/service.ts index a94b66b962..f8db66fd6a 100644 --- a/twake/backend/node/src/services/user/services/users/service.ts +++ b/twake/backend/node/src/services/user/services/users/service.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unused-vars */ import { CreateResult, - CrudExeption, + CrudException, DeleteResult, ExecutionContext, ListResult, @@ -260,7 +260,7 @@ export class UserService implements UsersServiceAPI { async getUserDevices(userPrimaryKey: UserPrimaryKey): Promise { const user = await this.get(userPrimaryKey); if (!user) { - throw CrudExeption.notFound(`User ${userPrimaryKey} not found`); + throw CrudException.notFound(`User ${userPrimaryKey} not found`); } if (!user.devices || user.devices.length == 0) { return []; @@ -280,7 +280,7 @@ export class UserService implements UsersServiceAPI { const user = await this.get(userPrimaryKey); if (!user) { - throw CrudExeption.notFound(`User ${userPrimaryKey} not found`); + throw CrudException.notFound(`User ${userPrimaryKey} not found`); } user.devices = user.devices || []; user.devices.push(id); @@ -307,7 +307,7 @@ export class UserService implements UsersServiceAPI { const passwordEncoder = new PasswordEncoder(); const user = await this.get(userPrimaryKey); if (!user) { - throw CrudExeption.notFound(`User ${userPrimaryKey.id} not found`); + throw CrudException.notFound(`User ${userPrimaryKey.id} not found`); } user.password = await passwordEncoder.encodePassword(password); user.salt = null; @@ -317,7 +317,7 @@ export class UserService implements UsersServiceAPI { async getHashedPassword(userPrimaryKey: UserPrimaryKey): Promise<[string, string]> { const user = await this.get(userPrimaryKey); if (!user) { - throw CrudExeption.notFound(`User ${userPrimaryKey.id} not found`); + throw CrudException.notFound(`User ${userPrimaryKey.id} not found`); } if (user.salt) { diff --git a/twake/backend/node/src/services/user/web/controller.ts b/twake/backend/node/src/services/user/web/controller.ts index f87b671317..b1fa71f1d4 100644 --- a/twake/backend/node/src/services/user/web/controller.ts +++ b/twake/backend/node/src/services/user/web/controller.ts @@ -1,6 +1,6 @@ import { FastifyReply, FastifyRequest } from "fastify"; import { - CrudExeption, + CrudException, ExecutionContext, ListResult, Pagination, @@ -59,7 +59,7 @@ export class UsersCrudController const user = await this.service.users.get({ id: id }, getExecutionContext(request)); if (!user) { - throw CrudExeption.notFound(`User ${id} not found`); + throw CrudException.notFound(`User ${id} not found`); } const userObject = await this.service.formatUser(user, { @@ -157,7 +157,7 @@ export class UsersCrudController const user = await this.service.users.get({ id: request.params.id }, context); if (!user) { - throw CrudExeption.notFound(`User ${request.params.id} not found`); + throw CrudException.notFound(`User ${request.params.id} not found`); } const [currentUserCompanies, requestedUserCompanies] = await Promise.all( @@ -203,7 +203,7 @@ export class UsersCrudController const context = getExecutionContext(request); if (!company) { - throw CrudExeption.notFound(`Company ${request.params.id} not found`); + throw CrudException.notFound(`Company ${request.params.id} not found`); } let companyUserObj: CompanyUserObject | null = null; @@ -245,7 +245,7 @@ export class UsersCrudController ): Promise> { const resource = request.body.resource; if (resource.type !== "FCM") { - throw CrudExeption.badRequest("Type should be FCM only"); + throw CrudException.badRequest("Type should be FCM only"); } const context = getExecutionContext(request); diff --git a/twake/backend/node/src/services/workspaces/services/workspace/service.ts b/twake/backend/node/src/services/workspaces/services/workspace/service.ts index d0aad28874..7b2cb7809f 100644 --- a/twake/backend/node/src/services/workspaces/services/workspace/service.ts +++ b/twake/backend/node/src/services/workspaces/services/workspace/service.ts @@ -2,7 +2,7 @@ import { concat, EMPTY, from, Observable } from "rxjs"; import { mergeMap } from "rxjs/operators"; import { CreateResult, - CrudExeption, + CrudException, DeleteResult, ExecutionContext, ListResult, @@ -345,7 +345,7 @@ export class WorkspaceService implements WorkspaceServiceAPI { ): Promise { const workspaceUser = await this.getUser(workspaceUserPk); if (!workspaceUser) { - throw CrudExeption.notFound("WorkspaceUser entity not found"); + throw CrudException.notFound("WorkspaceUser entity not found"); } await this.workspaceUserRepository.save(merge(workspaceUser, { role })); } @@ -362,11 +362,11 @@ export class WorkspaceService implements WorkspaceServiceAPI { const entity = await this.getUser(workspaceUserPk); if (!entity) { - throw CrudExeption.notFound("WorkspaceUser entity not found"); + throw CrudException.notFound("WorkspaceUser entity not found"); } if (!(await this.checkWorkspaceHasOtherAdmin(workspaceUserPk))) { - throw CrudExeption.notFound("No other admin found in workspace"); + throw CrudException.notFound("No other admin found in workspace"); } await this.workspaceUserRepository.remove(entity); @@ -492,7 +492,7 @@ export class WorkspaceService implements WorkspaceServiceAPI { companyRole: CompanyUserRole, ): Promise { if (await this.getPendingUser(primaryKey)) { - throw CrudExeption.badRequest("User is pending already"); + throw CrudException.badRequest("User is pending already"); } const workspacePendingUser = merge(new WorkspacePendingUser(), { workspace_id: primaryKey.workspace_id, @@ -518,7 +518,7 @@ export class WorkspaceService implements WorkspaceServiceAPI { ): Promise> { const pendingUser = await this.getPendingUser(primaryKey); if (!pendingUser) { - throw CrudExeption.notFound("Pending user not found"); + throw CrudException.notFound("Pending user not found"); } await this.workspacePendingUserRepository.remove(pendingUser); return new DeleteResult(WorkspacePendingUserType, primaryKey, true); diff --git a/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts b/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts index bd08864b74..73194baccb 100644 --- a/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts +++ b/twake/backend/node/src/services/workspaces/web/controllers/workspace-invite-tokens.ts @@ -16,7 +16,7 @@ import { import { FastifyReply, FastifyRequest } from "fastify"; import { WorkspaceInviteTokensExecutionContext } from "../../types"; -import { CrudExeption } from "../../../../core/platform/framework/api/crud-service"; +import { CrudException } from "../../../../core/platform/framework/api/crud-service"; import { pick } from "lodash"; export class WorkspaceInviteTokensCrudController @@ -44,7 +44,7 @@ export class WorkspaceInviteTokensCrudController ); if (!res) { - throw CrudExeption.notFound("Invite token not found"); + throw CrudException.notFound("Invite token not found"); } return { @@ -77,7 +77,7 @@ export class WorkspaceInviteTokensCrudController const tokenInfo = this.services.workspaces.decodeInviteToken(request.params.token); if (!tokenInfo) { - throw CrudExeption.notFound("Invite token malformed"); + throw CrudException.notFound("Invite token malformed"); } const deleted = await this.services.workspaces.deleteInviteToken( @@ -86,7 +86,7 @@ export class WorkspaceInviteTokensCrudController ); if (!deleted) { - throw CrudExeption.notFound("Invite token not found"); + throw CrudException.notFound("Invite token not found"); } reply.code(204); @@ -103,7 +103,7 @@ export class WorkspaceInviteTokensCrudController const entity = await this.services.workspaces.getInviteTokenInfo(request.body.token); if (!entity) { - throw CrudExeption.notFound("Token not found"); + throw CrudException.notFound("Token not found"); } const { company_id, workspace_id } = entity; diff --git a/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts b/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts index c2b45930c4..b698ce80e7 100644 --- a/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts +++ b/twake/backend/node/src/services/workspaces/web/controllers/workspace-users.ts @@ -29,7 +29,7 @@ import { CompanyShort, CompanyUserRole, CompanyUserStatus } from "../../../user/ import Company from "../../../user/entities/company"; import { chain } from "lodash"; import { - CrudExeption, + CrudException, ListResult, Pagination, } from "../../../../core/platform/framework/api/crud-service"; @@ -228,7 +228,7 @@ export class WorkspaceUsersCrudController const user = await this.usersService.get({ id: userId }); if (!user) { - throw CrudExeption.badRequest("User entity not found"); + throw CrudException.badRequest("User entity not found"); } const userCompanies: CompanyUser[] = await this.usersService.getUserCompanies({ id: userId }); @@ -271,7 +271,7 @@ export class WorkspaceUsersCrudController ); if (!companyUser) { - throw CrudExeption.badRequest(`User ${userId} does not belong to this company`); + throw CrudException.badRequest(`User ${userId} does not belong to this company`); } const workspaceUser = await this.workspaceService.getUser({ @@ -282,7 +282,7 @@ export class WorkspaceUsersCrudController if (request.params.user_id) { // ON UPDATE if (!workspaceUser) { - throw CrudExeption.notFound(`User ${userId} not found in this workspace`); + throw CrudException.notFound(`User ${userId} not found in this workspace`); } await this.workspaceService.updateUserRole( { workspaceId: context.workspace_id, userId }, @@ -320,7 +320,7 @@ export class WorkspaceUsersCrudController }); if (!workspaceUser) { - throw CrudExeption.notFound("Workspace has not been found"); + throw CrudException.notFound("Default channel has not been found"); } await this.workspaceService.removeUser({ diff --git a/twake/backend/node/src/services/workspaces/web/controllers/workspaces.ts b/twake/backend/node/src/services/workspaces/web/controllers/workspaces.ts index 7a73b8971a..4490960f69 100644 --- a/twake/backend/node/src/services/workspaces/web/controllers/workspaces.ts +++ b/twake/backend/node/src/services/workspaces/web/controllers/workspaces.ts @@ -22,7 +22,7 @@ import { hasCompanyAdminLevel, hasCompanyMemberLevel } from "../../../../utils/c import { hasWorkspaceAdminLevel } from "../../../../utils/workspace"; import { getWorkspaceRooms } from "../../realtime"; import { RealtimeServiceAPI } from "../../../../core/platform/services/realtime/api"; -import { CrudExeption } from "../../../../core/platform/framework/api/crud-service"; +import { CrudException } from "../../../../core/platform/framework/api/crud-service"; export class WorkspacesCrudController implements @@ -106,7 +106,7 @@ export class WorkspacesCrudController }); if (!workspace) { - throw CrudExeption.notFound(`Workspace ${request.params.id} not found`); + throw CrudException.notFound(`Workspace ${request.params.id} not found`); } const workspaceUserRole = await this.getWorkspaceUserRole(request.params.id, context); @@ -115,7 +115,7 @@ export class WorkspacesCrudController const companyUserRole = await this.getCompanyUserRole(context); if (companyUserRole !== "admin") { - throw CrudExeption.forbidden(`You are not belong to workspace ${request.params.id}`); + throw CrudException.forbidden(`You are not belong to workspace ${request.params.id}`); } } const count = await this.getWorkspaceUsersCount(workspace.id); @@ -170,7 +170,7 @@ export class WorkspacesCrudController const companyUserRole = await this.getCompanyUserRole(context); if (!hasCompanyMemberLevel(companyUserRole)) { - throw CrudExeption.forbidden(`You are not a member of company ${context.company_id}`); + throw CrudException.forbidden(`You are not a member of company ${context.company_id}`); } if (!hasCompanyAdminLevel(companyUserRole) && request.params.id) { @@ -178,7 +178,7 @@ export class WorkspacesCrudController const companyUserRole = await this.getCompanyUserRole(context); if (!hasWorkspaceAdminLevel(workspaceUserRole, companyUserRole)) { - throw CrudExeption.forbidden("You are not a admin of workspace or company"); + throw CrudException.forbidden("You are not a admin of workspace or company"); } } @@ -225,7 +225,7 @@ export class WorkspacesCrudController if (!hasWorkspaceAdminLevel(workspaceUserRole, companyUserRole)) { const companyUserRole = await this.getCompanyUserRole(context); if (companyUserRole !== "admin") { - throw CrudExeption.forbidden("You are not a admin of workspace or company"); + throw CrudException.forbidden("You are not a admin of workspace or company"); } } diff --git a/twake/backend/node/src/utils/handleError.ts b/twake/backend/node/src/utils/handleError.ts index f87b8af0a1..69f830501d 100644 --- a/twake/backend/node/src/utils/handleError.ts +++ b/twake/backend/node/src/utils/handleError.ts @@ -1,10 +1,10 @@ import { FastifyReply } from "fastify"; import { HttpErrorCodes } from "fastify-sensible/lib/httpError"; -import { CrudExeption } from "../core/platform/framework/api/crud-service"; +import { CrudException } from "../core/platform/framework/api/crud-service"; export function handleError(reply: FastifyReply, err: Error): void { - if (err instanceof CrudExeption) { - const crudException: CrudExeption = err; + if (err instanceof CrudException) { + const crudException: CrudException = err; reply.getHttpError(crudException.status as HttpErrorCodes, crudException.message); } else { throw err; diff --git a/twake/backend/node/src/utils/password-encoder.ts b/twake/backend/node/src/utils/password-encoder.ts index abb0480cd9..df2ce45d50 100644 --- a/twake/backend/node/src/utils/password-encoder.ts +++ b/twake/backend/node/src/utils/password-encoder.ts @@ -1,4 +1,4 @@ -import { CrudExeption } from "../core/platform/framework/api/crud-service"; +import { CrudException } from "../core/platform/framework/api/crud-service"; import crypto from "crypto"; import assert from "assert"; import bcrypt from "bcrypt"; @@ -32,7 +32,7 @@ export default class { public encodePasswordOldWay(raw: string, salt?: string): string { if (this.isPasswordTooLong(raw)) { - throw CrudExeption.badRequest("Invalid password."); + throw CrudException.badRequest("Invalid password."); } const salted = Buffer.from(this.mergePasswordAndSalt(raw, salt)); let digest = crypto.createHash(this.algorithm).update(salted).digest(); diff --git a/twake/backend/node/test/e2e/application/application-events.spec.ts b/twake/backend/node/test/e2e/application/application-events.spec.ts new file mode 100644 index 0000000000..004af67339 --- /dev/null +++ b/twake/backend/node/test/e2e/application/application-events.spec.ts @@ -0,0 +1,133 @@ +import { beforeAll, describe, expect, it } from "@jest/globals"; +import { init, TestPlatform } from "../setup"; +import { TestDbService } from "../utils.prepare.db"; +import { Api } from "../utils.api"; +import { + FastifyInstance, + FastifyRegisterOptions, + FastifyPluginCallback, + FastifyRequest, + FastifyReply, +} from "fastify"; + +import { logger as log } from "../../../src/core/platform/framework"; +import WebServerAPI from "../../../src/core/platform/services/webserver/provider"; +import * as assert from "assert"; +import Application, { + ApplicationObject, + PublicApplicationObject, +} from "../../../src/services/applications/entities/application"; +import { ResourceGetResponse } from "../../../src/utils/types"; +import { CrudException } from "../../../src/core/platform/framework/api/crud-service"; +import * as crypto from "crypto"; + +let signingSecret = ""; + +describe("Application events", () => { + const url = "/internal/services/applications/v1"; + let platform: TestPlatform; + let testDbService: TestDbService; + let api: Api; + let appId: string; + + beforeAll(async ends => { + platform = await init(undefined, testAppHookRoute); + + await platform.database.getConnector().drop(); + + testDbService = await TestDbService.getInstance(platform, true); + api = new Api(platform); + + postPayload.company_id = platform.workspace.company_id; + + const createdApplication = await api.post( + "/internal/services/applications/v1/applications", + postPayload, + ); + + appId = createdApplication.resource.id; + signingSecret = createdApplication.resource.api.privateKey; + + ends(); + + afterAll(done => { + platform.tearDown().then(done); + }); + }); + + it("Should 200 on sending well formed event", async done => { + const payload = { + company_id: platform.workspace.company_id, + workspace_id: platform.workspace.workspace_id, + type: "some type", + name: "name", + content: {}, + }; + + const response = await api.post(`${url}/applications/${appId}/event`, payload); + expect(response.statusCode).toBe(200); + expect(response.resource).toMatchObject({ a: "b" }); + done(); + }); +}); + +const postPayload = { + is_default: false, + company_id: null, + identity: { + code: "code", + name: "name", + icon: "icon", + description: "description", + website: "website", + categories: [], + compatibility: [], + }, + api: { + hooksUrl: "http://localhost:3000/test/appHook", + allowedIps: "allowedIps", + }, + access: { + read: ["messages"], + write: ["messages"], + delete: ["messages"], + hooks: ["messages"], + }, + display: {}, + publication: { + requested: true, + }, +}; + +const testAppHookRoute = (fastify: FastifyInstance) => { + const routes: FastifyPluginCallback = (fastify: FastifyInstance, options, next) => { + fastify.route({ + method: "POST", + url: "/test/appHook", + handler: (request: FastifyRequest, reply: FastifyReply): Promise => { + const signature = request.headers["x-twake-signature"]; + if (!signature) { + reply.status(403); + reply.send({ error: "Signature is missing" }); + return undefined; + } + + const expectedSignature = crypto + .createHmac("sha256", signingSecret) + .update(JSON.stringify(request.body)) + .digest("hex"); + if (expectedSignature != signature) { + reply.status(403); + reply.send({ error: "Wrong signature" }); + return undefined; + } + + log.debug({ signatureMatched: expectedSignature == signature }); + return Promise.resolve({ a: "b" }); + }, + }); + + next(); + }; + fastify.register(routes); +}; diff --git a/twake/backend/node/test/e2e/setup/index.ts b/twake/backend/node/test/e2e/setup/index.ts index 07e420ce44..ab54f49bb1 100644 --- a/twake/backend/node/test/e2e/setup/index.ts +++ b/twake/backend/node/test/e2e/setup/index.ts @@ -43,7 +43,10 @@ export interface TestPlatformConfiguration { let testPlatform: TestPlatform = null; -export async function init(testConfig?: TestPlatformConfiguration): Promise { +export async function init( + testConfig?: TestPlatformConfiguration, + prePlatformStartCallback?: (fastify: FastifyInstance) => void, +): Promise { if (!testPlatform) { const configuration: TwakePlatformConfiguration = { services: config.get("services"), @@ -52,9 +55,15 @@ export async function init(testConfig?: TestPlatformConfiguration): Promise("webserver").getServer(); + + if (prePlatformStartCallback) { + prePlatformStartCallback(app); + } + + await platform.start(); + const database = platform.getProvider("database"); const pubsub = platform.getProvider("pubsub"); const auth = platform.getProvider("auth"); diff --git a/twake/backend/node/test/e2e/utils.api.ts b/twake/backend/node/test/e2e/utils.api.ts index 626e61b6d3..b7ef87ab94 100644 --- a/twake/backend/node/test/e2e/utils.api.ts +++ b/twake/backend/node/test/e2e/utils.api.ts @@ -14,9 +14,11 @@ export class Api { private async convertResponse(response: Promise): Promise { const apiResponse = (await response) as ApiResponse; - const json = apiResponse.json(); - apiResponse.resources = json.resources; - apiResponse.resource = json.resource; + if (apiResponse.statusCode !== 204) { + const json = apiResponse.json(); + apiResponse.resources = json.resources; + apiResponse.resource = json.resource; + } return apiResponse; } @@ -29,29 +31,43 @@ export class Api { url: string, payload: InjectPayload, userId: string, + headers: any, ): Promise { if (!userId) userId = this.platform.currentUser.id; + let totalHeaders = { authorization: `Bearer ${await this.getJwtToken(userId)}` }; + + if (headers) { + totalHeaders = { ...totalHeaders, ...headers }; + } + return this.convertResponse( this.platform.app .inject({ method, url, - headers: { authorization: `Bearer ${await this.getJwtToken(userId)}` }, + headers: totalHeaders, payload, }) .then(a => { - log.debug(a.json(), `${method} ${url}`); + if (a.statusCode !== 204) { + log.debug(a.json(), `${method} ${url}`); + } return a; }), ); } - public async get(url: string, userId?: string): Promise { - return this.request("GET", url, undefined, userId); + public async get(url: string, userId?: string, headers?: any): Promise { + return this.request("GET", url, undefined, userId, headers); } - public async post(url: string, payload: InjectPayload, userId?: string): Promise { - return this.request("POST", url, payload, userId); + public async post( + url: string, + payload: InjectPayload, + userId?: string, + headers?: any, + ): Promise { + return this.request("POST", url, payload, userId, headers); } } diff --git a/twake/backend/node/yarn.lock b/twake/backend/node/yarn.lock index 52d71d9b3a..762142963c 100644 --- a/twake/backend/node/yarn.lock +++ b/twake/backend/node/yarn.lock @@ -2,29 +2,29 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + "integrity" "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/highlight" "^7.14.5" +"@babel/code-frame@7.12.11": + "integrity" "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz" + "version" "7.12.11" + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.7", "@babel/compat-data@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz" - integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + "integrity" "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz" + "version" "7.15.0" -"@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.7.5": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz" - integrity sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw== +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.4.0-0", "@babel/core@^7.7.5": + "integrity" "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==" + "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/code-frame" "^7.14.5" "@babel/generator" "^7.15.0" @@ -35,51 +35,51 @@ "@babel/template" "^7.14.5" "@babel/traverse" "^7.15.0" "@babel/types" "^7.15.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" + "convert-source-map" "^1.7.0" + "debug" "^4.1.0" + "gensync" "^1.0.0-beta.2" + "json5" "^2.1.2" + "semver" "^6.3.0" + "source-map" "^0.5.0" "@babel/generator@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz" - integrity sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ== + "integrity" "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==" + "resolved" "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/types" "^7.15.0" - jsesc "^2.5.1" - source-map "^0.5.0" + "jsesc" "^2.5.1" + "source-map" "^0.5.0" "@babel/helper-annotate-as-pure@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz" - integrity sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA== + "integrity" "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz" - integrity sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w== + "integrity" "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==" + "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-explode-assignable-expression" "^7.14.5" "@babel/types" "^7.14.5" "@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.5", "@babel/helper-compilation-targets@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz" - integrity sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A== + "integrity" "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/compat-data" "^7.15.0" "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" + "browserslist" "^4.16.6" + "semver" "^6.3.0" "@babel/helper-create-class-features-plugin@^7.14.5", "@babel/helper-create-class-features-plugin@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz" - integrity sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q== + "integrity" "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-function-name" "^7.14.5" @@ -89,75 +89,75 @@ "@babel/helper-split-export-declaration" "^7.14.5" "@babel/helper-create-regexp-features-plugin@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz" - integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + "integrity" "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" - regexpu-core "^4.7.1" + "regexpu-core" "^4.7.1" "@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + "integrity" "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz" + "version" "0.2.3" dependencies: "@babel/helper-compilation-targets" "^7.13.0" "@babel/helper-module-imports" "^7.12.13" "@babel/helper-plugin-utils" "^7.13.0" "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" + "debug" "^4.1.1" + "lodash.debounce" "^4.0.8" + "resolve" "^1.14.2" + "semver" "^6.1.2" "@babel/helper-explode-assignable-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz" - integrity sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ== + "integrity" "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + "integrity" "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-get-function-arity" "^7.14.5" "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" "@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + "integrity" "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==" + "resolved" "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + "integrity" "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-member-expression-to-functions@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz" - integrity sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg== + "integrity" "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/types" "^7.15.0" "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + "integrity" "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz" - integrity sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg== + "integrity" "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/helper-module-imports" "^7.14.5" "@babel/helper-replace-supers" "^7.15.0" @@ -169,30 +169,30 @@ "@babel/types" "^7.15.0" "@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + "integrity" "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz" - integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + "integrity" "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz" + "version" "7.14.5" "@babel/helper-remap-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz" - integrity sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A== + "integrity" "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==" + "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-wrap-function" "^7.14.5" "@babel/types" "^7.14.5" "@babel/helper-replace-supers@^7.14.5", "@babel/helper-replace-supers@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz" - integrity sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA== + "integrity" "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/helper-member-expression-to-functions" "^7.15.0" "@babel/helper-optimise-call-expression" "^7.14.5" @@ -200,40 +200,40 @@ "@babel/types" "^7.15.0" "@babel/helper-simple-access@^7.14.8": - version "7.14.8" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz" - integrity sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg== + "integrity" "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz" + "version" "7.14.8" dependencies: "@babel/types" "^7.14.8" "@babel/helper-skip-transparent-expression-wrappers@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz" - integrity sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ== + "integrity" "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + "integrity" "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/types" "^7.14.5" "@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": - version "7.14.9" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz" - integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== + "integrity" "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz" + "version" "7.14.9" "@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + "integrity" "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz" + "version" "7.14.5" "@babel/helper-wrap-function@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz" - integrity sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ== + "integrity" "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-function-name" "^7.14.5" "@babel/template" "^7.14.5" @@ -241,124 +241,124 @@ "@babel/types" "^7.14.5" "@babel/helpers@^7.14.8": - version "7.15.3" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz" - integrity sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g== + "integrity" "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==" + "resolved" "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz" + "version" "7.15.3" dependencies: "@babel/template" "^7.14.5" "@babel/traverse" "^7.15.0" "@babel/types" "^7.15.0" "@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + "integrity" "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" + "chalk" "^2.0.0" + "js-tokens" "^4.0.0" "@babel/parser@^7.1.0", "@babel/parser@^7.14.5", "@babel/parser@^7.15.0": - version "7.15.3" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz" - integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== + "integrity" "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz" + "version" "7.15.3" "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz" - integrity sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ== + "integrity" "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-proposal-optional-chaining" "^7.14.5" "@babel/plugin-proposal-async-generator-functions@^7.14.9": - version "7.14.9" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz" - integrity sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw== + "integrity" "sha512-d1lnh+ZnKrFKwtTYdw320+sQWCTwgkB9fmUhNXRADA4akR6wLjaruSGnIEUjpt9HCOwTr4ynFTKu19b7rFRpmw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.9.tgz" + "version" "7.14.9" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz" - integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== + "integrity" "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-proposal-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz" - integrity sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg== + "integrity" "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-proposal-decorators@^7.10.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz" - integrity sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg== + "integrity" "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-decorators" "^7.14.5" "@babel/plugin-proposal-dynamic-import@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz" - integrity sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g== + "integrity" "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-proposal-export-namespace-from@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz" - integrity sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA== + "integrity" "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-proposal-json-strings@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz" - integrity sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ== + "integrity" "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-proposal-logical-assignment-operators@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz" - integrity sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw== + "integrity" "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-proposal-nullish-coalescing-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz" - integrity sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg== + "integrity" "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" "@babel/plugin-proposal-numeric-separator@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz" - integrity sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg== + "integrity" "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-proposal-object-rest-spread@^7.14.7": - version "7.14.7" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz" - integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== + "integrity" "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz" + "version" "7.14.7" dependencies: "@babel/compat-data" "^7.14.7" "@babel/helper-compilation-targets" "^7.14.5" @@ -367,34 +367,34 @@ "@babel/plugin-transform-parameters" "^7.14.5" "@babel/plugin-proposal-optional-catch-binding@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz" - integrity sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ== + "integrity" "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-proposal-optional-chaining@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz" - integrity sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ== + "integrity" "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-proposal-private-methods@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz" - integrity sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g== + "integrity" "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-create-class-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-proposal-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz" - integrity sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q== + "integrity" "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-create-class-features-plugin" "^7.14.5" @@ -402,173 +402,173 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-proposal-unicode-property-regex@^7.14.5", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz" - integrity sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q== + "integrity" "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz" + "version" "7.8.4" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + "integrity" "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + "integrity" "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz" + "version" "7.12.13" dependencies: "@babel/helper-plugin-utils" "^7.12.13" "@babel/plugin-syntax-class-static-block@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" - integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + "integrity" "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-decorators@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz" - integrity sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw== + "integrity" "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + "integrity" "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + "integrity" "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + "integrity" "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + "integrity" "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + "integrity" "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz" + "version" "7.10.4" dependencies: "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + "integrity" "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + "integrity" "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + "integrity" "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz" + "version" "7.8.3" dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-private-property-in-object@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" - integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + "integrity" "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + "integrity" "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz" - integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q== + "integrity" "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-arrow-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz" - integrity sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A== + "integrity" "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-async-to-generator@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz" - integrity sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA== + "integrity" "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-module-imports" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-remap-async-to-generator" "^7.14.5" "@babel/plugin-transform-block-scoped-functions@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz" - integrity sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ== + "integrity" "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-block-scoping@^7.14.5": - version "7.15.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz" - integrity sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q== + "integrity" "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz" + "version" "7.15.3" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-classes@^7.14.9": - version "7.14.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz" - integrity sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A== + "integrity" "sha512-NfZpTcxU3foGWbl4wxmZ35mTsYJy8oQocbeIMoDAGGFarAmSQlL+LWMkDx/tj6pNotpbX3rltIA4dprgAPOq5A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.9.tgz" + "version" "7.14.9" dependencies: "@babel/helper-annotate-as-pure" "^7.14.5" "@babel/helper-function-name" "^7.14.5" @@ -576,226 +576,226 @@ "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" "@babel/helper-split-export-declaration" "^7.14.5" - globals "^11.1.0" + "globals" "^11.1.0" "@babel/plugin-transform-computed-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz" - integrity sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg== + "integrity" "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-destructuring@^7.14.7": - version "7.14.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz" - integrity sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw== + "integrity" "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz" + "version" "7.14.7" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-dotall-regex@^7.14.5", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz" - integrity sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw== + "integrity" "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-duplicate-keys@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz" - integrity sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A== + "integrity" "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-exponentiation-operator@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz" - integrity sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA== + "integrity" "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-builder-binary-assignment-operator-visitor" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-for-of@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz" - integrity sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA== + "integrity" "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz" - integrity sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ== + "integrity" "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-function-name" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz" - integrity sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A== + "integrity" "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-member-expression-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz" - integrity sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q== + "integrity" "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-modules-amd@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz" - integrity sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g== + "integrity" "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" + "babel-plugin-dynamic-import-node" "^2.3.3" "@babel/plugin-transform-modules-commonjs@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz" - integrity sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig== + "integrity" "sha512-3H/R9s8cXcOGE8kgMlmjYYC9nqr5ELiPkJn4q0mypBrjhYQoc+5/Maq69vV4xRPWnkzZuwJPf5rArxpB/35Cig==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/helper-module-transforms" "^7.15.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-simple-access" "^7.14.8" - babel-plugin-dynamic-import-node "^2.3.3" + "babel-plugin-dynamic-import-node" "^2.3.3" "@babel/plugin-transform-modules-systemjs@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz" - integrity sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA== + "integrity" "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-hoist-variables" "^7.14.5" "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-identifier" "^7.14.5" - babel-plugin-dynamic-import-node "^2.3.3" + "babel-plugin-dynamic-import-node" "^2.3.3" "@babel/plugin-transform-modules-umd@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz" - integrity sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA== + "integrity" "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-module-transforms" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-named-capturing-groups-regex@^7.14.9": - version "7.14.9" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz" - integrity sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA== + "integrity" "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz" + "version" "7.14.9" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/plugin-transform-new-target@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz" - integrity sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ== + "integrity" "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-object-super@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz" - integrity sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg== + "integrity" "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-replace-supers" "^7.14.5" "@babel/plugin-transform-parameters@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz" - integrity sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA== + "integrity" "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-property-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz" - integrity sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw== + "integrity" "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-regenerator@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz" - integrity sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg== + "integrity" "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz" + "version" "7.14.5" dependencies: - regenerator-transform "^0.14.2" + "regenerator-transform" "^0.14.2" "@babel/plugin-transform-reserved-words@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz" - integrity sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg== + "integrity" "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-shorthand-properties@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz" - integrity sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g== + "integrity" "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-spread@^7.14.6": - version "7.14.6" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz" - integrity sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag== + "integrity" "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz" + "version" "7.14.6" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.14.5" "@babel/plugin-transform-sticky-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz" - integrity sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A== + "integrity" "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-template-literals@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz" - integrity sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg== + "integrity" "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-typeof-symbol@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz" - integrity sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw== + "integrity" "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-typescript@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz" - integrity sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w== + "integrity" "sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/helper-create-class-features-plugin" "^7.15.0" "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-syntax-typescript" "^7.14.5" "@babel/plugin-transform-unicode-escapes@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz" - integrity sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA== + "integrity" "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-transform-unicode-regex@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz" - integrity sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw== + "integrity" "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/helper-create-regexp-features-plugin" "^7.14.5" "@babel/helper-plugin-utils" "^7.14.5" "@babel/preset-env@^7.11.5": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz" - integrity sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q== + "integrity" "sha512-FhEpCNFCcWW3iZLg0L2NPE9UerdtsCR6ZcsGHUX6Om6kbCQeL5QZDqFDmeNHC6/fy6UH3jEge7K4qG5uC9In0Q==" + "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/compat-data" "^7.15.0" "@babel/helper-compilation-targets" "^7.15.0" @@ -865,52 +865,52 @@ "@babel/plugin-transform-unicode-regex" "^7.14.5" "@babel/preset-modules" "^0.1.4" "@babel/types" "^7.15.0" - babel-plugin-polyfill-corejs2 "^0.2.2" - babel-plugin-polyfill-corejs3 "^0.2.2" - babel-plugin-polyfill-regenerator "^0.2.2" - core-js-compat "^3.16.0" - semver "^6.3.0" + "babel-plugin-polyfill-corejs2" "^0.2.2" + "babel-plugin-polyfill-corejs3" "^0.2.2" + "babel-plugin-polyfill-regenerator" "^0.2.2" + "core-js-compat" "^3.16.0" + "semver" "^6.3.0" "@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + "integrity" "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==" + "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz" + "version" "0.1.4" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" - esutils "^2.0.2" + "esutils" "^2.0.2" "@babel/preset-typescript@^7.10.4": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz" - integrity sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow== + "integrity" "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==" + "resolved" "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/helper-plugin-utils" "^7.14.5" "@babel/helper-validator-option" "^7.14.5" "@babel/plugin-transform-typescript" "^7.15.0" "@babel/runtime@^7.8.4": - version "7.15.3" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz" - integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== + "integrity" "sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA==" + "resolved" "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.3.tgz" + "version" "7.15.3" dependencies: - regenerator-runtime "^0.13.4" + "regenerator-runtime" "^0.13.4" "@babel/template@^7.14.5", "@babel/template@^7.3.3": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + "integrity" "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz" + "version" "7.14.5" dependencies: "@babel/code-frame" "^7.14.5" "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" "@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz" - integrity sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw== + "integrity" "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==" + "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/code-frame" "^7.14.5" "@babel/generator" "^7.15.0" @@ -919,113 +919,113 @@ "@babel/helper-split-export-declaration" "^7.14.5" "@babel/parser" "^7.15.0" "@babel/types" "^7.15.0" - debug "^4.1.0" - globals "^11.1.0" + "debug" "^4.1.0" + "globals" "^11.1.0" "@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.15.0" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz" - integrity sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ== + "integrity" "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz" + "version" "7.15.0" dependencies: "@babel/helper-validator-identifier" "^7.14.9" - to-fast-properties "^2.0.0" + "to-fast-properties" "^2.0.0" "@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "integrity" "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" + "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" + "version" "0.2.3" "@cnakazawa/watch@^1.0.3": - version "1.0.4" - resolved "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz" - integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + "integrity" "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==" + "resolved" "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz" + "version" "1.0.4" dependencies: - exec-sh "^0.3.2" - minimist "^1.2.0" + "exec-sh" "^0.3.2" + "minimist" "^1.2.0" "@elastic/elasticsearch@7": - version "7.14.0" - resolved "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.14.0.tgz" - integrity sha512-BlxqykcNtdBxo0mF7UQ1OsUxoVOOnEaeF70u2N4jpePih9paCOOotTWfFSDrtEw0TWv1CZlzCGD3TD5+8ASx8A== + "integrity" "sha512-BlxqykcNtdBxo0mF7UQ1OsUxoVOOnEaeF70u2N4jpePih9paCOOotTWfFSDrtEw0TWv1CZlzCGD3TD5+8ASx8A==" + "resolved" "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-7.14.0.tgz" + "version" "7.14.0" dependencies: - debug "^4.3.1" - hpagent "^0.1.1" - ms "^2.1.3" - secure-json-parse "^2.4.0" + "debug" "^4.3.1" + "hpagent" "^0.1.1" + "ms" "^2.1.3" + "secure-json-parse" "^2.4.0" "@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" + "integrity" "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==" + "resolved" "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz" + "version" "0.4.3" + dependencies: + "ajv" "^6.12.4" + "debug" "^4.1.1" + "espree" "^7.3.0" + "globals" "^13.9.0" + "ignore" "^4.0.6" + "import-fresh" "^3.2.1" + "js-yaml" "^3.13.1" + "minimatch" "^3.0.4" + "strip-json-comments" "^3.1.1" "@fastify/ajv-compiler@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz" - integrity sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg== + "integrity" "sha512-gvCOUNpXsWrIQ3A4aXCLIdblL0tDq42BG/2Xw7oxbil9h11uow10ztS2GuFazNBfjbrsZ5nl+nPl5jDSjj5TSg==" + "resolved" "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-1.1.0.tgz" + "version" "1.1.0" dependencies: - ajv "^6.12.6" + "ajv" "^6.12.6" "@hapi/bourne@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz" - integrity sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg== + "integrity" "sha512-WEezM1FWztfbzqIUbsDzFRVMxSoLy3HugVcux6KDDtTqzPsLE8NDRHfXvev66aH1i2oOKKar3/XDjbvh/OUBdg==" + "resolved" "https://registry.npmjs.org/@hapi/bourne/-/bourne-2.0.0.tgz" + "version" "2.0.0" "@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + "integrity" "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz" + "version" "0.5.0" dependencies: "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" + "debug" "^4.1.1" + "minimatch" "^3.0.4" "@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "integrity" "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" + "resolved" "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz" + "version" "1.2.0" "@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + "integrity" "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==" + "resolved" "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz" + "version" "1.1.0" dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" + "camelcase" "^5.3.1" + "find-up" "^4.1.0" + "get-package-type" "^0.1.0" + "js-yaml" "^3.13.1" + "resolve-from" "^5.0.0" "@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "integrity" "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==" + "resolved" "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz" + "version" "0.1.3" "@jest/console@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz" - integrity sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g== + "integrity" "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^26.6.2" - jest-util "^26.6.2" - slash "^3.0.0" + "chalk" "^4.0.0" + "jest-message-util" "^26.6.2" + "jest-util" "^26.6.2" + "slash" "^3.0.0" "@jest/core@^26.6.3": - version "26.6.3" - resolved "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz" - integrity sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw== + "integrity" "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/console" "^26.6.2" "@jest/reporters" "^26.6.2" @@ -1033,321 +1033,321 @@ "@jest/transform" "^26.6.2" "@jest/types" "^26.6.2" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^26.6.2" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-resolve-dependencies "^26.6.3" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - jest-watcher "^26.6.2" - micromatch "^4.0.2" - p-each-series "^2.1.0" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "jest-changed-files" "^26.6.2" + "jest-config" "^26.6.3" + "jest-haste-map" "^26.6.2" + "jest-message-util" "^26.6.2" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.6.2" + "jest-resolve-dependencies" "^26.6.3" + "jest-runner" "^26.6.3" + "jest-runtime" "^26.6.3" + "jest-snapshot" "^26.6.2" + "jest-util" "^26.6.2" + "jest-validate" "^26.6.2" + "jest-watcher" "^26.6.2" + "micromatch" "^4.0.2" + "p-each-series" "^2.1.0" + "rimraf" "^3.0.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" "@jest/environment@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz" - integrity sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA== + "integrity" "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/fake-timers" "^26.6.2" "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.6.2" + "jest-mock" "^26.6.2" "@jest/fake-timers@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz" - integrity sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA== + "integrity" "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" "@sinonjs/fake-timers" "^6.0.1" "@types/node" "*" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-util "^26.6.2" + "jest-message-util" "^26.6.2" + "jest-mock" "^26.6.2" + "jest-util" "^26.6.2" "@jest/globals@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz" - integrity sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA== + "integrity" "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/environment" "^26.6.2" "@jest/types" "^26.6.2" - expect "^26.6.2" + "expect" "^26.6.2" "@jest/reporters@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz" - integrity sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw== + "integrity" "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz" + "version" "26.6.2" dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^26.6.2" "@jest/test-result" "^26.6.2" "@jest/transform" "^26.6.2" "@jest/types" "^26.6.2" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^4.0.3" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.0.2" - jest-haste-map "^26.6.2" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^7.0.0" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.2" + "graceful-fs" "^4.2.4" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^4.0.3" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.0.2" + "jest-haste-map" "^26.6.2" + "jest-resolve" "^26.6.2" + "jest-util" "^26.6.2" + "jest-worker" "^26.6.2" + "slash" "^3.0.0" + "source-map" "^0.6.0" + "string-length" "^4.0.1" + "terminal-link" "^2.0.0" + "v8-to-istanbul" "^7.0.0" optionalDependencies: - node-notifier "^8.0.0" + "node-notifier" "^8.0.0" "@jest/source-map@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz" - integrity sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA== + "integrity" "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz" + "version" "26.6.2" dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.4" + "source-map" "^0.6.0" "@jest/test-result@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz" - integrity sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ== + "integrity" "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/console" "^26.6.2" "@jest/types" "^26.6.2" "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" + "collect-v8-coverage" "^1.0.0" "@jest/test-sequencer@^26.6.3": - version "26.6.3" - resolved "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz" - integrity sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw== + "integrity" "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/test-result" "^26.6.2" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-runner "^26.6.3" - jest-runtime "^26.6.3" + "graceful-fs" "^4.2.4" + "jest-haste-map" "^26.6.2" + "jest-runner" "^26.6.3" + "jest-runtime" "^26.6.3" "@jest/transform@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz" - integrity sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA== + "integrity" "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz" + "version" "26.6.2" dependencies: "@babel/core" "^7.1.0" "@jest/types" "^26.6.2" - babel-plugin-istanbul "^6.0.0" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^26.6.2" - jest-regex-util "^26.0.0" - jest-util "^26.6.2" - micromatch "^4.0.2" - pirates "^4.0.1" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" + "babel-plugin-istanbul" "^6.0.0" + "chalk" "^4.0.0" + "convert-source-map" "^1.4.0" + "fast-json-stable-stringify" "^2.0.0" + "graceful-fs" "^4.2.4" + "jest-haste-map" "^26.6.2" + "jest-regex-util" "^26.0.0" + "jest-util" "^26.6.2" + "micromatch" "^4.0.2" + "pirates" "^4.0.1" + "slash" "^3.0.0" + "source-map" "^0.6.1" + "write-file-atomic" "^3.0.0" "@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== + "integrity" "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz" + "version" "26.6.2" dependencies: "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" "@types/yargs" "^15.0.0" - chalk "^4.0.0" + "chalk" "^4.0.0" "@mapbox/node-pre-gyp@^1.0.0": - version "1.0.5" - resolved "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz" - integrity sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA== - dependencies: - detect-libc "^1.0.3" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.1" - nopt "^5.0.0" - npmlog "^4.1.2" - rimraf "^3.0.2" - semver "^7.3.4" - tar "^6.1.0" + "integrity" "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==" + "resolved" "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "detect-libc" "^1.0.3" + "https-proxy-agent" "^5.0.0" + "make-dir" "^3.1.0" + "node-fetch" "^2.6.1" + "nopt" "^5.0.0" + "npmlog" "^4.1.2" + "rimraf" "^3.0.2" + "semver" "^7.3.4" + "tar" "^6.1.0" "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + "integrity" "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + "version" "2.1.5" dependencies: "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" + "run-parallel" "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": + "integrity" "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + "version" "2.0.5" "@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + "integrity" "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==" + "resolved" "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + "version" "1.2.8" dependencies: "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" + "fastq" "^1.6.0" "@segment/loosely-validate-event@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz" - integrity sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw== + "integrity" "sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==" + "resolved" "https://registry.npmjs.org/@segment/loosely-validate-event/-/loosely-validate-event-2.0.0.tgz" + "version" "2.0.0" dependencies: - component-type "^1.2.1" - join-component "^1.1.0" + "component-type" "^1.2.1" + "join-component" "^1.1.0" "@sentry/core@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-6.17.2.tgz#f218920f269ccdbaee20a092bbc90a71a007cc88" - integrity sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA== + "integrity" "sha512-Uew0CNMr+QvowrF4EJYjOUgHep/sZJ3l5zevPEELugIgqWBodd+ZDCV3fQFR7cr6KOqx1rMgVrgcKIkLl0l+RA==" + "resolved" "https://registry.npmjs.org/@sentry/core/-/core-6.17.2.tgz" + "version" "6.17.2" dependencies: "@sentry/hub" "6.17.2" "@sentry/minimal" "6.17.2" "@sentry/types" "6.17.2" "@sentry/utils" "6.17.2" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/hub@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-6.17.2.tgz#d92accada845fa21fff1b2b491d3c6964851693b" - integrity sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g== + "integrity" "sha512-CMi6jU920bTwRTmGHjP4u8toOx4gm1dsx+rsxvp+FKzqRwpwoyi9mOw8oEYERVzaqaYceGdFylyRUrjdf0f77g==" + "resolved" "https://registry.npmjs.org/@sentry/hub/-/hub-6.17.2.tgz" + "version" "6.17.2" dependencies: "@sentry/types" "6.17.2" "@sentry/utils" "6.17.2" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/minimal@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-6.17.2.tgz#3b482a0d76aa33b6c9441dd21acbcc3a113e5120" - integrity sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg== + "integrity" "sha512-Cdh+iM6QhLKfxwUWWP4mk2K7+EsQj4tuF2dGQke4Zcbp7zQ7wbcMruUcZHiZfvg5kiSYxwNVkH7cXMzcO7AJsg==" + "resolved" "https://registry.npmjs.org/@sentry/minimal/-/minimal-6.17.2.tgz" + "version" "6.17.2" dependencies: "@sentry/hub" "6.17.2" "@sentry/types" "6.17.2" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/node@^6.15.0": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-6.17.2.tgz#32a5fa00b64a331073daf1e44f500c8c57184eb1" - integrity sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ== + "integrity" "sha512-358z45WaejnsE8RZVpuLJJiFVCSEi0TRY7P60CljZuz8rnvniD3G0tuXChvu4djVty8NScWZHT/QoxvuJdTHgQ==" + "resolved" "https://registry.npmjs.org/@sentry/node/-/node-6.17.2.tgz" + "version" "6.17.2" dependencies: "@sentry/core" "6.17.2" "@sentry/hub" "6.17.2" "@sentry/tracing" "6.17.2" "@sentry/types" "6.17.2" "@sentry/utils" "6.17.2" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" + "cookie" "^0.4.1" + "https-proxy-agent" "^5.0.0" + "lru_map" "^0.3.3" + "tslib" "^1.9.3" -"@sentry/tracing@6.17.2", "@sentry/tracing@^6.15.0": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-6.17.2.tgz#437337071fdeffa319746905b3706518b099ec6b" - integrity sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw== +"@sentry/tracing@^6.15.0", "@sentry/tracing@6.17.2": + "integrity" "sha512-oWY2Ga+5D5f90utvfF2Y0eQvme+eS768ZWjR+klRYgZWoY8r1v8uWwWsvroYU1g+h6X0G/xh3giFjsdOWtRENw==" + "resolved" "https://registry.npmjs.org/@sentry/tracing/-/tracing-6.17.2.tgz" + "version" "6.17.2" dependencies: "@sentry/hub" "6.17.2" "@sentry/minimal" "6.17.2" "@sentry/types" "6.17.2" "@sentry/utils" "6.17.2" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sentry/types@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.17.2.tgz#4dde3423db5953e798b19ed29618c28fc7bf2e30" - integrity sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ== + "integrity" "sha512-UrFLRDz5mn253O8k/XftLxoldF+NyZdkqKLGIQmST5HEVr7ub9nQJ4Y5ZFA3zJYWpraaW8faIbuw+pgetC8hmQ==" + "resolved" "https://registry.npmjs.org/@sentry/types/-/types-6.17.2.tgz" + "version" "6.17.2" "@sentry/utils@6.17.2": - version "6.17.2" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-6.17.2.tgz#e8044e753b47f86068053c8d79e4ae61a39b6732" - integrity sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA== + "integrity" "sha512-ePWtO44KJQwUULOiU86fa1WU3Ird2TH0i39gqB2d3zNS3QyVp9qPlzSdPKSPJ9LdgadzBHw7ikEuE+GY8JTrhA==" + "resolved" "https://registry.npmjs.org/@sentry/utils/-/utils-6.17.2.tgz" + "version" "6.17.2" dependencies: "@sentry/types" "6.17.2" - tslib "^1.9.3" + "tslib" "^1.9.3" "@sindresorhus/is@^0.14.0": - version "0.14.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" - integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + "integrity" "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "resolved" "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz" + "version" "0.14.0" "@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== + "integrity" "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz" + "version" "1.8.3" dependencies: - type-detect "4.0.8" + "type-detect" "4.0.8" "@sinonjs/fake-timers@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz" - integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA== + "integrity" "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz" + "version" "6.0.1" dependencies: "@sinonjs/commons" "^1.7.0" "@szmarczak/http-timer@^1.1.2": - version "1.1.2" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" - integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + "integrity" "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==" + "resolved" "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz" + "version" "1.1.2" dependencies: - defer-to-connect "^1.0.1" + "defer-to-connect" "^1.0.1" "@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + "integrity" "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" + "version" "1.1.2" "@types/amqp-connection-manager@^2.0.10": - version "2.0.12" - resolved "https://registry.npmjs.org/@types/amqp-connection-manager/-/amqp-connection-manager-2.0.12.tgz" - integrity sha512-2GX1jG6ECpEXQF0X68gTTZc8MQ8GA0dM2mAd1irTpWlKzGKlGzCBtb1YnqLHozNNsoLtGI6UXSp0q06jU1LA6g== + "integrity" "sha512-2GX1jG6ECpEXQF0X68gTTZc8MQ8GA0dM2mAd1irTpWlKzGKlGzCBtb1YnqLHozNNsoLtGI6UXSp0q06jU1LA6g==" + "resolved" "https://registry.npmjs.org/@types/amqp-connection-manager/-/amqp-connection-manager-2.0.12.tgz" + "version" "2.0.12" dependencies: "@types/amqplib" "*" "@types/amqplib@*": - version "0.8.2" - resolved "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.8.2.tgz" - integrity sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA== + "integrity" "sha512-p+TFLzo52f8UanB+Nq6gyUi65yecAcRY3nYowU6MPGFtaJvEDxcnFWrxssSTkF+ts1W3zyQDvgVICLQem5WxRA==" + "resolved" "https://registry.npmjs.org/@types/amqplib/-/amqplib-0.8.2.tgz" + "version" "0.8.2" dependencies: "@types/bluebird" "*" "@types/node" "*" "@types/analytics-node@^3.1.5": - version "3.1.5" - resolved "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.5.tgz" - integrity sha512-zSqNpyzF3hcweslf7ttqB03iZvxtymUh820SAXaFhox5Y5Qa7bYmrdOi4IW050OHrKmtq4SE4kE1XeE1mK+zrQ== + "integrity" "sha512-zSqNpyzF3hcweslf7ttqB03iZvxtymUh820SAXaFhox5Y5Qa7bYmrdOi4IW050OHrKmtq4SE4kE1XeE1mK+zrQ==" + "resolved" "https://registry.npmjs.org/@types/analytics-node/-/analytics-node-3.1.5.tgz" + "version" "3.1.5" "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": - version "7.1.15" - resolved "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz" - integrity sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew== + "integrity" "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==" + "resolved" "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz" + "version" "7.1.15" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" @@ -1356,830 +1356,840 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.3" - resolved "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz" - integrity sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA== + "integrity" "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==" + "resolved" "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz" + "version" "7.6.3" dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": - version "7.4.1" - resolved "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== + "integrity" "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==" + "resolved" "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz" + "version" "7.4.1" dependencies: "@babel/parser" "^7.1.0" "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== + "integrity" "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==" + "resolved" "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz" + "version" "7.14.2" dependencies: "@babel/types" "^7.3.0" "@types/bcrypt@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz" - integrity sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw== + "integrity" "sha512-agtcFKaruL8TmcvqbndlqHPSJgsolhf/qPWchFlgnW1gECTN/nKbFcoFnvKAQRFfKbh+BO6A3SWdJu9t+xF3Lw==" + "resolved" "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.0.tgz" + "version" "5.0.0" dependencies: "@types/node" "*" "@types/bluebird@*": - version "3.5.36" - resolved "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz" - integrity sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q== + "integrity" "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==" + "resolved" "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz" + "version" "3.5.36" "@types/busboy@^0.2.3": - version "0.2.4" - resolved "https://registry.npmjs.org/@types/busboy/-/busboy-0.2.4.tgz" - integrity sha512-f+ZCVjlcN8JW/zf3iR0GqO4gjOUlltMTtZjn+YR1mlK+MVu6esTiIecO0/GQlmYQPQLdBnc7+5vG3Xb+SkvFLw== + "integrity" "sha512-f+ZCVjlcN8JW/zf3iR0GqO4gjOUlltMTtZjn+YR1mlK+MVu6esTiIecO0/GQlmYQPQLdBnc7+5vG3Xb+SkvFLw==" + "resolved" "https://registry.npmjs.org/@types/busboy/-/busboy-0.2.4.tgz" + "version" "0.2.4" dependencies: "@types/node" "*" "@types/chai@^4.2.12": - version "4.2.21" - resolved "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz" - integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== + "integrity" "sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg==" + "resolved" "https://registry.npmjs.org/@types/chai/-/chai-4.2.21.tgz" + "version" "4.2.21" "@types/cli-table@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.0.tgz" - integrity sha512-QnZUISJJXyhyD6L1e5QwXDV/A5i2W1/gl6D6YMc8u0ncPepbv/B4w3S+izVvtAg60m6h+JP09+Y/0zF2mojlFQ== + "integrity" "sha512-QnZUISJJXyhyD6L1e5QwXDV/A5i2W1/gl6D6YMc8u0ncPepbv/B4w3S+izVvtAg60m6h+JP09+Y/0zF2mojlFQ==" + "resolved" "https://registry.npmjs.org/@types/cli-table/-/cli-table-0.3.0.tgz" + "version" "0.3.0" "@types/component-emitter@^1.2.10": - version "1.2.10" - resolved "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz" - integrity sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg== + "integrity" "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==" + "resolved" "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz" + "version" "1.2.10" "@types/config@0.0.36": - version "0.0.36" - resolved "https://registry.npmjs.org/@types/config/-/config-0.0.36.tgz" - integrity sha512-EoAeT1MyFWh2BJvBDEFInY714bQBbHOAucqxqqhprhbBFqr+B7fuN5T9CJqUIGDzvwubnKKRqmSo6yPo0aSpNw== + "integrity" "sha512-EoAeT1MyFWh2BJvBDEFInY714bQBbHOAucqxqqhprhbBFqr+B7fuN5T9CJqUIGDzvwubnKKRqmSo6yPo0aSpNw==" + "resolved" "https://registry.npmjs.org/@types/config/-/config-0.0.36.tgz" + "version" "0.0.36" "@types/cookiejar@*": - version "2.1.2" - resolved "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz" - integrity sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog== + "integrity" "sha512-t73xJJrvdTjXrn4jLS9VSGRbz0nUY3cl2DMGDU48lKl+HR9dbbjW2A9r3g40VA++mQpy6uuHg33gy7du2BKpog==" + "resolved" "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.2.tgz" + "version" "2.1.2" "@types/engine.io@*": - version "3.1.7" - resolved "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.7.tgz" - integrity sha512-qNjVXcrp+1sS8YpRUa714r0pgzOwESdW5UjHL7D/2ZFdBX0BXUXtg1LUrp+ylvqbvMcMWUy73YpRoxPN2VoKAQ== + "integrity" "sha512-qNjVXcrp+1sS8YpRUa714r0pgzOwESdW5UjHL7D/2ZFdBX0BXUXtg1LUrp+ylvqbvMcMWUy73YpRoxPN2VoKAQ==" + "resolved" "https://registry.npmjs.org/@types/engine.io/-/engine.io-3.1.7.tgz" + "version" "3.1.7" dependencies: "@types/node" "*" "@types/eslint@^7.2.3": - version "7.28.0" - resolved "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz" - integrity sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A== + "integrity" "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==" + "resolved" "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz" + "version" "7.28.0" dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*": - version "0.0.50" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz" - integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + "integrity" "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==" + "resolved" "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz" + "version" "0.0.50" "@types/fastify-multipart@^0.7.0": - version "0.7.0" - resolved "https://registry.npmjs.org/@types/fastify-multipart/-/fastify-multipart-0.7.0.tgz" - integrity sha512-dKK9S8nBesXhSfUlgyGE7mNJ5a1TxiBeIalJFdPbUj5bJywgjo3ixpm+LcIpTK2UwQ10OWptny/Kjc3GprREtg== + "integrity" "sha512-dKK9S8nBesXhSfUlgyGE7mNJ5a1TxiBeIalJFdPbUj5bJywgjo3ixpm+LcIpTK2UwQ10OWptny/Kjc3GprREtg==" + "resolved" "https://registry.npmjs.org/@types/fastify-multipart/-/fastify-multipart-0.7.0.tgz" + "version" "0.7.0" dependencies: - fastify-multipart "*" + "fastify-multipart" "*" "@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== + "integrity" "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==" + "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz" + "version" "4.1.5" dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.3" - resolved "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz" - integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== + "integrity" "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz" + "version" "2.0.3" "@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + "integrity" "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==" + "resolved" "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + "integrity" "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==" + "resolved" "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz" + "version" "3.0.1" dependencies: "@types/istanbul-lib-report" "*" "@types/jest@^26.0.14": - version "26.0.24" - resolved "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz" - integrity sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w== + "integrity" "sha512-E/X5Vib8BWqZNRlDxj9vYXhsDwPYbPINqKF9BsnSoon4RQ0D9moEuLD8txgyypFLH7J4+Lho9Nr/c8H0Fi+17w==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-26.0.24.tgz" + "version" "26.0.24" dependencies: - jest-diff "^26.0.0" - pretty-format "^26.0.0" + "jest-diff" "^26.0.0" + "pretty-format" "^26.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.7": - version "7.0.9" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" - integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + "integrity" "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==" + "resolved" "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz" + "version" "7.0.9" "@types/jsonwebtoken@^8.5.0": - version "8.5.5" - resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.5.tgz" - integrity sha512-OGqtHQ7N5/Ap/TUwO6IgHDuLiAoTmHhGpNvgkCm/F4N6pKzx/RBSfr2OXZSwC6vkfnsEdb6+7DNZVtiXiwdwFw== + "integrity" "sha512-OGqtHQ7N5/Ap/TUwO6IgHDuLiAoTmHhGpNvgkCm/F4N6pKzx/RBSfr2OXZSwC6vkfnsEdb6+7DNZVtiXiwdwFw==" + "resolved" "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.5.tgz" + "version" "8.5.5" dependencies: "@types/node" "*" "@types/lodash@^4.14.165": - version "4.14.172" - resolved "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz" - integrity sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw== + "integrity" "sha512-/BHF5HAx3em7/KkzVKm3LrsD6HZAXuXO1AJZQ3cRRBZj4oHZDviWPYu0aEplAqDFNHZPW6d3G7KN+ONcCCC7pw==" + "resolved" "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.172.tgz" + "version" "4.14.172" "@types/long@^4.0.0": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz" - integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + "integrity" "sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==" + "resolved" "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz" + "version" "4.0.1" "@types/minio@^7.0.7": - version "7.0.9" - resolved "https://registry.npmjs.org/@types/minio/-/minio-7.0.9.tgz" - integrity sha512-aMalbSDDB+TV9m3fVMD4E2vJR3XVAtOcf9t5Iq+PHnc5D0ti3LMXjaxGKXmllicliaBrh0gzURLrs44n/Jl43g== + "integrity" "sha512-aMalbSDDB+TV9m3fVMD4E2vJR3XVAtOcf9t5Iq+PHnc5D0ti3LMXjaxGKXmllicliaBrh0gzURLrs44n/Jl43g==" + "resolved" "https://registry.npmjs.org/@types/minio/-/minio-7.0.9.tgz" + "version" "7.0.9" dependencies: "@types/node" "*" "@types/mongodb@^4.0.7": - version "4.0.7" - resolved "https://registry.npmjs.org/@types/mongodb/-/mongodb-4.0.7.tgz" - integrity sha512-lPUYPpzA43baXqnd36cZ9xxorprybxXDzteVKCPAdp14ppHtFJHnXYvNpmBvtMUTb5fKXVv6sVbzo1LHkWhJlw== + "integrity" "sha512-lPUYPpzA43baXqnd36cZ9xxorprybxXDzteVKCPAdp14ppHtFJHnXYvNpmBvtMUTb5fKXVv6sVbzo1LHkWhJlw==" + "resolved" "https://registry.npmjs.org/@types/mongodb/-/mongodb-4.0.7.tgz" + "version" "4.0.7" dependencies: - mongodb "*" + "mongodb" "*" "@types/node-cron@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.0.tgz" - integrity sha512-RNBIyVwa/1v2r8/SqK8tadH2sJlFRAo5Ghac/cOcCv4Kp94m0I03UmAh9WVhCqS9ZdB84dF3x47p9aTw8E4c4A== + "integrity" "sha512-RNBIyVwa/1v2r8/SqK8tadH2sJlFRAo5Ghac/cOcCv4Kp94m0I03UmAh9WVhCqS9ZdB84dF3x47p9aTw8E4c4A==" + "resolved" "https://registry.npmjs.org/@types/node-cron/-/node-cron-3.0.0.tgz" + "version" "3.0.0" "@types/node-fetch@^2.5.12": - version "2.5.12" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" - integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== + "integrity" "sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw==" + "resolved" "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.12.tgz" + "version" "2.5.12" dependencies: "@types/node" "*" - form-data "^3.0.0" + "form-data" "^3.0.0" "@types/node-uuid@^0.0.28": - version "0.0.28" - resolved "https://registry.npmjs.org/@types/node-uuid/-/node-uuid-0.0.28.tgz" - integrity sha1-QWVbXOY7LzN0xOgmtN0h5ykFjj0= + "integrity" "sha1-QWVbXOY7LzN0xOgmtN0h5ykFjj0=" + "resolved" "https://registry.npmjs.org/@types/node-uuid/-/node-uuid-0.0.28.tgz" + "version" "0.0.28" dependencies: "@types/node" "*" -"@types/node@*", "@types/node@>=8", "@types/node@^14.11.2": - version "14.17.11" - resolved "https://registry.npmjs.org/@types/node/-/node-14.17.11.tgz" - integrity sha512-n2OQ+0Bz6WEsUjrvcHD1xZ8K+Kgo4cn9/w94s1bJS690QMUWfJPW/m7CCb7gPkA1fcYwL2UpjXP/rq/Eo41m6w== +"@types/node@*", "@types/node@^14.11.2", "@types/node@>=8": + "integrity" "sha512-n2OQ+0Bz6WEsUjrvcHD1xZ8K+Kgo4cn9/w94s1bJS690QMUWfJPW/m7CCb7gPkA1fcYwL2UpjXP/rq/Eo41m6w==" + "resolved" "https://registry.npmjs.org/@types/node/-/node-14.17.11.tgz" + "version" "14.17.11" "@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== + "integrity" "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" + "resolved" "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz" + "version" "2.4.1" "@types/pdf-image@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/pdf-image/-/pdf-image-2.0.1.tgz" - integrity sha512-WSG+F90yd53I2iA3/MiRolRmP0hT0GLkfdq2CYg1sW1AmsWK9bitc9v0EaakkMvFebESzoU/P4vsUhYnDz/OYw== + "integrity" "sha512-WSG+F90yd53I2iA3/MiRolRmP0hT0GLkfdq2CYg1sW1AmsWK9bitc9v0EaakkMvFebESzoU/P4vsUhYnDz/OYw==" + "resolved" "https://registry.npmjs.org/@types/pdf-image/-/pdf-image-2.0.1.tgz" + "version" "2.0.1" "@types/pino-pretty@*": - version "4.7.1" - resolved "https://registry.npmjs.org/@types/pino-pretty/-/pino-pretty-4.7.1.tgz" - integrity sha512-l1ntNXdpVWsnPYUk5HyO5Lxfr38zLCgxVfEn/9Zhhm+nGF04/BiIou/m8XPwvoVZLV+livUo79VdHXMJPfUYxA== + "integrity" "sha512-l1ntNXdpVWsnPYUk5HyO5Lxfr38zLCgxVfEn/9Zhhm+nGF04/BiIou/m8XPwvoVZLV+livUo79VdHXMJPfUYxA==" + "resolved" "https://registry.npmjs.org/@types/pino-pretty/-/pino-pretty-4.7.1.tgz" + "version" "4.7.1" dependencies: "@types/pino" "*" "@types/pino-std-serializers@*": - version "2.4.1" - resolved "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-2.4.1.tgz" - integrity sha512-17XcksO47M24IVTVKPeAByWUd3Oez7EbIjXpSbzMPhXVzgjGtrOa49gKBwxH9hb8dKv58OelsWQ+A1G1l9S3wQ== + "integrity" "sha512-17XcksO47M24IVTVKPeAByWUd3Oez7EbIjXpSbzMPhXVzgjGtrOa49gKBwxH9hb8dKv58OelsWQ+A1G1l9S3wQ==" + "resolved" "https://registry.npmjs.org/@types/pino-std-serializers/-/pino-std-serializers-2.4.1.tgz" + "version" "2.4.1" dependencies: "@types/node" "*" "@types/pino@*", "@types/pino@^6.3.2": - version "6.3.11" - resolved "https://registry.npmjs.org/@types/pino/-/pino-6.3.11.tgz" - integrity sha512-S7+fLONqSpHeW9d7TApUqO6VN47KYgOXhCNKwGBVLHObq8HhaAYlVqUNdfnvoXjCMiwE5xcPm/5R2ZUh8bgaXQ== + "integrity" "sha512-S7+fLONqSpHeW9d7TApUqO6VN47KYgOXhCNKwGBVLHObq8HhaAYlVqUNdfnvoXjCMiwE5xcPm/5R2ZUh8bgaXQ==" + "resolved" "https://registry.npmjs.org/@types/pino/-/pino-6.3.11.tgz" + "version" "6.3.11" dependencies: "@types/node" "*" "@types/pino-pretty" "*" "@types/pino-std-serializers" "*" - sonic-boom "^2.1.0" + "sonic-boom" "^2.1.0" "@types/prettier@^2.0.0": - version "2.3.2" - resolved "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz" - integrity sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog== + "integrity" "sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==" + "resolved" "https://registry.npmjs.org/@types/prettier/-/prettier-2.3.2.tgz" + "version" "2.3.2" "@types/redis@*": - version "2.8.31" - resolved "https://registry.npmjs.org/@types/redis/-/redis-2.8.31.tgz" - integrity sha512-daWrrTDYaa5iSDFbgzZ9gOOzyp2AJmYK59OlG/2KGBgYWF3lfs8GDKm1c//tik5Uc93hDD36O+qLPvzDolChbA== + "integrity" "sha512-daWrrTDYaa5iSDFbgzZ9gOOzyp2AJmYK59OlG/2KGBgYWF3lfs8GDKm1c//tik5Uc93hDD36O+qLPvzDolChbA==" + "resolved" "https://registry.npmjs.org/@types/redis/-/redis-2.8.31.tgz" + "version" "2.8.31" dependencies: "@types/node" "*" "@types/sharp@^0.28.5": - version "0.28.6" - resolved "https://registry.npmjs.org/@types/sharp/-/sharp-0.28.6.tgz" - integrity sha512-AjKjo5vk5mkcTrWL0U1zFUdCp/uqLebvbe7ezAJx0tgp6ST9JmfsYK1q1lpjfPM5S1YQ1wr5uboPSu2S8UO9yw== + "integrity" "sha512-AjKjo5vk5mkcTrWL0U1zFUdCp/uqLebvbe7ezAJx0tgp6ST9JmfsYK1q1lpjfPM5S1YQ1wr5uboPSu2S8UO9yw==" + "resolved" "https://registry.npmjs.org/@types/sharp/-/sharp-0.28.6.tgz" + "version" "0.28.6" dependencies: "@types/node" "*" "@types/socket.io-client@^1.4.34": - version "1.4.36" - resolved "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.36.tgz" - integrity sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag== + "integrity" "sha512-ZJWjtFBeBy1kRSYpVbeGYTElf6BqPQUkXDlHHD4k/42byCN5Rh027f4yARHCink9sKAkbtGZXEAmR0ZCnc2/Ag==" + "resolved" "https://registry.npmjs.org/@types/socket.io-client/-/socket.io-client-1.4.36.tgz" + "version" "1.4.36" "@types/socket.io-parser@*": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/socket.io-parser/-/socket.io-parser-3.0.0.tgz" - integrity sha512-Ry/rbTE6HQNL9eu3LpL1Ocup5VexXu1bSSGlSho/IR5LuRc8YvxwSNJ3JxqTltVJEATLbZkMQETSbxfKNgp4Ew== + "integrity" "sha512-Ry/rbTE6HQNL9eu3LpL1Ocup5VexXu1bSSGlSho/IR5LuRc8YvxwSNJ3JxqTltVJEATLbZkMQETSbxfKNgp4Ew==" + "resolved" "https://registry.npmjs.org/@types/socket.io-parser/-/socket.io-parser-3.0.0.tgz" + "version" "3.0.0" dependencies: - socket.io-parser "*" + "socket.io-parser" "*" "@types/socket.io-redis@^1.0.26": - version "1.0.27" - resolved "https://registry.npmjs.org/@types/socket.io-redis/-/socket.io-redis-1.0.27.tgz" - integrity sha512-oyJPDjn5Dnci3wZD2bd1jfPsJkqvTwoNGpOIF+/+P45cOn4zrYsUO9mcGN/shoxIlCz6bcdRhSRXWwZFGQc1PA== + "integrity" "sha512-oyJPDjn5Dnci3wZD2bd1jfPsJkqvTwoNGpOIF+/+P45cOn4zrYsUO9mcGN/shoxIlCz6bcdRhSRXWwZFGQc1PA==" + "resolved" "https://registry.npmjs.org/@types/socket.io-redis/-/socket.io-redis-1.0.27.tgz" + "version" "1.0.27" dependencies: "@types/redis" "*" "@types/socket.io" "*" "@types/socket.io@*", "@types/socket.io@^2.1.11": - version "2.1.13" - resolved "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.13.tgz" - integrity sha512-JRgH3nCgsWel4OPANkhH8TelpXvacAJ9VeryjuqCDiaVDMpLysd6sbt0dr6Z15pqH3p2YpOT3T1C5vQ+O/7uyg== + "integrity" "sha512-JRgH3nCgsWel4OPANkhH8TelpXvacAJ9VeryjuqCDiaVDMpLysd6sbt0dr6Z15pqH3p2YpOT3T1C5vQ+O/7uyg==" + "resolved" "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.13.tgz" + "version" "2.1.13" dependencies: "@types/engine.io" "*" "@types/node" "*" "@types/socket.io-parser" "*" "@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== + "integrity" "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" + "resolved" "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz" + "version" "2.0.1" "@types/strip-bom@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= + "integrity" "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=" + "resolved" "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" "@types/strip-json-comments@0.0.30": - version "0.0.30" - resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" - integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== + "integrity" "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==" + "resolved" "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" + "version" "0.0.30" "@types/superagent@*": - version "4.1.12" - resolved "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.12.tgz" - integrity sha512-1GQvD6sySQPD6p9EopDFI3f5OogdICl1sU/2ij3Esobz/RtL9fWZZDPmsuv7eiy5ya+XNiPAxUcI3HIUTJa+3A== + "integrity" "sha512-1GQvD6sySQPD6p9EopDFI3f5OogdICl1sU/2ij3Esobz/RtL9fWZZDPmsuv7eiy5ya+XNiPAxUcI3HIUTJa+3A==" + "resolved" "https://registry.npmjs.org/@types/superagent/-/superagent-4.1.12.tgz" + "version" "4.1.12" dependencies: "@types/cookiejar" "*" "@types/node" "*" "@types/supertest@2.0.4": - version "2.0.4" - resolved "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.4.tgz" - integrity sha512-0TvOJ+6XVMSImgqc2ClNllfVffCxHQhFbsbwOGzGTjdFydoaG052LPqnP8SnmSlnokOcQiPPcbz+Yi30LxWPyA== + "integrity" "sha512-0TvOJ+6XVMSImgqc2ClNllfVffCxHQhFbsbwOGzGTjdFydoaG052LPqnP8SnmSlnokOcQiPPcbz+Yi30LxWPyA==" + "resolved" "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.4.tgz" + "version" "2.0.4" dependencies: "@types/superagent" "*" "@types/uuid@^8.3.0": - version "8.3.1" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz" - integrity sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg== + "integrity" "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg==" + "resolved" "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz" + "version" "8.3.1" "@types/webidl-conversions@*": - version "6.1.1" - resolved "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz" - integrity sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q== + "integrity" "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" + "resolved" "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz" + "version" "6.1.1" "@types/whatwg-url@^8.0.0": - version "8.2.1" - resolved "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz" - integrity sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ== + "integrity" "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==" + "resolved" "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz" + "version" "8.2.1" dependencies: "@types/node" "*" "@types/webidl-conversions" "*" "@types/ws@^7.2.7": - version "7.4.7" - resolved "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + "integrity" "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==" + "resolved" "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz" + "version" "7.4.7" dependencies: "@types/node" "*" "@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== + "integrity" "sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.1.tgz" + "version" "20.2.1" "@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== + "integrity" "sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.14.tgz" + "version" "15.0.14" dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^4.2.0": - version "4.29.3" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.3.tgz" - integrity sha512-tBgfA3K/3TsZY46ROGvoRxQr1wBkclbVqRQep97MjVHJzcRBURRY3sNFqLk0/Xr//BY5hM9H2p/kp+6qim85SA== + "integrity" "sha512-tBgfA3K/3TsZY46ROGvoRxQr1wBkclbVqRQep97MjVHJzcRBURRY3sNFqLk0/Xr//BY5hM9H2p/kp+6qim85SA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.3.tgz" + "version" "4.29.3" dependencies: "@typescript-eslint/experimental-utils" "4.29.3" "@typescript-eslint/scope-manager" "4.29.3" - debug "^4.3.1" - functional-red-black-tree "^1.0.1" - regexpp "^3.1.0" - semver "^7.3.5" - tsutils "^3.21.0" + "debug" "^4.3.1" + "functional-red-black-tree" "^1.0.1" + "regexpp" "^3.1.0" + "semver" "^7.3.5" + "tsutils" "^3.21.0" "@typescript-eslint/experimental-utils@4.29.3": - version "4.29.3" - resolved "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.3.tgz" - integrity sha512-ffIvbytTVWz+3keg+Sy94FG1QeOvmV9dP2YSdLFHw/ieLXWCa3U1TYu8IRCOpMv2/SPS8XqhM1+ou1YHsdzKrg== + "integrity" "sha512-ffIvbytTVWz+3keg+Sy94FG1QeOvmV9dP2YSdLFHw/ieLXWCa3U1TYu8IRCOpMv2/SPS8XqhM1+ou1YHsdzKrg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.3.tgz" + "version" "4.29.3" dependencies: "@types/json-schema" "^7.0.7" "@typescript-eslint/scope-manager" "4.29.3" "@typescript-eslint/types" "4.29.3" "@typescript-eslint/typescript-estree" "4.29.3" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" + "eslint-scope" "^5.1.1" + "eslint-utils" "^3.0.0" -"@typescript-eslint/parser@^4.2.0": - version "4.29.3" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.3.tgz" - integrity sha512-jrHOV5g2u8ROghmspKoW7pN8T/qUzk0+DITun0MELptvngtMrwUJ1tv5zMI04CYVEUsSrN4jV7AKSv+I0y0EfQ== +"@typescript-eslint/parser@^4.0.0", "@typescript-eslint/parser@^4.2.0": + "integrity" "sha512-jrHOV5g2u8ROghmspKoW7pN8T/qUzk0+DITun0MELptvngtMrwUJ1tv5zMI04CYVEUsSrN4jV7AKSv+I0y0EfQ==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.3.tgz" + "version" "4.29.3" dependencies: "@typescript-eslint/scope-manager" "4.29.3" "@typescript-eslint/types" "4.29.3" "@typescript-eslint/typescript-estree" "4.29.3" - debug "^4.3.1" + "debug" "^4.3.1" "@typescript-eslint/scope-manager@4.29.3": - version "4.29.3" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.3.tgz" - integrity sha512-x+w8BLXO7iWPkG5mEy9bA1iFRnk36p/goVlYobVWHyDw69YmaH9q6eA+Fgl7kYHmFvWlebUTUfhtIg4zbbl8PA== + "integrity" "sha512-x+w8BLXO7iWPkG5mEy9bA1iFRnk36p/goVlYobVWHyDw69YmaH9q6eA+Fgl7kYHmFvWlebUTUfhtIg4zbbl8PA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.3.tgz" + "version" "4.29.3" dependencies: "@typescript-eslint/types" "4.29.3" "@typescript-eslint/visitor-keys" "4.29.3" "@typescript-eslint/types@4.29.3": - version "4.29.3" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.3.tgz" - integrity sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg== + "integrity" "sha512-s1eV1lKNgoIYLAl1JUba8NhULmf+jOmmeFO1G5MN/RBCyyzg4TIOfIOICVNC06lor+Xmy4FypIIhFiJXOknhIg==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.3.tgz" + "version" "4.29.3" "@typescript-eslint/typescript-estree@4.29.3": - version "4.29.3" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz" - integrity sha512-45oQJA0bxna4O5TMwz55/TpgjX1YrAPOI/rb6kPgmdnemRZx/dB0rsx+Ku8jpDvqTxcE1C/qEbVHbS3h0hflag== + "integrity" "sha512-45oQJA0bxna4O5TMwz55/TpgjX1YrAPOI/rb6kPgmdnemRZx/dB0rsx+Ku8jpDvqTxcE1C/qEbVHbS3h0hflag==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.3.tgz" + "version" "4.29.3" dependencies: "@typescript-eslint/types" "4.29.3" "@typescript-eslint/visitor-keys" "4.29.3" - debug "^4.3.1" - globby "^11.0.3" - is-glob "^4.0.1" - semver "^7.3.5" - tsutils "^3.21.0" + "debug" "^4.3.1" + "globby" "^11.0.3" + "is-glob" "^4.0.1" + "semver" "^7.3.5" + "tsutils" "^3.21.0" "@typescript-eslint/visitor-keys@4.29.3": - version "4.29.3" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz" - integrity sha512-MGGfJvXT4asUTeVs0Q2m+sY63UsfnA+C/FDgBKV3itLBmM9H0u+URcneePtkd0at1YELmZK6HSolCqM4Fzs6yA== + "integrity" "sha512-MGGfJvXT4asUTeVs0Q2m+sY63UsfnA+C/FDgBKV3itLBmM9H0u+URcneePtkd0at1YELmZK6HSolCqM4Fzs6yA==" + "resolved" "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.3.tgz" + "version" "4.29.3" dependencies: "@typescript-eslint/types" "4.29.3" - eslint-visitor-keys "^2.0.0" + "eslint-visitor-keys" "^2.0.0" "@zxing/text-encoding@0.9.0": - version "0.9.0" - resolved "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz" - integrity sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA== - -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abstract-logging@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz" - integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== - -accepts@~1.3.4: - version "1.3.7" - resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1, acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== - -adm-zip@^0.5.3: - version "0.5.5" - resolved "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz" - integrity sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w== - -after@0.8.2: - version "0.8.2" - resolved "https://registry.npmjs.org/after/-/after-0.8.2.tgz" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - -agent-base@6: - version "6.0.2" - resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv@^6.10.0, ajv@^6.11.0, ajv@^6.12.4, ajv@^6.12.6: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1, ajv@^8.1.0: - version "8.6.2" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -amqp-connection-manager@^3.7.0: - version "3.7.0" - resolved "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-3.7.0.tgz" - integrity sha512-pWlrXVQNnSV9Jsewq6wnZjddzlHI/gZroDdmMEYfsqaAUa2V2ENCXbDdoi0r/GVesxueY/Yb8nBO024lfdtdPQ== - dependencies: - promise-breaker "^5.0.0" - -amqplib@^0.7.1: - version "0.7.1" - resolved "https://registry.npmjs.org/amqplib/-/amqplib-0.7.1.tgz" - integrity sha512-KePK3tTOLGU4emTo+PwSDMbc123jrxo13FpRpim1LzJoSlQrIBB2/kMeCC40jK/Zb0olHGaABjLqXDsdK46iLA== - dependencies: - bitsyntax "~0.1.0" - bluebird "^3.7.2" - buffer-more-ints "~1.0.0" - readable-stream "1.x >=1.1.9" - safe-buffer "~5.2.1" - url-parse "~1.5.1" - -analytics-node@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/analytics-node/-/analytics-node-5.0.0.tgz" - integrity sha512-eU/lPK6V3hmmv7hnJ8762zExL7WvcpVeBL6RgGZ8yQZQewk08VbbHk0M5GAlhruyh0ZT+/IBPW3Q/SYVhjexNQ== + "integrity" "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==" + "resolved" "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz" + "version" "0.9.0" + +"abab@^2.0.3", "abab@^2.0.5": + "integrity" "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==" + "resolved" "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz" + "version" "2.0.5" + +"abbrev@1": + "integrity" "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "resolved" "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + "version" "1.1.1" + +"abstract-logging@^2.0.0": + "integrity" "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" + "resolved" "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz" + "version" "2.0.1" + +"accepts@~1.3.4": + "integrity" "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==" + "resolved" "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz" + "version" "1.3.7" + dependencies: + "mime-types" "~2.1.24" + "negotiator" "0.6.2" + +"acorn-globals@^6.0.0": + "integrity" "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==" + "resolved" "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "acorn" "^7.1.1" + "acorn-walk" "^7.1.1" + +"acorn-jsx@^5.3.1": + "integrity" "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" + "resolved" "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + "version" "5.3.2" + +"acorn-walk@^7.1.1": + "integrity" "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" + "version" "7.2.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^7.1.1", "acorn@^7.4.0": + "integrity" "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz" + "version" "7.4.1" + +"acorn@^8.2.4": + "integrity" "sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA==" + "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.4.1.tgz" + "version" "8.4.1" + +"adm-zip@^0.5.3": + "integrity" "sha512-IWwXKnCbirdbyXSfUDvCCrmYrOHANRZcc8NcRrvTlIApdl7PwE9oGcsYvNeJPAVY1M+70b4PxXGKIf8AEuiQ6w==" + "resolved" "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.5.tgz" + "version" "0.5.5" + +"after@0.8.2": + "integrity" "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=" + "resolved" "https://registry.npmjs.org/after/-/after-0.8.2.tgz" + "version" "0.8.2" + +"agent-base@6": + "integrity" "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==" + "resolved" "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz" + "version" "6.0.2" + dependencies: + "debug" "4" + +"ajv@^6.10.0", "ajv@^6.11.0", "ajv@^6.12.4", "ajv@^6.12.6": + "integrity" "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + "version" "6.12.6" + dependencies: + "fast-deep-equal" "^3.1.1" + "fast-json-stable-stringify" "^2.0.0" + "json-schema-traverse" "^0.4.1" + "uri-js" "^4.2.2" + +"ajv@^8.0.1": + "integrity" "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + "version" "8.6.2" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"ajv@^8.1.0": + "integrity" "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==" + "resolved" "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz" + "version" "8.6.2" + dependencies: + "fast-deep-equal" "^3.1.1" + "json-schema-traverse" "^1.0.0" + "require-from-string" "^2.0.2" + "uri-js" "^4.2.2" + +"amqp-connection-manager@^3.7.0": + "integrity" "sha512-pWlrXVQNnSV9Jsewq6wnZjddzlHI/gZroDdmMEYfsqaAUa2V2ENCXbDdoi0r/GVesxueY/Yb8nBO024lfdtdPQ==" + "resolved" "https://registry.npmjs.org/amqp-connection-manager/-/amqp-connection-manager-3.7.0.tgz" + "version" "3.7.0" + dependencies: + "promise-breaker" "^5.0.0" + +"amqplib@*", "amqplib@^0.7.1": + "integrity" "sha512-KePK3tTOLGU4emTo+PwSDMbc123jrxo13FpRpim1LzJoSlQrIBB2/kMeCC40jK/Zb0olHGaABjLqXDsdK46iLA==" + "resolved" "https://registry.npmjs.org/amqplib/-/amqplib-0.7.1.tgz" + "version" "0.7.1" + dependencies: + "bitsyntax" "~0.1.0" + "bluebird" "^3.7.2" + "buffer-more-ints" "~1.0.0" + "readable-stream" "1.x >=1.1.9" + "safe-buffer" "~5.2.1" + "url-parse" "~1.5.1" + +"analytics-node@^5.0.0": + "integrity" "sha512-eU/lPK6V3hmmv7hnJ8762zExL7WvcpVeBL6RgGZ8yQZQewk08VbbHk0M5GAlhruyh0ZT+/IBPW3Q/SYVhjexNQ==" + "resolved" "https://registry.npmjs.org/analytics-node/-/analytics-node-5.0.0.tgz" + "version" "5.0.0" dependencies: "@segment/loosely-validate-event" "^2.0.0" - axios "^0.21.1" - axios-retry "^3.0.2" - lodash.isstring "^4.0.1" - md5 "^2.2.1" - ms "^2.0.0" - remove-trailing-slash "^0.1.0" - uuid "^8.3.2" - -ansi-align@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz" - integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== - dependencies: - string-width "^3.0.0" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -args@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/args/-/args-5.0.1.tgz" - integrity sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ== - dependencies: - camelcase "5.0.0" - chalk "2.4.2" - leven "2.1.0" - mri "1.1.4" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-parallel@~0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz" - integrity sha1-j3hTCJJu1apHjEfmTRszS2wMlH0= - -array-series@~0.1.5: - version "0.1.5" - resolved "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz" - integrity sha1-3103v8XC7wdV4qpPkv6ufUtaly8= - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.1.0: - version "3.2.1" - resolved "https://registry.npmjs.org/async/-/async-3.2.1.tgz" - integrity sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -available-typed-arrays@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz" - integrity sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA== - -avvio@^7.1.2: - version "7.2.2" - resolved "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz" - integrity sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw== - dependencies: - archy "^1.0.0" - debug "^4.0.0" - fastq "^1.6.1" - queue-microtask "^1.1.2" - -axios-retry@^3.0.2: - version "3.1.9" - resolved "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz" - integrity sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA== - dependencies: - is-retry-allowed "^1.1.0" - -axios@^0.21.1, axios@^0.21.3: - version "0.21.4" - resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" - integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== - dependencies: - follow-redirects "^1.14.0" - -babel-jest@^26.5.2, babel-jest@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz" - integrity sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA== + "axios" "^0.21.1" + "axios-retry" "^3.0.2" + "lodash.isstring" "^4.0.1" + "md5" "^2.2.1" + "ms" "^2.0.0" + "remove-trailing-slash" "^0.1.0" + "uuid" "^8.3.2" + +"ansi-align@^3.0.0": + "integrity" "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==" + "resolved" "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "string-width" "^3.0.0" + +"ansi-colors@^4.1.1": + "integrity" "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" + "resolved" "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz" + "version" "4.1.1" + +"ansi-escapes@^4.2.1": + "integrity" "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==" + "resolved" "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "type-fest" "^0.21.3" + +"ansi-regex@^2.0.0": + "integrity" "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz" + "version" "2.1.1" + +"ansi-regex@^4.1.0": + "integrity" "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz" + "version" "4.1.0" + +"ansi-regex@^5.0.0": + "integrity" "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "resolved" "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz" + "version" "5.0.0" + +"ansi-styles@^3.2.1": + "integrity" "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz" + "version" "3.2.1" + dependencies: + "color-convert" "^1.9.0" + +"ansi-styles@^4.0.0", "ansi-styles@^4.1.0": + "integrity" "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==" + "resolved" "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "color-convert" "^2.0.1" + +"anymatch@^2.0.0": + "integrity" "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "micromatch" "^3.1.4" + "normalize-path" "^2.1.1" + +"anymatch@^3.0.3", "anymatch@~3.1.2": + "integrity" "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==" + "resolved" "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "normalize-path" "^3.0.0" + "picomatch" "^2.0.4" + +"aproba@^1.0.3": + "integrity" "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "resolved" "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz" + "version" "1.2.0" + +"archy@^1.0.0": + "integrity" "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + "resolved" "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + "version" "1.0.0" + +"are-we-there-yet@~1.1.2": + "integrity" "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==" + "resolved" "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz" + "version" "1.1.5" + dependencies: + "delegates" "^1.0.0" + "readable-stream" "^2.0.6" + +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + +"argparse@^1.0.7": + "integrity" "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "sprintf-js" "~1.0.2" + +"argparse@^2.0.1": + "integrity" "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "resolved" "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + "version" "2.0.1" + +"args@^5.0.1": + "integrity" "sha512-1kqmFCFsPffavQFGt8OxJdIcETti99kySRUPMpOhaGjL6mRJn8HFU1OxKY5bMqfZKUwTQc1mZkAjmGYaVOHFtQ==" + "resolved" "https://registry.npmjs.org/args/-/args-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "camelcase" "5.0.0" + "chalk" "2.4.2" + "leven" "2.1.0" + "mri" "1.1.4" + +"arr-diff@^4.0.0": + "integrity" "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "resolved" "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz" + "version" "4.0.0" + +"arr-flatten@^1.1.0": + "integrity" "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "resolved" "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz" + "version" "1.1.0" + +"arr-union@^3.1.0": + "integrity" "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "resolved" "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz" + "version" "3.1.0" + +"array-parallel@~0.1.3": + "integrity" "sha1-j3hTCJJu1apHjEfmTRszS2wMlH0=" + "resolved" "https://registry.npmjs.org/array-parallel/-/array-parallel-0.1.3.tgz" + "version" "0.1.3" + +"array-series@~0.1.5": + "integrity" "sha1-3103v8XC7wdV4qpPkv6ufUtaly8=" + "resolved" "https://registry.npmjs.org/array-series/-/array-series-0.1.5.tgz" + "version" "0.1.5" + +"array-union@^2.1.0": + "integrity" "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "resolved" "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + "version" "2.1.0" + +"array-unique@^0.3.2": + "integrity" "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "resolved" "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz" + "version" "0.3.2" + +"arraybuffer.slice@~0.0.7": + "integrity" "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==" + "resolved" "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz" + "version" "0.0.7" + +"assertion-error@^1.1.0": + "integrity" "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "resolved" "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz" + "version" "1.1.0" + +"assign-symbols@^1.0.0": + "integrity" "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "resolved" "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz" + "version" "1.0.0" + +"astral-regex@^2.0.0": + "integrity" "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "resolved" "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz" + "version" "2.0.0" + +"async@^3.1.0": + "integrity" "sha512-XdD5lRO/87udXCMC9meWdYiR+Nq6ZjUfXidViUZGu2F1MO4T3XwZ1et0hb2++BgLfhyJwy44BGB/yx80ABx8hg==" + "resolved" "https://registry.npmjs.org/async/-/async-3.2.1.tgz" + "version" "3.2.1" + +"asynckit@^0.4.0": + "integrity" "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "resolved" "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + "version" "0.4.0" + +"at-least-node@^1.0.0": + "integrity" "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + "resolved" "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz" + "version" "1.0.0" + +"atob@^2.1.2": + "integrity" "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" + "version" "2.1.2" + +"atomic-sleep@^1.0.0": + "integrity" "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" + "resolved" "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" + "version" "1.0.0" + +"available-typed-arrays@^1.0.4": + "integrity" "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==" + "resolved" "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz" + "version" "1.0.4" + +"avvio@^7.1.2": + "integrity" "sha512-XW2CMCmZaCmCCsIaJaLKxAzPwF37fXi1KGxNOvedOpeisLdmxZnblGc3hpHWYnlP+KOUxZsazh43WXNHgXpbqw==" + "resolved" "https://registry.npmjs.org/avvio/-/avvio-7.2.2.tgz" + "version" "7.2.2" + dependencies: + "archy" "^1.0.0" + "debug" "^4.0.0" + "fastq" "^1.6.1" + "queue-microtask" "^1.1.2" + +"axios-retry@^3.0.2": + "integrity" "sha512-NFCoNIHq8lYkJa6ku4m+V1837TP6lCa7n79Iuf8/AqATAHYB0ISaAS1eyIenDOfHOLtym34W65Sjke2xjg2fsA==" + "resolved" "https://registry.npmjs.org/axios-retry/-/axios-retry-3.1.9.tgz" + "version" "3.1.9" + dependencies: + "is-retry-allowed" "^1.1.0" + +"axios@^0.21.1", "axios@^0.21.3": + "integrity" "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==" + "resolved" "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" + "version" "0.21.4" + dependencies: + "follow-redirects" "^1.14.0" + +"babel-jest@^26.5.2", "babel-jest@^26.6.3": + "integrity" "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/transform" "^26.6.2" "@jest/types" "^26.6.2" "@types/babel__core" "^7.1.7" - babel-plugin-istanbul "^6.0.0" - babel-preset-jest "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" + "babel-plugin-istanbul" "^6.0.0" + "babel-preset-jest" "^26.6.2" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "slash" "^3.0.0" -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== +"babel-plugin-dynamic-import-node@^2.3.3": + "integrity" "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz" + "version" "2.3.3" dependencies: - object.assign "^4.1.0" + "object.assign" "^4.1.0" -babel-plugin-istanbul@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz" - integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== +"babel-plugin-istanbul@^6.0.0": + "integrity" "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz" + "version" "6.0.0" dependencies: "@babel/helper-plugin-utils" "^7.0.0" "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^4.0.0" - test-exclude "^6.0.0" + "istanbul-lib-instrument" "^4.0.0" + "test-exclude" "^6.0.0" -babel-plugin-jest-hoist@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz" - integrity sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw== +"babel-plugin-jest-hoist@^26.6.2": + "integrity" "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz" + "version" "26.6.2" dependencies: "@babel/template" "^7.3.3" "@babel/types" "^7.3.3" "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-parameter-decorator@^1.0.16: - version "1.0.16" - resolved "https://registry.npmjs.org/babel-plugin-parameter-decorator/-/babel-plugin-parameter-decorator-1.0.16.tgz" - integrity sha512-yUT2WPTUg1JaPmRGRSF557m1HJ9vdFQInRWOkiOyO5a9HhqlXffJu+fQ2xd5+qU/35ICMrrk9eWKsHCairKA9w== +"babel-plugin-parameter-decorator@^1.0.16": + "integrity" "sha512-yUT2WPTUg1JaPmRGRSF557m1HJ9vdFQInRWOkiOyO5a9HhqlXffJu+fQ2xd5+qU/35ICMrrk9eWKsHCairKA9w==" + "resolved" "https://registry.npmjs.org/babel-plugin-parameter-decorator/-/babel-plugin-parameter-decorator-1.0.16.tgz" + "version" "1.0.16" -babel-plugin-polyfill-corejs2@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== +"babel-plugin-polyfill-corejs2@^0.2.2": + "integrity" "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz" + "version" "0.2.2" dependencies: "@babel/compat-data" "^7.13.11" "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" + "semver" "^6.1.1" -babel-plugin-polyfill-corejs3@^0.2.2: - version "0.2.4" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz" - integrity sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ== +"babel-plugin-polyfill-corejs3@^0.2.2": + "integrity" "sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.4.tgz" + "version" "0.2.4" dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.14.0" + "core-js-compat" "^3.14.0" -babel-plugin-polyfill-regenerator@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== +"babel-plugin-polyfill-regenerator@^0.2.2": + "integrity" "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz" + "version" "0.2.2" dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== +"babel-preset-current-node-syntax@^1.0.0": + "integrity" "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==" + "resolved" "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz" + "version" "1.0.1" dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" @@ -2194,2713 +2204,2778 @@ babel-preset-current-node-syntax@^1.0.0: "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-top-level-await" "^7.8.3" -babel-preset-jest@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz" - integrity sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ== - dependencies: - babel-plugin-jest-hoist "^26.6.2" - babel-preset-current-node-syntax "^1.0.0" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-arraybuffer@0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz" - integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64id@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.npmjs.org/base/-/base-0.11.2.tgz" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz" - integrity sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw== +"babel-preset-jest@^26.6.2": + "integrity" "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz" + "version" "26.6.2" + dependencies: + "babel-plugin-jest-hoist" "^26.6.2" + "babel-preset-current-node-syntax" "^1.0.0" + +"backo2@1.0.2": + "integrity" "sha1-MasayLEpNjRj41s+u2n038+6eUc=" + "resolved" "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz" + "version" "1.0.2" + +"balanced-match@^1.0.0": + "integrity" "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "resolved" "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + "version" "1.0.2" + +"base@^0.11.1": + "integrity" "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==" + "resolved" "https://registry.npmjs.org/base/-/base-0.11.2.tgz" + "version" "0.11.2" + dependencies: + "cache-base" "^1.0.1" + "class-utils" "^0.3.5" + "component-emitter" "^1.2.1" + "define-property" "^1.0.0" + "isobject" "^3.0.1" + "mixin-deep" "^1.2.0" + "pascalcase" "^0.1.1" + +"base64-arraybuffer@0.1.4": + "integrity" "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=" + "resolved" "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz" + "version" "0.1.4" + +"base64-js@^1.3.1": + "integrity" "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "resolved" "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + "version" "1.5.1" + +"base64id@2.0.0": + "integrity" "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==" + "resolved" "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz" + "version" "2.0.0" + +"bcrypt@^5.0.1": + "integrity" "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==" + "resolved" "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz" + "version" "5.0.1" dependencies: "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^3.1.0" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bitsyntax@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz" - integrity sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q== - dependencies: - buffer-more-ints "~1.0.0" - debug "~2.6.9" - safe-buffer "~5.1.2" - -bl@^4.0.3, bl@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" - integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -block-stream2@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz" - integrity sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg== - dependencies: - readable-stream "^3.4.0" - -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -boxen@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz" - integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^5.3.1" - chalk "^3.0.0" - cli-boxes "^2.2.0" - string-width "^4.1.0" - term-size "^2.1.0" - type-fest "^0.8.1" - widest-line "^3.1.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1: - version "2.3.2" - resolved "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.16.6, browserslist@^4.16.7: - version "4.16.8" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz" - integrity sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ== - dependencies: - caniuse-lite "^1.0.30001251" - colorette "^1.3.0" - electron-to-chromium "^1.3.811" - escalade "^3.1.1" - node-releases "^1.1.75" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -bson@^4.4.0: - version "4.5.0" - resolved "https://registry.npmjs.org/bson/-/bson-4.5.0.tgz" - integrity sha512-WoSOKryfrKx0aqhPz/DJsUlrMlOL+hkW+469Q5z5E/EQWF2xilOH7h/s5HH4j9iLRzVDwKFwVNQ3Mba16srmlw== - dependencies: - buffer "^5.6.0" - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-from@1.x, buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-more-ints@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz" - integrity sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== - -buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -busboy@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz" - integrity sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw== - dependencies: - dicer "0.3.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cacheable-request@^6.0.0: - version "6.1.0" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" - integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^3.0.0" - lowercase-keys "^2.0.0" - normalize-url "^4.1.0" - responselike "^1.0.2" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz" - integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.0.0: - version "6.2.0" - resolved "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" - integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== - -caniuse-lite@^1.0.30001251: - version "1.0.30001251" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz" - integrity sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A== - -capture-exit@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" - integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== - dependencies: - rsvp "^4.8.4" - -cassandra-driver@^4.6.0: - version "4.6.3" - resolved "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.6.3.tgz" - integrity sha512-npW670TXjTHrdb15LUFN01wssb9vvz6SuNYcppesoKcUXx3Q29nXVhRtnvsnkG0BaSnDGvCCR4udrzYLsbh+sg== + "node-addon-api" "^3.1.0" + +"binary-extensions@^2.0.0": + "integrity" "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "resolved" "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + "version" "2.2.0" + +"bitsyntax@~0.1.0": + "integrity" "sha512-ikAdCnrloKmFOugAfxWws89/fPc+nw0OOG1IzIE72uSOg/A3cYptKCjSUhDTuj7fhsJtzkzlv7l3b8PzRHLN0Q==" + "resolved" "https://registry.npmjs.org/bitsyntax/-/bitsyntax-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "buffer-more-ints" "~1.0.0" + "debug" "~2.6.9" + "safe-buffer" "~5.1.2" + +"bl@^4.0.3", "bl@^4.1.0": + "integrity" "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==" + "resolved" "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "buffer" "^5.5.0" + "inherits" "^2.0.4" + "readable-stream" "^3.4.0" + +"blob@0.0.5": + "integrity" "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==" + "resolved" "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz" + "version" "0.0.5" + +"block-stream2@^2.0.0": + "integrity" "sha512-suhjmLI57Ewpmq00qaygS8UgEq2ly2PCItenIyhMqVjo4t4pGzqMvfgJuX8iWTeSDdfSSqS6j38fL4ToNL7Pfg==" + "resolved" "https://registry.npmjs.org/block-stream2/-/block-stream2-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "readable-stream" "^3.4.0" + +"bluebird@^3.7.2": + "integrity" "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + "resolved" "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" + "version" "3.7.2" + +"boxen@^4.2.0": + "integrity" "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==" + "resolved" "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "ansi-align" "^3.0.0" + "camelcase" "^5.3.1" + "chalk" "^3.0.0" + "cli-boxes" "^2.2.0" + "string-width" "^4.1.0" + "term-size" "^2.1.0" + "type-fest" "^0.8.1" + "widest-line" "^3.1.0" + +"brace-expansion@^1.1.7": + "integrity" "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==" + "resolved" "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + "version" "1.1.11" + dependencies: + "balanced-match" "^1.0.0" + "concat-map" "0.0.1" + +"braces@^2.3.1": + "integrity" "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==" + "resolved" "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz" + "version" "2.3.2" + dependencies: + "arr-flatten" "^1.1.0" + "array-unique" "^0.3.2" + "extend-shallow" "^2.0.1" + "fill-range" "^4.0.0" + "isobject" "^3.0.1" + "repeat-element" "^1.1.2" + "snapdragon" "^0.8.1" + "snapdragon-node" "^2.0.1" + "split-string" "^3.0.2" + "to-regex" "^3.0.1" + +"braces@^3.0.1", "braces@~3.0.2": + "integrity" "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==" + "resolved" "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "fill-range" "^7.0.1" + +"browser-process-hrtime@^1.0.0": + "integrity" "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + "resolved" "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" + "version" "1.0.0" + +"browserslist@^4.16.6", "browserslist@^4.16.7": + "integrity" "sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.16.8.tgz" + "version" "4.16.8" + dependencies: + "caniuse-lite" "^1.0.30001251" + "colorette" "^1.3.0" + "electron-to-chromium" "^1.3.811" + "escalade" "^3.1.1" + "node-releases" "^1.1.75" + +"bs-logger@0.x": + "integrity" "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==" + "resolved" "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "fast-json-stable-stringify" "2.x" + +"bser@2.1.1": + "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" + "resolved" "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "node-int64" "^0.4.0" + +"bson@^4.4.0": + "integrity" "sha512-WoSOKryfrKx0aqhPz/DJsUlrMlOL+hkW+469Q5z5E/EQWF2xilOH7h/s5HH4j9iLRzVDwKFwVNQ3Mba16srmlw==" + "resolved" "https://registry.npmjs.org/bson/-/bson-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "buffer" "^5.6.0" + +"buffer-equal-constant-time@1.0.1": + "integrity" "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "resolved" "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz" + "version" "1.0.1" + +"buffer-from@^1.0.0", "buffer-from@1.x": + "integrity" "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "resolved" "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + "version" "1.1.2" + +"buffer-more-ints@~1.0.0": + "integrity" "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==" + "resolved" "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz" + "version" "1.0.0" + +"buffer@^5.5.0", "buffer@^5.6.0": + "integrity" "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==" + "resolved" "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + "version" "5.7.1" + dependencies: + "base64-js" "^1.3.1" + "ieee754" "^1.1.13" + +"busboy@^0.3.1": + "integrity" "sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==" + "resolved" "https://registry.npmjs.org/busboy/-/busboy-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "dicer" "0.3.0" + +"cache-base@^1.0.1": + "integrity" "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==" + "resolved" "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "collection-visit" "^1.0.0" + "component-emitter" "^1.2.1" + "get-value" "^2.0.6" + "has-value" "^1.0.0" + "isobject" "^3.0.1" + "set-value" "^2.0.0" + "to-object-path" "^0.3.0" + "union-value" "^1.0.0" + "unset-value" "^1.0.0" + +"cacheable-request@^6.0.0": + "integrity" "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==" + "resolved" "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "clone-response" "^1.0.2" + "get-stream" "^5.1.0" + "http-cache-semantics" "^4.0.0" + "keyv" "^3.0.0" + "lowercase-keys" "^2.0.0" + "normalize-url" "^4.1.0" + "responselike" "^1.0.2" + +"call-bind@^1.0.0", "call-bind@^1.0.2": + "integrity" "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==" + "resolved" "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "function-bind" "^1.1.1" + "get-intrinsic" "^1.0.2" + +"callsites@^3.0.0": + "integrity" "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "resolved" "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + "version" "3.1.0" + +"camelcase@^5.0.0", "camelcase@^5.3.1": + "integrity" "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz" + "version" "5.3.1" + +"camelcase@^6.0.0": + "integrity" "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz" + "version" "6.2.0" + +"camelcase@5.0.0": + "integrity" "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==" + "resolved" "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz" + "version" "5.0.0" + +"caniuse-lite@^1.0.30001251": + "integrity" "sha512-HOe1r+9VkU4TFmnU70z+r7OLmtR+/chB1rdcJUeQlAinjEeb0cKL20tlAtOagNZhbrtLnCvV19B4FmF1rgzl6A==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001251.tgz" + "version" "1.0.30001251" + +"capture-exit@^2.0.0": + "integrity" "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==" + "resolved" "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "rsvp" "^4.8.4" + +"cassandra-driver@^4.6.0": + "integrity" "sha512-npW670TXjTHrdb15LUFN01wssb9vvz6SuNYcppesoKcUXx3Q29nXVhRtnvsnkG0BaSnDGvCCR4udrzYLsbh+sg==" + "resolved" "https://registry.npmjs.org/cassandra-driver/-/cassandra-driver-4.6.3.tgz" + "version" "4.6.3" dependencies: "@types/long" "^4.0.0" "@types/node" ">=8" - adm-zip "^0.5.3" - long "^2.2.0" - -chai@^4.2.0: - version "4.3.4" - resolved "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" - integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - pathval "^1.1.1" - type-detect "^4.0.5" - -chalk@2.4.2, chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -charenc@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" - integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= - -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" - integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= - -chokidar@^3.2.2, chokidar@^3.5.1: - version "3.5.2" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz" - integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" + "adm-zip" "^0.5.3" + "long" "^2.2.0" + +"chai@^4.2.0": + "integrity" "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==" + "resolved" "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz" + "version" "4.3.4" + dependencies: + "assertion-error" "^1.1.0" + "check-error" "^1.0.2" + "deep-eql" "^3.0.1" + "get-func-name" "^2.0.0" + "pathval" "^1.1.1" + "type-detect" "^4.0.5" + +"chalk@^2.0.0", "chalk@2.4.2": + "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" + "version" "2.4.2" + dependencies: + "ansi-styles" "^3.2.1" + "escape-string-regexp" "^1.0.5" + "supports-color" "^5.3.0" + +"chalk@^3.0.0": + "integrity" "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.0.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"chalk@^4.1.0": + "integrity" "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==" + "resolved" "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "ansi-styles" "^4.1.0" + "supports-color" "^7.1.0" + +"char-regex@^1.0.2": + "integrity" "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" + "resolved" "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz" + "version" "1.0.2" + +"charenc@0.0.2": + "integrity" "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + "resolved" "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz" + "version" "0.0.2" + +"check-error@^1.0.2": + "integrity" "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + "resolved" "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz" + "version" "1.0.2" + +"chokidar@^3.2.2", "chokidar@^3.5.1": + "integrity" "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==" + "resolved" "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz" + "version" "3.5.2" + dependencies: + "anymatch" "~3.1.2" + "braces" "~3.0.2" + "glob-parent" "~5.1.2" + "is-binary-path" "~2.1.0" + "is-glob" "~4.0.1" + "normalize-path" "~3.0.0" + "readdirp" "~3.6.0" optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cjs-module-lexer@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz" - integrity sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw== - -class-transformer@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/class-transformer/-/class-transformer-0.3.1.tgz" - integrity sha512-cKFwohpJbuMovS8xVLmn8N2AUbAuc8pVo4zEfsUVo8qgECOogns1WVk/FkOZoxhOPTyTYFckuoH+13FO+MQ8GA== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cli-boxes@^2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-spinners@^2.5.0: - version "2.6.0" - resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz" - integrity sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q== - -cli-table@^0.3.6: - version "0.3.6" - resolved "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz" - integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== - dependencies: - colors "1.0.3" - -cliui@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" - integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^6.2.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -clone@2.x: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" - integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.npmjs.org/co/-/co-4.6.0.tgz" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3, color-name@^1.0.0: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz" - integrity sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/color/-/color-4.0.1.tgz" - integrity sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA== - dependencies: - color-convert "^2.0.1" - color-string "^1.6.0" - -colorette@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz" - integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== - -colors@1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" - integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= - -combined-stream@^1.0.6, combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-emitter@^1.2.0, component-emitter@^1.2.1, component-emitter@~1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - -component-type@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz" - integrity sha1-ikeQFwAjjk/DIml3EjAibyS0Fak= - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -config@^3.3.2: - version "3.3.6" - resolved "https://registry.npmjs.org/config/-/config-3.3.6.tgz" - integrity sha512-Hj5916C5HFawjYJat1epbyY2PlAgLpBtDUlr0MxGLgo3p5+7kylyvnRY18PqJHgnNWXcdd0eWDemT7eYWuFgwg== - dependencies: - json5 "^2.1.1" - -configstore@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" - integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== - dependencies: - dot-prop "^5.2.0" - graceful-fs "^4.1.2" - make-dir "^3.0.0" - unique-string "^2.0.0" - write-file-atomic "^3.0.0" - xdg-basedir "^4.0.0" - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -content-disposition@^0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -cookie@^0.4.0, cookie@^0.4.1, cookie@~0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" - integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== - -cookiejar@^2.1.0: - version "2.1.2" - resolved "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz" - integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.14.0, core-js-compat@^3.16.0: - version "3.16.2" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.2.tgz" - integrity sha512-4lUshXtBXsdmp8cDWh6KKiHUg40AjiuPD3bOWkNVsr1xkAhpUqCjaZ8lB1bKx9Gb5fXcbRbFJ4f4qpRIRTuJqQ== - dependencies: - browserslist "^4.16.7" - semver "7.0.0" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz" - integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypt@0.0.2: - version "0.0.2" - resolved "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" - integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= - -crypto-random-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" - integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -dateformat@^4.5.1: - version "4.5.1" - resolved "https://registry.npmjs.org/dateformat/-/dateformat-4.5.1.tgz" - integrity sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q== - -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@~2.6.9: - version "2.6.9" - resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@~4.3.1: - version "4.3.2" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== - dependencies: - ms "2.1.2" - -debug@^3.1.0, debug@^3.2.6: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@~4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" - integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= - dependencies: - mimic-response "^1.0.0" - -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" - integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== - dependencies: - type-detect "^4.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -deep-object-diff@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz" - integrity sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw== - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + "fsevents" "~2.3.2" + +"chownr@^1.1.1": + "integrity" "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + "version" "1.1.4" + +"chownr@^2.0.0": + "integrity" "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "resolved" "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" + "version" "2.0.0" + +"ci-info@^2.0.0": + "integrity" "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "resolved" "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz" + "version" "2.0.0" + +"cjs-module-lexer@^0.6.0": + "integrity" "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz" + "version" "0.6.0" + +"class-transformer@^0.3.1": + "integrity" "sha512-cKFwohpJbuMovS8xVLmn8N2AUbAuc8pVo4zEfsUVo8qgECOogns1WVk/FkOZoxhOPTyTYFckuoH+13FO+MQ8GA==" + "resolved" "https://registry.npmjs.org/class-transformer/-/class-transformer-0.3.1.tgz" + "version" "0.3.1" + +"class-utils@^0.3.5": + "integrity" "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==" + "resolved" "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz" + "version" "0.3.6" + dependencies: + "arr-union" "^3.1.0" + "define-property" "^0.2.5" + "isobject" "^3.0.0" + "static-extend" "^0.1.1" + +"cli-boxes@^2.2.0": + "integrity" "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "resolved" "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz" + "version" "2.2.1" + +"cli-cursor@^3.1.0": + "integrity" "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==" + "resolved" "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "restore-cursor" "^3.1.0" + +"cli-spinners@^2.5.0": + "integrity" "sha512-t+4/y50K/+4xcCRosKkA7W4gTr1MySvLV0q+PxmG7FJ5g+66ChKurYjxBCjHggHH3HA5Hh9cy+lcUGWDqVH+4Q==" + "resolved" "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.0.tgz" + "version" "2.6.0" + +"cli-table@^0.3.6": + "integrity" "sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ==" + "resolved" "https://registry.npmjs.org/cli-table/-/cli-table-0.3.6.tgz" + "version" "0.3.6" + dependencies: + "colors" "1.0.3" + +"cliui@^6.0.0": + "integrity" "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^6.2.0" + +"cliui@^7.0.2": + "integrity" "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" + "version" "7.0.4" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + "wrap-ansi" "^7.0.0" + +"clone-response@^1.0.2": + "integrity" "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=" + "resolved" "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "mimic-response" "^1.0.0" + +"clone@^1.0.2": + "integrity" "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "resolved" "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz" + "version" "1.0.4" + +"clone@2.x": + "integrity" "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + "resolved" "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz" + "version" "2.1.2" + +"co@^4.6.0": + "integrity" "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + "resolved" "https://registry.npmjs.org/co/-/co-4.6.0.tgz" + "version" "4.6.0" + +"code-point-at@^1.0.0": + "integrity" "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "resolved" "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz" + "version" "1.1.0" + +"collect-v8-coverage@^1.0.0": + "integrity" "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" + "resolved" "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz" + "version" "1.0.1" + +"collection-visit@^1.0.0": + "integrity" "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=" + "resolved" "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "map-visit" "^1.0.0" + "object-visit" "^1.0.0" + +"color-convert@^1.9.0": + "integrity" "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" + "version" "1.9.3" + dependencies: + "color-name" "1.1.3" + +"color-convert@^2.0.1": + "integrity" "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==" + "resolved" "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "color-name" "~1.1.4" + +"color-name@^1.0.0", "color-name@1.1.3": + "integrity" "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" + "version" "1.1.3" + +"color-name@~1.1.4": + "integrity" "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "resolved" "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + "version" "1.1.4" + +"color-string@^1.6.0": + "integrity" "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==" + "resolved" "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz" + "version" "1.6.0" + dependencies: + "color-name" "^1.0.0" + "simple-swizzle" "^0.2.2" + +"color@^4.0.1": + "integrity" "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==" + "resolved" "https://registry.npmjs.org/color/-/color-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "color-convert" "^2.0.1" + "color-string" "^1.6.0" + +"colorette@^1.3.0": + "integrity" "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==" + "resolved" "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz" + "version" "1.3.0" + +"colors@1.0.3": + "integrity" "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" + "resolved" "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz" + "version" "1.0.3" + +"combined-stream@^1.0.6", "combined-stream@^1.0.8": + "integrity" "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==" + "resolved" "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "delayed-stream" "~1.0.0" + +"component-bind@1.0.0": + "integrity" "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=" + "resolved" "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz" + "version" "1.0.0" + +"component-emitter@^1.2.0", "component-emitter@^1.2.1", "component-emitter@~1.3.0": + "integrity" "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz" + "version" "1.3.0" + +"component-emitter@1.2.1": + "integrity" "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "resolved" "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz" + "version" "1.2.1" + +"component-inherit@0.0.3": + "integrity" "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=" + "resolved" "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz" + "version" "0.0.3" + +"component-type@^1.2.1": + "integrity" "sha1-ikeQFwAjjk/DIml3EjAibyS0Fak=" + "resolved" "https://registry.npmjs.org/component-type/-/component-type-1.2.1.tgz" + "version" "1.2.1" + +"concat-map@0.0.1": + "integrity" "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "resolved" "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + "version" "0.0.1" + +"config@^3.3.2": + "integrity" "sha512-Hj5916C5HFawjYJat1epbyY2PlAgLpBtDUlr0MxGLgo3p5+7kylyvnRY18PqJHgnNWXcdd0eWDemT7eYWuFgwg==" + "resolved" "https://registry.npmjs.org/config/-/config-3.3.6.tgz" + "version" "3.3.6" + dependencies: + "json5" "^2.1.1" + +"configstore@^5.0.1": + "integrity" "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==" + "resolved" "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "dot-prop" "^5.2.0" + "graceful-fs" "^4.1.2" + "make-dir" "^3.0.0" + "unique-string" "^2.0.0" + "write-file-atomic" "^3.0.0" + "xdg-basedir" "^4.0.0" + +"console-control-strings@^1.0.0", "console-control-strings@~1.1.0": + "integrity" "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "resolved" "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz" + "version" "1.1.0" + +"content-disposition@^0.5.3": + "integrity" "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==" + "resolved" "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "safe-buffer" "5.1.2" + +"convert-source-map@^1.4.0", "convert-source-map@^1.6.0", "convert-source-map@^1.7.0": + "integrity" "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "safe-buffer" "~5.1.1" + +"cookie@^0.4.0", "cookie@^0.4.1", "cookie@~0.4.1": + "integrity" "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + "resolved" "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" + "version" "0.4.1" + +"cookiejar@^2.1.0": + "integrity" "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" + "resolved" "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz" + "version" "2.1.2" + +"copy-descriptor@^0.1.0": + "integrity" "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "resolved" "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz" + "version" "0.1.1" + +"core-js-compat@^3.14.0", "core-js-compat@^3.16.0": + "integrity" "sha512-4lUshXtBXsdmp8cDWh6KKiHUg40AjiuPD3bOWkNVsr1xkAhpUqCjaZ8lB1bKx9Gb5fXcbRbFJ4f4qpRIRTuJqQ==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.16.2.tgz" + "version" "3.16.2" + dependencies: + "browserslist" "^4.16.7" + "semver" "7.0.0" + +"core-util-is@~1.0.0": + "integrity" "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "resolved" "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" + "version" "1.0.2" + +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + +"cross-spawn@^4.0.0": + "integrity" "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "lru-cache" "^4.0.1" + "which" "^1.2.9" + +"cross-spawn@^6.0.0": + "integrity" "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz" + "version" "6.0.5" + dependencies: + "nice-try" "^1.0.4" + "path-key" "^2.0.1" + "semver" "^5.5.0" + "shebang-command" "^1.2.0" + "which" "^1.2.9" + +"cross-spawn@^7.0.0", "cross-spawn@^7.0.2", "cross-spawn@^7.0.3": + "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" + "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + "version" "7.0.3" + dependencies: + "path-key" "^3.1.0" + "shebang-command" "^2.0.0" + "which" "^2.0.1" + +"crypt@0.0.2": + "integrity" "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + "resolved" "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz" + "version" "0.0.2" + +"crypto-random-string@^2.0.0": + "integrity" "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "resolved" "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz" + "version" "2.0.0" + +"cssom@^0.4.4": + "integrity" "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" + "version" "0.4.4" + +"cssom@~0.3.6": + "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" + "version" "0.3.8" + +"cssstyle@^2.3.0": + "integrity" "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==" + "resolved" "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "cssom" "~0.3.6" + +"data-urls@^2.0.0": + "integrity" "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==" + "resolved" "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "abab" "^2.0.3" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.0.0" + +"dateformat@^4.5.1": + "integrity" "sha512-OD0TZ+B7yP7ZgpJf5K2DIbj3FZvFvxgFUuaqA/V5zTjAtAAXZ1E8bktHxmAGs4x5b7PflqA9LeQ84Og7wYtF7Q==" + "resolved" "https://registry.npmjs.org/dateformat/-/dateformat-4.5.1.tgz" + "version" "4.5.1" + +"debug@^2.2.0": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^2.3.3": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@^3.1.0": + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + "version" "3.2.7" + dependencies: + "ms" "^2.1.1" + +"debug@^3.2.6": + "integrity" "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + "version" "3.2.7" + dependencies: + "ms" "^2.1.1" + +"debug@^4.0.0", "debug@^4.0.1", "debug@^4.1.0", "debug@^4.1.1", "debug@^4.3.1", "debug@~4.3.1", "debug@4": + "integrity" "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz" + "version" "4.3.2" + dependencies: + "ms" "2.1.2" + +"debug@~2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"debug@~3.1.0": + "integrity" "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==" + "resolved" "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "ms" "2.0.0" + +"debug@~4.1.0": + "integrity" "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==" + "resolved" "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz" + "version" "4.1.1" + dependencies: + "ms" "^2.1.1" + +"debug@2.6.9": + "integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==" + "resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" + "version" "2.6.9" + dependencies: + "ms" "2.0.0" + +"decamelize@^1.2.0": + "integrity" "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "resolved" "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" + "version" "1.2.0" + +"decimal.js@^10.2.1": + "integrity" "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" + "resolved" "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz" + "version" "10.3.1" + +"decode-uri-component@^0.2.0": + "integrity" "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "resolved" "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz" + "version" "0.2.0" + +"decompress-response@^3.3.0": + "integrity" "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "mimic-response" "^1.0.0" -defaults@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" - integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= - dependencies: - clone "^1.0.2" +"decompress-response@^4.2.0": + "integrity" "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==" + "resolved" "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "mimic-response" "^2.0.0" + +"deep-eql@^3.0.1": + "integrity" "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==" + "resolved" "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "type-detect" "^4.0.0" + +"deep-extend@^0.6.0": + "integrity" "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "resolved" "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + "version" "0.6.0" + +"deep-is@^0.1.3", "deep-is@~0.1.3": + "integrity" "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" + "version" "0.1.3" -defer-to-connect@^1.0.1: - version "1.1.3" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" - integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== +"deep-object-diff@^1.1.0": + "integrity" "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==" + "resolved" "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz" + "version" "1.1.0" -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" +"deepmerge@^4.2.2": + "integrity" "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + "resolved" "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz" + "version" "4.2.2" -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" +"defaults@^1.0.3": + "integrity" "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=" + "resolved" "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "clone" "^1.0.2" + +"defer-to-connect@^1.0.1": + "integrity" "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "resolved" "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz" + "version" "1.1.3" + +"define-properties@^1.1.3": + "integrity" "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==" + "resolved" "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "object-keys" "^1.0.12" -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -denque@^1.5.0: - version "1.5.1" - resolved "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz" - integrity sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -dicer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz" - integrity sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA== - dependencies: - streamsearch "0.1.2" - -diff-sequences@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz" - integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -dot-prop@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" - integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== - dependencies: - is-obj "^2.0.0" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -dynamic-dedupe@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" - integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= - dependencies: - xtend "^4.0.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -electron-to-chromium@^1.3.811: - version "1.3.816" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.816.tgz" - integrity sha512-/AvJPIJldO0NkwkfpUD7u1e4YEGRFBQpFuvl9oGCcVgWOObsZB1loxVGeVUJB9kmvfsBUUChPYdgRzx6+AKNyg== - -emittery@^0.7.1: - version "0.7.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz" - integrity sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -encoding-negotiator@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/encoding-negotiator/-/encoding-negotiator-2.0.1.tgz" - integrity sha512-GSK7qphNR4iPcejfAlZxKDoz3xMhnspwImK+Af5WhePS9jUpK/Oh7rUdyENWu+9rgDflOCTmAojBsgsvM8neAQ== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1, end-of-stream@^1.4.4: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -engine.io-client@~3.5.0: - version "3.5.2" - resolved "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz" - integrity sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA== - dependencies: - component-emitter "~1.3.0" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.6" - parseuri "0.0.6" - ws "~7.4.2" - xmlhttprequest-ssl "~1.6.2" - yeast "0.1.2" - -engine.io-parser@~2.2.0: - version "2.2.1" - resolved "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz" - integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.4" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz" - integrity sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA== - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - debug "~4.1.0" - engine.io-parser "~2.2.0" - ws "~7.4.2" - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.18.5: - version "1.18.5" - resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz" - integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - get-intrinsic "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.2" - internal-slot "^1.0.3" - is-callable "^1.2.3" - is-negative-zero "^2.0.1" - is-regex "^1.1.3" - is-string "^1.0.6" - object-inspect "^1.11.0" - object-keys "^1.1.1" - object.assign "^4.1.2" - string.prototype.trimend "^1.0.4" - string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-goat@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" - integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" +"define-property@^0.2.5": + "integrity" "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz" + "version" "0.2.5" + dependencies: + "is-descriptor" "^0.1.0" + +"define-property@^1.0.0": + "integrity" "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-descriptor" "^1.0.0" + +"define-property@^2.0.2": + "integrity" "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==" + "resolved" "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "is-descriptor" "^1.0.2" + "isobject" "^3.0.1" + +"delayed-stream@~1.0.0": + "integrity" "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "resolved" "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + "version" "1.0.0" + +"delegates@^1.0.0": + "integrity" "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "resolved" "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz" + "version" "1.0.0" + +"denque@^1.5.0": + "integrity" "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" + "resolved" "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz" + "version" "1.5.1" + +"depd@~1.1.2": + "integrity" "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "resolved" "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" + "version" "1.1.2" + +"destroy@~1.0.4": + "integrity" "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "resolved" "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" + "version" "1.0.4" + +"detect-libc@^1.0.3": + "integrity" "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" + "resolved" "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz" + "version" "1.0.3" + +"detect-newline@^3.0.0": + "integrity" "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==" + "resolved" "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz" + "version" "3.1.0" + +"dicer@0.3.0": + "integrity" "sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==" + "resolved" "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "streamsearch" "0.1.2" + +"diff-sequences@^26.6.2": + "integrity" "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz" + "version" "26.6.2" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + +"dir-glob@^3.0.1": + "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" + "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "path-type" "^4.0.0" + +"doctrine@^3.0.0": + "integrity" "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==" + "resolved" "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "esutils" "^2.0.2" + +"domexception@^2.0.1": + "integrity" "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==" + "resolved" "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "webidl-conversions" "^5.0.0" + +"dot-prop@^5.2.0": + "integrity" "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==" + "resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz" + "version" "5.3.0" + dependencies: + "is-obj" "^2.0.0" + +"duplexer@~0.1.1": + "integrity" "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "resolved" "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" + "version" "0.1.2" + +"duplexer3@^0.1.4": + "integrity" "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "resolved" "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz" + "version" "0.1.4" + +"dynamic-dedupe@^0.3.0": + "integrity" "sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=" + "resolved" "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "xtend" "^4.0.0" + +"ecdsa-sig-formatter@1.0.11": + "integrity" "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==" + "resolved" "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "safe-buffer" "^5.0.1" + +"ee-first@1.1.1": + "integrity" "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "resolved" "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + "version" "1.1.1" + +"electron-to-chromium@^1.3.811": + "integrity" "sha512-/AvJPIJldO0NkwkfpUD7u1e4YEGRFBQpFuvl9oGCcVgWOObsZB1loxVGeVUJB9kmvfsBUUChPYdgRzx6+AKNyg==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.816.tgz" + "version" "1.3.816" + +"emittery@^0.7.1": + "integrity" "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz" + "version" "0.7.2" + +"emoji-regex@^7.0.1": + "integrity" "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz" + "version" "7.0.3" + +"emoji-regex@^8.0.0": + "integrity" "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "resolved" "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" + "version" "8.0.0" + +"encodeurl@~1.0.2": + "integrity" "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "resolved" "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + "version" "1.0.2" + +"encoding-negotiator@^2.0.1": + "integrity" "sha512-GSK7qphNR4iPcejfAlZxKDoz3xMhnspwImK+Af5WhePS9jUpK/Oh7rUdyENWu+9rgDflOCTmAojBsgsvM8neAQ==" + "resolved" "https://registry.npmjs.org/encoding-negotiator/-/encoding-negotiator-2.0.1.tgz" + "version" "2.0.1" + +"end-of-stream@^1.1.0", "end-of-stream@^1.4.1", "end-of-stream@^1.4.4": + "integrity" "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==" + "resolved" "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + "version" "1.4.4" + dependencies: + "once" "^1.4.0" + +"engine.io-client@~3.5.0": + "integrity" "sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA==" + "resolved" "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.5.2.tgz" + "version" "3.5.2" + dependencies: + "component-emitter" "~1.3.0" + "component-inherit" "0.0.3" + "debug" "~3.1.0" + "engine.io-parser" "~2.2.0" + "has-cors" "1.1.0" + "indexof" "0.0.1" + "parseqs" "0.0.6" + "parseuri" "0.0.6" + "ws" "~7.4.2" + "xmlhttprequest-ssl" "~1.6.2" + "yeast" "0.1.2" + +"engine.io-parser@~2.2.0": + "integrity" "sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg==" + "resolved" "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.1.tgz" + "version" "2.2.1" + dependencies: + "after" "0.8.2" + "arraybuffer.slice" "~0.0.7" + "base64-arraybuffer" "0.1.4" + "blob" "0.0.5" + "has-binary2" "~1.0.2" + +"engine.io@~3.5.0": + "integrity" "sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA==" + "resolved" "https://registry.npmjs.org/engine.io/-/engine.io-3.5.0.tgz" + "version" "3.5.0" + dependencies: + "accepts" "~1.3.4" + "base64id" "2.0.0" + "cookie" "~0.4.1" + "debug" "~4.1.0" + "engine.io-parser" "~2.2.0" + "ws" "~7.4.2" + +"enquirer@^2.3.5": + "integrity" "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==" + "resolved" "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz" + "version" "2.3.6" + dependencies: + "ansi-colors" "^4.1.1" + +"error-ex@^1.3.1": + "integrity" "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==" + "resolved" "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "is-arrayish" "^0.2.1" + +"es-abstract@^1.18.5": + "integrity" "sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA==" + "resolved" "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.5.tgz" + "version" "1.18.5" + dependencies: + "call-bind" "^1.0.2" + "es-to-primitive" "^1.2.1" + "function-bind" "^1.1.1" + "get-intrinsic" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.2" + "internal-slot" "^1.0.3" + "is-callable" "^1.2.3" + "is-negative-zero" "^2.0.1" + "is-regex" "^1.1.3" + "is-string" "^1.0.6" + "object-inspect" "^1.11.0" + "object-keys" "^1.1.1" + "object.assign" "^4.1.2" + "string.prototype.trimend" "^1.0.4" + "string.prototype.trimstart" "^1.0.4" + "unbox-primitive" "^1.0.1" + +"es-to-primitive@^1.2.1": + "integrity" "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==" + "resolved" "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz" + "version" "1.2.1" + dependencies: + "is-callable" "^1.1.4" + "is-date-object" "^1.0.1" + "is-symbol" "^1.0.2" + +"es6-error@^4.1.1": + "integrity" "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==" + "resolved" "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz" + "version" "4.1.1" + +"escalade@^3.1.1": + "integrity" "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "resolved" "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" + "version" "3.1.1" + +"escape-goat@^2.0.0": + "integrity" "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "resolved" "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz" + "version" "2.1.1" + +"escape-html@~1.0.3": + "integrity" "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "resolved" "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + "version" "1.0.3" + +"escape-string-regexp@^1.0.5": + "integrity" "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz" + "version" "1.0.5" + +"escape-string-regexp@^2.0.0": + "integrity" "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" + "version" "2.0.0" + +"escape-string-regexp@^4.0.0": + "integrity" "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + "resolved" "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + "version" "4.0.0" + +"escodegen@^2.0.0": + "integrity" "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "esprima" "^4.0.1" + "estraverse" "^5.2.0" + "esutils" "^2.0.2" + "optionator" "^0.8.1" optionalDependencies: - source-map "~0.6.1" + "source-map" "~0.6.1" -eslint-config-prettier@^6.15.0: - version "6.15.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz" - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== +"eslint-config-prettier@^6.15.0": + "integrity" "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==" + "resolved" "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz" + "version" "6.15.0" dependencies: - get-stdin "^6.0.0" + "get-stdin" "^6.0.0" -eslint-plugin-prettier@^3.1.4: - version "3.4.1" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz" - integrity sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g== +"eslint-plugin-prettier@^3.1.4": + "integrity" "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==" + "resolved" "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz" + "version" "3.4.1" dependencies: - prettier-linter-helpers "^1.0.0" + "prettier-linter-helpers" "^1.0.0" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +"eslint-scope@^5.1.1": + "integrity" "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==" + "resolved" "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + "version" "5.1.1" dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" + "esrecurse" "^4.3.0" + "estraverse" "^4.1.1" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +"eslint-utils@^2.1.0": + "integrity" "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz" + "version" "2.1.0" dependencies: - eslint-visitor-keys "^1.1.0" + "eslint-visitor-keys" "^1.1.0" -eslint-utils@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" - integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== +"eslint-utils@^3.0.0": + "integrity" "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==" + "resolved" "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz" + "version" "3.0.0" dependencies: - eslint-visitor-keys "^2.0.0" + "eslint-visitor-keys" "^2.0.0" + +"eslint-visitor-keys@^1.1.0": + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + "version" "1.3.0" -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== +"eslint-visitor-keys@^1.3.0": + "integrity" "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz" + "version" "1.3.0" -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== +"eslint-visitor-keys@^2.0.0": + "integrity" "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" + "resolved" "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz" + "version" "2.1.0" -eslint@^7.10.0: - version "7.32.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +"eslint@*", "eslint@^5.0.0 || ^6.0.0 || ^7.0.0", "eslint@^7.10.0", "eslint@>=3.14.1", "eslint@>=5", "eslint@>=5.0.0": + "integrity" "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==" + "resolved" "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz" + "version" "7.32.0" dependencies: "@babel/code-frame" "7.12.11" "@eslint/eslintrc" "^0.4.3" "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz" - integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -exec-sh@^0.3.2: - version "0.3.6" - resolved "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" - integrity sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w== - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -expect@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz" - integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA== + "ajv" "^6.10.0" + "chalk" "^4.0.0" + "cross-spawn" "^7.0.2" + "debug" "^4.0.1" + "doctrine" "^3.0.0" + "enquirer" "^2.3.5" + "escape-string-regexp" "^4.0.0" + "eslint-scope" "^5.1.1" + "eslint-utils" "^2.1.0" + "eslint-visitor-keys" "^2.0.0" + "espree" "^7.3.1" + "esquery" "^1.4.0" + "esutils" "^2.0.2" + "fast-deep-equal" "^3.1.3" + "file-entry-cache" "^6.0.1" + "functional-red-black-tree" "^1.0.1" + "glob-parent" "^5.1.2" + "globals" "^13.6.0" + "ignore" "^4.0.6" + "import-fresh" "^3.0.0" + "imurmurhash" "^0.1.4" + "is-glob" "^4.0.0" + "js-yaml" "^3.13.1" + "json-stable-stringify-without-jsonify" "^1.0.1" + "levn" "^0.4.1" + "lodash.merge" "^4.6.2" + "minimatch" "^3.0.4" + "natural-compare" "^1.4.0" + "optionator" "^0.9.1" + "progress" "^2.0.0" + "regexpp" "^3.1.0" + "semver" "^7.2.1" + "strip-ansi" "^6.0.0" + "strip-json-comments" "^3.1.0" + "table" "^6.0.9" + "text-table" "^0.2.0" + "v8-compile-cache" "^2.0.3" + +"espree@^7.3.0", "espree@^7.3.1": + "integrity" "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==" + "resolved" "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz" + "version" "7.3.1" + dependencies: + "acorn" "^7.4.0" + "acorn-jsx" "^5.3.1" + "eslint-visitor-keys" "^1.3.0" + +"esprima@^4.0.0", "esprima@^4.0.1": + "integrity" "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "resolved" "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" + "version" "4.0.1" + +"esquery@^1.4.0": + "integrity" "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==" + "resolved" "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "estraverse" "^5.1.0" + +"esrecurse@^4.3.0": + "integrity" "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==" + "resolved" "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + "version" "4.3.0" + dependencies: + "estraverse" "^5.2.0" + +"estraverse@^4.1.1": + "integrity" "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + "version" "4.3.0" + +"estraverse@^5.1.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"estraverse@^5.2.0": + "integrity" "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + "resolved" "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz" + "version" "5.2.0" + +"esutils@^2.0.2": + "integrity" "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "resolved" "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + "version" "2.0.3" + +"etag@~1.8.1": + "integrity" "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "resolved" "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + "version" "1.8.1" + +"event-stream@=3.3.4": + "integrity" "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=" + "resolved" "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz" + "version" "3.3.4" + dependencies: + "duplexer" "~0.1.1" + "from" "~0" + "map-stream" "~0.1.0" + "pause-stream" "0.0.11" + "split" "0.3" + "stream-combiner" "~0.0.4" + "through" "~2.3.1" + +"exec-sh@^0.3.2": + "integrity" "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==" + "resolved" "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz" + "version" "0.3.6" + +"execa@^1.0.0": + "integrity" "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "cross-spawn" "^6.0.0" + "get-stream" "^4.0.0" + "is-stream" "^1.1.0" + "npm-run-path" "^2.0.0" + "p-finally" "^1.0.0" + "signal-exit" "^3.0.0" + "strip-eof" "^1.0.0" + +"execa@^4.0.0": + "integrity" "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==" + "resolved" "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "cross-spawn" "^7.0.0" + "get-stream" "^5.0.0" + "human-signals" "^1.1.1" + "is-stream" "^2.0.0" + "merge-stream" "^2.0.0" + "npm-run-path" "^4.0.0" + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + "strip-final-newline" "^2.0.0" + +"exit@^0.1.2": + "integrity" "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" + "resolved" "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz" + "version" "0.1.2" + +"expand-brackets@^2.1.4": + "integrity" "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=" + "resolved" "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "debug" "^2.3.3" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "posix-character-classes" "^0.1.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"expand-template@^2.0.3": + "integrity" "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "resolved" "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz" + "version" "2.0.3" + +"expect@^26.6.2": + "integrity" "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==" + "resolved" "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" - ansi-styles "^4.0.0" - jest-get-type "^26.3.0" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-regex-util "^26.0.0" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fast-decode-uri-component@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz" - integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.1.1: - version "3.2.7" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" - integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + "ansi-styles" "^4.0.0" + "jest-get-type" "^26.3.0" + "jest-matcher-utils" "^26.6.2" + "jest-message-util" "^26.6.2" + "jest-regex-util" "^26.0.0" + +"extend-shallow@^2.0.1": + "integrity" "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "is-extendable" "^0.1.0" + +"extend-shallow@^3.0.0", "extend-shallow@^3.0.2": + "integrity" "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=" + "resolved" "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "assign-symbols" "^1.0.0" + "is-extendable" "^1.0.1" + +"extend@^3.0.0": + "integrity" "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "resolved" "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" + "version" "3.0.2" + +"extglob@^2.0.4": + "integrity" "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==" + "resolved" "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "array-unique" "^0.3.2" + "define-property" "^1.0.0" + "expand-brackets" "^2.1.4" + "extend-shallow" "^2.0.1" + "fragment-cache" "^0.2.1" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"fast-decode-uri-component@^1.0.1": + "integrity" "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + "resolved" "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz" + "version" "1.0.1" + +"fast-deep-equal@^3.1.1", "fast-deep-equal@^3.1.3": + "integrity" "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "resolved" "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + "version" "3.1.3" + +"fast-diff@^1.1.2": + "integrity" "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" + "resolved" "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" + "version" "1.2.0" + +"fast-glob@^3.1.1": + "integrity" "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==" + "resolved" "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz" + "version" "3.2.7" dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-json-stringify@^2.5.2: - version "2.7.8" - resolved "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.8.tgz" - integrity sha512-HRSGwEWe0/5EH7GEaWg1by4dInnBb1WFf4umMPr+lL5xb0VP0VbpNGklp4L0/BseD+BmtIZpjqJjnLFwaQ21dg== - dependencies: - ajv "^6.11.0" - deepmerge "^4.2.2" - rfdc "^1.2.0" - string-similarity "^4.0.1" - -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fast-redact@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz" - integrity sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw== - -fast-safe-stringify@^2.0.7, fast-safe-stringify@^2.0.8: - version "2.0.8" - resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz" - integrity sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag== - -fast-xml-parser@^3.17.5: - version "3.19.0" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" - integrity sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg== - -fastfall@^1.5.0: - version "1.5.1" - resolved "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz" - integrity sha1-P+4DMxpJ0dObPN96XpzWb0dee5Q= - dependencies: - reusify "^1.0.0" - -fastify-cors@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/fastify-cors/-/fastify-cors-4.1.0.tgz" - integrity sha512-Vr4AgypDkRwG16cs1ORnYItZx6FMN+gCpHvP3/nzNZL1HFzf7U/NaSgmC784VqtK8yiqSXZEoTGCsmzeSp8JVw== - dependencies: - fastify-plugin "^2.0.0" - vary "^1.1.2" - -fastify-error@^0.3.0: - version "0.3.1" - resolved "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.1.tgz" - integrity sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ== - -fastify-formbody@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/fastify-formbody/-/fastify-formbody-5.1.0.tgz" - integrity sha512-dLFQ8gMQeLuV45J72svDbrp6CZ3hxsaiK2dd3vzoiCs9wEmCSbbJV+/afQl1cfvf19+NfCIzYVQIg1r4yO4Epw== - dependencies: - fastify-plugin "^3.0.0" - -fastify-jwt@^2.2.0: - version "2.5.0" - resolved "https://registry.npmjs.org/fastify-jwt/-/fastify-jwt-2.5.0.tgz" - integrity sha512-QXOSfo65OxSk30TTecLh8J0LEmuQJwRPqXMDvPA9HfLdsX/xPdq/QSvQFvR5Aj1kwrFFjsyb1SNAOQmbkmpj4w== + "glob-parent" "^5.1.2" + "merge2" "^1.3.0" + "micromatch" "^4.0.4" + +"fast-json-stable-stringify@^2.0.0", "fast-json-stable-stringify@2.x": + "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + "version" "2.1.0" + +"fast-json-stringify@^2.5.2": + "integrity" "sha512-HRSGwEWe0/5EH7GEaWg1by4dInnBb1WFf4umMPr+lL5xb0VP0VbpNGklp4L0/BseD+BmtIZpjqJjnLFwaQ21dg==" + "resolved" "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.8.tgz" + "version" "2.7.8" + dependencies: + "ajv" "^6.11.0" + "deepmerge" "^4.2.2" + "rfdc" "^1.2.0" + "string-similarity" "^4.0.1" + +"fast-levenshtein@^2.0.6", "fast-levenshtein@~2.0.6": + "integrity" "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + "version" "2.0.6" + +"fast-redact@^3.0.0": + "integrity" "sha512-kYpn4Y/valC9MdrISg47tZOpYBNoTXKgT9GYXFpHN/jYFs+lFkPoisY+LcBODdKVMY96ATzvzsWv+ES/4Kmufw==" + "resolved" "https://registry.npmjs.org/fast-redact/-/fast-redact-3.0.1.tgz" + "version" "3.0.1" + +"fast-safe-stringify@^2.0.7", "fast-safe-stringify@^2.0.8": + "integrity" "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==" + "resolved" "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz" + "version" "2.0.8" + +"fast-xml-parser@^3.17.5": + "integrity" "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" + "resolved" "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz" + "version" "3.19.0" + +"fastfall@^1.5.0": + "integrity" "sha1-P+4DMxpJ0dObPN96XpzWb0dee5Q=" + "resolved" "https://registry.npmjs.org/fastfall/-/fastfall-1.5.1.tgz" + "version" "1.5.1" + dependencies: + "reusify" "^1.0.0" + +"fastify-cors@^4.1.0": + "integrity" "sha512-Vr4AgypDkRwG16cs1ORnYItZx6FMN+gCpHvP3/nzNZL1HFzf7U/NaSgmC784VqtK8yiqSXZEoTGCsmzeSp8JVw==" + "resolved" "https://registry.npmjs.org/fastify-cors/-/fastify-cors-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "fastify-plugin" "^2.0.0" + "vary" "^1.1.2" + +"fastify-error@^0.3.0": + "integrity" "sha512-oCfpcsDndgnDVgiI7bwFKAun2dO+4h84vBlkWsWnz/OUK9Reff5UFoFl241xTiLeHWX/vU9zkDVXqYUxjOwHcQ==" + "resolved" "https://registry.npmjs.org/fastify-error/-/fastify-error-0.3.1.tgz" + "version" "0.3.1" + +"fastify-formbody@^5.0.0": + "integrity" "sha512-dLFQ8gMQeLuV45J72svDbrp6CZ3hxsaiK2dd3vzoiCs9wEmCSbbJV+/afQl1cfvf19+NfCIzYVQIg1r4yO4Epw==" + "resolved" "https://registry.npmjs.org/fastify-formbody/-/fastify-formbody-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "fastify-plugin" "^3.0.0" + +"fastify-jwt@^2.2.0": + "integrity" "sha512-QXOSfo65OxSk30TTecLh8J0LEmuQJwRPqXMDvPA9HfLdsX/xPdq/QSvQFvR5Aj1kwrFFjsyb1SNAOQmbkmpj4w==" + "resolved" "https://registry.npmjs.org/fastify-jwt/-/fastify-jwt-2.5.0.tgz" + "version" "2.5.0" dependencies: "@types/jsonwebtoken" "^8.5.0" - fastify-plugin "^3.0.0" - http-errors "^1.8.0" - jsonwebtoken "^8.5.1" - steed "^1.1.3" - -fastify-multipart@*, fastify-multipart@4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/fastify-multipart/-/fastify-multipart-4.0.3.tgz" - integrity sha512-RyouqARMlSgTudcPCDmxVN07YEDWojT5iQ+AkjX7DcQ+Y65hHzrOqrNveu5gs+lEIg5afGaH5ESHCNCOZYlveQ== - dependencies: - busboy "^0.3.1" - deepmerge "^4.2.2" - end-of-stream "^1.4.4" - fastify-error "^0.3.0" - fastify-plugin "^3.0.0" - hexoid "^1.0.0" - stream-wormhole "^1.1.0" - -fastify-plugin@^2.0.0, fastify-plugin@^2.3.4: - version "2.3.4" - resolved "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-2.3.4.tgz" - integrity sha512-I+Oaj6p9oiRozbam30sh39BiuiqBda7yK2nmSPVwDCfIBlKnT8YB3MY+pRQc2Fcd07bf6KPGklHJaQ2Qu81TYQ== - dependencies: - semver "^7.3.2" - -fastify-plugin@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz" - integrity sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w== - -fastify-sensible@^3.0.1: - version "3.1.1" - resolved "https://registry.npmjs.org/fastify-sensible/-/fastify-sensible-3.1.1.tgz" - integrity sha512-qWGsLEcc8VmLpbbWY7VJwXwWISsGBH9H4J2QeIc+l5Ov3a1lYs7ZaSnr0X8dkffdvzr9iy8wQyIuthpKTy5sZA== - dependencies: - fast-deep-equal "^3.1.1" - fastify-plugin "^3.0.0" - forwarded "^0.1.2" - http-errors "^1.7.3" - type-is "^1.6.18" - vary "^1.1.2" - -fastify-static@^4.0.0: - version "4.2.3" - resolved "https://registry.npmjs.org/fastify-static/-/fastify-static-4.2.3.tgz" - integrity sha512-uFRgwYXZwLKyaMrByf10efO+HTjAPqyQOlUthoGljQKGCfbwUeTeE7EHadsDWeN7NMeqBE617RamVh9uqatuUw== - dependencies: - content-disposition "^0.5.3" - encoding-negotiator "^2.0.1" - fastify-plugin "^3.0.0" - glob "^7.1.4" - readable-stream "^3.4.0" - send "^0.17.1" - -fastify-swagger@^4.12.6: - version "4.12.6" - resolved "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.12.6.tgz" - integrity sha512-XuHyi+aPQETMsB5oOw5m8j8hror/08MSa/7Gpxon3Mu2ZtlulG8q8/XmBGB1UM0WDRifGw456IgO7kVQVPLU8A== - dependencies: - fastify-plugin "^3.0.0" - fastify-static "^4.0.0" - js-yaml "^4.0.0" - json-schema-resolver "^1.3.0" - openapi-types "^9.1.0" - -fastify-warning@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz" - integrity sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw== - -fastify-websocket@^2.0.11: - version "2.1.0" - resolved "https://registry.npmjs.org/fastify-websocket/-/fastify-websocket-2.1.0.tgz" - integrity sha512-u5zClCarOHctvzKq76Gc0rDwtWfU7pw+JGYETfSu77YzZ/uzXLDX4jB70vLliUc3nqK0zXFRDK2/KnEnfdF9Kw== - dependencies: - fastify-plugin "^3.0.0" - find-my-way "^3.0.5" - ws "^7.4.2" - -fastify@3.22.1: - version "3.22.1" - resolved "https://registry.npmjs.org/fastify/-/fastify-3.22.1.tgz" - integrity sha512-TeA4+TzI7VuJrjTNqoxtSXwPEYfCwpT8j9Z3j9WrL8nrt+1bE9G0rP9hLJyvbg4it56p68YsHVhKOee69xyfmA== + "fastify-plugin" "^3.0.0" + "http-errors" "^1.8.0" + "jsonwebtoken" "^8.5.1" + "steed" "^1.1.3" + +"fastify-multipart@*", "fastify-multipart@4.0.3": + "integrity" "sha512-RyouqARMlSgTudcPCDmxVN07YEDWojT5iQ+AkjX7DcQ+Y65hHzrOqrNveu5gs+lEIg5afGaH5ESHCNCOZYlveQ==" + "resolved" "https://registry.npmjs.org/fastify-multipart/-/fastify-multipart-4.0.3.tgz" + "version" "4.0.3" + dependencies: + "busboy" "^0.3.1" + "deepmerge" "^4.2.2" + "end-of-stream" "^1.4.4" + "fastify-error" "^0.3.0" + "fastify-plugin" "^3.0.0" + "hexoid" "^1.0.0" + "stream-wormhole" "^1.1.0" + +"fastify-plugin@^2.0.0", "fastify-plugin@^2.3.4": + "integrity" "sha512-I+Oaj6p9oiRozbam30sh39BiuiqBda7yK2nmSPVwDCfIBlKnT8YB3MY+pRQc2Fcd07bf6KPGklHJaQ2Qu81TYQ==" + "resolved" "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-2.3.4.tgz" + "version" "2.3.4" + dependencies: + "semver" "^7.3.2" + +"fastify-plugin@^3.0.0": + "integrity" "sha512-ZdCvKEEd92DNLps5n0v231Bha8bkz1DjnPP/aEz37rz/q42Z5JVLmgnqR4DYuNn3NXAO3IDCPyRvgvxtJ4Ym4w==" + "resolved" "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-3.0.0.tgz" + "version" "3.0.0" + +"fastify-sensible@^3.0.1": + "integrity" "sha512-qWGsLEcc8VmLpbbWY7VJwXwWISsGBH9H4J2QeIc+l5Ov3a1lYs7ZaSnr0X8dkffdvzr9iy8wQyIuthpKTy5sZA==" + "resolved" "https://registry.npmjs.org/fastify-sensible/-/fastify-sensible-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "fast-deep-equal" "^3.1.1" + "fastify-plugin" "^3.0.0" + "forwarded" "^0.1.2" + "http-errors" "^1.7.3" + "type-is" "^1.6.18" + "vary" "^1.1.2" + +"fastify-static@^4.0.0": + "integrity" "sha512-uFRgwYXZwLKyaMrByf10efO+HTjAPqyQOlUthoGljQKGCfbwUeTeE7EHadsDWeN7NMeqBE617RamVh9uqatuUw==" + "resolved" "https://registry.npmjs.org/fastify-static/-/fastify-static-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "content-disposition" "^0.5.3" + "encoding-negotiator" "^2.0.1" + "fastify-plugin" "^3.0.0" + "glob" "^7.1.4" + "readable-stream" "^3.4.0" + "send" "^0.17.1" + +"fastify-swagger@^4.12.6": + "integrity" "sha512-XuHyi+aPQETMsB5oOw5m8j8hror/08MSa/7Gpxon3Mu2ZtlulG8q8/XmBGB1UM0WDRifGw456IgO7kVQVPLU8A==" + "resolved" "https://registry.npmjs.org/fastify-swagger/-/fastify-swagger-4.12.6.tgz" + "version" "4.12.6" + dependencies: + "fastify-plugin" "^3.0.0" + "fastify-static" "^4.0.0" + "js-yaml" "^4.0.0" + "json-schema-resolver" "^1.3.0" + "openapi-types" "^9.1.0" + +"fastify-warning@^0.2.0": + "integrity" "sha512-s1EQguBw/9qtc1p/WTY4eq9WMRIACkj+HTcOIK1in4MV5aFaQC9ZCIt0dJ7pr5bIf4lPpHvAtP2ywpTNgs7hqw==" + "resolved" "https://registry.npmjs.org/fastify-warning/-/fastify-warning-0.2.0.tgz" + "version" "0.2.0" + +"fastify-websocket@^2.0.11": + "integrity" "sha512-u5zClCarOHctvzKq76Gc0rDwtWfU7pw+JGYETfSu77YzZ/uzXLDX4jB70vLliUc3nqK0zXFRDK2/KnEnfdF9Kw==" + "resolved" "https://registry.npmjs.org/fastify-websocket/-/fastify-websocket-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "fastify-plugin" "^3.0.0" + "find-my-way" "^3.0.5" + "ws" "^7.4.2" + +"fastify@3.22.1": + "integrity" "sha512-TeA4+TzI7VuJrjTNqoxtSXwPEYfCwpT8j9Z3j9WrL8nrt+1bE9G0rP9hLJyvbg4it56p68YsHVhKOee69xyfmA==" + "resolved" "https://registry.npmjs.org/fastify/-/fastify-3.22.1.tgz" + "version" "3.22.1" dependencies: "@fastify/ajv-compiler" "^1.0.0" - abstract-logging "^2.0.0" - avvio "^7.1.2" - fast-json-stringify "^2.5.2" - fastify-error "^0.3.0" - fastify-warning "^0.2.0" - find-my-way "^4.1.0" - flatstr "^1.0.12" - light-my-request "^4.2.0" - pino "^6.13.0" - proxy-addr "^2.0.7" - rfdc "^1.1.4" - secure-json-parse "^2.0.0" - semver "^7.3.2" - tiny-lru "^7.0.0" - -fastparallel@^2.2.0: - version "2.4.0" - resolved "https://registry.npmjs.org/fastparallel/-/fastparallel-2.4.0.tgz" - integrity sha512-sacwQ7wwKlQXsa7TN24UvMBLZNLmVcPhmxccC9riFqb3N+fSczJL8eWdnZodZ/KijGVgNBBfvF/NeXER08uXnQ== - dependencies: - reusify "^1.0.4" - xtend "^4.0.2" - -fastq@^1.3.0, fastq@^1.6.0, fastq@^1.6.1: - version "1.12.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz" - integrity sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg== - dependencies: - reusify "^1.0.4" - -fastseries@^1.7.0: - version "1.7.2" - resolved "https://registry.npmjs.org/fastseries/-/fastseries-1.7.2.tgz" - integrity sha1-0izhO5Qz3/M4jZHb1ri9qbIaD0s= - dependencies: - reusify "^1.0.0" - xtend "^4.0.0" - -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-my-way@^3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/find-my-way/-/find-my-way-3.0.5.tgz" - integrity sha512-FweGg0cv1sBX8z7WhvBX5B5AECW4Zdh/NiB38Oa0qwSNIyPgRBCl/YjxuZn/rz38E/MMBHeVKJ22i7W3c626Gg== - dependencies: - fast-decode-uri-component "^1.0.1" - safe-regex2 "^2.0.0" - semver-store "^0.3.0" - -find-my-way@^4.1.0: - version "4.3.3" - resolved "https://registry.npmjs.org/find-my-way/-/find-my-way-4.3.3.tgz" - integrity sha512-5E4bRdaATB1MewjOCBjx4xvD205a4t2ripCnXB+YFhYEJ0NABtrcC7XLXLq0TPoFe/WYGUFqys3Qk3HCOGeNcw== - dependencies: - fast-decode-uri-component "^1.0.1" - fast-deep-equal "^3.1.3" - safe-regex2 "^2.0.0" - semver-store "^0.3.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatstr@^1.0.12: - version "1.0.12" - resolved "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz" - integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== - -flatted@^3.1.0: - version "3.2.2" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz" - integrity sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA== - -follow-redirects@^1.14.0: - version "1.14.2" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz" - integrity sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" - integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= - -form-auto-content@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/form-auto-content/-/form-auto-content-2.2.0.tgz" - integrity sha512-OT4qi6hNGc+fJJGieTjy+WmV1nDhg4ULATNR0Fx92YUIy9gPw8odX3z8c+IiivWITzTg8j4TcKKbsAku8l2dwQ== - dependencies: - form-data "^3.0.0" - -form-data@^2.3.1: - version "2.5.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -formidable@^1.2.0: - version "1.2.2" - resolved "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz" - integrity sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q== - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -forwarded@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -from@~0: - version "0.1.7" - resolved "https://registry.npmjs.org/from/-/from-0.1.7.tgz" - integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^2.1.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -generate-password@^1.6.0: - version "1.6.1" - resolved "https://registry.npmjs.org/generate-password/-/generate-password-1.6.1.tgz" - integrity sha512-JvtWSiN4KVmF6kBFi89Uz9LLN7l/EuGZYiKrIxddFlKcjSgc3D3va0Z5faooNwN85O0VBlt/ZtTdqhbQKhAOyw== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" - integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^4.0.0, get-stream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^2.0.1: - version "2.1.0" - resolved "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz" - integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== - dependencies: - ini "1.3.7" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.11.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz" - integrity sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g== - dependencies: - type-fest "^0.20.2" - -globby@^11.0.3: - version "11.0.4" - resolved "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" - integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.1.1" - ignore "^5.1.4" - merge2 "^1.3.0" - slash "^3.0.0" - -gm@^1.23.1: - version "1.23.1" - resolved "https://registry.npmjs.org/gm/-/gm-1.23.1.tgz" - integrity sha1-Lt7rlYCE0PjqeYjl2ZWxx9/BR3c= - dependencies: - array-parallel "~0.1.3" - array-series "~0.1.5" - cross-spawn "^4.0.0" - debug "^3.1.0" - -got@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" - integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + "abstract-logging" "^2.0.0" + "avvio" "^7.1.2" + "fast-json-stringify" "^2.5.2" + "fastify-error" "^0.3.0" + "fastify-warning" "^0.2.0" + "find-my-way" "^4.1.0" + "flatstr" "^1.0.12" + "light-my-request" "^4.2.0" + "pino" "^6.13.0" + "proxy-addr" "^2.0.7" + "rfdc" "^1.1.4" + "secure-json-parse" "^2.0.0" + "semver" "^7.3.2" + "tiny-lru" "^7.0.0" + +"fastparallel@^2.2.0": + "integrity" "sha512-sacwQ7wwKlQXsa7TN24UvMBLZNLmVcPhmxccC9riFqb3N+fSczJL8eWdnZodZ/KijGVgNBBfvF/NeXER08uXnQ==" + "resolved" "https://registry.npmjs.org/fastparallel/-/fastparallel-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "reusify" "^1.0.4" + "xtend" "^4.0.2" + +"fastq@^1.3.0", "fastq@^1.6.0", "fastq@^1.6.1": + "integrity" "sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg==" + "resolved" "https://registry.npmjs.org/fastq/-/fastq-1.12.0.tgz" + "version" "1.12.0" + dependencies: + "reusify" "^1.0.4" + +"fastseries@^1.7.0": + "integrity" "sha1-0izhO5Qz3/M4jZHb1ri9qbIaD0s=" + "resolved" "https://registry.npmjs.org/fastseries/-/fastseries-1.7.2.tgz" + "version" "1.7.2" + dependencies: + "reusify" "^1.0.0" + "xtend" "^4.0.0" + +"fb-watchman@^2.0.0": + "integrity" "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==" + "resolved" "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "bser" "2.1.1" + +"file-entry-cache@^6.0.1": + "integrity" "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==" + "resolved" "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "flat-cache" "^3.0.4" + +"fill-range@^4.0.0": + "integrity" "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "extend-shallow" "^2.0.1" + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + "to-regex-range" "^2.1.0" + +"fill-range@^7.0.1": + "integrity" "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==" + "resolved" "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "to-regex-range" "^5.0.1" + +"find-my-way@^3.0.5": + "integrity" "sha512-FweGg0cv1sBX8z7WhvBX5B5AECW4Zdh/NiB38Oa0qwSNIyPgRBCl/YjxuZn/rz38E/MMBHeVKJ22i7W3c626Gg==" + "resolved" "https://registry.npmjs.org/find-my-way/-/find-my-way-3.0.5.tgz" + "version" "3.0.5" + dependencies: + "fast-decode-uri-component" "^1.0.1" + "safe-regex2" "^2.0.0" + "semver-store" "^0.3.0" + +"find-my-way@^4.1.0": + "integrity" "sha512-5E4bRdaATB1MewjOCBjx4xvD205a4t2ripCnXB+YFhYEJ0NABtrcC7XLXLq0TPoFe/WYGUFqys3Qk3HCOGeNcw==" + "resolved" "https://registry.npmjs.org/find-my-way/-/find-my-way-4.3.3.tgz" + "version" "4.3.3" + dependencies: + "fast-decode-uri-component" "^1.0.1" + "fast-deep-equal" "^3.1.3" + "safe-regex2" "^2.0.0" + "semver-store" "^0.3.0" + +"find-up@^4.0.0", "find-up@^4.1.0": + "integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==" + "resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "locate-path" "^5.0.0" + "path-exists" "^4.0.0" + +"flat-cache@^3.0.4": + "integrity" "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==" + "resolved" "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "flatted" "^3.1.0" + "rimraf" "^3.0.2" + +"flatstr@^1.0.12": + "integrity" "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw==" + "resolved" "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz" + "version" "1.0.12" + +"flatted@^3.1.0": + "integrity" "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==" + "resolved" "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz" + "version" "3.2.2" + +"follow-redirects@^1.14.0": + "integrity" "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==" + "resolved" "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz" + "version" "1.14.2" + +"for-in@^1.0.2": + "integrity" "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "resolved" "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz" + "version" "1.0.2" + +"foreach@^2.0.5": + "integrity" "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + "resolved" "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz" + "version" "2.0.5" + +"form-auto-content@^2.2.0": + "integrity" "sha512-OT4qi6hNGc+fJJGieTjy+WmV1nDhg4ULATNR0Fx92YUIy9gPw8odX3z8c+IiivWITzTg8j4TcKKbsAku8l2dwQ==" + "resolved" "https://registry.npmjs.org/form-auto-content/-/form-auto-content-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "form-data" "^3.0.0" + +"form-data@^2.3.1": + "integrity" "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz" + "version" "2.5.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.6" + "mime-types" "^2.1.12" + +"form-data@^3.0.0": + "integrity" "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==" + "resolved" "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "asynckit" "^0.4.0" + "combined-stream" "^1.0.8" + "mime-types" "^2.1.12" + +"formidable@^1.2.0": + "integrity" "sha512-V8gLm+41I/8kguQ4/o1D3RIHRmhYFG4pnNyonvua+40rqcEmT4+V71yaZ3B457xbbgCsCfjSPi65u/W6vK1U5Q==" + "resolved" "https://registry.npmjs.org/formidable/-/formidable-1.2.2.tgz" + "version" "1.2.2" + +"forwarded@^0.1.2": + "integrity" "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz" + "version" "0.1.2" + +"forwarded@0.2.0": + "integrity" "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "resolved" "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + "version" "0.2.0" + +"fragment-cache@^0.2.1": + "integrity" "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=" + "resolved" "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz" + "version" "0.2.1" + dependencies: + "map-cache" "^0.2.2" + +"fresh@0.5.2": + "integrity" "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "resolved" "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + "version" "0.5.2" + +"from@~0": + "integrity" "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + "resolved" "https://registry.npmjs.org/from/-/from-0.1.7.tgz" + "version" "0.1.7" + +"fs-constants@^1.0.0": + "integrity" "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "resolved" "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz" + "version" "1.0.0" + +"fs-extra@^9.1.0": + "integrity" "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==" + "resolved" "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "at-least-node" "^1.0.0" + "graceful-fs" "^4.2.0" + "jsonfile" "^6.0.1" + "universalify" "^2.0.0" + +"fs-minipass@^2.0.0": + "integrity" "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==" + "resolved" "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "minipass" "^3.0.0" + +"fs.realpath@^1.0.0": + "integrity" "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved" "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + "version" "1.0.0" + +"function-bind@^1.1.1": + "integrity" "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "resolved" "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" + "version" "1.1.1" + +"functional-red-black-tree@^1.0.1": + "integrity" "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + "resolved" "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz" + "version" "1.0.1" + +"gauge@~2.7.3": + "integrity" "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=" + "resolved" "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz" + "version" "2.7.4" + dependencies: + "aproba" "^1.0.3" + "console-control-strings" "^1.0.0" + "has-unicode" "^2.0.0" + "object-assign" "^4.1.0" + "signal-exit" "^3.0.0" + "string-width" "^1.0.1" + "strip-ansi" "^3.0.1" + "wide-align" "^1.1.0" + +"generate-password@^1.6.0": + "integrity" "sha512-JvtWSiN4KVmF6kBFi89Uz9LLN7l/EuGZYiKrIxddFlKcjSgc3D3va0Z5faooNwN85O0VBlt/ZtTdqhbQKhAOyw==" + "resolved" "https://registry.npmjs.org/generate-password/-/generate-password-1.6.1.tgz" + "version" "1.6.1" + +"gensync@^1.0.0-beta.2": + "integrity" "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "resolved" "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" + "version" "1.0.0-beta.2" + +"get-caller-file@^2.0.1", "get-caller-file@^2.0.5": + "integrity" "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "resolved" "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" + "version" "2.0.5" + +"get-func-name@^2.0.0": + "integrity" "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" + "resolved" "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz" + "version" "2.0.0" + +"get-intrinsic@^1.0.2", "get-intrinsic@^1.1.0", "get-intrinsic@^1.1.1": + "integrity" "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==" + "resolved" "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "function-bind" "^1.1.1" + "has" "^1.0.3" + "has-symbols" "^1.0.1" + +"get-package-type@^0.1.0": + "integrity" "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" + "resolved" "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz" + "version" "0.1.0" + +"get-stdin@^6.0.0": + "integrity" "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" + "resolved" "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz" + "version" "6.0.0" + +"get-stream@^4.0.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "pump" "^3.0.0" + +"get-stream@^4.1.0": + "integrity" "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "pump" "^3.0.0" + +"get-stream@^5.0.0", "get-stream@^5.1.0": + "integrity" "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==" + "resolved" "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "pump" "^3.0.0" + +"get-value@^2.0.3", "get-value@^2.0.6": + "integrity" "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "resolved" "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz" + "version" "2.0.6" + +"github-from-package@0.0.0": + "integrity" "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" + "resolved" "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz" + "version" "0.0.0" + +"glob-parent@^5.1.2", "glob-parent@~5.1.2": + "integrity" "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==" + "resolved" "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "is-glob" "^4.0.1" + +"glob@^7.1.1", "glob@^7.1.2", "glob@^7.1.3", "glob@^7.1.4": + "integrity" "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==" + "resolved" "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + "version" "7.1.7" + dependencies: + "fs.realpath" "^1.0.0" + "inflight" "^1.0.4" + "inherits" "2" + "minimatch" "^3.0.4" + "once" "^1.3.0" + "path-is-absolute" "^1.0.0" + +"global-dirs@^2.0.1": + "integrity" "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==" + "resolved" "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "ini" "1.3.7" + +"globals@^11.1.0": + "integrity" "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "resolved" "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + "version" "11.12.0" + +"globals@^13.6.0": + "integrity" "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz" + "version" "13.11.0" + dependencies: + "type-fest" "^0.20.2" + +"globals@^13.9.0": + "integrity" "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==" + "resolved" "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz" + "version" "13.11.0" + dependencies: + "type-fest" "^0.20.2" + +"globby@^11.0.3": + "integrity" "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==" + "resolved" "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz" + "version" "11.0.4" + dependencies: + "array-union" "^2.1.0" + "dir-glob" "^3.0.1" + "fast-glob" "^3.1.1" + "ignore" "^5.1.4" + "merge2" "^1.3.0" + "slash" "^3.0.0" + +"gm@^1.23.1": + "integrity" "sha1-Lt7rlYCE0PjqeYjl2ZWxx9/BR3c=" + "resolved" "https://registry.npmjs.org/gm/-/gm-1.23.1.tgz" + "version" "1.23.1" + dependencies: + "array-parallel" "~0.1.3" + "array-series" "~0.1.5" + "cross-spawn" "^4.0.0" + "debug" "^3.1.0" + +"got@^9.6.0": + "integrity" "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==" + "resolved" "https://registry.npmjs.org/got/-/got-9.6.0.tgz" + "version" "9.6.0" dependencies: "@sindresorhus/is" "^0.14.0" "@szmarczak/http-timer" "^1.1.2" - cacheable-request "^6.0.0" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^4.1.0" - lowercase-keys "^1.0.1" - mimic-response "^1.0.1" - p-cancelable "^1.0.0" - to-readable-stream "^1.0.0" - url-parse-lax "^3.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.8" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" - integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -has-bigints@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" - integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1, has-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has-yarn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" - integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hexoid@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" - integrity sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g== - -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -hpagent@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz" - integrity sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ== - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@^1.7.3, http-errors@^1.8.0: - version "1.8.0" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz" - integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + "cacheable-request" "^6.0.0" + "decompress-response" "^3.3.0" + "duplexer3" "^0.1.4" + "get-stream" "^4.1.0" + "lowercase-keys" "^1.0.1" + "mimic-response" "^1.0.1" + "p-cancelable" "^1.0.0" + "to-readable-stream" "^1.0.0" + "url-parse-lax" "^3.0.0" + +"graceful-fs@^4.1.2", "graceful-fs@^4.1.6", "graceful-fs@^4.2.0", "graceful-fs@^4.2.4": + "integrity" "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "resolved" "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz" + "version" "4.2.8" + +"growly@^1.3.0": + "integrity" "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=" + "resolved" "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" + "version" "1.3.0" + +"has-bigints@^1.0.1": + "integrity" "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "resolved" "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz" + "version" "1.0.1" + +"has-binary2@~1.0.2": + "integrity" "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==" + "resolved" "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "isarray" "2.0.1" + +"has-cors@1.1.0": + "integrity" "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=" + "resolved" "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz" + "version" "1.1.0" + +"has-flag@^3.0.0": + "integrity" "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + "version" "3.0.0" + +"has-flag@^4.0.0": + "integrity" "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "resolved" "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + "version" "4.0.0" + +"has-symbols@^1.0.1", "has-symbols@^1.0.2": + "integrity" "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "resolved" "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz" + "version" "1.0.2" + +"has-tostringtag@^1.0.0": + "integrity" "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==" + "resolved" "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-symbols" "^1.0.2" + +"has-unicode@^2.0.0": + "integrity" "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + "resolved" "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz" + "version" "2.0.1" + +"has-value@^0.3.1": + "integrity" "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz" + "version" "0.3.1" + dependencies: + "get-value" "^2.0.3" + "has-values" "^0.1.4" + "isobject" "^2.0.0" + +"has-value@^1.0.0": + "integrity" "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=" + "resolved" "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "get-value" "^2.0.6" + "has-values" "^1.0.0" + "isobject" "^3.0.0" + +"has-values@^0.1.4": + "integrity" "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz" + "version" "0.1.4" + +"has-values@^1.0.0": + "integrity" "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=" + "resolved" "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "is-number" "^3.0.0" + "kind-of" "^4.0.0" + +"has-yarn@^2.1.0": + "integrity" "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "resolved" "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz" + "version" "2.1.0" + +"has@^1.0.3": + "integrity" "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==" + "resolved" "https://registry.npmjs.org/has/-/has-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "function-bind" "^1.1.1" + +"hexoid@^1.0.0": + "integrity" "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" + "resolved" "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz" + "version" "1.0.0" + +"hosted-git-info@^2.1.4": + "integrity" "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + "resolved" "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz" + "version" "2.8.9" + +"hpagent@^0.1.1": + "integrity" "sha512-ePqFXHtSQWAFXYmj+JtOTHr84iNrII4/QRlAAPPE+zqnKy4xJo7Ie1Y4kC7AdB+LxLxSTTzBMASsEcy0q8YyvQ==" + "resolved" "https://registry.npmjs.org/hpagent/-/hpagent-0.1.2.tgz" + "version" "0.1.2" + +"html-encoding-sniffer@^2.0.1": + "integrity" "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==" + "resolved" "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "whatwg-encoding" "^1.0.5" + +"html-escaper@^2.0.0": + "integrity" "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "resolved" "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz" + "version" "2.0.2" + +"http-cache-semantics@^4.0.0": + "integrity" "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "resolved" "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" + "version" "4.1.0" + +"http-errors@^1.7.3", "http-errors@^1.8.0": + "integrity" "sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.8.0.tgz" + "version" "1.8.0" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.4" + "setprototypeof" "1.2.0" + "statuses" ">= 1.5.0 < 2" + "toidentifier" "1.0.0" + +"http-errors@~1.7.2": + "integrity" "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==" + "resolved" "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz" + "version" "1.7.3" + dependencies: + "depd" "~1.1.2" + "inherits" "2.0.4" + "setprototypeof" "1.1.1" + "statuses" ">= 1.5.0 < 2" + "toidentifier" "1.0.0" + +"http-proxy-agent@^4.0.1": + "integrity" "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz" + "version" "4.0.1" dependencies: "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" - integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.4: - version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-lazy@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" - integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= - -import-local@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz" - integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@1.3.7, ini@~1.3.0: - version "1.3.7" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz" - integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== - -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^1.1.5, is-buffer@~1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.4" - resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" - integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== - -is-ci@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" - integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== - dependencies: - ci-info "^2.0.0" - -is-core-module@^2.2.0: - version "2.6.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz" - integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" + "agent-base" "6" + "debug" "4" + +"https-proxy-agent@^5.0.0": + "integrity" "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==" + "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "agent-base" "6" + "debug" "4" + +"human-signals@^1.1.1": + "integrity" "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "resolved" "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz" + "version" "1.1.1" + +"iconv-lite@0.4.24": + "integrity" "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==" + "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" + "version" "0.4.24" + dependencies: + "safer-buffer" ">= 2.1.2 < 3" + +"ieee754@^1.1.13": + "integrity" "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "resolved" "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + "version" "1.2.1" + +"ignore-by-default@^1.0.1": + "integrity" "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + "resolved" "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + "version" "1.0.1" + +"ignore@^4.0.6": + "integrity" "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz" + "version" "4.0.6" + +"ignore@^5.1.4": + "integrity" "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "resolved" "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz" + "version" "5.1.8" + +"import-fresh@^3.0.0", "import-fresh@^3.2.1": + "integrity" "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==" + "resolved" "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + "version" "3.3.0" + dependencies: + "parent-module" "^1.0.0" + "resolve-from" "^4.0.0" + +"import-lazy@^2.1.0": + "integrity" "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "resolved" "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz" + "version" "2.1.0" + +"import-local@^3.0.2": + "integrity" "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==" + "resolved" "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "pkg-dir" "^4.2.0" + "resolve-cwd" "^3.0.0" + +"imurmurhash@^0.1.4": + "integrity" "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "resolved" "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + "version" "0.1.4" + +"indexof@0.0.1": + "integrity" "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + "resolved" "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz" + "version" "0.0.1" + +"inflight@^1.0.4": + "integrity" "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=" + "resolved" "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "once" "^1.3.0" + "wrappy" "1" + +"inherits@^2.0.3", "inherits@^2.0.4", "inherits@~2.0.1", "inherits@~2.0.3", "inherits@2", "inherits@2.0.4": + "integrity" "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved" "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + "version" "2.0.4" + +"ini@~1.3.0", "ini@1.3.7": + "integrity" "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==" + "resolved" "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz" + "version" "1.3.7" + +"internal-slot@^1.0.3": + "integrity" "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==" + "resolved" "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "get-intrinsic" "^1.1.0" + "has" "^1.0.3" + "side-channel" "^1.0.4" + +"ipaddr.js@1.9.1": + "integrity" "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + "resolved" "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + "version" "1.9.1" + +"is-accessor-descriptor@^0.1.6": + "integrity" "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz" + "version" "0.1.6" + dependencies: + "kind-of" "^3.0.2" + +"is-accessor-descriptor@^1.0.0": + "integrity" "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==" + "resolved" "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "kind-of" "^6.0.0" + +"is-arguments@^1.0.4": + "integrity" "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==" + "resolved" "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-arrayish@^0.2.1": + "integrity" "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz" + "version" "0.2.1" + +"is-arrayish@^0.3.1": + "integrity" "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "resolved" "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + "version" "0.3.2" + +"is-bigint@^1.0.1": + "integrity" "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==" + "resolved" "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-bigints" "^1.0.1" + +"is-binary-path@~2.1.0": + "integrity" "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==" + "resolved" "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "binary-extensions" "^2.0.0" + +"is-boolean-object@^1.1.0": + "integrity" "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==" + "resolved" "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz" + "version" "1.1.2" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-buffer@^1.1.5", "is-buffer@~1.1.6": + "integrity" "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "resolved" "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz" + "version" "1.1.6" + +"is-callable@^1.1.4", "is-callable@^1.2.3": + "integrity" "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==" + "resolved" "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz" + "version" "1.2.4" + +"is-ci@^2.0.0": + "integrity" "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==" + "resolved" "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "ci-info" "^2.0.0" + +"is-core-module@^2.2.0": + "integrity" "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==" + "resolved" "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz" + "version" "2.6.0" + dependencies: + "has" "^1.0.3" + +"is-data-descriptor@^0.1.4": + "integrity" "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz" + "version" "0.1.4" + dependencies: + "kind-of" "^3.0.2" -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== +"is-data-descriptor@^1.0.0": + "integrity" "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==" + "resolved" "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz" + "version" "1.0.0" dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" + "kind-of" "^6.0.0" + +"is-date-object@^1.0.1": + "integrity" "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==" + "resolved" "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "has-tostringtag" "^1.0.0" -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== +"is-descriptor@^0.1.0": + "integrity" "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz" + "version" "0.1.6" dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" + "is-accessor-descriptor" "^0.1.6" + "is-data-descriptor" "^0.1.4" + "kind-of" "^5.0.0" + +"is-descriptor@^1.0.0", "is-descriptor@^1.0.2": + "integrity" "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==" + "resolved" "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-accessor-descriptor" "^1.0.0" + "is-data-descriptor" "^1.0.0" + "kind-of" "^6.0.2" -is-docker@^2.0.0: - version "2.2.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +"is-docker@^2.0.0": + "integrity" "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "resolved" "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz" + "version" "2.2.1" -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= +"is-extendable@^0.1.0", "is-extendable@^0.1.1": + "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== +"is-extendable@^0.1.1": + "integrity" "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz" + "version" "0.1.1" + +"is-extendable@^1.0.1": + "integrity" "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==" + "resolved" "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz" + "version" "1.0.1" dependencies: - is-plain-object "^2.0.4" + "is-plain-object" "^2.0.4" -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +"is-extglob@^2.1.1": + "integrity" "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "resolved" "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + "version" "2.1.1" -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz" - integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== - dependencies: - global-dirs "^2.0.1" - is-path-inside "^3.0.1" - -is-interactive@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" - integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== - -is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== - -is-npm@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz" - integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== - -is-number-object@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz" - integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.1: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-regex@^1.1.3: - version "1.1.4" - resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-retry-allowed@^1.1.0: - version "1.2.0" - resolved "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.3, is-typed-array@^1.1.6: - version "1.1.7" - resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.7.tgz" - integrity sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA== - dependencies: - available-typed-arrays "^1.0.4" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -is-yarn-global@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" - integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -istanbul-lib-coverage@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz" - integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== - -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" - integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== +"is-fullwidth-code-point@^1.0.0": + "integrity" "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "number-is-nan" "^1.0.0" + +"is-fullwidth-code-point@^2.0.0": + "integrity" "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz" + "version" "2.0.0" + +"is-fullwidth-code-point@^3.0.0": + "integrity" "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "resolved" "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" + "version" "3.0.0" + +"is-generator-fn@^2.0.0": + "integrity" "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==" + "resolved" "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz" + "version" "2.1.0" + +"is-generator-function@^1.0.7": + "integrity" "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==" + "resolved" "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-glob@^4.0.0", "is-glob@^4.0.1", "is-glob@~4.0.1": + "integrity" "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==" + "resolved" "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "is-extglob" "^2.1.1" + +"is-installed-globally@^0.3.1": + "integrity" "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==" + "resolved" "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "global-dirs" "^2.0.1" + "is-path-inside" "^3.0.1" + +"is-interactive@^1.0.0": + "integrity" "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==" + "resolved" "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" + "version" "1.0.0" + +"is-negative-zero@^2.0.1": + "integrity" "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "resolved" "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz" + "version" "2.0.1" + +"is-npm@^4.0.0": + "integrity" "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + "resolved" "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz" + "version" "4.0.0" + +"is-number-object@^1.0.4": + "integrity" "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==" + "resolved" "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz" + "version" "1.0.6" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-number@^3.0.0": + "integrity" "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "kind-of" "^3.0.2" + +"is-number@^7.0.0": + "integrity" "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "resolved" "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + "version" "7.0.0" + +"is-obj@^2.0.0": + "integrity" "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "resolved" "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz" + "version" "2.0.0" + +"is-path-inside@^3.0.1": + "integrity" "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "resolved" "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + "version" "3.0.3" + +"is-plain-object@^2.0.3", "is-plain-object@^2.0.4": + "integrity" "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==" + "resolved" "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "isobject" "^3.0.1" + +"is-potential-custom-element-name@^1.0.1": + "integrity" "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + "resolved" "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz" + "version" "1.0.1" + +"is-regex@^1.1.3": + "integrity" "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==" + "resolved" "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz" + "version" "1.1.4" + dependencies: + "call-bind" "^1.0.2" + "has-tostringtag" "^1.0.0" + +"is-retry-allowed@^1.1.0": + "integrity" "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + "resolved" "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz" + "version" "1.2.0" + +"is-stream@^1.1.0": + "integrity" "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" + "version" "1.1.0" + +"is-stream@^2.0.0": + "integrity" "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "resolved" "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" + "version" "2.0.1" + +"is-string@^1.0.5", "is-string@^1.0.6": + "integrity" "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==" + "resolved" "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz" + "version" "1.0.7" + dependencies: + "has-tostringtag" "^1.0.0" + +"is-symbol@^1.0.2", "is-symbol@^1.0.3": + "integrity" "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==" + "resolved" "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "has-symbols" "^1.0.2" + +"is-typed-array@^1.1.3", "is-typed-array@^1.1.6": + "integrity" "sha512-VxlpTBGknhQ3o7YiVjIhdLU6+oD8dPz/79vvvH4F+S/c8608UCVa9fgDpa1kZgFoUST2DCgacc70UszKgzKuvA==" + "resolved" "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.7.tgz" + "version" "1.1.7" + dependencies: + "available-typed-arrays" "^1.0.4" + "call-bind" "^1.0.2" + "es-abstract" "^1.18.5" + "foreach" "^2.0.5" + "has-tostringtag" "^1.0.0" + +"is-typedarray@^1.0.0": + "integrity" "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "resolved" "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" + "version" "1.0.0" + +"is-unicode-supported@^0.1.0": + "integrity" "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" + "resolved" "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz" + "version" "0.1.0" + +"is-windows@^1.0.2": + "integrity" "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "resolved" "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz" + "version" "1.0.2" + +"is-wsl@^2.2.0": + "integrity" "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==" + "resolved" "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "is-docker" "^2.0.0" + +"is-yarn-global@^0.3.0": + "integrity" "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "resolved" "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz" + "version" "0.3.0" + +"isarray@~1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isarray@0.0.1": + "integrity" "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" + "version" "0.0.1" + +"isarray@1.0.0": + "integrity" "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + "version" "1.0.0" + +"isarray@2.0.1": + "integrity" "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + "resolved" "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz" + "version" "2.0.1" + +"isexe@^2.0.0": + "integrity" "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "resolved" "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + "version" "2.0.0" + +"isobject@^2.0.0": + "integrity" "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "isarray" "1.0.0" + +"isobject@^3.0.0", "isobject@^3.0.1": + "integrity" "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "resolved" "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz" + "version" "3.0.1" + +"istanbul-lib-coverage@^3.0.0": + "integrity" "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz" + "version" "3.0.0" + +"istanbul-lib-instrument@^4.0.0", "istanbul-lib-instrument@^4.0.3": + "integrity" "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz" + "version" "4.0.3" dependencies: "@babel/core" "^7.7.5" "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.0.0" - semver "^6.3.0" + "istanbul-lib-coverage" "^3.0.0" + "semver" "^6.3.0" -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== +"istanbul-lib-report@^3.0.0": + "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" + "version" "3.0.0" dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" + "istanbul-lib-coverage" "^3.0.0" + "make-dir" "^3.0.0" + "supports-color" "^7.1.0" -istanbul-lib-source-maps@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz" - integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== +"istanbul-lib-source-maps@^4.0.0": + "integrity" "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz" + "version" "4.0.0" dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" + "debug" "^4.1.1" + "istanbul-lib-coverage" "^3.0.0" + "source-map" "^0.6.1" -istanbul-reports@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz" - integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== +"istanbul-reports@^3.0.2": + "integrity" "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz" + "version" "3.0.2" dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" + "html-escaper" "^2.0.0" + "istanbul-lib-report" "^3.0.0" -jest-changed-files@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz" - integrity sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ== +"jest-changed-files@^26.6.2": + "integrity" "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" - execa "^4.0.0" - throat "^5.0.0" + "execa" "^4.0.0" + "throat" "^5.0.0" -jest-cli@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz" - integrity sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg== +"jest-cli@^26.6.3": + "integrity" "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/core" "^26.6.3" "@jest/test-result" "^26.6.2" "@jest/types" "^26.6.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - is-ci "^2.0.0" - jest-config "^26.6.3" - jest-util "^26.6.2" - jest-validate "^26.6.2" - prompts "^2.0.1" - yargs "^15.4.1" - -jest-config@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz" - integrity sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg== + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "import-local" "^3.0.2" + "is-ci" "^2.0.0" + "jest-config" "^26.6.3" + "jest-util" "^26.6.2" + "jest-validate" "^26.6.2" + "prompts" "^2.0.1" + "yargs" "^15.4.1" + +"jest-config@^26.6.3": + "integrity" "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz" + "version" "26.6.3" dependencies: "@babel/core" "^7.1.0" "@jest/test-sequencer" "^26.6.3" "@jest/types" "^26.6.2" - babel-jest "^26.6.3" - chalk "^4.0.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-environment-jsdom "^26.6.2" - jest-environment-node "^26.6.2" - jest-get-type "^26.3.0" - jest-jasmine2 "^26.6.3" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - micromatch "^4.0.2" - pretty-format "^26.6.2" - -jest-diff@^26.0.0, jest-diff@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz" - integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA== - dependencies: - chalk "^4.0.0" - diff-sequences "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-docblock@^26.0.0: - version "26.0.0" - resolved "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz" - integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w== - dependencies: - detect-newline "^3.0.0" - -jest-each@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz" - integrity sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A== + "babel-jest" "^26.6.3" + "chalk" "^4.0.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.1" + "graceful-fs" "^4.2.4" + "jest-environment-jsdom" "^26.6.2" + "jest-environment-node" "^26.6.2" + "jest-get-type" "^26.3.0" + "jest-jasmine2" "^26.6.3" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.6.2" + "jest-util" "^26.6.2" + "jest-validate" "^26.6.2" + "micromatch" "^4.0.2" + "pretty-format" "^26.6.2" + +"jest-diff@^26.0.0", "jest-diff@^26.6.2": + "integrity" "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz" + "version" "26.6.2" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^26.6.2" + "jest-get-type" "^26.3.0" + "pretty-format" "^26.6.2" + +"jest-docblock@^26.0.0": + "integrity" "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz" + "version" "26.0.0" + dependencies: + "detect-newline" "^3.0.0" + +"jest-each@^26.6.2": + "integrity" "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" - chalk "^4.0.0" - jest-get-type "^26.3.0" - jest-util "^26.6.2" - pretty-format "^26.6.2" + "chalk" "^4.0.0" + "jest-get-type" "^26.3.0" + "jest-util" "^26.6.2" + "pretty-format" "^26.6.2" -jest-environment-jsdom@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz" - integrity sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q== +"jest-environment-jsdom@^26.6.2": + "integrity" "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==" + "resolved" "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/environment" "^26.6.2" "@jest/fake-timers" "^26.6.2" "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" - jsdom "^16.4.0" + "jest-mock" "^26.6.2" + "jest-util" "^26.6.2" + "jsdom" "^16.4.0" -jest-environment-node@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz" - integrity sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag== +"jest-environment-node@^26.6.2": + "integrity" "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/environment" "^26.6.2" "@jest/fake-timers" "^26.6.2" "@jest/types" "^26.6.2" "@types/node" "*" - jest-mock "^26.6.2" - jest-util "^26.6.2" + "jest-mock" "^26.6.2" + "jest-util" "^26.6.2" -jest-get-type@^26.3.0: - version "26.3.0" - resolved "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz" - integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig== +"jest-get-type@^26.3.0": + "integrity" "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz" + "version" "26.3.0" -jest-haste-map@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz" - integrity sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w== +"jest-haste-map@^26.6.2": + "integrity" "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" "@types/graceful-fs" "^4.1.2" "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^26.0.0" - jest-serializer "^26.6.2" - jest-util "^26.6.2" - jest-worker "^26.6.2" - micromatch "^4.0.2" - sane "^4.0.3" - walker "^1.0.7" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.4" + "jest-regex-util" "^26.0.0" + "jest-serializer" "^26.6.2" + "jest-util" "^26.6.2" + "jest-worker" "^26.6.2" + "micromatch" "^4.0.2" + "sane" "^4.0.3" + "walker" "^1.0.7" optionalDependencies: - fsevents "^2.1.2" + "fsevents" "^2.1.2" -jest-jasmine2@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz" - integrity sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg== +"jest-jasmine2@^26.6.3": + "integrity" "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==" + "resolved" "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz" + "version" "26.6.3" dependencies: "@babel/traverse" "^7.1.0" "@jest/environment" "^26.6.2" @@ -4908,123 +4983,123 @@ jest-jasmine2@^26.6.3: "@jest/test-result" "^26.6.2" "@jest/types" "^26.6.2" "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^26.6.2" - is-generator-fn "^2.0.0" - jest-each "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-runtime "^26.6.3" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - pretty-format "^26.6.2" - throat "^5.0.0" - -jest-leak-detector@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz" - integrity sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg== - dependencies: - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-matcher-utils@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz" - integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw== - dependencies: - chalk "^4.0.0" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - pretty-format "^26.6.2" - -jest-message-util@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz" - integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA== + "chalk" "^4.0.0" + "co" "^4.6.0" + "expect" "^26.6.2" + "is-generator-fn" "^2.0.0" + "jest-each" "^26.6.2" + "jest-matcher-utils" "^26.6.2" + "jest-message-util" "^26.6.2" + "jest-runtime" "^26.6.3" + "jest-snapshot" "^26.6.2" + "jest-util" "^26.6.2" + "pretty-format" "^26.6.2" + "throat" "^5.0.0" + +"jest-leak-detector@^26.6.2": + "integrity" "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz" + "version" "26.6.2" + dependencies: + "jest-get-type" "^26.3.0" + "pretty-format" "^26.6.2" + +"jest-matcher-utils@^26.6.2": + "integrity" "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz" + "version" "26.6.2" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^26.6.2" + "jest-get-type" "^26.3.0" + "pretty-format" "^26.6.2" + +"jest-message-util@^26.6.2": + "integrity" "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz" + "version" "26.6.2" dependencies: "@babel/code-frame" "^7.0.0" "@jest/types" "^26.6.2" "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.2" - pretty-format "^26.6.2" - slash "^3.0.0" - stack-utils "^2.0.2" - -jest-mock@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz" - integrity sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew== + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "micromatch" "^4.0.2" + "pretty-format" "^26.6.2" + "slash" "^3.0.0" + "stack-utils" "^2.0.2" + +"jest-mock@^26.6.2": + "integrity" "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" "@types/node" "*" -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== +"jest-pnp-resolver@^1.2.2": + "integrity" "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" + "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz" + "version" "1.2.2" -jest-regex-util@^26.0.0: - version "26.0.0" - resolved "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz" - integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A== +"jest-regex-util@^26.0.0": + "integrity" "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz" + "version" "26.0.0" -jest-resolve-dependencies@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz" - integrity sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg== +"jest-resolve-dependencies@^26.6.3": + "integrity" "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/types" "^26.6.2" - jest-regex-util "^26.0.0" - jest-snapshot "^26.6.2" + "jest-regex-util" "^26.0.0" + "jest-snapshot" "^26.6.2" -jest-resolve@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz" - integrity sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ== +"jest-resolve@*", "jest-resolve@^26.6.2": + "integrity" "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-pnp-resolver "^1.2.2" - jest-util "^26.6.2" - read-pkg-up "^7.0.1" - resolve "^1.18.1" - slash "^3.0.0" - -jest-runner@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz" - integrity sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ== + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^26.6.2" + "read-pkg-up" "^7.0.1" + "resolve" "^1.18.1" + "slash" "^3.0.0" + +"jest-runner@^26.6.3": + "integrity" "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/console" "^26.6.2" "@jest/environment" "^26.6.2" "@jest/test-result" "^26.6.2" "@jest/types" "^26.6.2" "@types/node" "*" - chalk "^4.0.0" - emittery "^0.7.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-docblock "^26.0.0" - jest-haste-map "^26.6.2" - jest-leak-detector "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - jest-runtime "^26.6.3" - jest-util "^26.6.2" - jest-worker "^26.6.2" - source-map-support "^0.5.6" - throat "^5.0.0" - -jest-runtime@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz" - integrity sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw== + "chalk" "^4.0.0" + "emittery" "^0.7.1" + "exit" "^0.1.2" + "graceful-fs" "^4.2.4" + "jest-config" "^26.6.3" + "jest-docblock" "^26.0.0" + "jest-haste-map" "^26.6.2" + "jest-leak-detector" "^26.6.2" + "jest-message-util" "^26.6.2" + "jest-resolve" "^26.6.2" + "jest-runtime" "^26.6.3" + "jest-util" "^26.6.2" + "jest-worker" "^26.6.2" + "source-map-support" "^0.5.6" + "throat" "^5.0.0" + +"jest-runtime@^26.6.3": + "integrity" "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/console" "^26.6.2" "@jest/environment" "^26.6.2" @@ -5035,3275 +5110,3435 @@ jest-runtime@^26.6.3: "@jest/transform" "^26.6.2" "@jest/types" "^26.6.2" "@types/yargs" "^15.0.0" - chalk "^4.0.0" - cjs-module-lexer "^0.6.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-config "^26.6.3" - jest-haste-map "^26.6.2" - jest-message-util "^26.6.2" - jest-mock "^26.6.2" - jest-regex-util "^26.0.0" - jest-resolve "^26.6.2" - jest-snapshot "^26.6.2" - jest-util "^26.6.2" - jest-validate "^26.6.2" - slash "^3.0.0" - strip-bom "^4.0.0" - yargs "^15.4.1" - -jest-serializer@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz" - integrity sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g== + "chalk" "^4.0.0" + "cjs-module-lexer" "^0.6.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.4" + "jest-config" "^26.6.3" + "jest-haste-map" "^26.6.2" + "jest-message-util" "^26.6.2" + "jest-mock" "^26.6.2" + "jest-regex-util" "^26.0.0" + "jest-resolve" "^26.6.2" + "jest-snapshot" "^26.6.2" + "jest-util" "^26.6.2" + "jest-validate" "^26.6.2" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + "yargs" "^15.4.1" + +"jest-serializer@^26.6.2": + "integrity" "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==" + "resolved" "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz" + "version" "26.6.2" dependencies: "@types/node" "*" - graceful-fs "^4.2.4" + "graceful-fs" "^4.2.4" -jest-snapshot@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz" - integrity sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og== +"jest-snapshot@^26.6.2": + "integrity" "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz" + "version" "26.6.2" dependencies: "@babel/types" "^7.0.0" "@jest/types" "^26.6.2" "@types/babel__traverse" "^7.0.4" "@types/prettier" "^2.0.0" - chalk "^4.0.0" - expect "^26.6.2" - graceful-fs "^4.2.4" - jest-diff "^26.6.2" - jest-get-type "^26.3.0" - jest-haste-map "^26.6.2" - jest-matcher-utils "^26.6.2" - jest-message-util "^26.6.2" - jest-resolve "^26.6.2" - natural-compare "^1.4.0" - pretty-format "^26.6.2" - semver "^7.3.2" - -jest-util@^26.1.0, jest-util@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz" - integrity sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q== + "chalk" "^4.0.0" + "expect" "^26.6.2" + "graceful-fs" "^4.2.4" + "jest-diff" "^26.6.2" + "jest-get-type" "^26.3.0" + "jest-haste-map" "^26.6.2" + "jest-matcher-utils" "^26.6.2" + "jest-message-util" "^26.6.2" + "jest-resolve" "^26.6.2" + "natural-compare" "^1.4.0" + "pretty-format" "^26.6.2" + "semver" "^7.3.2" + +"jest-util@^26.1.0", "jest-util@^26.6.2": + "integrity" "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.4" + "is-ci" "^2.0.0" + "micromatch" "^4.0.2" -jest-validate@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz" - integrity sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ== +"jest-validate@^26.6.2": + "integrity" "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" - camelcase "^6.0.0" - chalk "^4.0.0" - jest-get-type "^26.3.0" - leven "^3.1.0" - pretty-format "^26.6.2" + "camelcase" "^6.0.0" + "chalk" "^4.0.0" + "jest-get-type" "^26.3.0" + "leven" "^3.1.0" + "pretty-format" "^26.6.2" -jest-watcher@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz" - integrity sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ== +"jest-watcher@^26.6.2": + "integrity" "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/test-result" "^26.6.2" "@jest/types" "^26.6.2" "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^26.6.2" - string-length "^4.0.1" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "jest-util" "^26.6.2" + "string-length" "^4.0.1" -jest-worker@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== +"jest-worker@^26.6.2": + "integrity" "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" + "version" "26.6.2" dependencies: "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" + "merge-stream" "^2.0.0" + "supports-color" "^7.0.0" -jest@^26.6.3: - version "26.6.3" - resolved "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz" - integrity sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q== +"jest@^26.6.3", "jest@>=26 <27": + "integrity" "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==" + "resolved" "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz" + "version" "26.6.3" dependencies: "@jest/core" "^26.6.3" - import-local "^3.0.2" - jest-cli "^26.6.3" - -jmespath@^0.15.0: - version "0.15.0" - resolved "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz" - integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc= - -join-component@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz" - integrity sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU= - -joycon@^2.2.5: - version "2.2.5" - resolved "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz" - integrity sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdom@^16.4.0: - version "16.7.0" - resolved "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" - integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-resolver@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/json-schema-resolver/-/json-schema-resolver-1.3.0.tgz" - integrity sha512-EX7W1r8aZ/T3j8GbbBxPXi60bnsELfT90OiA1QrbGMvwzVSbyMNOAzvMFcFb8m7gKCXZLJpGe+cJOvWgoFl29A== - dependencies: - debug "^4.1.1" - rfdc "^1.1.4" - uri-js "^4.2.2" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz" - integrity sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg= - -json5@2.x, json5@^2.1.1, json5@^2.1.2: - version "2.2.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" + "import-local" "^3.0.2" + "jest-cli" "^26.6.3" + +"jmespath@^0.15.0": + "integrity" "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + "resolved" "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz" + "version" "0.15.0" + +"join-component@^1.1.0": + "integrity" "sha1-uEF7dQZho5K+4sJTfGiyqdSXfNU=" + "resolved" "https://registry.npmjs.org/join-component/-/join-component-1.1.0.tgz" + "version" "1.1.0" + +"joycon@^2.2.5": + "integrity" "sha512-YqvUxoOcVPnCp0VU1/56f+iKSdvIRJYPznH22BdXV3xMk75SFXhWeJkZ8C9XxUWt1b5x2X1SxuFygW1U0FmkEQ==" + "resolved" "https://registry.npmjs.org/joycon/-/joycon-2.2.5.tgz" + "version" "2.2.5" + +"js-tokens@^4.0.0": + "integrity" "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "resolved" "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" + "version" "4.0.0" + +"js-yaml@^3.13.1": + "integrity" "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + "version" "3.14.1" + dependencies: + "argparse" "^1.0.7" + "esprima" "^4.0.0" + +"js-yaml@^4.0.0": + "integrity" "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==" + "resolved" "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "argparse" "^2.0.1" + +"jsdom@^16.4.0": + "integrity" "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==" + "resolved" "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz" + "version" "16.7.0" + dependencies: + "abab" "^2.0.5" + "acorn" "^8.2.4" + "acorn-globals" "^6.0.0" + "cssom" "^0.4.4" + "cssstyle" "^2.3.0" + "data-urls" "^2.0.0" + "decimal.js" "^10.2.1" + "domexception" "^2.0.1" + "escodegen" "^2.0.0" + "form-data" "^3.0.0" + "html-encoding-sniffer" "^2.0.1" + "http-proxy-agent" "^4.0.1" + "https-proxy-agent" "^5.0.0" + "is-potential-custom-element-name" "^1.0.1" + "nwsapi" "^2.2.0" + "parse5" "6.0.1" + "saxes" "^5.0.1" + "symbol-tree" "^3.2.4" + "tough-cookie" "^4.0.0" + "w3c-hr-time" "^1.0.2" + "w3c-xmlserializer" "^2.0.0" + "webidl-conversions" "^6.1.0" + "whatwg-encoding" "^1.0.5" + "whatwg-mimetype" "^2.3.0" + "whatwg-url" "^8.5.0" + "ws" "^7.4.6" + "xml-name-validator" "^3.0.0" + +"jsesc@^2.5.1": + "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" + "version" "2.5.2" + +"jsesc@~0.5.0": + "integrity" "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz" + "version" "0.5.0" + +"json-buffer@3.0.0": + "integrity" "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "resolved" "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz" + "version" "3.0.0" + +"json-parse-even-better-errors@^2.3.0": + "integrity" "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "resolved" "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz" + "version" "2.3.1" + +"json-schema-resolver@^1.3.0": + "integrity" "sha512-EX7W1r8aZ/T3j8GbbBxPXi60bnsELfT90OiA1QrbGMvwzVSbyMNOAzvMFcFb8m7gKCXZLJpGe+cJOvWgoFl29A==" + "resolved" "https://registry.npmjs.org/json-schema-resolver/-/json-schema-resolver-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "debug" "^4.1.1" + "rfdc" "^1.1.4" + "uri-js" "^4.2.2" + +"json-schema-traverse@^0.4.1": + "integrity" "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + "version" "0.4.1" + +"json-schema-traverse@^1.0.0": + "integrity" "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + "version" "1.0.0" + +"json-stable-stringify-without-jsonify@^1.0.1": + "integrity" "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" + "resolved" "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + "version" "1.0.1" + +"json-stream@^1.0.0": + "integrity" "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg=" + "resolved" "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz" + "version" "1.0.0" + +"json5@^2.1.1", "json5@^2.1.2", "json5@2.x": + "integrity" "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==" + "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "minimist" "^1.2.5" + +"jsonfile@^6.0.1": + "integrity" "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==" + "resolved" "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" + "version" "6.1.0" + dependencies: + "universalify" "^2.0.0" optionalDependencies: - graceful-fs "^4.1.6" - -jsonwebtoken@^8.3.0, jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -latest-version@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" - integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== - dependencies: - package-json "^6.3.0" - -leven@2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -light-my-request@^4.2.0: - version "4.4.4" - resolved "https://registry.npmjs.org/light-my-request/-/light-my-request-4.4.4.tgz" - integrity sha512-nxYLB+Lke3wGQ55HQIo/CjSS18xGyHRF0y/u7YxEwp1YsqQTxObteBXYHZY3ELSvYmqy0pRLTWbI5//zRYTXlg== - dependencies: - ajv "^8.1.0" - cookie "^0.4.0" - fastify-warning "^0.2.0" - readable-stream "^3.6.0" - set-cookie-parser "^2.4.1" - -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@4.x, lodash@^4.17.21, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -long@^2.2.0: - version "2.4.0" - resolved "https://registry.npmjs.org/long/-/long-2.4.0.tgz" - integrity sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8= - -lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" - integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0= - -make-dir@^3.0.0, make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-error@1.x, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -makeerror@1.0.x: - version "1.0.11" - resolved "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" - integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= - dependencies: - tmpl "1.0.x" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz" - integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -match-all@^1.2.6: - version "1.2.6" - resolved "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" - integrity sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ== - -md5@^2.2.1: - version "2.3.0" - resolved "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" - integrity sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g== - dependencies: - charenc "0.0.2" - crypt "0.0.2" - is-buffer "~1.1.6" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -memory-pager@^1.0.2: - version "1.5.0" - resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" - integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@^1.1.1, methods@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.2, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mime-db@1.49.0: - version "1.49.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz" - integrity sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA== - -mime-types@^2.1.12, mime-types@^2.1.14, mime-types@~2.1.24: - version "2.1.32" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz" - integrity sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A== - dependencies: - mime-db "1.49.0" - -mime@1.6.0, mime@^1.4.1: - version "1.6.0" - resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.4.0: - version "2.5.2" - resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^1.0.0, mimic-response@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minio@^7.0.18: - version "7.0.19" - resolved "https://registry.npmjs.org/minio/-/minio-7.0.19.tgz" - integrity sha512-DOGKauWLdmj0/y2QKXdnrhqyzRFEnUteHi6q382uujg9TjSDrA84BiQVppS2Ew6V8Rcg+2IaRkF4GR34zw9sIA== - dependencies: - async "^3.1.0" - block-stream2 "^2.0.0" - es6-error "^4.1.1" - fast-xml-parser "^3.17.5" - json-stream "^1.0.0" - lodash "^4.17.21" - mime-types "^2.1.14" - mkdirp "^0.5.1" - querystring "0.2.0" - through2 "^3.0.1" - web-encoding "^1.1.5" - xml "^1.0.0" - xml2js "^0.4.15" - -minipass@^3.0.0: - version "3.1.3" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz" - integrity sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: - version "0.5.3" - resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mkdirp@^0.5.1: - version "0.5.5" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -moment-timezone@^0.5.31: - version "0.5.33" - resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz" - integrity sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w== - dependencies: - moment ">= 2.9.0" - -"moment@>= 2.9.0", moment@^2.29.1: - version "2.29.1" - resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== - -mongodb-connection-string-url@^1.0.1: - version "1.1.2" - resolved "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-1.1.2.tgz" - integrity sha512-mp5lv4guWuykOpkwNNqQ0tKKytuJUjL/aC/bu/DqoJVWL5NSh4j/u+gJ+EiOdweLujHyq6JZZqcTVipHhL5xRg== + "graceful-fs" "^4.1.6" + +"jsonwebtoken@^8.3.0", "jsonwebtoken@^8.5.1": + "integrity" "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==" + "resolved" "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz" + "version" "8.5.1" + dependencies: + "jws" "^3.2.2" + "lodash.includes" "^4.3.0" + "lodash.isboolean" "^3.0.3" + "lodash.isinteger" "^4.0.4" + "lodash.isnumber" "^3.0.3" + "lodash.isplainobject" "^4.0.6" + "lodash.isstring" "^4.0.1" + "lodash.once" "^4.0.0" + "ms" "^2.1.1" + "semver" "^5.6.0" + +"jwa@^1.4.1": + "integrity" "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==" + "resolved" "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "buffer-equal-constant-time" "1.0.1" + "ecdsa-sig-formatter" "1.0.11" + "safe-buffer" "^5.0.1" + +"jws@^3.2.2": + "integrity" "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==" + "resolved" "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "jwa" "^1.4.1" + "safe-buffer" "^5.0.1" + +"keyv@^3.0.0": + "integrity" "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==" + "resolved" "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "json-buffer" "3.0.0" + +"kind-of@^3.0.2", "kind-of@^3.0.3": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^3.2.0": + "integrity" "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^4.0.0": + "integrity" "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "is-buffer" "^1.1.5" + +"kind-of@^5.0.0": + "integrity" "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz" + "version" "5.1.0" + +"kind-of@^6.0.0", "kind-of@^6.0.2": + "integrity" "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "resolved" "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz" + "version" "6.0.3" + +"kleur@^3.0.3": + "integrity" "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "resolved" "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz" + "version" "3.0.3" + +"latest-version@^5.0.0": + "integrity" "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==" + "resolved" "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "package-json" "^6.3.0" + +"leven@^3.1.0": + "integrity" "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "resolved" "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" + "version" "3.1.0" + +"leven@2.1.0": + "integrity" "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=" + "resolved" "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz" + "version" "2.1.0" + +"levn@^0.4.1": + "integrity" "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + "version" "0.4.1" + dependencies: + "prelude-ls" "^1.2.1" + "type-check" "~0.4.0" + +"levn@~0.3.0": + "integrity" "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=" + "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + +"light-my-request@^4.2.0": + "integrity" "sha512-nxYLB+Lke3wGQ55HQIo/CjSS18xGyHRF0y/u7YxEwp1YsqQTxObteBXYHZY3ELSvYmqy0pRLTWbI5//zRYTXlg==" + "resolved" "https://registry.npmjs.org/light-my-request/-/light-my-request-4.4.4.tgz" + "version" "4.4.4" + dependencies: + "ajv" "^8.1.0" + "cookie" "^0.4.0" + "fastify-warning" "^0.2.0" + "readable-stream" "^3.6.0" + "set-cookie-parser" "^2.4.1" + +"lines-and-columns@^1.1.6": + "integrity" "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "resolved" "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz" + "version" "1.1.6" + +"locate-path@^5.0.0": + "integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==" + "resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "p-locate" "^4.1.0" + +"lodash.clonedeep@^4.5.0": + "integrity" "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + "resolved" "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" + "version" "4.5.0" + +"lodash.debounce@^4.0.8": + "integrity" "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" + "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" + "version" "4.0.8" + +"lodash.includes@^4.3.0": + "integrity" "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "resolved" "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" + "version" "4.3.0" + +"lodash.isboolean@^3.0.3": + "integrity" "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "resolved" "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" + "version" "3.0.3" + +"lodash.isinteger@^4.0.4": + "integrity" "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "resolved" "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" + "version" "4.0.4" + +"lodash.isnumber@^3.0.3": + "integrity" "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "resolved" "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" + "version" "3.0.3" + +"lodash.isplainobject@^4.0.6": + "integrity" "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "resolved" "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz" + "version" "4.0.6" + +"lodash.isstring@^4.0.1": + "integrity" "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "resolved" "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" + "version" "4.0.1" + +"lodash.merge@^4.6.2": + "integrity" "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + "resolved" "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + "version" "4.6.2" + +"lodash.once@^4.0.0": + "integrity" "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "resolved" "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" + "version" "4.1.1" + +"lodash.truncate@^4.4.2": + "integrity" "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "resolved" "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz" + "version" "4.4.2" + +"lodash@^4.17.21", "lodash@^4.7.0", "lodash@4.x": + "integrity" "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "resolved" "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + "version" "4.17.21" + +"log-symbols@^4.1.0": + "integrity" "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==" + "resolved" "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "chalk" "^4.1.0" + "is-unicode-supported" "^0.1.0" + +"long@^2.2.0": + "integrity" "sha1-n6GAux2VAM3CnEFWdmoZleH0Uk8=" + "resolved" "https://registry.npmjs.org/long/-/long-2.4.0.tgz" + "version" "2.4.0" + +"lowercase-keys@^1.0.0", "lowercase-keys@^1.0.1": + "integrity" "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz" + "version" "1.0.1" + +"lowercase-keys@^2.0.0": + "integrity" "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "resolved" "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + "version" "2.0.0" + +"lru_map@^0.3.3": + "integrity" "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=" + "resolved" "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz" + "version" "0.3.3" + +"lru-cache@^4.0.1": + "integrity" "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz" + "version" "4.1.5" + dependencies: + "pseudomap" "^1.0.2" + "yallist" "^2.1.2" + +"lru-cache@^6.0.0": + "integrity" "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==" + "resolved" "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "yallist" "^4.0.0" + +"make-dir@^3.0.0", "make-dir@^3.1.0": + "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "semver" "^6.0.0" + +"make-error@^1.1.1", "make-error@1.x": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + +"makeerror@1.0.x": + "integrity" "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=" + "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz" + "version" "1.0.11" + dependencies: + "tmpl" "1.0.x" + +"map-cache@^0.2.2": + "integrity" "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "resolved" "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz" + "version" "0.2.2" + +"map-stream@~0.1.0": + "integrity" "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" + "resolved" "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz" + "version" "0.1.0" + +"map-visit@^1.0.0": + "integrity" "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=" + "resolved" "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "object-visit" "^1.0.0" + +"match-all@^1.2.6": + "integrity" "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==" + "resolved" "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz" + "version" "1.2.6" + +"md5@^2.2.1": + "integrity" "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==" + "resolved" "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "charenc" "0.0.2" + "crypt" "0.0.2" + "is-buffer" "~1.1.6" + +"media-typer@0.3.0": + "integrity" "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "resolved" "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + "version" "0.3.0" + +"memory-pager@^1.0.2": + "integrity" "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + "resolved" "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" + "version" "1.5.0" + +"merge-stream@^2.0.0": + "integrity" "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "resolved" "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" + "version" "2.0.0" + +"merge2@^1.3.0": + "integrity" "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "resolved" "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + "version" "1.4.1" + +"methods@^1.1.1", "methods@^1.1.2": + "integrity" "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + "resolved" "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + "version" "1.1.2" + +"micromatch@^3.1.4": + "integrity" "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz" + "version" "3.1.10" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "braces" "^2.3.1" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "extglob" "^2.0.4" + "fragment-cache" "^0.2.1" + "kind-of" "^6.0.2" + "nanomatch" "^1.2.9" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.2" + +"micromatch@^4.0.2", "micromatch@^4.0.4": + "integrity" "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==" + "resolved" "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz" + "version" "4.0.4" + dependencies: + "braces" "^3.0.1" + "picomatch" "^2.2.3" + +"mime-db@1.49.0": + "integrity" "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" + "resolved" "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz" + "version" "1.49.0" + +"mime-types@^2.1.12", "mime-types@^2.1.14", "mime-types@~2.1.24": + "integrity" "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==" + "resolved" "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz" + "version" "2.1.32" + dependencies: + "mime-db" "1.49.0" + +"mime@^1.4.1", "mime@1.6.0": + "integrity" "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + "version" "1.6.0" + +"mime@^2.4.0": + "integrity" "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" + "resolved" "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" + "version" "2.5.2" + +"mimic-fn@^2.1.0": + "integrity" "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" + "version" "2.1.0" + +"mimic-response@^1.0.0", "mimic-response@^1.0.1": + "integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + "version" "1.0.1" + +"mimic-response@^2.0.0": + "integrity" "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + "resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz" + "version" "2.1.0" + +"minimatch@^3.0.4": + "integrity" "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==" + "resolved" "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz" + "version" "3.0.4" + dependencies: + "brace-expansion" "^1.1.7" + +"minimist@^1.1.1", "minimist@^1.2.0", "minimist@^1.2.3", "minimist@^1.2.5": + "integrity" "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "resolved" "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz" + "version" "1.2.5" + +"minio@^7.0.18": + "integrity" "sha512-DOGKauWLdmj0/y2QKXdnrhqyzRFEnUteHi6q382uujg9TjSDrA84BiQVppS2Ew6V8Rcg+2IaRkF4GR34zw9sIA==" + "resolved" "https://registry.npmjs.org/minio/-/minio-7.0.19.tgz" + "version" "7.0.19" + dependencies: + "async" "^3.1.0" + "block-stream2" "^2.0.0" + "es6-error" "^4.1.1" + "fast-xml-parser" "^3.17.5" + "json-stream" "^1.0.0" + "lodash" "^4.17.21" + "mime-types" "^2.1.14" + "mkdirp" "^0.5.1" + "querystring" "0.2.0" + "through2" "^3.0.1" + "web-encoding" "^1.1.5" + "xml" "^1.0.0" + "xml2js" "^0.4.15" + +"minipass@^3.0.0": + "integrity" "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==" + "resolved" "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz" + "version" "3.1.3" + dependencies: + "yallist" "^4.0.0" + +"minizlib@^2.1.1": + "integrity" "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==" + "resolved" "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "minipass" "^3.0.0" + "yallist" "^4.0.0" + +"mixin-deep@^1.2.0": + "integrity" "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==" + "resolved" "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz" + "version" "1.3.2" + dependencies: + "for-in" "^1.0.2" + "is-extendable" "^1.0.1" + +"mkdirp-classic@^0.5.2", "mkdirp-classic@^0.5.3": + "integrity" "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "resolved" "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + "version" "0.5.3" + +"mkdirp@^0.5.1": + "integrity" "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz" + "version" "0.5.5" + dependencies: + "minimist" "^1.2.5" + +"mkdirp@^1.0.3": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@^1.0.4": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"mkdirp@1.x": + "integrity" "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "resolved" "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" + "version" "1.0.4" + +"moment-timezone@^0.5.31": + "integrity" "sha512-PTc2vcT8K9J5/9rDEPe5czSIKgLoGsH8UNpA4qZTVw0Vd/Uz19geE9abbIOQKaAQFcnQ3v5YEXrbSc5BpshH+w==" + "resolved" "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.33.tgz" + "version" "0.5.33" + dependencies: + "moment" ">= 2.9.0" + +"moment@^2.29.1", "moment@>= 2.9.0": + "integrity" "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + "resolved" "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz" + "version" "2.29.1" + +"mongodb-connection-string-url@^1.0.1": + "integrity" "sha512-mp5lv4guWuykOpkwNNqQ0tKKytuJUjL/aC/bu/DqoJVWL5NSh4j/u+gJ+EiOdweLujHyq6JZZqcTVipHhL5xRg==" + "resolved" "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-1.1.2.tgz" + "version" "1.1.2" dependencies: "@types/whatwg-url" "^8.0.0" - whatwg-url "^8.4.0" + "whatwg-url" "^8.4.0" -mongodb@*, mongodb@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/mongodb/-/mongodb-4.1.0.tgz" - integrity sha512-Gx9U9MsFWgJ3E0v4oHAdWvYTGBznNYPCkhmD/3i/kPTY/URnPfHD5/6VoKUFrdgQTK3icFiM9976hVbqCRBO9Q== +"mongodb@*", "mongodb@^4.1.0": + "integrity" "sha512-Gx9U9MsFWgJ3E0v4oHAdWvYTGBznNYPCkhmD/3i/kPTY/URnPfHD5/6VoKUFrdgQTK3icFiM9976hVbqCRBO9Q==" + "resolved" "https://registry.npmjs.org/mongodb/-/mongodb-4.1.0.tgz" + "version" "4.1.0" dependencies: - bson "^4.4.0" - denque "^1.5.0" - mongodb-connection-string-url "^1.0.1" + "bson" "^4.4.0" + "denque" "^1.5.0" + "mongodb-connection-string-url" "^1.0.1" optionalDependencies: - saslprep "^1.0.0" - -mri@1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz" - integrity sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multistream@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz" - integrity sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw== - dependencies: - once "^1.4.0" - readable-stream "^3.6.0" - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-abi@^2.21.0: - version "2.30.1" - resolved "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" - integrity sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w== - dependencies: - semver "^5.4.1" - -node-addon-api@^3.1.0: - version "3.2.1" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" - integrity sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A== - -node-addon-api@^4.1.0: - version "4.2.0" - resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz" - integrity sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q== - -node-cache@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-cache/-/node-cache-5.1.2.tgz#f264dc2ccad0a780e76253a694e9fd0ed19c398d" - integrity sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg== - dependencies: - clone "2.x" - -node-cleanup@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz" - integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= - -node-cron@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/node-cron/-/node-cron-3.0.0.tgz" - integrity sha512-DDwIvvuCwrNiaU7HEivFDULcaQualDv7KoNlB/UU1wPW0n1tDEmBJKhEIE6DlF2FuoOHcNbLJ8ITL2Iv/3AWmA== - dependencies: - moment-timezone "^0.5.31" - -node-fetch@^2.6.1: - version "2.6.6" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz" - integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.6: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-notifier@^8.0.0: - version "8.0.2" - resolved "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz" - integrity sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg== - dependencies: - growly "^1.3.0" - is-wsl "^2.2.0" - semver "^7.3.2" - shellwords "^0.1.1" - uuid "^8.3.0" - which "^2.0.2" - -node-releases@^1.1.75: - version "1.1.75" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz" - integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== - -node-uuid@^1.4.8: - version "1.4.8" - resolved "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz" - integrity sha1-sEDrCSOWivq/jTL7HxfxFn/auQc= - -nodemon@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz" - integrity sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ== - dependencies: - chokidar "^3.2.2" - debug "^3.2.6" - ignore-by-default "^1.0.1" - minimatch "^3.0.4" - pstree.remy "^1.1.7" - semver "^5.7.1" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.2" - update-notifier "^4.0.0" - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" - integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= - dependencies: - abbrev "1" - -normalize-package-data@^2.5.0: - version "2.5.0" - resolved "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^4.1.0: - version "4.5.1" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" - integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== - -notepack.io@~2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/notepack.io/-/notepack.io-2.2.0.tgz" - integrity sha512-9b5w3t5VSH6ZPosoYnyDONnUTF8o0UkBw7JLA6eBlYJWyGT1Q3vQa8Hmuj1/X6RYvHjjygBDgw6fJhe0JEojfw== - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^4.0.1, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -object-assign@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.11.0, object-inspect@^1.9.0: - version "1.11.0" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz" - integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.0, object.assign@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -openapi-types@^9.1.0: - version "9.2.0" - resolved "https://registry.npmjs.org/openapi-types/-/openapi-types-9.2.0.tgz" - integrity sha512-3x0gg8DxhpZ5MVki7AK6jmMdVIZASmVGo9CoUtD+nksLdkqz7EzWKdfS9Oxxq1J7idnZV0b3LjqcvizfKFySpQ== - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -ora@^5.4.0: - version "5.4.1" - resolved "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" - integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ== - dependencies: - bl "^4.1.0" - chalk "^4.1.0" - cli-cursor "^3.1.0" - cli-spinners "^2.5.0" - is-interactive "^1.0.0" - is-unicode-supported "^0.1.0" - log-symbols "^4.1.0" - strip-ansi "^6.0.0" - wcwidth "^1.0.1" - -p-cancelable@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" - integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== - -p-each-series@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz" - integrity sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^6.3.0: - version "6.5.0" - resolved "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" - integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== - dependencies: - got "^9.6.0" - registry-auth-token "^4.0.0" - registry-url "^5.0.0" - semver "^6.2.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + "saslprep" "^1.0.0" + +"mri@1.1.4": + "integrity" "sha512-6y7IjGPm8AzlvoUrwAaw1tLnUBudaS3752vcd8JtrpGGQn+rXIe63LFVHm/YMwtqAuh+LJPCFdlLYPWM1nYn6w==" + "resolved" "https://registry.npmjs.org/mri/-/mri-1.1.4.tgz" + "version" "1.1.4" + +"ms@^2.0.0", "ms@^2.1.1", "ms@^2.1.3": + "integrity" "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + "version" "2.1.3" + +"ms@2.0.0": + "integrity" "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + "version" "2.0.0" + +"ms@2.1.1": + "integrity" "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz" + "version" "2.1.1" + +"ms@2.1.2": + "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "resolved" "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + "version" "2.1.2" + +"multistream@^4.1.0": + "integrity" "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==" + "resolved" "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "once" "^1.4.0" + "readable-stream" "^3.6.0" + +"nanomatch@^1.2.9": + "integrity" "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==" + "resolved" "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz" + "version" "1.2.13" + dependencies: + "arr-diff" "^4.0.0" + "array-unique" "^0.3.2" + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "fragment-cache" "^0.2.1" + "is-windows" "^1.0.2" + "kind-of" "^6.0.2" + "object.pick" "^1.3.0" + "regex-not" "^1.0.0" + "snapdragon" "^0.8.1" + "to-regex" "^3.0.1" + +"napi-build-utils@^1.0.1": + "integrity" "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + "resolved" "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + "version" "1.0.2" + +"natural-compare@^1.4.0": + "integrity" "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + "resolved" "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + "version" "1.4.0" + +"negotiator@0.6.2": + "integrity" "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "resolved" "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz" + "version" "0.6.2" + +"nice-try@^1.0.4": + "integrity" "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "resolved" "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz" + "version" "1.0.5" + +"node-abi@^2.21.0": + "integrity" "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==" + "resolved" "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz" + "version" "2.30.1" + dependencies: + "semver" "^5.4.1" + +"node-addon-api@^3.1.0": + "integrity" "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz" + "version" "3.2.1" + +"node-addon-api@^4.1.0": + "integrity" "sha512-eazsqzwG2lskuzBqCGPi7Ac2UgOoMz8JVOXVhTvvPDYhthvNpefx8jWD8Np7Gv+2Sz0FlPWZk0nJV0z598Wn8Q==" + "resolved" "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.2.0.tgz" + "version" "4.2.0" + +"node-cache@^5.1.2": + "integrity" "sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==" + "resolved" "https://registry.npmjs.org/node-cache/-/node-cache-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "clone" "2.x" + +"node-cleanup@^2.1.2": + "integrity" "sha1-esGavSl+Caf3KnFUXZUbUX5N3iw=" + "resolved" "https://registry.npmjs.org/node-cleanup/-/node-cleanup-2.1.2.tgz" + "version" "2.1.2" + +"node-cron@^3.0.0": + "integrity" "sha512-DDwIvvuCwrNiaU7HEivFDULcaQualDv7KoNlB/UU1wPW0n1tDEmBJKhEIE6DlF2FuoOHcNbLJ8ITL2Iv/3AWmA==" + "resolved" "https://registry.npmjs.org/node-cron/-/node-cron-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "moment-timezone" "^0.5.31" + +"node-fetch@^2.6.1", "node-fetch@^2.6.6": + "integrity" "sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==" + "resolved" "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.6.tgz" + "version" "2.6.6" + dependencies: + "whatwg-url" "^5.0.0" + +"node-int64@^0.4.0": + "integrity" "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" + "version" "0.4.0" + +"node-modules-regexp@^1.0.0": + "integrity" "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=" + "resolved" "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz" + "version" "1.0.0" + +"node-notifier@*", "node-notifier@^8.0.0": + "integrity" "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==" + "resolved" "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz" + "version" "8.0.2" + dependencies: + "growly" "^1.3.0" + "is-wsl" "^2.2.0" + "semver" "^7.3.2" + "shellwords" "^0.1.1" + "uuid" "^8.3.0" + "which" "^2.0.2" + +"node-releases@^1.1.75": + "integrity" "sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-1.1.75.tgz" + "version" "1.1.75" + +"node-uuid@^1.4.8": + "integrity" "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" + "resolved" "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz" + "version" "1.4.8" + +"nodemon@2.0.4": + "integrity" "sha512-Ltced+hIfTmaS28Zjv1BM552oQ3dbwPqI4+zI0SLgq+wpJhSyqgYude/aZa/3i31VCQWMfXJVxvu86abcam3uQ==" + "resolved" "https://registry.npmjs.org/nodemon/-/nodemon-2.0.4.tgz" + "version" "2.0.4" + dependencies: + "chokidar" "^3.2.2" + "debug" "^3.2.6" + "ignore-by-default" "^1.0.1" + "minimatch" "^3.0.4" + "pstree.remy" "^1.1.7" + "semver" "^5.7.1" + "supports-color" "^5.5.0" + "touch" "^3.1.0" + "undefsafe" "^2.0.2" + "update-notifier" "^4.0.0" + +"nopt@^5.0.0": + "integrity" "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "abbrev" "1" + +"nopt@~1.0.10": + "integrity" "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=" + "resolved" "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + "version" "1.0.10" + dependencies: + "abbrev" "1" + +"normalize-package-data@^2.5.0": + "integrity" "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==" + "resolved" "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz" + "version" "2.5.0" + dependencies: + "hosted-git-info" "^2.1.4" + "resolve" "^1.10.0" + "semver" "2 || 3 || 4 || 5" + "validate-npm-package-license" "^3.0.1" + +"normalize-path@^2.1.1": + "integrity" "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "remove-trailing-separator" "^1.0.1" + +"normalize-path@^3.0.0", "normalize-path@~3.0.0": + "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "resolved" "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + "version" "3.0.0" + +"normalize-url@^4.1.0": + "integrity" "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "resolved" "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz" + "version" "4.5.1" + +"notepack.io@~2.2.0": + "integrity" "sha512-9b5w3t5VSH6ZPosoYnyDONnUTF8o0UkBw7JLA6eBlYJWyGT1Q3vQa8Hmuj1/X6RYvHjjygBDgw6fJhe0JEojfw==" + "resolved" "https://registry.npmjs.org/notepack.io/-/notepack.io-2.2.0.tgz" + "version" "2.2.0" + +"npm-run-path@^2.0.0": + "integrity" "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "path-key" "^2.0.0" + +"npm-run-path@^4.0.0": + "integrity" "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==" + "resolved" "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "path-key" "^3.0.0" + +"npmlog@^4.0.1", "npmlog@^4.1.2": + "integrity" "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==" + "resolved" "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "are-we-there-yet" "~1.1.2" + "console-control-strings" "~1.1.0" + "gauge" "~2.7.3" + "set-blocking" "~2.0.0" + +"number-is-nan@^1.0.0": + "integrity" "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + "resolved" "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" + "version" "1.0.1" + +"nwsapi@^2.2.0": + "integrity" "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" + "resolved" "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz" + "version" "2.2.0" + +"object-assign@^4.1.0": + "integrity" "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "resolved" "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + "version" "4.1.1" + +"object-copy@^0.1.0": + "integrity" "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=" + "resolved" "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz" + "version" "0.1.0" + dependencies: + "copy-descriptor" "^0.1.0" + "define-property" "^0.2.5" + "kind-of" "^3.0.3" + +"object-inspect@^1.11.0", "object-inspect@^1.9.0": + "integrity" "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + "resolved" "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz" + "version" "1.11.0" + +"object-keys@^1.0.12", "object-keys@^1.1.1": + "integrity" "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz" + "version" "1.1.1" + +"object-keys@~0.4.0": + "integrity" "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + "resolved" "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz" + "version" "0.4.0" + +"object-visit@^1.0.0": + "integrity" "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=" + "resolved" "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "isobject" "^3.0.0" + +"object.assign@^4.1.0", "object.assign@^4.1.2": + "integrity" "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==" + "resolved" "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz" + "version" "4.1.2" + dependencies: + "call-bind" "^1.0.0" + "define-properties" "^1.1.3" + "has-symbols" "^1.0.1" + "object-keys" "^1.1.1" + +"object.pick@^1.3.0": + "integrity" "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=" + "resolved" "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "isobject" "^3.0.1" + +"on-finished@~2.3.0": + "integrity" "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" + "resolved" "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "ee-first" "1.1.1" + +"once@^1.3.0", "once@^1.3.1", "once@^1.4.0": + "integrity" "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=" + "resolved" "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + "version" "1.4.0" + dependencies: + "wrappy" "1" + +"onetime@^5.1.0": + "integrity" "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==" + "resolved" "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" + "version" "5.1.2" + dependencies: + "mimic-fn" "^2.1.0" + +"openapi-types@^9.1.0": + "integrity" "sha512-3x0gg8DxhpZ5MVki7AK6jmMdVIZASmVGo9CoUtD+nksLdkqz7EzWKdfS9Oxxq1J7idnZV0b3LjqcvizfKFySpQ==" + "resolved" "https://registry.npmjs.org/openapi-types/-/openapi-types-9.2.0.tgz" + "version" "9.2.0" + +"optionator@^0.8.1": + "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" + "version" "0.8.3" + dependencies: + "deep-is" "~0.1.3" + "fast-levenshtein" "~2.0.6" + "levn" "~0.3.0" + "prelude-ls" "~1.1.2" + "type-check" "~0.3.2" + "word-wrap" "~1.2.3" + +"optionator@^0.9.1": + "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" + "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + "version" "0.9.1" + dependencies: + "deep-is" "^0.1.3" + "fast-levenshtein" "^2.0.6" + "levn" "^0.4.1" + "prelude-ls" "^1.2.1" + "type-check" "^0.4.0" + "word-wrap" "^1.2.3" + +"ora@^5.4.0": + "integrity" "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==" + "resolved" "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz" + "version" "5.4.1" + dependencies: + "bl" "^4.1.0" + "chalk" "^4.1.0" + "cli-cursor" "^3.1.0" + "cli-spinners" "^2.5.0" + "is-interactive" "^1.0.0" + "is-unicode-supported" "^0.1.0" + "log-symbols" "^4.1.0" + "strip-ansi" "^6.0.0" + "wcwidth" "^1.0.1" + +"p-cancelable@^1.0.0": + "integrity" "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "resolved" "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz" + "version" "1.1.0" + +"p-each-series@^2.1.0": + "integrity" "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==" + "resolved" "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz" + "version" "2.2.0" + +"p-finally@^1.0.0": + "integrity" "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "resolved" "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz" + "version" "1.0.0" + +"p-limit@^2.2.0": + "integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==" + "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz" + "version" "2.3.0" + dependencies: + "p-try" "^2.0.0" + +"p-locate@^4.1.0": + "integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==" + "resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz" + "version" "4.1.0" + dependencies: + "p-limit" "^2.2.0" + +"p-try@^2.0.0": + "integrity" "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "resolved" "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz" + "version" "2.2.0" + +"package-json@^6.3.0": + "integrity" "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==" + "resolved" "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz" + "version" "6.5.0" + dependencies: + "got" "^9.6.0" + "registry-auth-token" "^4.0.0" + "registry-url" "^5.0.0" + "semver" "^6.2.0" + +"parent-module@^1.0.0": + "integrity" "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==" + "resolved" "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "callsites" "^3.0.0" + +"parse-json@^5.0.0": + "integrity" "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==" + "resolved" "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz" + "version" "5.2.0" dependencies: "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -parseqs@0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz" - integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== - -parseuri@0.0.6: - version "0.0.6" - resolved "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz" - integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz" - integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= - dependencies: - through "~2.3" - -pdf2pic@^2.1.4: - version "2.1.4" - resolved "https://registry.npmjs.org/pdf2pic/-/pdf2pic-2.1.4.tgz" - integrity sha512-8QOCvxZlYs7wsmBQbqpIApSWD/eqgXMQU+4VM0vWrXifLgXS+Ns3484sUa1Q7ddr+gwnruq/xKHzu7x1scqX6w== - dependencies: - fs-extra "^9.1.0" - gm "^1.23.1" - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -pino-pretty@^4.7.1: - version "4.8.0" - resolved "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.8.0.tgz" - integrity sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw== + "error-ex" "^1.3.1" + "json-parse-even-better-errors" "^2.3.0" + "lines-and-columns" "^1.1.6" + +"parse5@6.0.1": + "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" + "version" "6.0.1" + +"parseqs@0.0.6": + "integrity" "sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==" + "resolved" "https://registry.npmjs.org/parseqs/-/parseqs-0.0.6.tgz" + "version" "0.0.6" + +"parseuri@0.0.6": + "integrity" "sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==" + "resolved" "https://registry.npmjs.org/parseuri/-/parseuri-0.0.6.tgz" + "version" "0.0.6" + +"pascalcase@^0.1.1": + "integrity" "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "resolved" "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz" + "version" "0.1.1" + +"path-exists@^4.0.0": + "integrity" "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "resolved" "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + "version" "4.0.0" + +"path-is-absolute@^1.0.0": + "integrity" "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved" "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + "version" "1.0.1" + +"path-key@^2.0.0", "path-key@^2.0.1": + "integrity" "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz" + "version" "2.0.1" + +"path-key@^3.0.0", "path-key@^3.1.0": + "integrity" "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "resolved" "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + "version" "3.1.1" + +"path-parse@^1.0.6": + "integrity" "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "resolved" "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" + "version" "1.0.7" + +"path-type@^4.0.0": + "integrity" "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "resolved" "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + "version" "4.0.0" + +"pathval@^1.1.1": + "integrity" "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==" + "resolved" "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" + "version" "1.1.1" + +"pause-stream@0.0.11": + "integrity" "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=" + "resolved" "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz" + "version" "0.0.11" + dependencies: + "through" "~2.3" + +"pdf2pic@^2.1.4": + "integrity" "sha512-8QOCvxZlYs7wsmBQbqpIApSWD/eqgXMQU+4VM0vWrXifLgXS+Ns3484sUa1Q7ddr+gwnruq/xKHzu7x1scqX6w==" + "resolved" "https://registry.npmjs.org/pdf2pic/-/pdf2pic-2.1.4.tgz" + "version" "2.1.4" + dependencies: + "fs-extra" "^9.1.0" + "gm" "^1.23.1" + +"picomatch@^2.0.4", "picomatch@^2.2.1", "picomatch@^2.2.3": + "integrity" "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "resolved" "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz" + "version" "2.3.0" + +"pino-pretty@^4.7.1": + "integrity" "sha512-mhQfHG4rw5ZFpWL44m0Utjo4GC2+HMfdNvxyA8lLw0sIqn6fCf7uQe6dPckUcW/obly+OQHD7B/MTso6LNizYw==" + "resolved" "https://registry.npmjs.org/pino-pretty/-/pino-pretty-4.8.0.tgz" + "version" "4.8.0" dependencies: "@hapi/bourne" "^2.0.0" - args "^5.0.1" - chalk "^4.0.0" - dateformat "^4.5.1" - fast-safe-stringify "^2.0.7" - jmespath "^0.15.0" - joycon "^2.2.5" - pump "^3.0.0" - readable-stream "^3.6.0" - rfdc "^1.3.0" - split2 "^3.1.1" - strip-json-comments "^3.1.1" - -pino-std-serializers@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz" - integrity sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg== - -pino@^6.13.0, pino@^6.8.0: - version "6.13.1" - resolved "https://registry.npmjs.org/pino/-/pino-6.13.1.tgz" - integrity sha512-QQf67BU+cANnc/2U+wzUV20UjO5oBryWpnNyKshdLfT9BdeiXlh9wxLGmOjAuBWMYITdMs+BtJSQQNlGRNbWpA== - dependencies: - fast-redact "^3.0.0" - fast-safe-stringify "^2.0.8" - fastify-warning "^0.2.0" - flatstr "^1.0.12" - pino-std-serializers "^3.1.0" - quick-format-unescaped "^4.0.3" - sonic-boom "^1.0.2" - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -prebuild-install@^6.1.4: - version "6.1.4" - resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz" - integrity sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.3" - mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" - node-abi "^2.21.0" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" - integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.1.2: - version "2.3.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== - -pretty-format@^26.0.0, pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== + "args" "^5.0.1" + "chalk" "^4.0.0" + "dateformat" "^4.5.1" + "fast-safe-stringify" "^2.0.7" + "jmespath" "^0.15.0" + "joycon" "^2.2.5" + "pump" "^3.0.0" + "readable-stream" "^3.6.0" + "rfdc" "^1.3.0" + "split2" "^3.1.1" + "strip-json-comments" "^3.1.1" + +"pino-std-serializers@^3.1.0": + "integrity" "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg==" + "resolved" "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz" + "version" "3.2.0" + +"pino@^6.13.0", "pino@^6.8.0": + "integrity" "sha512-QQf67BU+cANnc/2U+wzUV20UjO5oBryWpnNyKshdLfT9BdeiXlh9wxLGmOjAuBWMYITdMs+BtJSQQNlGRNbWpA==" + "resolved" "https://registry.npmjs.org/pino/-/pino-6.13.1.tgz" + "version" "6.13.1" + dependencies: + "fast-redact" "^3.0.0" + "fast-safe-stringify" "^2.0.8" + "fastify-warning" "^0.2.0" + "flatstr" "^1.0.12" + "pino-std-serializers" "^3.1.0" + "quick-format-unescaped" "^4.0.3" + "sonic-boom" "^1.0.2" + +"pirates@^4.0.1": + "integrity" "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==" + "resolved" "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz" + "version" "4.0.1" + dependencies: + "node-modules-regexp" "^1.0.0" + +"pkg-dir@^4.2.0": + "integrity" "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==" + "resolved" "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz" + "version" "4.2.0" + dependencies: + "find-up" "^4.0.0" + +"posix-character-classes@^0.1.0": + "integrity" "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "resolved" "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" + "version" "0.1.1" + +"prebuild-install@^6.1.4": + "integrity" "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==" + "resolved" "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz" + "version" "6.1.4" + dependencies: + "detect-libc" "^1.0.3" + "expand-template" "^2.0.3" + "github-from-package" "0.0.0" + "minimist" "^1.2.3" + "mkdirp-classic" "^0.5.3" + "napi-build-utils" "^1.0.1" + "node-abi" "^2.21.0" + "npmlog" "^4.0.1" + "pump" "^3.0.0" + "rc" "^1.2.7" + "simple-get" "^3.0.3" + "tar-fs" "^2.0.0" + "tunnel-agent" "^0.6.0" + +"prelude-ls@^1.2.1": + "integrity" "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + "version" "1.2.1" + +"prelude-ls@~1.1.2": + "integrity" "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" + "version" "1.1.2" + +"prepend-http@^2.0.0": + "integrity" "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "resolved" "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz" + "version" "2.0.0" + +"prettier-linter-helpers@^1.0.0": + "integrity" "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==" + "resolved" "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "fast-diff" "^1.1.2" + +"prettier@^2.1.2", "prettier@>=1.13.0": + "integrity" "sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==" + "resolved" "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz" + "version" "2.3.2" + +"pretty-format@^26.0.0", "pretty-format@^26.6.2": + "integrity" "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz" + "version" "26.6.2" dependencies: "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-breaker@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz" - integrity sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA== - -prompts@^2.0.1: - version "2.4.1" - resolved "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz" - integrity sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -proxy-addr@^2.0.7: - version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -ps-tree@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz" - integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== - dependencies: - event-stream "=3.3.4" - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.33: - version "1.8.0" - resolved "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -pstree.remy@^1.1.7: - version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -pupa@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" - integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== - dependencies: - escape-goat "^2.0.0" - -qs@^6.5.1: - version "6.10.1" - resolved "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== - dependencies: - side-channel "^1.0.4" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.1.2, queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-format-unescaped@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz" - integrity sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -rc@^1.2.7, rc@^1.2.8: - version "1.2.8" - resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -read-pkg-up@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" - integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== - dependencies: - find-up "^4.1.0" - read-pkg "^5.2.0" - type-fest "^0.8.1" - -read-pkg@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" - integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + "ansi-regex" "^5.0.0" + "ansi-styles" "^4.0.0" + "react-is" "^17.0.1" + +"process-nextick-args@~2.0.0": + "integrity" "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" + "version" "2.0.1" + +"progress@^2.0.0": + "integrity" "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + "resolved" "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz" + "version" "2.0.3" + +"promise-breaker@^5.0.0": + "integrity" "sha512-mgsWQuG4kJ1dtO6e/QlNDLFtMkMzzecsC69aI5hlLEjGHFNpHrvGhFi4LiK5jg2SMQj74/diH+wZliL9LpGsyA==" + "resolved" "https://registry.npmjs.org/promise-breaker/-/promise-breaker-5.0.0.tgz" + "version" "5.0.0" + +"prompts@^2.0.1": + "integrity" "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==" + "resolved" "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "kleur" "^3.0.3" + "sisteransi" "^1.0.5" + +"proxy-addr@^2.0.7": + "integrity" "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==" + "resolved" "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + "version" "2.0.7" + dependencies: + "forwarded" "0.2.0" + "ipaddr.js" "1.9.1" + +"ps-tree@^1.2.0": + "integrity" "sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==" + "resolved" "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "event-stream" "=3.3.4" + +"pseudomap@^1.0.2": + "integrity" "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "resolved" "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz" + "version" "1.0.2" + +"psl@^1.1.33": + "integrity" "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "resolved" "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz" + "version" "1.8.0" + +"pstree.remy@^1.1.7": + "integrity" "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "resolved" "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + "version" "1.1.8" + +"pump@^3.0.0": + "integrity" "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==" + "resolved" "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "end-of-stream" "^1.1.0" + "once" "^1.3.1" + +"punycode@^2.1.0", "punycode@^2.1.1": + "integrity" "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" + "version" "2.1.1" + +"pupa@^2.0.1": + "integrity" "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==" + "resolved" "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "escape-goat" "^2.0.0" + +"qs@^6.5.1": + "integrity" "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==" + "resolved" "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz" + "version" "6.10.1" + dependencies: + "side-channel" "^1.0.4" + +"querystring@0.2.0": + "integrity" "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + "resolved" "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz" + "version" "0.2.0" + +"querystringify@^2.1.1": + "integrity" "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "resolved" "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" + "version" "2.2.0" + +"queue-microtask@^1.1.2", "queue-microtask@^1.2.2": + "integrity" "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "resolved" "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + "version" "1.2.3" + +"quick-format-unescaped@^4.0.3": + "integrity" "sha512-MaL/oqh02mhEo5m5J2rwsVL23Iw2PEaGVHgT2vFt8AAsr0lfvQA5dpXo9TPu0rz7tSBdUPgkbam0j/fj5ZM8yg==" + "resolved" "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.3.tgz" + "version" "4.0.3" + +"range-parser@~1.2.1": + "integrity" "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "resolved" "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + "version" "1.2.1" + +"rc@^1.2.7", "rc@^1.2.8": + "integrity" "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==" + "resolved" "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + "version" "1.2.8" + dependencies: + "deep-extend" "^0.6.0" + "ini" "~1.3.0" + "minimist" "^1.2.0" + "strip-json-comments" "~2.0.1" + +"react-is@^17.0.1": + "integrity" "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" + "version" "17.0.2" + +"read-pkg-up@^7.0.1": + "integrity" "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==" + "resolved" "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "find-up" "^4.1.0" + "read-pkg" "^5.2.0" + "type-fest" "^0.8.1" + +"read-pkg@^5.2.0": + "integrity" "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==" + "resolved" "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz" + "version" "5.2.0" dependencies: "@types/normalize-package-data" "^2.4.0" - normalize-package-data "^2.5.0" - parse-json "^5.0.0" - type-fest "^0.6.0" + "normalize-package-data" "^2.5.0" + "parse-json" "^5.0.0" + "type-fest" "^0.6.0" + +"readable-stream@^2.0.6": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^2.3.5": + "integrity" "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" + "version" "2.3.7" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.3" + "isarray" "~1.0.0" + "process-nextick-args" "~2.0.0" + "safe-buffer" "~5.1.1" + "string_decoder" "~1.1.1" + "util-deprecate" "~1.0.1" + +"readable-stream@^3.0.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^3.1.1": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^3.4.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readable-stream@^3.6.0": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" "readable-stream@1.x >=1.1.9": - version "1.1.14" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -"readable-stream@2 || 3", readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.6, readable-stream@^2.3.5: - version "2.3.7" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redis-commands@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz" - integrity sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ== - -redis-errors@^1.0.0, redis-errors@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz" - integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60= - -redis-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz" - integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ= - dependencies: - redis-errors "^1.0.0" - -redis@^3.0.0: - version "3.1.2" - resolved "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz" - integrity sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw== - dependencies: - denque "^1.5.0" - redis-commands "^1.7.0" - redis-errors "^1.2.0" - redis-parser "^3.0.0" - -reflect-metadata@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" - integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + "integrity" "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz" + "version" "1.1.14" + dependencies: + "core-util-is" "~1.0.0" + "inherits" "~2.0.1" + "isarray" "0.0.1" + "string_decoder" "~0.10.x" + +"readable-stream@2 || 3": + "integrity" "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==" + "resolved" "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "inherits" "^2.0.3" + "string_decoder" "^1.1.1" + "util-deprecate" "^1.0.1" + +"readdirp@~3.6.0": + "integrity" "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==" + "resolved" "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + "version" "3.6.0" + dependencies: + "picomatch" "^2.2.1" + +"redis-commands@^1.7.0": + "integrity" "sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==" + "resolved" "https://registry.npmjs.org/redis-commands/-/redis-commands-1.7.0.tgz" + "version" "1.7.0" + +"redis-errors@^1.0.0", "redis-errors@^1.2.0": + "integrity" "sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=" + "resolved" "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz" + "version" "1.2.0" + +"redis-parser@^3.0.0": + "integrity" "sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=" + "resolved" "https://registry.npmjs.org/redis-parser/-/redis-parser-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "redis-errors" "^1.0.0" + +"redis@^3.0.0": + "integrity" "sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==" + "resolved" "https://registry.npmjs.org/redis/-/redis-3.1.2.tgz" + "version" "3.1.2" + dependencies: + "denque" "^1.5.0" + "redis-commands" "^1.7.0" + "redis-errors" "^1.2.0" + "redis-parser" "^3.0.0" + +"reflect-metadata@^0.1.13": + "integrity" "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "resolved" "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + "version" "0.1.13" + +"regenerate-unicode-properties@^8.2.0": + "integrity" "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==" + "resolved" "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz" + "version" "8.2.0" + dependencies: + "regenerate" "^1.4.0" + +"regenerate@^1.4.0": + "integrity" "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" + "resolved" "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz" + "version" "1.4.2" + +"regenerator-runtime@^0.13.4": + "integrity" "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz" + "version" "0.13.9" + +"regenerator-transform@^0.14.2": + "integrity" "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz" + "version" "0.14.5" dependencies: "@babel/runtime" "^7.8.4" -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -registry-auth-token@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz" - integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== - dependencies: - rc "^1.2.8" - -registry-url@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" - integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== - dependencies: - rc "^1.2.8" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -remove-trailing-slash@^0.1.0: - version "0.1.1" - resolved "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz" - integrity sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@^1.0.0, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -responselike@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" - integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= - dependencies: - lowercase-keys "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -ret@~0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz" - integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== - -reusify@^1.0.0, reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.1.4, rfdc@^1.2.0, rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^2.6.1: - version "2.7.1" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rsvp@^4.8.4: - version "4.8.5" - resolved "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" - integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +"regex-not@^1.0.0", "regex-not@^1.0.2": + "integrity" "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==" + "resolved" "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "extend-shallow" "^3.0.2" + "safe-regex" "^1.1.0" + +"regexpp@^3.1.0": + "integrity" "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" + "resolved" "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz" + "version" "3.2.0" + +"regexpu-core@^4.7.1": + "integrity" "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==" + "resolved" "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz" + "version" "4.7.1" + dependencies: + "regenerate" "^1.4.0" + "regenerate-unicode-properties" "^8.2.0" + "regjsgen" "^0.5.1" + "regjsparser" "^0.6.4" + "unicode-match-property-ecmascript" "^1.0.4" + "unicode-match-property-value-ecmascript" "^1.2.0" + +"registry-auth-token@^4.0.0": + "integrity" "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==" + "resolved" "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz" + "version" "4.2.1" + dependencies: + "rc" "^1.2.8" + +"registry-url@^5.0.0": + "integrity" "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==" + "resolved" "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz" + "version" "5.1.0" + dependencies: + "rc" "^1.2.8" + +"regjsgen@^0.5.1": + "integrity" "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + "resolved" "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz" + "version" "0.5.2" + +"regjsparser@^0.6.4": + "integrity" "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==" + "resolved" "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz" + "version" "0.6.9" + dependencies: + "jsesc" "~0.5.0" + +"remove-trailing-separator@^1.0.1": + "integrity" "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "resolved" "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz" + "version" "1.1.0" + +"remove-trailing-slash@^0.1.0": + "integrity" "sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==" + "resolved" "https://registry.npmjs.org/remove-trailing-slash/-/remove-trailing-slash-0.1.1.tgz" + "version" "0.1.1" + +"repeat-element@^1.1.2": + "integrity" "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + "resolved" "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz" + "version" "1.1.4" + +"repeat-string@^1.6.1": + "integrity" "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "resolved" "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz" + "version" "1.6.1" + +"require-directory@^2.1.1": + "integrity" "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "resolved" "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" + "version" "2.1.1" + +"require-from-string@^2.0.2": + "integrity" "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "resolved" "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + "version" "2.0.2" + +"require-main-filename@^2.0.0": + "integrity" "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "resolved" "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz" + "version" "2.0.0" + +"requires-port@^1.0.0": + "integrity" "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + "resolved" "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" + "version" "1.0.0" + +"resolve-cwd@^3.0.0": + "integrity" "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==" + "resolved" "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "resolve-from" "^5.0.0" + +"resolve-from@^4.0.0": + "integrity" "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + "version" "4.0.0" + +"resolve-from@^5.0.0": + "integrity" "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "resolved" "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" + "version" "5.0.0" + +"resolve-url@^0.2.1": + "integrity" "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "resolved" "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz" + "version" "0.2.1" + +"resolve@^1.0.0", "resolve@^1.10.0", "resolve@^1.14.2", "resolve@^1.18.1": + "integrity" "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==" + "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz" + "version" "1.20.0" + dependencies: + "is-core-module" "^2.2.0" + "path-parse" "^1.0.6" + +"responselike@^1.0.2": + "integrity" "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=" + "resolved" "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "lowercase-keys" "^1.0.0" + +"restore-cursor@^3.1.0": + "integrity" "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==" + "resolved" "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "onetime" "^5.1.0" + "signal-exit" "^3.0.2" + +"ret@~0.1.10": + "integrity" "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "resolved" "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz" + "version" "0.1.15" + +"ret@~0.2.0": + "integrity" "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==" + "resolved" "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz" + "version" "0.2.2" + +"reusify@^1.0.0", "reusify@^1.0.4": + "integrity" "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "resolved" "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + "version" "1.0.4" + +"rfdc@^1.1.4", "rfdc@^1.2.0", "rfdc@^1.3.0": + "integrity" "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" + "resolved" "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz" + "version" "1.3.0" + +"rimraf@^2.6.1": + "integrity" "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" + "version" "2.7.1" + dependencies: + "glob" "^7.1.3" + +"rimraf@^3.0.0", "rimraf@^3.0.2": + "integrity" "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==" + "resolved" "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "glob" "^7.1.3" + +"rsvp@^4.8.4": + "integrity" "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==" + "resolved" "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz" + "version" "4.8.5" + +"run-parallel@^1.1.9": + "integrity" "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==" + "resolved" "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "queue-microtask" "^1.2.2" + +"rxjs@^6.6.3": + "integrity" "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==" + "resolved" "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" + "version" "6.6.7" + dependencies: + "tslib" "^1.9.0" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^6.6.3: - version "6.6.7" - resolved "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== - dependencies: - tslib "^1.9.0" +"safe-buffer@^5.0.1", "safe-buffer@^5.1.2", "safe-buffer@~5.2.0", "safe-buffer@~5.2.1": + "integrity" "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + "version" "5.2.1" -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +"safe-buffer@~5.1.0", "safe-buffer@~5.1.1": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@~5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" + +"safe-buffer@5.1.2": + "integrity" "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "resolved" "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + "version" "5.1.2" -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0, safe-buffer@~5.2.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex2@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz" - integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== +"safe-regex@^1.1.0": + "integrity" "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=" + "resolved" "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" + "version" "1.1.0" dependencies: - ret "~0.2.0" + "ret" "~0.1.10" -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= +"safe-regex2@^2.0.0": + "integrity" "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==" + "resolved" "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz" + "version" "2.0.0" dependencies: - ret "~0.1.10" + "ret" "~0.2.0" "safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + "integrity" "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "resolved" "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + "version" "2.1.2" -sane@^4.0.3: - version "4.1.0" - resolved "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz" - integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== +"sane@^4.0.3": + "integrity" "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==" + "resolved" "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz" + "version" "4.1.0" dependencies: "@cnakazawa/watch" "^1.0.3" - anymatch "^2.0.0" - capture-exit "^2.0.0" - exec-sh "^0.3.2" - execa "^1.0.0" - fb-watchman "^2.0.0" - micromatch "^3.1.4" - minimist "^1.1.1" - walker "~1.0.5" - -saslprep@^1.0.0: - version "1.0.3" - resolved "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz" - integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== - dependencies: - sparse-bitfield "^3.0.3" - -sax@>=0.6.0: - version "1.2.4" - resolved "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -secure-json-parse@^2.0.0, secure-json-parse@^2.4.0: - version "2.4.0" - resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz" - integrity sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg== - -semver-diff@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz" - integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== - dependencies: - semver "^6.3.0" - -semver-store@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz" - integrity sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg== - -"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@7.x, semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -send@^0.17.1: - version "0.17.1" - resolved "https://registry.npmjs.org/send/-/send-0.17.1.tgz" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-cookie-parser@^2.4.1: - version "2.4.8" - resolved "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz" - integrity sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg== - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sharp@^0.29.0: - version "0.29.1" - resolved "https://registry.npmjs.org/sharp/-/sharp-0.29.1.tgz" - integrity sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ== - dependencies: - color "^4.0.1" - detect-libc "^1.0.3" - node-addon-api "^4.1.0" - prebuild-install "^6.1.4" - semver "^7.3.5" - simple-get "^3.1.0" - tar-fs "^2.1.1" - tunnel-agent "^0.6.0" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^3.0.3, simple-get@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socket.io-adapter@~1.1.0: - version "1.1.2" - resolved "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz" - integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== - -socket.io-client@2.4.0, socket.io-client@^2.3.1: - version "2.4.0" - resolved "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz" - integrity sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ== - dependencies: - backo2 "1.0.2" - component-bind "1.0.0" - component-emitter "~1.3.0" - debug "~3.1.0" - engine.io-client "~3.5.0" - has-binary2 "~1.0.2" - indexof "0.0.1" - parseqs "0.0.6" - parseuri "0.0.6" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-parser@*: - version "4.0.4" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz" - integrity sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g== + "anymatch" "^2.0.0" + "capture-exit" "^2.0.0" + "exec-sh" "^0.3.2" + "execa" "^1.0.0" + "fb-watchman" "^2.0.0" + "micromatch" "^3.1.4" + "minimist" "^1.1.1" + "walker" "~1.0.5" + +"saslprep@^1.0.0": + "integrity" "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==" + "resolved" "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz" + "version" "1.0.3" + dependencies: + "sparse-bitfield" "^3.0.3" + +"sax@>=0.6.0": + "integrity" "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "resolved" "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz" + "version" "1.2.4" + +"saxes@^5.0.1": + "integrity" "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==" + "resolved" "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "xmlchars" "^2.2.0" + +"secure-json-parse@^2.0.0", "secure-json-parse@^2.4.0": + "integrity" "sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==" + "resolved" "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.4.0.tgz" + "version" "2.4.0" + +"semver-diff@^3.1.1": + "integrity" "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==" + "resolved" "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "semver" "^6.3.0" + +"semver-store@^0.3.0": + "integrity" "sha512-TcZvGMMy9vodEFSse30lWinkj+JgOBvPn8wRItpQRSayhc+4ssDs335uklkfvQQJgL/WvmHLVj4Ycv2s7QCQMg==" + "resolved" "https://registry.npmjs.org/semver-store/-/semver-store-0.3.0.tgz" + "version" "0.3.0" + +"semver@^5.4.1": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.5.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.6.0": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^5.7.1": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@^6.0.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.2.0", "semver@^6.3.0": + "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" + "version" "6.3.0" + +"semver@^7.2.1": + "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + "version" "7.3.5" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.3.2": + "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + "version" "7.3.5" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.3.4": + "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + "version" "7.3.5" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.3.5": + "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + "version" "7.3.5" + dependencies: + "lru-cache" "^6.0.0" + +"semver@2 || 3 || 4 || 5": + "integrity" "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + "version" "5.7.1" + +"semver@7.0.0": + "integrity" "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + "version" "7.0.0" + +"semver@7.x": + "integrity" "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz" + "version" "7.3.5" + dependencies: + "lru-cache" "^6.0.0" + +"send@^0.17.1": + "integrity" "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==" + "resolved" "https://registry.npmjs.org/send/-/send-0.17.1.tgz" + "version" "0.17.1" + dependencies: + "debug" "2.6.9" + "depd" "~1.1.2" + "destroy" "~1.0.4" + "encodeurl" "~1.0.2" + "escape-html" "~1.0.3" + "etag" "~1.8.1" + "fresh" "0.5.2" + "http-errors" "~1.7.2" + "mime" "1.6.0" + "ms" "2.1.1" + "on-finished" "~2.3.0" + "range-parser" "~1.2.1" + "statuses" "~1.5.0" + +"set-blocking@^2.0.0", "set-blocking@~2.0.0": + "integrity" "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "resolved" "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz" + "version" "2.0.0" + +"set-cookie-parser@^2.4.1": + "integrity" "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==" + "resolved" "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz" + "version" "2.4.8" + +"set-value@^2.0.0", "set-value@^2.0.1": + "integrity" "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==" + "resolved" "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz" + "version" "2.0.1" + dependencies: + "extend-shallow" "^2.0.1" + "is-extendable" "^0.1.1" + "is-plain-object" "^2.0.3" + "split-string" "^3.0.1" + +"setprototypeof@1.1.1": + "integrity" "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz" + "version" "1.1.1" + +"setprototypeof@1.2.0": + "integrity" "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "resolved" "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + "version" "1.2.0" + +"sharp@^0.29.0": + "integrity" "sha512-DpgdAny9TuS+oWCQ7MRS8XyY9x6q1+yW3a5wNx0J3HrGuB/Jot/8WcT+lElHY9iJu2pwtegSGxqMaqFiMhs4rQ==" + "resolved" "https://registry.npmjs.org/sharp/-/sharp-0.29.1.tgz" + "version" "0.29.1" + dependencies: + "color" "^4.0.1" + "detect-libc" "^1.0.3" + "node-addon-api" "^4.1.0" + "prebuild-install" "^6.1.4" + "semver" "^7.3.5" + "simple-get" "^3.1.0" + "tar-fs" "^2.1.1" + "tunnel-agent" "^0.6.0" + +"shebang-command@^1.2.0": + "integrity" "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz" + "version" "1.2.0" + dependencies: + "shebang-regex" "^1.0.0" + +"shebang-command@^2.0.0": + "integrity" "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==" + "resolved" "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "shebang-regex" "^3.0.0" + +"shebang-regex@^1.0.0": + "integrity" "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz" + "version" "1.0.0" + +"shebang-regex@^3.0.0": + "integrity" "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "resolved" "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + "version" "3.0.0" + +"shellwords@^0.1.1": + "integrity" "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==" + "resolved" "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz" + "version" "0.1.1" + +"side-channel@^1.0.4": + "integrity" "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==" + "resolved" "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.0" + "get-intrinsic" "^1.0.2" + "object-inspect" "^1.9.0" + +"signal-exit@^3.0.0", "signal-exit@^3.0.2": + "integrity" "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + "resolved" "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" + "version" "3.0.3" + +"simple-concat@^1.0.0": + "integrity" "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + "resolved" "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + "version" "1.0.1" + +"simple-get@^3.0.3", "simple-get@^3.1.0": + "integrity" "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==" + "resolved" "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "decompress-response" "^4.2.0" + "once" "^1.3.1" + "simple-concat" "^1.0.0" + +"simple-swizzle@^0.2.2": + "integrity" "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=" + "resolved" "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" + "version" "0.2.2" + dependencies: + "is-arrayish" "^0.3.1" + +"sisteransi@^1.0.5": + "integrity" "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "resolved" "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" + "version" "1.0.5" + +"slash@^3.0.0": + "integrity" "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "resolved" "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + "version" "3.0.0" + +"slice-ansi@^4.0.0": + "integrity" "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==" + "resolved" "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "astral-regex" "^2.0.0" + "is-fullwidth-code-point" "^3.0.0" + +"snapdragon-node@^2.0.1": + "integrity" "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==" + "resolved" "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "define-property" "^1.0.0" + "isobject" "^3.0.0" + "snapdragon-util" "^3.0.1" + +"snapdragon-util@^3.0.1": + "integrity" "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==" + "resolved" "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "kind-of" "^3.2.0" + +"snapdragon@^0.8.1": + "integrity" "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==" + "resolved" "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz" + "version" "0.8.2" + dependencies: + "base" "^0.11.1" + "debug" "^2.2.0" + "define-property" "^0.2.5" + "extend-shallow" "^2.0.1" + "map-cache" "^0.2.2" + "source-map" "^0.5.6" + "source-map-resolve" "^0.5.0" + "use" "^3.1.0" + +"socket.io-adapter@~1.1.0": + "integrity" "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + "resolved" "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz" + "version" "1.1.2" + +"socket.io-client@^2.3.1", "socket.io-client@2.4.0": + "integrity" "sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ==" + "resolved" "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.4.0.tgz" + "version" "2.4.0" + dependencies: + "backo2" "1.0.2" + "component-bind" "1.0.0" + "component-emitter" "~1.3.0" + "debug" "~3.1.0" + "engine.io-client" "~3.5.0" + "has-binary2" "~1.0.2" + "indexof" "0.0.1" + "parseqs" "0.0.6" + "parseuri" "0.0.6" + "socket.io-parser" "~3.3.0" + "to-array" "0.1.4" + +"socket.io-parser@*": + "integrity" "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==" + "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz" + "version" "4.0.4" dependencies: "@types/component-emitter" "^1.2.10" - component-emitter "~1.3.0" - debug "~4.3.1" - -socket.io-parser@~3.3.0: - version "3.3.2" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz" - integrity sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg== - dependencies: - component-emitter "~1.3.0" - debug "~3.1.0" - isarray "2.0.1" - -socket.io-parser@~3.4.0: - version "3.4.1" - resolved "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz" - integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== - dependencies: - component-emitter "1.2.1" - debug "~4.1.0" - isarray "2.0.1" - -socket.io-redis@^5.4.0: - version "5.4.0" - resolved "https://registry.npmjs.org/socket.io-redis/-/socket.io-redis-5.4.0.tgz" - integrity sha512-yCQm/Sywd3d08WXUfZRxt6O+JV2vWoPgWK6GVjiM0GkBtq5cpLOk8oILRPKbzTv1VEtSYmK41q0xzcgDinMbmQ== - dependencies: - debug "~4.1.0" - notepack.io "~2.2.0" - redis "^3.0.0" - socket.io-adapter "~1.1.0" - uid2 "0.0.3" - -socket.io@^2.3.0: - version "2.4.1" - resolved "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz" - integrity sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w== - dependencies: - debug "~4.1.0" - engine.io "~3.5.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.4.0" - socket.io-parser "~3.4.0" - -socketio-jwt@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/socketio-jwt/-/socketio-jwt-4.6.2.tgz" - integrity sha512-bcCnit/cCvqtC921Gwuqor+LpLKrpREmPACVgLfdbFBL95w2nPF7lOxsOxyeRrhc5Kot/1jUSW5+kLo23zJIMA== - dependencies: - jsonwebtoken "^8.3.0" - xtend "~2.1.2" - -sonic-boom@^1.0.2: - version "1.4.1" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz" - integrity sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg== - dependencies: - atomic-sleep "^1.0.0" - flatstr "^1.0.12" - -sonic-boom@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.1.0.tgz" - integrity sha512-x2j9LXx27EDlyZEC32gBM+scNVMdPutU7FIKV2BOTKCnPrp7bY5BsplCMQ4shYYR3IhDSIrEXoqb6GlS+z7KyQ== - dependencies: - atomic-sleep "^1.0.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.12, source-map-support@^0.5.17, source-map-support@^0.5.6: - version "0.5.19" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sparse-bitfield@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" - integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= - dependencies: - memory-pager "^1.0.2" - -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.10" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz" - integrity sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -split2@^3.1.1: - version "3.2.2" - resolved "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" - -split@0.3: - version "0.3.3" - resolved "https://registry.npmjs.org/split/-/split-0.3.3.tgz" - integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= - dependencies: - through "2" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz" - integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw== - dependencies: - escape-string-regexp "^2.0.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -steed@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/steed/-/steed-1.1.3.tgz" - integrity sha1-8VJd1a2xLrIb90dJU3Zo1iW5q8U= - dependencies: - fastfall "^1.5.0" - fastparallel "^2.2.0" - fastq "^1.3.0" - fastseries "^1.7.0" - reusify "^1.0.0" - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz" - integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= - dependencies: - duplexer "~0.1.1" - -stream-wormhole@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz" - integrity sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew== - -streamsearch@0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz" - integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= - -string-argv@^0.1.1: - version "0.1.2" - resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.1.2.tgz" - integrity sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-similarity@^4.0.1: - version "4.0.4" - resolved "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz" - integrity sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ== - -string-width@^1.0.1, "string-width@^1.0.2 || 2": - version "1.0.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.trimend@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" - integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string.prototype.trimstart@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" - integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -superagent@^3.8.3: - version "3.8.3" - resolved "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz" - integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA== - dependencies: - component-emitter "^1.2.0" - cookiejar "^2.1.0" - debug "^3.1.0" - extend "^3.0.0" - form-data "^2.3.1" - formidable "^1.2.0" - methods "^1.1.1" - mime "^1.4.1" - qs "^6.5.1" - readable-stream "^2.3.5" - -supertest@4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz" - integrity sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ== - dependencies: - methods "^1.1.2" - superagent "^3.8.3" - -supports-color@^5.3.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -table@^6.0.9: - version "6.7.1" - resolved "https://registry.npmjs.org/table/-/table-6.7.1.tgz" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -tar-fs@^2.0.0, tar-fs@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.1.4" - -tar-stream@^2.1.4: - version "2.2.0" - resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" - integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== - dependencies: - bl "^4.0.3" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^6.1.0: - version "6.1.10" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.10.tgz" - integrity sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -term-size@^2.1.0: - version "2.2.1" - resolved "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz" - integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + "component-emitter" "~1.3.0" + "debug" "~4.3.1" + +"socket.io-parser@~3.3.0": + "integrity" "sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg==" + "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.2.tgz" + "version" "3.3.2" + dependencies: + "component-emitter" "~1.3.0" + "debug" "~3.1.0" + "isarray" "2.0.1" + +"socket.io-parser@~3.4.0": + "integrity" "sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A==" + "resolved" "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.1.tgz" + "version" "3.4.1" + dependencies: + "component-emitter" "1.2.1" + "debug" "~4.1.0" + "isarray" "2.0.1" + +"socket.io-redis@^5.4.0": + "integrity" "sha512-yCQm/Sywd3d08WXUfZRxt6O+JV2vWoPgWK6GVjiM0GkBtq5cpLOk8oILRPKbzTv1VEtSYmK41q0xzcgDinMbmQ==" + "resolved" "https://registry.npmjs.org/socket.io-redis/-/socket.io-redis-5.4.0.tgz" + "version" "5.4.0" + dependencies: + "debug" "~4.1.0" + "notepack.io" "~2.2.0" + "redis" "^3.0.0" + "socket.io-adapter" "~1.1.0" + "uid2" "0.0.3" + +"socket.io@^2.3.0": + "integrity" "sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w==" + "resolved" "https://registry.npmjs.org/socket.io/-/socket.io-2.4.1.tgz" + "version" "2.4.1" + dependencies: + "debug" "~4.1.0" + "engine.io" "~3.5.0" + "has-binary2" "~1.0.2" + "socket.io-adapter" "~1.1.0" + "socket.io-client" "2.4.0" + "socket.io-parser" "~3.4.0" + +"socketio-jwt@^4.6.2": + "integrity" "sha512-bcCnit/cCvqtC921Gwuqor+LpLKrpREmPACVgLfdbFBL95w2nPF7lOxsOxyeRrhc5Kot/1jUSW5+kLo23zJIMA==" + "resolved" "https://registry.npmjs.org/socketio-jwt/-/socketio-jwt-4.6.2.tgz" + "version" "4.6.2" + dependencies: + "jsonwebtoken" "^8.3.0" + "xtend" "~2.1.2" + +"sonic-boom@^1.0.2": + "integrity" "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==" + "resolved" "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz" + "version" "1.4.1" + dependencies: + "atomic-sleep" "^1.0.0" + "flatstr" "^1.0.12" + +"sonic-boom@^2.1.0": + "integrity" "sha512-x2j9LXx27EDlyZEC32gBM+scNVMdPutU7FIKV2BOTKCnPrp7bY5BsplCMQ4shYYR3IhDSIrEXoqb6GlS+z7KyQ==" + "resolved" "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "atomic-sleep" "^1.0.0" + +"source-map-resolve@^0.5.0": + "integrity" "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==" + "resolved" "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz" + "version" "0.5.3" + dependencies: + "atob" "^2.1.2" + "decode-uri-component" "^0.2.0" + "resolve-url" "^0.2.1" + "source-map-url" "^0.4.0" + "urix" "^0.1.0" + +"source-map-support@^0.5.12", "source-map-support@^0.5.17", "source-map-support@^0.5.6": + "integrity" "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz" + "version" "0.5.19" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + +"source-map-url@^0.4.0": + "integrity" "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" + "version" "0.4.1" + +"source-map@^0.5.0", "source-map@^0.5.6": + "integrity" "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz" + "version" "0.5.7" + +"source-map@^0.6.0": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"source-map@^0.7.3": + "integrity" "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz" + "version" "0.7.3" + +"source-map@~0.6.1": + "integrity" "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "resolved" "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + "version" "0.6.1" + +"sparse-bitfield@^3.0.3": + "integrity" "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=" + "resolved" "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "memory-pager" "^1.0.2" + +"spdx-correct@^3.0.0": + "integrity" "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==" + "resolved" "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz" + "version" "3.1.1" + dependencies: + "spdx-expression-parse" "^3.0.0" + "spdx-license-ids" "^3.0.0" + +"spdx-exceptions@^2.1.0": + "integrity" "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "resolved" "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz" + "version" "2.3.0" + +"spdx-expression-parse@^3.0.0": + "integrity" "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==" + "resolved" "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "spdx-exceptions" "^2.1.0" + "spdx-license-ids" "^3.0.0" + +"spdx-license-ids@^3.0.0": + "integrity" "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==" + "resolved" "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz" + "version" "3.0.10" + +"split-string@^3.0.1", "split-string@^3.0.2": + "integrity" "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==" + "resolved" "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "extend-shallow" "^3.0.0" + +"split@0.3": + "integrity" "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=" + "resolved" "https://registry.npmjs.org/split/-/split-0.3.3.tgz" + "version" "0.3.3" + dependencies: + "through" "2" + +"split2@^3.1.1": + "integrity" "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==" + "resolved" "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz" + "version" "3.2.2" + dependencies: + "readable-stream" "^3.0.0" + +"sprintf-js@~1.0.2": + "integrity" "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "resolved" "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" + "version" "1.0.3" + +"stack-utils@^2.0.2": + "integrity" "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==" + "resolved" "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "escape-string-regexp" "^2.0.0" + +"static-extend@^0.1.1": + "integrity" "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=" + "resolved" "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz" + "version" "0.1.2" + dependencies: + "define-property" "^0.2.5" + "object-copy" "^0.1.0" + +"statuses@>= 1.5.0 < 2", "statuses@~1.5.0": + "integrity" "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "resolved" "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" + "version" "1.5.0" + +"steed@^1.1.3": + "integrity" "sha1-8VJd1a2xLrIb90dJU3Zo1iW5q8U=" + "resolved" "https://registry.npmjs.org/steed/-/steed-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "fastfall" "^1.5.0" + "fastparallel" "^2.2.0" + "fastq" "^1.3.0" + "fastseries" "^1.7.0" + "reusify" "^1.0.0" + +"stream-combiner@~0.0.4": + "integrity" "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=" + "resolved" "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz" + "version" "0.0.4" + dependencies: + "duplexer" "~0.1.1" + +"stream-wormhole@^1.1.0": + "integrity" "sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew==" + "resolved" "https://registry.npmjs.org/stream-wormhole/-/stream-wormhole-1.1.0.tgz" + "version" "1.1.0" + +"streamsearch@0.1.2": + "integrity" "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + "resolved" "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz" + "version" "0.1.2" + +"string_decoder@^1.1.1": + "integrity" "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + "version" "1.3.0" + dependencies: + "safe-buffer" "~5.2.0" + +"string_decoder@~0.10.x": + "integrity" "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz" + "version" "0.10.31" + +"string_decoder@~1.1.1": + "integrity" "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==" + "resolved" "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + "version" "1.1.1" + dependencies: + "safe-buffer" "~5.1.0" + +"string-argv@^0.1.1": + "integrity" "sha512-mBqPGEOMNJKXRo7z0keX0wlAhbBAjilUdPW13nN0PecVryZxdHIeM7TqbsSUA7VYuS00HGC6mojP7DlQzfa9ZA==" + "resolved" "https://registry.npmjs.org/string-argv/-/string-argv-0.1.2.tgz" + "version" "0.1.2" + +"string-length@^4.0.1": + "integrity" "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==" + "resolved" "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "char-regex" "^1.0.2" + "strip-ansi" "^6.0.0" + +"string-similarity@^4.0.1": + "integrity" "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ==" + "resolved" "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz" + "version" "4.0.4" + +"string-width@^1.0.1", "string-width@^1.0.2 || 2": + "integrity" "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "code-point-at" "^1.0.0" + "is-fullwidth-code-point" "^1.0.0" + "strip-ansi" "^3.0.0" + +"string-width@^3.0.0": + "integrity" "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "emoji-regex" "^7.0.1" + "is-fullwidth-code-point" "^2.0.0" + "strip-ansi" "^5.1.0" + +"string-width@^4.0.0": + "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"string-width@^4.1.0", "string-width@^4.2.0": + "integrity" "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz" + "version" "4.2.2" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.0" + +"string.prototype.trimend@^1.0.4": + "integrity" "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==" + "resolved" "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"string.prototype.trimstart@^1.0.4": + "integrity" "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==" + "resolved" "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "call-bind" "^1.0.2" + "define-properties" "^1.1.3" + +"strip-ansi@^3.0.0": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^3.0.1": + "integrity" "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz" + "version" "3.0.1" + dependencies: + "ansi-regex" "^2.0.0" + +"strip-ansi@^5.1.0": + "integrity" "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz" + "version" "5.2.0" + dependencies: + "ansi-regex" "^4.1.0" + +"strip-ansi@^6.0.0": + "integrity" "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==" + "resolved" "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "ansi-regex" "^5.0.0" + +"strip-bom@^3.0.0": + "integrity" "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + "version" "3.0.0" + +"strip-bom@^4.0.0": + "integrity" "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==" + "resolved" "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz" + "version" "4.0.0" + +"strip-eof@^1.0.0": + "integrity" "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "resolved" "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz" + "version" "1.0.0" + +"strip-final-newline@^2.0.0": + "integrity" "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "resolved" "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" + "version" "2.0.0" + +"strip-json-comments@^2.0.0": + "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"strip-json-comments@^3.1.0", "strip-json-comments@^3.1.1": + "integrity" "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + "version" "3.1.1" + +"strip-json-comments@~2.0.1": + "integrity" "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "resolved" "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + "version" "2.0.1" + +"superagent@^3.8.3": + "integrity" "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==" + "resolved" "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz" + "version" "3.8.3" + dependencies: + "component-emitter" "^1.2.0" + "cookiejar" "^2.1.0" + "debug" "^3.1.0" + "extend" "^3.0.0" + "form-data" "^2.3.1" + "formidable" "^1.2.0" + "methods" "^1.1.1" + "mime" "^1.4.1" + "qs" "^6.5.1" + "readable-stream" "^2.3.5" + +"supertest@4.0.2": + "integrity" "sha512-1BAbvrOZsGA3YTCWqbmh14L0YEq0EGICX/nBnfkfVJn7SrxQV1I3pMYjSzG9y/7ZU2V9dWqyqk2POwxlb09duQ==" + "resolved" "https://registry.npmjs.org/supertest/-/supertest-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "methods" "^1.1.2" + "superagent" "^3.8.3" + +"supports-color@^5.3.0", "supports-color@^5.5.0": + "integrity" "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + "version" "5.5.0" + dependencies: + "has-flag" "^3.0.0" + +"supports-color@^7.0.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-color@^7.1.0": + "integrity" "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==" + "resolved" "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + "version" "7.2.0" + dependencies: + "has-flag" "^4.0.0" + +"supports-hyperlinks@^2.0.0": + "integrity" "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==" + "resolved" "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "has-flag" "^4.0.0" + "supports-color" "^7.0.0" + +"symbol-tree@^3.2.4": + "integrity" "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + "resolved" "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz" + "version" "3.2.4" + +"table@^6.0.9": + "integrity" "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==" + "resolved" "https://registry.npmjs.org/table/-/table-6.7.1.tgz" + "version" "6.7.1" + dependencies: + "ajv" "^8.0.1" + "lodash.clonedeep" "^4.5.0" + "lodash.truncate" "^4.4.2" + "slice-ansi" "^4.0.0" + "string-width" "^4.2.0" + "strip-ansi" "^6.0.0" + +"tar-fs@^2.0.0", "tar-fs@^2.1.1": + "integrity" "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==" + "resolved" "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "chownr" "^1.1.1" + "mkdirp-classic" "^0.5.2" + "pump" "^3.0.0" + "tar-stream" "^2.1.4" + +"tar-stream@^2.1.4": + "integrity" "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==" + "resolved" "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + "version" "2.2.0" + dependencies: + "bl" "^4.0.3" + "end-of-stream" "^1.4.1" + "fs-constants" "^1.0.0" + "inherits" "^2.0.3" + "readable-stream" "^3.1.1" + +"tar@^6.1.0": + "integrity" "sha512-kvvfiVvjGMxeUNB6MyYv5z7vhfFRwbwCXJAeL0/lnbrttBVqcMOnpHUf0X42LrPMR8mMpgapkJMchFH4FSHzNA==" + "resolved" "https://registry.npmjs.org/tar/-/tar-6.1.10.tgz" + "version" "6.1.10" + dependencies: + "chownr" "^2.0.0" + "fs-minipass" "^2.0.0" + "minipass" "^3.0.0" + "minizlib" "^2.1.1" + "mkdirp" "^1.0.3" + "yallist" "^4.0.0" + +"term-size@^2.1.0": + "integrity" "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==" + "resolved" "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz" + "version" "2.2.1" + +"terminal-link@^2.0.0": + "integrity" "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==" + "resolved" "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "ansi-escapes" "^4.2.1" + "supports-hyperlinks" "^2.0.0" + +"test-exclude@^6.0.0": + "integrity" "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==" + "resolved" "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz" + "version" "6.0.0" dependencies: "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -throat@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz" - integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== - -through2@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - -through@2, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.npmjs.org/through/-/through-2.3.8.tgz" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -tiny-lru@^7.0.0: - version "7.0.6" - resolved "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz" - integrity sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow== - -tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-readable-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" - integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -ts-jest@^26.4.0: - version "26.5.6" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz" - integrity sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - jest-util "^26.1.0" - json5 "2.x" - lodash "4.x" - make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" - -ts-node-dev@^1.1.8: - version "1.1.8" - resolved "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.1.8.tgz" - integrity sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg== - dependencies: - chokidar "^3.5.1" - dynamic-dedupe "^0.3.0" - minimist "^1.2.5" - mkdirp "^1.0.4" - resolve "^1.0.0" - rimraf "^2.6.1" - source-map-support "^0.5.12" - tree-kill "^1.2.2" - ts-node "^9.0.0" - tsconfig "^7.0.0" - -ts-node@^9.0.0: - version "9.1.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" - integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== - dependencies: - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.17" - yn "3.1.1" - -tsc-watch@^4.2.9: - version "4.5.0" - resolved "https://registry.npmjs.org/tsc-watch/-/tsc-watch-4.5.0.tgz" - integrity sha512-aXhN4jY+1YEcn/NwCQ/+fHqU43EqOpW+pS+933EPsVEsrKhvyrodPDIjQsk1a1niFrabAK3RIBrRbAslVefEbQ== - dependencies: - cross-spawn "^7.0.3" - node-cleanup "^2.1.2" - ps-tree "^1.2.0" - string-argv "^0.1.1" - strip-ansi "^6.0.0" - -tsconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" - integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== + "glob" "^7.1.4" + "minimatch" "^3.0.4" + +"text-table@^0.2.0": + "integrity" "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + "resolved" "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + "version" "0.2.0" + +"throat@^5.0.0": + "integrity" "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==" + "resolved" "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz" + "version" "5.0.0" + +"through@~2.3", "through@~2.3.1", "through@2": + "integrity" "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + "resolved" "https://registry.npmjs.org/through/-/through-2.3.8.tgz" + "version" "2.3.8" + +"through2@^3.0.1": + "integrity" "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==" + "resolved" "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "inherits" "^2.0.4" + "readable-stream" "2 || 3" + +"tiny-lru@^7.0.0": + "integrity" "sha512-zNYO0Kvgn5rXzWpL0y3RS09sMK67eGaQj9805jlK9G6pSadfriTczzLHFXa/xcW4mIRfmlB9HyQ/+SgL0V1uow==" + "resolved" "https://registry.npmjs.org/tiny-lru/-/tiny-lru-7.0.6.tgz" + "version" "7.0.6" + +"tmpl@1.0.x": + "integrity" "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=" + "resolved" "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz" + "version" "1.0.4" + +"to-array@0.1.4": + "integrity" "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + "resolved" "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz" + "version" "0.1.4" + +"to-fast-properties@^2.0.0": + "integrity" "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + "resolved" "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz" + "version" "2.0.0" + +"to-object-path@^0.3.0": + "integrity" "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=" + "resolved" "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz" + "version" "0.3.0" + dependencies: + "kind-of" "^3.0.2" + +"to-readable-stream@^1.0.0": + "integrity" "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "resolved" "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz" + "version" "1.0.0" + +"to-regex-range@^2.1.0": + "integrity" "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz" + "version" "2.1.1" + dependencies: + "is-number" "^3.0.0" + "repeat-string" "^1.6.1" + +"to-regex-range@^5.0.1": + "integrity" "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==" + "resolved" "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + "version" "5.0.1" + dependencies: + "is-number" "^7.0.0" + +"to-regex@^3.0.1", "to-regex@^3.0.2": + "integrity" "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==" + "resolved" "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "define-property" "^2.0.2" + "extend-shallow" "^3.0.2" + "regex-not" "^1.0.2" + "safe-regex" "^1.1.0" + +"toidentifier@1.0.0": + "integrity" "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "resolved" "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz" + "version" "1.0.0" + +"touch@^3.1.0": + "integrity" "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==" + "resolved" "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "nopt" "~1.0.10" + +"tough-cookie@^4.0.0": + "integrity" "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==" + "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "psl" "^1.1.33" + "punycode" "^2.1.1" + "universalify" "^0.1.2" + +"tr46@^2.1.0": + "integrity" "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz" + "version" "2.1.0" + dependencies: + "punycode" "^2.1.1" + +"tr46@~0.0.3": + "integrity" "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + "version" "0.0.3" + +"tree-kill@^1.2.2": + "integrity" "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" + "resolved" "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" + "version" "1.2.2" + +"ts-jest@^26.4.0": + "integrity" "sha512-rua+rCP8DxpA8b4DQD/6X2HQS8Zy/xzViVYfEs2OQu68tkCuKLV0Md8pmX55+W24uRIyAsf/BajRfxOs+R2MKA==" + "resolved" "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.6.tgz" + "version" "26.5.6" + dependencies: + "bs-logger" "0.x" + "buffer-from" "1.x" + "fast-json-stable-stringify" "2.x" + "jest-util" "^26.1.0" + "json5" "2.x" + "lodash" "4.x" + "make-error" "1.x" + "mkdirp" "1.x" + "semver" "7.x" + "yargs-parser" "20.x" + +"ts-node-dev@^1.1.8": + "integrity" "sha512-Q/m3vEwzYwLZKmV6/0VlFxcZzVV/xcgOt+Tx/VjaaRHyiBcFlV0541yrT09QjzzCxlDZ34OzKjrFAynlmtflEg==" + "resolved" "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-1.1.8.tgz" + "version" "1.1.8" + dependencies: + "chokidar" "^3.5.1" + "dynamic-dedupe" "^0.3.0" + "minimist" "^1.2.5" + "mkdirp" "^1.0.4" + "resolve" "^1.0.0" + "rimraf" "^2.6.1" + "source-map-support" "^0.5.12" + "tree-kill" "^1.2.2" + "ts-node" "^9.0.0" + "tsconfig" "^7.0.0" + +"ts-node@^9.0.0", "ts-node@>=9.0.0": + "integrity" "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz" + "version" "9.1.1" + dependencies: + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "source-map-support" "^0.5.17" + "yn" "3.1.1" + +"tsc-watch@^4.2.9": + "integrity" "sha512-aXhN4jY+1YEcn/NwCQ/+fHqU43EqOpW+pS+933EPsVEsrKhvyrodPDIjQsk1a1niFrabAK3RIBrRbAslVefEbQ==" + "resolved" "https://registry.npmjs.org/tsc-watch/-/tsc-watch-4.5.0.tgz" + "version" "4.5.0" + dependencies: + "cross-spawn" "^7.0.3" + "node-cleanup" "^2.1.2" + "ps-tree" "^1.2.0" + "string-argv" "^0.1.1" + "strip-ansi" "^6.0.0" + +"tsconfig@^7.0.0": + "integrity" "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==" + "resolved" "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" + "version" "7.0.0" dependencies: "@types/strip-bom" "^3.0.0" "@types/strip-json-comments" "0.0.30" - strip-bom "^3.0.0" - strip-json-comments "^2.0.0" + "strip-bom" "^3.0.0" + "strip-json-comments" "^2.0.0" -tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" - integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== - -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - -type-is@^1.6.18: - version "1.6.18" - resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typescript@^4.0.3: - version "4.3.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== - -uid2@0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz" - integrity sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I= - -unbox-primitive@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" - integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== - dependencies: - function-bind "^1.1.1" - has-bigints "^1.0.1" - has-symbols "^1.0.2" - which-boxed-primitive "^1.0.2" - -undefsafe@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz" - integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== - dependencies: - debug "^2.2.0" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -unique-string@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" - integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== - dependencies: - crypto-random-string "^2.0.0" - -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -unoconv-promise@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/unoconv-promise/-/unoconv-promise-1.0.8.tgz" - integrity sha512-YBVskYpnYj5KQS5aCnE+a+n7jFOmL9dOKzfymw5mKsZhO2K6LrBLAGzReXpOU3x77tTEeJzZYTgrhqIbtF9Acw== - dependencies: - chai "^4.2.0" - debug "^4.1.1" - mime "^2.4.0" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -update-notifier@^4.0.0: - version "4.1.3" - resolved "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz" - integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== - dependencies: - boxen "^4.2.0" - chalk "^3.0.0" - configstore "^5.0.1" - has-yarn "^2.1.0" - import-lazy "^2.1.0" - is-ci "^2.0.0" - is-installed-globally "^0.3.1" - is-npm "^4.0.0" - is-yarn-global "^0.3.0" - latest-version "^5.0.0" - pupa "^2.0.1" - semver-diff "^3.1.1" - xdg-basedir "^4.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" - integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= - dependencies: - prepend-http "^2.0.0" - -url-parse@~1.5.1: - version "1.5.3" - resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz" - integrity sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util@^0.12.3: - version "0.12.4" - resolved "https://registry.npmjs.org/util/-/util-0.12.4.tgz" - integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - safe-buffer "^5.1.2" - which-typed-array "^1.1.2" - -uuid-time@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/uuid-time/-/uuid-time-1.0.0.tgz" - integrity sha1-i7GPpwiZh+8lsMQEcZATPPo6FMY= - -uuid@^8.3.0, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^7.0.0: - version "7.1.2" - resolved "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz" - integrity sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow== +"tslib@^1.8.1", "tslib@^1.9.0", "tslib@^1.9.3": + "integrity" "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "resolved" "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + "version" "1.14.1" + +"tsutils@^3.21.0": + "integrity" "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==" + "resolved" "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + "version" "3.21.0" + dependencies: + "tslib" "^1.8.1" + +"tunnel-agent@^0.6.0": + "integrity" "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=" + "resolved" "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + "version" "0.6.0" + dependencies: + "safe-buffer" "^5.0.1" + +"type-check@^0.4.0", "type-check@~0.4.0": + "integrity" "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + "version" "0.4.0" + dependencies: + "prelude-ls" "^1.2.1" + +"type-check@~0.3.2": + "integrity" "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=" + "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" + "version" "0.3.2" + dependencies: + "prelude-ls" "~1.1.2" + +"type-detect@^4.0.0", "type-detect@^4.0.5", "type-detect@4.0.8": + "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" + "version" "4.0.8" + +"type-fest@^0.20.2": + "integrity" "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + "version" "0.20.2" + +"type-fest@^0.21.3": + "integrity" "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz" + "version" "0.21.3" + +"type-fest@^0.6.0": + "integrity" "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz" + "version" "0.6.0" + +"type-fest@^0.8.1": + "integrity" "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + "resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz" + "version" "0.8.1" + +"type-is@^1.6.18": + "integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==" + "resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" + "version" "1.6.18" + dependencies: + "media-typer" "0.3.0" + "mime-types" "~2.1.24" + +"typedarray-to-buffer@^3.1.5": + "integrity" "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==" + "resolved" "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz" + "version" "3.1.5" + dependencies: + "is-typedarray" "^1.0.0" + +"typescript@*", "typescript@^4.0.3", "typescript@>=2.7", "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", "typescript@>=3.8 <5.0": + "integrity" "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==" + "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz" + "version" "4.3.5" + +"uid2@0.0.3": + "integrity" "sha1-SDEm4Rd03y9xuLY53NeZw3YWK4I=" + "resolved" "https://registry.npmjs.org/uid2/-/uid2-0.0.3.tgz" + "version" "0.0.3" + +"unbox-primitive@^1.0.1": + "integrity" "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==" + "resolved" "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "function-bind" "^1.1.1" + "has-bigints" "^1.0.1" + "has-symbols" "^1.0.2" + "which-boxed-primitive" "^1.0.2" + +"undefsafe@^2.0.2": + "integrity" "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==" + "resolved" "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz" + "version" "2.0.3" + dependencies: + "debug" "^2.2.0" + +"unicode-canonical-property-names-ecmascript@^1.0.4": + "integrity" "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + "resolved" "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz" + "version" "1.0.4" + +"unicode-match-property-ecmascript@^1.0.4": + "integrity" "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==" + "resolved" "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz" + "version" "1.0.4" + dependencies: + "unicode-canonical-property-names-ecmascript" "^1.0.4" + "unicode-property-aliases-ecmascript" "^1.0.4" + +"unicode-match-property-value-ecmascript@^1.2.0": + "integrity" "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + "resolved" "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz" + "version" "1.2.0" + +"unicode-property-aliases-ecmascript@^1.0.4": + "integrity" "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + "resolved" "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz" + "version" "1.1.0" + +"union-value@^1.0.0": + "integrity" "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==" + "resolved" "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz" + "version" "1.0.1" + dependencies: + "arr-union" "^3.1.0" + "get-value" "^2.0.6" + "is-extendable" "^0.1.1" + "set-value" "^2.0.1" + +"unique-string@^2.0.0": + "integrity" "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==" + "resolved" "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "crypto-random-string" "^2.0.0" + +"universalify@^0.1.2": + "integrity" "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" + "version" "0.1.2" + +"universalify@^2.0.0": + "integrity" "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "resolved" "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" + "version" "2.0.0" + +"unoconv-promise@^1.0.8": + "integrity" "sha512-YBVskYpnYj5KQS5aCnE+a+n7jFOmL9dOKzfymw5mKsZhO2K6LrBLAGzReXpOU3x77tTEeJzZYTgrhqIbtF9Acw==" + "resolved" "https://registry.npmjs.org/unoconv-promise/-/unoconv-promise-1.0.8.tgz" + "version" "1.0.8" + dependencies: + "chai" "^4.2.0" + "debug" "^4.1.1" + "mime" "^2.4.0" + +"unset-value@^1.0.0": + "integrity" "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=" + "resolved" "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz" + "version" "1.0.0" + dependencies: + "has-value" "^0.3.1" + "isobject" "^3.0.0" + +"update-notifier@^4.0.0": + "integrity" "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==" + "resolved" "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz" + "version" "4.1.3" + dependencies: + "boxen" "^4.2.0" + "chalk" "^3.0.0" + "configstore" "^5.0.1" + "has-yarn" "^2.1.0" + "import-lazy" "^2.1.0" + "is-ci" "^2.0.0" + "is-installed-globally" "^0.3.1" + "is-npm" "^4.0.0" + "is-yarn-global" "^0.3.0" + "latest-version" "^5.0.0" + "pupa" "^2.0.1" + "semver-diff" "^3.1.1" + "xdg-basedir" "^4.0.0" + +"uri-js@^4.2.2": + "integrity" "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==" + "resolved" "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + "version" "4.4.1" + dependencies: + "punycode" "^2.1.0" + +"urix@^0.1.0": + "integrity" "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "resolved" "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz" + "version" "0.1.0" + +"url-parse-lax@^3.0.0": + "integrity" "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=" + "resolved" "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "prepend-http" "^2.0.0" + +"url-parse@~1.5.1": + "integrity" "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==" + "resolved" "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz" + "version" "1.5.3" + dependencies: + "querystringify" "^2.1.1" + "requires-port" "^1.0.0" + +"use@^3.1.0": + "integrity" "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "resolved" "https://registry.npmjs.org/use/-/use-3.1.1.tgz" + "version" "3.1.1" + +"util-deprecate@^1.0.1", "util-deprecate@~1.0.1": + "integrity" "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + "version" "1.0.2" + +"util@^0.12.3": + "integrity" "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==" + "resolved" "https://registry.npmjs.org/util/-/util-0.12.4.tgz" + "version" "0.12.4" + dependencies: + "inherits" "^2.0.3" + "is-arguments" "^1.0.4" + "is-generator-function" "^1.0.7" + "is-typed-array" "^1.1.3" + "safe-buffer" "^5.1.2" + "which-typed-array" "^1.1.2" + +"uuid-time@^1.0.0": + "integrity" "sha1-i7GPpwiZh+8lsMQEcZATPPo6FMY=" + "resolved" "https://registry.npmjs.org/uuid-time/-/uuid-time-1.0.0.tgz" + "version" "1.0.0" + +"uuid@^8.3.0", "uuid@^8.3.2": + "integrity" "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" + "version" "8.3.2" + +"v8-compile-cache@^2.0.3": + "integrity" "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "resolved" "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz" + "version" "2.3.0" + +"v8-to-istanbul@^7.0.0": + "integrity" "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz" + "version" "7.1.2" dependencies: "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + "convert-source-map" "^1.6.0" + "source-map" "^0.7.3" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== +"validate-npm-package-license@^3.0.1": + "integrity" "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==" + "resolved" "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" + "version" "3.0.4" dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" + "spdx-correct" "^3.0.0" + "spdx-expression-parse" "^3.0.0" -vary@^1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= +"vary@^1.1.2": + "integrity" "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + "version" "1.1.2" -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== +"w3c-hr-time@^1.0.2": + "integrity" "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==" + "resolved" "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz" + "version" "1.0.2" dependencies: - browser-process-hrtime "^1.0.0" + "browser-process-hrtime" "^1.0.0" -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== +"w3c-xmlserializer@^2.0.0": + "integrity" "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==" + "resolved" "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz" + "version" "2.0.0" dependencies: - xml-name-validator "^3.0.0" + "xml-name-validator" "^3.0.0" -walker@^1.0.7, walker@~1.0.5: - version "1.0.7" - resolved "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" - integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= +"walker@^1.0.7", "walker@~1.0.5": + "integrity" "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=" + "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz" + "version" "1.0.7" dependencies: - makeerror "1.0.x" + "makeerror" "1.0.x" -wcwidth@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" - integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= +"wcwidth@^1.0.1": + "integrity" "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=" + "resolved" "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz" + "version" "1.0.1" dependencies: - defaults "^1.0.3" + "defaults" "^1.0.3" -web-encoding@^1.1.5: - version "1.1.5" - resolved "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz" - integrity sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA== +"web-encoding@^1.1.5": + "integrity" "sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==" + "resolved" "https://registry.npmjs.org/web-encoding/-/web-encoding-1.1.5.tgz" + "version" "1.1.5" dependencies: - util "^0.12.3" + "util" "^0.12.3" optionalDependencies: "@zxing/text-encoding" "0.9.0" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -whatwg-url@^8.0.0, whatwg-url@^8.4.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-typed-array@^1.1.2: - version "1.1.6" - resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.6.tgz" - integrity sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q== - dependencies: - available-typed-arrays "^1.0.4" - call-bind "^1.0.2" - es-abstract "^1.18.5" - foreach "^2.0.5" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.6" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.npmjs.org/which/-/which-1.3.1.tgz" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -word-wrap@^1.2.3, word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.2, ws@^7.4.6: - version "7.5.3" - resolved "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz" - integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== - -ws@~7.4.2: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -xdg-basedir@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" - integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xml2js@^0.4.15: - version "0.4.23" - resolved "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - -xml@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz" - integrity sha1-eLpyAgApxbyHuKgaPPzXS0ovweU= - -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xmlhttprequest-ssl@~1.6.2: - version "1.6.3" - resolved "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz" - integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q== - -xtend@^4.0.0, xtend@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -xtend@~2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= - dependencies: - object-keys "~0.4.0" - -y18n@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" - integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@20.x, yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-parser@^18.1.2: - version "18.1.3" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs@^15.4.1: - version "15.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" - integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== - dependencies: - cliui "^6.0.0" - decamelize "^1.2.0" - find-up "^4.1.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^4.2.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^18.1.2" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +"webidl-conversions@^3.0.0": + "integrity" "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + "version" "3.0.1" + +"webidl-conversions@^5.0.0": + "integrity" "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz" + "version" "5.0.0" + +"webidl-conversions@^6.1.0": + "integrity" "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" + "version" "6.1.0" + +"whatwg-encoding@^1.0.5": + "integrity" "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==" + "resolved" "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz" + "version" "1.0.5" + dependencies: + "iconv-lite" "0.4.24" + +"whatwg-mimetype@^2.3.0": + "integrity" "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + "resolved" "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" + "version" "2.3.0" + +"whatwg-url@^5.0.0": + "integrity" "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "tr46" "~0.0.3" + "webidl-conversions" "^3.0.0" + +"whatwg-url@^8.0.0", "whatwg-url@^8.4.0", "whatwg-url@^8.5.0": + "integrity" "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz" + "version" "8.7.0" + dependencies: + "lodash" "^4.7.0" + "tr46" "^2.1.0" + "webidl-conversions" "^6.1.0" + +"which-boxed-primitive@^1.0.2": + "integrity" "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==" + "resolved" "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz" + "version" "1.0.2" + dependencies: + "is-bigint" "^1.0.1" + "is-boolean-object" "^1.1.0" + "is-number-object" "^1.0.4" + "is-string" "^1.0.5" + "is-symbol" "^1.0.3" + +"which-module@^2.0.0": + "integrity" "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "resolved" "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz" + "version" "2.0.0" + +"which-typed-array@^1.1.2": + "integrity" "sha512-DdY984dGD5sQ7Tf+x1CkXzdg85b9uEel6nr4UkFg1LoE9OXv3uRuZhe5CoWdawhGACeFpEZXH8fFLQnDhbpm/Q==" + "resolved" "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.6.tgz" + "version" "1.1.6" + dependencies: + "available-typed-arrays" "^1.0.4" + "call-bind" "^1.0.2" + "es-abstract" "^1.18.5" + "foreach" "^2.0.5" + "has-tostringtag" "^1.0.0" + "is-typed-array" "^1.1.6" + +"which@^1.2.9": + "integrity" "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==" + "resolved" "https://registry.npmjs.org/which/-/which-1.3.1.tgz" + "version" "1.3.1" + dependencies: + "isexe" "^2.0.0" + +"which@^2.0.1", "which@^2.0.2": + "integrity" "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==" + "resolved" "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + "version" "2.0.2" + dependencies: + "isexe" "^2.0.0" + +"wide-align@^1.1.0": + "integrity" "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==" + "resolved" "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz" + "version" "1.1.3" + dependencies: + "string-width" "^1.0.2 || 2" + +"widest-line@^3.1.0": + "integrity" "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==" + "resolved" "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz" + "version" "3.1.0" + dependencies: + "string-width" "^4.0.0" + +"word-wrap@^1.2.3", "word-wrap@~1.2.3": + "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" + "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + "version" "1.2.3" + +"wrap-ansi@^6.2.0": + "integrity" "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz" + "version" "6.2.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrap-ansi@^7.0.0": + "integrity" "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==" + "resolved" "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" + "version" "7.0.0" + dependencies: + "ansi-styles" "^4.0.0" + "string-width" "^4.1.0" + "strip-ansi" "^6.0.0" + +"wrappy@1": + "integrity" "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "resolved" "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + "version" "1.0.2" + +"write-file-atomic@^3.0.0": + "integrity" "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz" + "version" "3.0.3" + dependencies: + "imurmurhash" "^0.1.4" + "is-typedarray" "^1.0.0" + "signal-exit" "^3.0.2" + "typedarray-to-buffer" "^3.1.5" + +"ws@^7.4.2", "ws@^7.4.6": + "integrity" "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz" + "version" "7.5.3" + +"ws@~7.4.2": + "integrity" "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" + "resolved" "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz" + "version" "7.4.6" + +"xdg-basedir@^4.0.0": + "integrity" "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "resolved" "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz" + "version" "4.0.0" + +"xml-name-validator@^3.0.0": + "integrity" "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" + "resolved" "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" + "version" "3.0.0" + +"xml@^1.0.0": + "integrity" "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=" + "resolved" "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz" + "version" "1.0.1" + +"xml2js@^0.4.15": + "integrity" "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==" + "resolved" "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz" + "version" "0.4.23" + dependencies: + "sax" ">=0.6.0" + "xmlbuilder" "~11.0.0" + +"xmlbuilder@~11.0.0": + "integrity" "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + "resolved" "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz" + "version" "11.0.1" + +"xmlchars@^2.2.0": + "integrity" "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + "resolved" "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz" + "version" "2.2.0" + +"xmlhttprequest-ssl@~1.6.2": + "integrity" "sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q==" + "resolved" "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz" + "version" "1.6.3" + +"xtend@^4.0.0": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"xtend@^4.0.2": + "integrity" "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + "version" "4.0.2" + +"xtend@~2.1.2": + "integrity" "sha1-bv7MKk2tjmlixJAbM3znuoe10os=" + "resolved" "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz" + "version" "2.1.2" + dependencies: + "object-keys" "~0.4.0" + +"y18n@^4.0.0": + "integrity" "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz" + "version" "4.0.3" + +"y18n@^5.0.5": + "integrity" "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "resolved" "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" + "version" "5.0.8" + +"yallist@^2.1.2": + "integrity" "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz" + "version" "2.1.2" + +"yallist@^4.0.0": + "integrity" "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "resolved" "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + "version" "4.0.0" + +"yargs-parser@^18.1.2": + "integrity" "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz" + "version" "18.1.3" + dependencies: + "camelcase" "^5.0.0" + "decamelize" "^1.2.0" + +"yargs-parser@^20.2.2", "yargs-parser@20.x": + "integrity" "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" + "version" "20.2.9" + +"yargs@^15.4.1": + "integrity" "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz" + "version" "15.4.1" + dependencies: + "cliui" "^6.0.0" + "decamelize" "^1.2.0" + "find-up" "^4.1.0" + "get-caller-file" "^2.0.1" + "require-directory" "^2.1.1" + "require-main-filename" "^2.0.0" + "set-blocking" "^2.0.0" + "string-width" "^4.2.0" + "which-module" "^2.0.0" + "y18n" "^4.0.0" + "yargs-parser" "^18.1.2" + +"yargs@^16.2.0": + "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" + "version" "16.2.0" + dependencies: + "cliui" "^7.0.2" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.0" + "y18n" "^5.0.5" + "yargs-parser" "^20.2.2" + +"yeast@0.1.2": + "integrity" "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + "resolved" "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz" + "version" "0.1.2" + +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" diff --git a/twake/frontend/src/app/components/configurators/config-body-layer.js b/twake/frontend/src/app/components/configurators/config-body-layer.js index b66fd6b76e..ae031c177a 100755 --- a/twake/frontend/src/app/components/configurators/config-body-layer.js +++ b/twake/frontend/src/app/components/configurators/config-body-layer.js @@ -1,10 +1,10 @@ -import React, { Component } from 'react'; +import React from "react"; -import ConfiguratorsManager from 'app/deprecated/Configurators/ConfiguratorsManager.js'; -import Twacode from 'components/twacode/twacode'; -import WorkspacesApps from 'app/deprecated/workspaces/workspaces_apps.js'; -import CloseIcon from '@material-ui/icons/CloseOutlined'; -import './configurators.scss'; +import ConfiguratorsManager from "app/deprecated/Configurators/ConfiguratorsManager.js"; +import Twacode from "components/twacode/twacode"; +import WorkspacesApps from "app/deprecated/workspaces/workspaces_apps.js"; +import CloseIcon from "@material-ui/icons/CloseOutlined"; +import "./configurators.scss"; /* Where the configurators will be displayed, this component should be in app.js (menus should be over all elements of the page) @@ -40,7 +40,7 @@ export default class ConfigBodyLayer extends React.Component { this.configurator = ConfiguratorsManager.currentConfigurators[ ConfiguratorsManager.configurator_order[ConfiguratorsManager.configurator_order.length - 1] - ]; + ]; } onAction(type, id, context, passives, evt) { if (type == 'interactive_action') { @@ -88,13 +88,12 @@ export default class ConfigBodyLayer extends React.Component { style={{ backgroundImage: 'url(' + - (this.configurator.application.icon_url || - this.configurator.app.identity?.icon) + + (this.configurator.app.identity?.icon) + ')', }} />
- {this.configurator.application.name || this.configurator.app.identity?.name} + { this.configurator.app.identity?.name}
{}); + Api.post(`/internal/services/applications/v1/applications/${app_id}/event`, data, res => {}).then() } unload(workspace_id) { diff --git a/twake/frontend/src/app/features/global/hooks/use-realtime.ts b/twake/frontend/src/app/features/global/hooks/use-realtime.ts index cd874198dc..c32812940b 100644 --- a/twake/frontend/src/app/features/global/hooks/use-realtime.ts +++ b/twake/frontend/src/app/features/global/hooks/use-realtime.ts @@ -1,8 +1,9 @@ -import { useEffect, useRef, useState } from 'react'; -import useWebSocket from 'app/features/global/hooks/use-websocket'; -import Logger from 'app/features/global/framework/logger-service'; -import { RealtimeEventAction } from '../types/realtime-types'; -import { WebsocketRoom } from 'app/features/global/types/websocket-types'; +import { useEffect, useRef, useState } from "react"; +import useWebSocket from "app/features/global/hooks/use-websocket"; +import Logger from "app/features/global/framework/logger-service"; +import { RealtimeBaseAction, RealtimeBaseEvent, RealtimeResourceEvent } from "../types/realtime-types"; +import { WebsocketRoom } from "app/features/global/types/websocket-types"; + const logger = Logger.getLogger('useRealtimeRoom'); @@ -12,8 +13,7 @@ export type RealtimeRoomService = { emit: (event: string, data: T) => void; }; -type RealtimeSimpleEvent = { data: any }; -type RealtimeResourceEvent = { action: RealtimeEventAction; resource: T }; + /** * Subscribe to a room using websocket channel. @@ -28,16 +28,16 @@ type RealtimeResourceEvent = { action: RealtimeEventAction; resource: T }; const useRealtimeRoom = ( roomConf: WebsocketRoom, tagName: string, - onEvent: (action: RealtimeEventAction, event: T) => void, + onEvent: (action: RealtimeBaseAction, event: T) => void, ) => { const { websocket } = useWebSocket(); - const [lastEvent, setLastEvent] = useState<{ action: RealtimeEventAction; payload: T }>(); + const [lastEvent, setLastEvent] = useState<{ action: RealtimeBaseAction; payload: T }>(); const [room, setRoom] = useState(roomConf); const [tag] = useState(tagName); // subscribe once const subscribed = useRef(false); - const newEvent = (event: { action: RealtimeEventAction; payload: T }) => { + const newEvent = (event: { action: RealtimeBaseAction; payload: T }) => { if (event) { setLastEvent(event); onEvent(event.action, event.payload); @@ -60,7 +60,7 @@ const useRealtimeRoom = ( room.room, room.token, tag, - (type: string, event: RealtimeResourceEvent | RealtimeSimpleEvent) => { + (type: string, event: RealtimeBaseEvent) => { logger.debug('Received WebSocket event', type, event); if (type === 'realtime:resource') { newEvent({ @@ -68,8 +68,8 @@ const useRealtimeRoom = ( payload: (event as RealtimeResourceEvent).resource, }); } else if (type === 'realtime:event') { - newEvent({ action: 'event', payload: (event as RealtimeSimpleEvent).data }); - } else if (type === 'realtime:join:success') { + newEvent({ action: 'event', payload: event.data }); + } else if (type === 'realtime:join:success') { logger.debug(`Room ${room} has been joined`); } else { logger.debug('Event type is not supported', type); diff --git a/twake/frontend/src/app/features/global/types/realtime-types.ts b/twake/frontend/src/app/features/global/types/realtime-types.ts index c977975bac..361c809216 100644 --- a/twake/frontend/src/app/features/global/types/realtime-types.ts +++ b/twake/frontend/src/app/features/global/types/realtime-types.ts @@ -8,12 +8,32 @@ export type RealtimeResources = { websockets: WebSocketResource[]; }; -export type RealtimeEventAction = 'saved' | 'updated' | 'deleted' | 'event'; -export type RealtimeEvent = { +export type RealtimeApplicationEventAction = "configure" | "close_configure"; +export type RealtimeEventAction = 'saved' | 'updated' | 'deleted' | 'event'; + +export type RealtimeBaseAction = RealtimeEventAction | RealtimeApplicationEventAction + + +export interface RealtimeBaseEvent{ action: RealtimeEventAction; + data?: any +} + +export interface RealtimeResourceEvent extends RealtimeBaseEvent { resource: T }; + +export interface RealtimeEvent extends RealtimeBaseEvent{ room: string; path: string; type: U; resource: T; }; + + +export interface RealtimeApplicationEvent { + action: "configure" | "close_configure"; + connection_id: string; + application: unknown; + form: unknown; + hidden_data: unknown; +} diff --git a/twake/frontend/src/app/features/users/hooks/use-current-user.ts b/twake/frontend/src/app/features/users/hooks/use-current-user.ts index 1c926bf5e7..b1079bab86 100644 --- a/twake/frontend/src/app/features/users/hooks/use-current-user.ts +++ b/twake/frontend/src/app/features/users/hooks/use-current-user.ts @@ -1,11 +1,12 @@ -import { useEffect, useRef } from 'react'; -import LoginService from 'app/features/auth/login-service'; -import UserAPIClient from 'app/features/users/api/user-api-client'; -import { useRecoilState } from 'recoil'; -import { CurrentUserState } from '../state/atoms/current-user'; -import { useRealtimeRoom } from 'app/features/global/hooks/use-realtime'; -import { UserType } from 'app/features/users/types/user'; -import Languages from 'app/features/global/services/languages-service'; +import { useEffect, useRef } from "react"; +import LoginService from "app/features/auth/login-service"; +import UserAPIClient from "app/features/users/api/user-api-client"; +import { useRecoilState } from "recoil"; +import { CurrentUserState } from "../state/atoms/current-user"; +import { useRealtimeRoom } from "app/features/global/hooks/use-realtime"; +import Languages from "app/features/global/services/languages-service"; +import ConfiguratorsManager from "app/deprecated/Configurators/ConfiguratorsManager.js"; +import { RealtimeApplicationEvent } from "app/features/global/types/realtime-types"; export const useCurrentUser = () => { const [user, setUser] = useRecoilState(CurrentUserState); @@ -36,16 +37,51 @@ export const useCurrentUser = () => { return { user, refresh, updateStatus }; }; + +const applicationEventHandler = (event: RealtimeApplicationEvent) => { + + switch (event.action) { + case "configure": + if (event.form) { + ConfiguratorsManager.openConfigurator(event.application, event.form, event.hidden_data); + } else { + ConfiguratorsManager.closeConfigurator(event.application); + } + break; + default: + console.error(`Unknown application action: ${event.action}`); + } + + +}; + + export const useCurrentUserRealtime = () => { const { user, refresh } = useCurrentUser(); - const room = UserAPIClient.websocket(user?.id || ''); + const room = UserAPIClient.websocket(user?.id || ""); const timeout = useRef(0); - useRealtimeRoom(room, 'useCurrentUser', async (action, resource) => { - clearTimeout(timeout.current); - timeout.current = setTimeout(() => { - refresh(); - }, 1000) as any; + useRealtimeRoom(room, "useCurrentUser", async (action, resource) => { + + switch (resource._type) { + case "user": + clearTimeout(timeout.current); // + timeout.current = setTimeout(() => { + refresh(); + }, 1000) as any; + break; + case "application": + applicationEventHandler(resource); + break; + default: + console.error("Unknown resource type"); + + } + + }); + + + }; diff --git a/twake/frontend/src/app/features/workspaces/hooks/use-workspaces.ts b/twake/frontend/src/app/features/workspaces/hooks/use-workspaces.ts index 7d57b844d3..ed1b593e35 100644 --- a/twake/frontend/src/app/features/workspaces/hooks/use-workspaces.ts +++ b/twake/frontend/src/app/features/workspaces/hooks/use-workspaces.ts @@ -80,7 +80,7 @@ export function useCurrentWorkspace() { const companyId = useRouterCompany(); const routerWorkspaceId = useRouterWorkspace(); const { workspaces, refresh } = useWorkspacesCommons(companyId); - const workspace = workspaces.find(w => w.id == routerWorkspaceId); + const workspace = workspaces.find(w => w.id === routerWorkspaceId); //Retro compatibility Workspaces.updateCurrentWorkspaceId(workspace?.id || ''); @@ -93,7 +93,7 @@ export function useCurrentWorkspace() { export function useWorkspace(workspaceId: string) { const companyId = useRouterCompany(); const { workspaces, refresh } = useWorkspacesCommons(companyId); - const workspace = workspaces.find(w => w.id == workspaceId); + const workspace = workspaces.find(w => w.id === workspaceId); return { workspace, refresh }; } From 36ce6cd9f371756b59575fc0a6112cec794a9662 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Tue, 1 Feb 2022 13:41:39 +0100 Subject: [PATCH 027/276] =?UTF-8?q?=F0=9F=93=9A=20Update=20version=20and?= =?UTF-8?q?=20changelogs=20(#1924)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/saas-update-backend.yml | 12 +- .github/workflows/saas-update-front.yml | 6 +- CONTRIBUTING.md | 108 ++++++++---------- changelog.md | 15 +++ .../src/Twake/Core/Controller/Version.php | 6 +- twake/backend/node/src/version.ts | 6 +- twake/frontend/src/app/environment/version.ts | 4 +- twake/update_version.js | 8 +- 8 files changed, 81 insertions(+), 84 deletions(-) diff --git a/.github/workflows/saas-update-backend.yml b/.github/workflows/saas-update-backend.yml index 307824e60d..a186102693 100644 --- a/.github/workflows/saas-update-backend.yml +++ b/.github/workflows/saas-update-backend.yml @@ -13,13 +13,13 @@ jobs: deploy-php: runs-on: ubuntu-20.04 steps: - - run: 'echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' @@ -40,13 +40,13 @@ jobs: deploy-node: runs-on: ubuntu-20.04 steps: - - run: 'echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' diff --git a/.github/workflows/saas-update-front.yml b/.github/workflows/saas-update-front.yml index 88649b43b3..0b63c00378 100644 --- a/.github/workflows/saas-update-front.yml +++ b/.github/workflows/saas-update-front.yml @@ -48,13 +48,13 @@ jobs: runs-on: ubuntu-20.04 if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/qa' || github.ref == 'refs/heads/canary' steps: - - run: 'echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2021.Q4.860" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q1.874" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32790e3e3b..2c863d8526 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,11 +1,10 @@ # Contributing to Twake -Hey! Thank you for your interest in contributing to Twake, we really appreciate it. +Hey! Thank you for your interest in contributing to Twake, we really appreciate it. -Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. - -We are an open-source project and we love to receive contributions from our community! There are many ways to contribute - writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests, fixing bugs, submitting pull requests for enhancements, or reviewing other's pull requests. +Following these guidelines helps to communicate that you respect the time of the developers managing and developing this open source project. In return, they should reciprocate that respect in addressing your issue, assessing changes, and helping you finalize your pull requests. +We are an open-source project and we love to receive contributions from our community! There are many ways to contribute - writing tutorials or blog posts, improving the documentation, submitting bug reports and feature requests, fixing bugs, submitting pull requests for enhancements, or reviewing other's pull requests. ## In a nutshell @@ -13,45 +12,40 @@ We are an open-source project and we love to receive contributions from our comm - Fork this repository to start working and create a new working branch on top of the develop branch preferably. - To propose your changes, open a PR from your fork and target the **develop** branch. +Get more information here about how to start writing code: https://doc.twake.app/gettingstarted/installation/run-twake-as-developer ## Ground Rules -Please adhere to the following responsibilities: +Please adhere to the following responsibilities: -- Ensure cross-platform compatibility for every change that's accepted. For example, Windows, Mac, Debian & Ubuntu Linux. -- Any change must be done using **Pull Requests** incoming from a fork of original Twake repository. -- Create issues for any major changes and enhancements that you wish to make. Discuss things transparently and get community feedback. -- Don't add any classes to the codebase unless absolutely needed. Err on the side of using functions. -- Keep feature versions as small as possible, preferably one new feature per version. +- Ensure cross-platform compatibility for every change that's accepted. For example, Windows, Mac, Debian & Ubuntu Linux. +- Any change must be done using **Pull Requests** incoming from a fork of original Twake repository. +- Create issues for any major changes and enhancements that you wish to make. Discuss things transparently and get community feedback. +- Don't add any classes to the codebase unless absolutely needed. Err on the side of using functions. +- Keep feature versions as small as possible, preferably one new feature per version. - Be welcoming to newcomers and encourage diverse new contributions from all backgrounds. See the [Code of Conduct](https://github.com/linagora/Twake/blob/main/CODE_OF_CONDUCT.md) - - #### What does the Code of Conduct mean for You? -Our [Code of Conduct](https://github.com/linagora/Twake/blob/main/CODE_OF_CONDUCT.md) means that you are responsible for treating everyone on the project with respect and courtesy regardless of their identity. If you are the victim of any inappropriate behavior or comments as described in our [Code of Conduct](https://github.com/linagora/Twake/blob/main/CODE_OF_CONDUCT.md), we are here for you. Please follow the guidelines on our [website](https://linagora.com/en/) to report the issue and we will do the best to ensure that the abuser is reprimanded appropriately per our code. - - +Our [Code of Conduct](https://github.com/linagora/Twake/blob/main/CODE_OF_CONDUCT.md) means that you are responsible for treating everyone on the project with respect and courtesy regardless of their identity. If you are the victim of any inappropriate behavior or comments as described in our [Code of Conduct](https://github.com/linagora/Twake/blob/main/CODE_OF_CONDUCT.md), we are here for you. Please follow the guidelines on our [website](https://linagora.com/en/) to report the issue and we will do the best to ensure that the abuser is reprimanded appropriately per our code. ## Your First Contribution? -Unsure where to begin contributing to Twake? You can start by looking at these [good first issues](https://github.com/linagora/Twake/labels/good%20first%20issue) and [help wanted issues](https://github.com/linagora/Twake/labels/help%20wanted). Good first issues - issues which should require only a few lines of code, and a test or two. Help wanted issues - issues which should be a bit more involved than beginner issues. While not perfect, number of comments is a reasonable proxy for impact a given change will have. +Unsure where to begin contributing to Twake? You can start by looking at these [good first issues](https://github.com/linagora/Twake/labels/good%20first%20issue) and [help wanted issues](https://github.com/linagora/Twake/labels/help%20wanted). Good first issues - issues which should require only a few lines of code, and a test or two. Help wanted issues - issues which should be a bit more involved than beginner issues. While not perfect, number of comments is a reasonable proxy for impact a given change will have. -Working on your first Pull Request? You can learn how from these free resources: [Course - How to Contribute to an Open Source Project on GitHub from @kentcdodds on @eggheadio](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github) and [Make a Pull Request](https://makeapullrequest.com/). +Working on your first Pull Request? You can learn how from these free resources: [Course - How to Contribute to an Open Source Project on GitHub from @kentcdodds on @eggheadio](https://app.egghead.io/playlists/how-to-contribute-to-an-open-source-project-on-github) and [Make a Pull Request](https://makeapullrequest.com/). At this point, you are ready to make your changes! Feel free to ask for help; everyone is a beginner at first. 😃 -If a maintainer asks you to "rebase" your PR, they are saying that a lot of code has changed, and that you need to update your branch so it's easier to merge. - - +If a maintainer asks you to "rebase" your PR, they are saying that a lot of code has changed, and that you need to update your branch so it's easier to merge. ## How to Contribute? -When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. +When contributing to this repository, please first discuss the change you wish to make via issue, email, or any other method with the owners of this repository before making a change. #### Pull Requests -**It's important to break your feature down into small pieces first,** each piece should become it's own pull request. Once you know, what the first small piece of your feature will be, follow this general process while working: +**It's important to break your feature down into small pieces first,** each piece should become it's own pull request. Once you know, what the first small piece of your feature will be, follow this general process while working: 1. Create your own fork of the code and do changes in your own fork. @@ -59,85 +53,73 @@ When contributing to this repository, please first discuss the change you wish t - Make sure that the titles of your pull requests and commits respect this format - [Commit & Pull Request Format](https://github.com/linagora/Twake/blob/main/Contribute/Commit%20%26%20Pull%20Request%20Title%20Format.md) - - Write a detailed description of the problem you are solving, the part of Twake it affects, and how you plan on fixing it. + - Write a detailed description of the problem you are solving, the part of Twake it affects, and how you plan on fixing it. - If you have write access, add the **[Status] In Progress** label or wait until somebody adds it. This indicates that the pull request is not ready for a review and may still be incomplete. On the other hand, it welcomes early feedback and encourages collaboration during the development process. -3. Start developing and pushing out commits to your new branch. +3. Start developing and pushing out commits to your new branch. - - Push your changes out frequently and try to avoid getting stuck in a long-running branch or a merge nightmare. Smaller changes are much easier to review and to deal with potential conflicts. - - Note that you can automate some of these tasks by setting up githooks and they will run whenever you `git commit`. - - Please feel free to change, [squash](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html), and rearrange commits or to force push. Keep in mind, however, that if other people are committing on the same branch then you can mess up their history. You are perfectly safe if you are the only one pushing commits to that branch. - - Squash minor commits such as typo fixes or fixes to previous commits in the pull request. + - Push your changes out frequently and try to avoid getting stuck in a long-running branch or a merge nightmare. Smaller changes are much easier to review and to deal with potential conflicts. + - Note that you can automate some of these tasks by setting up githooks and they will run whenever you `git commit`. + - Please feel free to change, [squash](http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html), and rearrange commits or to force push. Keep in mind, however, that if other people are committing on the same branch then you can mess up their history. You are perfectly safe if you are the only one pushing commits to that branch. + - Squash minor commits such as typo fixes or fixes to previous commits in the pull request. -4. If you end up needing more than a few commits, consider splitting the pull request into separate components. Discuss in the new pull request and in the comments why the branch was broken apart and any changes that may have taken place that necessitated the split. Our goal is to catch early in the review process those pull requests that attempt to do too much. +4. If you end up needing more than a few commits, consider splitting the pull request into separate components. Discuss in the new pull request and in the comments why the branch was broken apart and any changes that may have taken place that necessitated the split. Our goal is to catch early in the review process those pull requests that attempt to do too much. -5. When you feel that you are ready for a formal review or for merging into `trunk` make sure you check this list. +5. When you feel that you are ready for a formal review or for merging into `trunk` make sure you check this list. - Make sure your branch merges cleanly and consider rebasing against `trunk` to keep the branch history short and clean. You must target the **develop** branch for your changes. - - If there are visual changes, add before and after screenshots in the pull request comments. - - Add unit tests, or at a minimum, provide helpful instructions for the reviewer so they can test your changes. This will help speed up the review process. - - Ensure that your commit messages are [meaningful](https://thoughtbot.com/blog/5-useful-tips-for-a-better-commit-message). - - Mention that the PR is ready for review or if you have write access remove the **[Status] In Progress** label from the pull request and add the **[Status] Needs Review** label - someone will provide feedback on the latest unreviewed changes. The reviewer will also mark the pull request as **[Status] Needs Author Reply** if they think you need to change anything. - -6. If you get a :thumbsup: and the status has been changed to **[Status] Ready to Merge** - this is great - the pull request is ready to be merged. - -If you feel yourself waiting for someone to review a PR, don't hesitate to personally ask for someone to review it or to mention them on Github. Remember, the PR author is responsible for pushing the change through. + - If there are visual changes, add before and after screenshots in the pull request comments. + - Add unit tests, or at a minimum, provide helpful instructions for the reviewer so they can test your changes. This will help speed up the review process. + - Ensure that your commit messages are [meaningful](https://thoughtbot.com/blog/5-useful-tips-for-a-better-commit-message). + - Mention that the PR is ready for review or if you have write access remove the **[Status] In Progress** label from the pull request and add the **[Status] Needs Review** label - someone will provide feedback on the latest unreviewed changes. The reviewer will also mark the pull request as **[Status] Needs Author Reply** if they think you need to change anything. +6. If you get a :thumbsup: and the status has been changed to **[Status] Ready to Merge** - this is great - the pull request is ready to be merged. +If you feel yourself waiting for someone to review a PR, don't hesitate to personally ask for someone to review it or to mention them on Github. Remember, the PR author is responsible for pushing the change through. #### Sign your work -We use the Developer Certificate of Origin (DCO) as an additional safeguard for the Linagora/Twake projects. This is a well established and widely used mechanism to assure contributors have confirmed their right to license their contributions under the project's license. Please read [Developer Certificate of Origin](https://github.com/linagora/Twake/blob/main/Contribute/Linagora%20Developer's%20Certificate%20of%20Origin.md). If you can certify it, then just add a line to every git commit message: +We use the Developer Certificate of Origin (DCO) as an additional safeguard for the Linagora/Twake projects. This is a well established and widely used mechanism to assure contributors have confirmed their right to license their contributions under the project's license. Please read [Developer Certificate of Origin](https://github.com/linagora/Twake/blob/main/Contribute/Linagora%20Developer's%20Certificate%20of%20Origin.md). If you can certify it, then just add a line to every git commit message: `Signed-Off by: Unicorn John ` -Use your real name (sorry, no pseudonyms or anonymous contributions). If you set your `user.name` and `user.email` git configs, you can sign your commit automatically with `git commit-s`. - - +Use your real name (sorry, no pseudonyms or anonymous contributions). If you set your `user.name` and `user.email` git configs, you can sign your commit automatically with `git commit-s`. #### Code Reviews -Code Reviews are an important part of the Twake workflow. They help to keep code quality consistent, and they help every person working on Twake learn and improve over time. We want to make you the best Twake contributor you can be. +Code Reviews are an important part of the Twake workflow. They help to keep code quality consistent, and they help every person working on Twake learn and improve over time. We want to make you the best Twake contributor you can be. -Every PR should be reviewed and approved by someone other than the author, even if the author has write access. Fresh eyes can find problems that can hide in the open if you have been working on the code for a while. +Every PR should be reviewed and approved by someone other than the author, even if the author has write access. Fresh eyes can find problems that can hide in the open if you have been working on the code for a while. -The recommended way of finding an appropriate person to review your code is by [blaming](https://docs.github.com/en/github/managing-files-in-a-repository/tracking-changes-in-a-file) one of the files you are updating and looking at who was responsible for previous commits on that file. +The recommended way of finding an appropriate person to review your code is by [blaming](https://docs.github.com/en/github/managing-files-in-a-repository/tracking-changes-in-a-file) one of the files you are updating and looking at who was responsible for previous commits on that file. -Then, you may ask that person to review your code by mentioning their Github username on the PR comments like this: +Then, you may ask that person to review your code by mentioning their Github username on the PR comments like this: `cc @username` -*Everyone* is encouraged to review PRs and add feedback and ask questions. Reading other people's code is a great way to learn new techniques, and seeing code outside of your own feature helps you to see patterns across the project. It's also helpful to see the feedback other contributors are getting on their PRs. - - +_Everyone_ is encouraged to review PRs and add feedback and ask questions. Reading other people's code is a great way to learn new techniques, and seeing code outside of your own feature helps you to see patterns across the project. It's also helpful to see the feedback other contributors are getting on their PRs. #### Apply a license -In case you are not sure about how to apply our license correctly, please have a look at [How to Apply Licence](https://github.com/linagora/Twake/blob/main/Contribute/HowtoApplyOurLicense.md). - - +In case you are not sure about how to apply our license correctly, please have a look at [How to Apply Licence](https://github.com/linagora/Twake/blob/main/Contribute/HowtoApplyOurLicense.md). -#### How to report a bug? +#### How to report a bug? -If you find a security vulnerability, do NOT open an issue. Email schauhan@linagora.com instead. +If you find a security vulnerability, do NOT open an issue. Email schauhan@linagora.com instead. -In order to determine whether you are dealing with a security issue, ask yourself these two questions: +In order to determine whether you are dealing with a security issue, ask yourself these two questions: - Can I access something that's not mine, or something I should not have access to? -- Can I disable something for other people? +- Can I disable something for other people? - If the answer to either of those two questions are "yes", then you are probably dealing with a security issue. Note that even if you answer "no" to both questions, you may still be dealing with a security issue, so if you're unsure, just email us at schauhan@linagora.com. + If the answer to either of those two questions are "yes", then you are probably dealing with a security issue. Note that even if you answer "no" to both questions, you may still be dealing with a security issue, so if you're unsure, just email us at schauhan@linagora.com. For reporting any other bug, just file [a Github issue.](https://github.com/linagora/Twake/issues/new/choose) +#### How to suggest a feature or enhancement? - -#### How to suggest a feature or enhancement? - -If you find yourself wishing for a feature that doesn't exist in Twake, you are probably not alone. There are bound to be others out there with similar needs. Many of the features that Twake has today have been added because our users saw the need. Open an issues on our issues list on Github which describes the feature you would like to see, why you need it. - - +If you find yourself wishing for a feature that doesn't exist in Twake, you are probably not alone. There are bound to be others out there with similar needs. Many of the features that Twake has today have been added because our users saw the need. Open an issues on our issues list on Github which describes the feature you would like to see, why you need it. ## Community diff --git a/changelog.md b/changelog.md index b25fa6726a..6712ae0b1c 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,18 @@ +# Twake 2022.Q1.874 + +### Messages + +- Faster loading of message feed +- Fix message input issues + +### General + +- Reduce magic links invite urls +- Fix guest popup not visible on paid plans +- Fix company owners and admins not able to manage workspaces +- Fix channels members counters +- Migrate channels to recoil state management for more stable channels (favorite, rename, create, join etc) + # Twake 2021.Q4.860 ### Messages diff --git a/twake/backend/core/src/Twake/Core/Controller/Version.php b/twake/backend/core/src/Twake/Core/Controller/Version.php index c49ba8a603..8372c4991d 100755 --- a/twake/backend/core/src/Twake/Core/Controller/Version.php +++ b/twake/backend/core/src/Twake/Core/Controller/Version.php @@ -49,10 +49,10 @@ function getVersion(Request $request) "auth_mode" => array_keys($auth), "auth" => $auth, "version" => [ - "current" => /* @VERSION_DETAIL */ "2021.Q4.860", + "current" => /* @VERSION_DETAIL */ "2022.Q1.874", "minimal" => [ - "web" => /* @MIN_VERSION_WEB */ "2021.Q4.860", - "mobile" => /* @MIN_VERSION_MOBILE */ "2021.Q4.860", + "web" => /* @MIN_VERSION_WEB */ "2022.Q1.874", + "mobile" => /* @MIN_VERSION_MOBILE */ "2022.Q1.874", ] ], "elastic_search_available" => !!$this->container->getParameter("es.host"), diff --git a/twake/backend/node/src/version.ts b/twake/backend/node/src/version.ts index 8f9fbf688f..bdbed7bef8 100644 --- a/twake/backend/node/src/version.ts +++ b/twake/backend/node/src/version.ts @@ -1,7 +1,7 @@ export default { - current: /* @VERSION_DETAIL */ "2021.Q4.860", + current: /* @VERSION_DETAIL */ "2022.Q1.874", minimal: { - web: /* @MIN_VERSION_WEB */ "2021.Q4.860", - mobile: /* @MIN_VERSION_MOBILE */ "2021.Q4.860", + web: /* @MIN_VERSION_WEB */ "2022.Q1.874", + mobile: /* @MIN_VERSION_MOBILE */ "2022.Q1.874", }, }; diff --git a/twake/frontend/src/app/environment/version.ts b/twake/frontend/src/app/environment/version.ts index ec1bc99a61..83cee46296 100644 --- a/twake/frontend/src/app/environment/version.ts +++ b/twake/frontend/src/app/environment/version.ts @@ -1,5 +1,5 @@ export default { - version: /* @VERSION */ '2021.Q4', - version_detail: /* @VERSION_DETAIL */ '2021.Q4.860', + version: /* @VERSION */ '2022.Q1', + version_detail: /* @VERSION_DETAIL */ '2022.Q1.874', version_name: /* @VERSION_NAME */ 'Albatros', }; diff --git a/twake/update_version.js b/twake/update_version.js index 35ab54e6ed..0a2b78f102 100755 --- a/twake/update_version.js +++ b/twake/update_version.js @@ -4,10 +4,10 @@ const versions = { VERSION_NAME: process.env.TWAKE_VERSION_NAME || "Albatros", - VERSION: process.env.TWAKE_VERSION || "2021.Q4", - VERSION_DETAIL: process.env.TWAKE_VERSION_DETAIL || "2021.Q4.860", - MIN_VERSION_WEB: process.env.TWAKE_MIN_VERSION_WEB || "2021.Q4.860", - MIN_VERSION_MOBILE: process.env.TWAKE_MIN_VERSION_MOBILE || "2021.Q4.860", + VERSION: process.env.TWAKE_VERSION || "2022.Q1", + VERSION_DETAIL: process.env.TWAKE_VERSION_DETAIL || "2022.Q1.874", + MIN_VERSION_WEB: process.env.TWAKE_MIN_VERSION_WEB || "2022.Q1.874", + MIN_VERSION_MOBILE: process.env.TWAKE_MIN_VERSION_MOBILE || "2022.Q1.874", }; const files = [ From b40427315b61b955502f517ce4fbbb4b22ce00f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Vieira?= <36481167+stephanevieira75@users.noreply.github.com> Date: Mon, 7 Feb 2022 18:22:35 +0100 Subject: [PATCH 028/276] =?UTF-8?q?=F0=9F=9B=A0=20#1900=20Workspace=20memb?= =?UTF-8?q?ers=20invite=20fixes=20(#1911)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * #1900 Verify that members can invite other users to the company/workspace (and not only the workspace moderators) * #1901 Add a notice to warn users that the company has reached the maximum number of users it can invite * #1901 Update workspace-pending-users.spect.ts * #1901 Update users.spec.ts * #1901 Update should 200 when company exists in users.spec.ts * #1901 Update workspace-pending-users.spec.ts * #1901 Resolve threads --- .../src/services/console/clients/remote.ts | 32 ++++++---- .../src/services/console/web/controller.ts | 2 +- .../src/services/user/entities/company.ts | 4 +- .../node/src/services/user/services/index.ts | 32 +++++++++- .../node/src/services/user/web/schemas.ts | 26 +++++--- .../node/src/services/user/web/types.ts | 31 ++++++++- .../src/services/workspaces/web/routes.ts | 63 ++++++++++++++++--- .../backend/node/test/e2e/users/users.spec.ts | 11 ++-- .../workspace-pending-users.spec.ts | 26 +++++--- twake/frontend/public/locales/de.json | 5 +- twake/frontend/public/locales/en.json | 5 +- twake/frontend/public/locales/es.json | 5 +- twake/frontend/public/locales/fr.json | 5 +- twake/frontend/public/locales/ru.json | 5 +- .../app/components/auto-height/auto-height.js | 1 + .../locked-invite-alert/index.tsx | 51 +++++++++++++++ .../channels/api/channel-api-client.ts | 5 +- .../app/features/companies/types/company.ts | 12 ++-- .../services/feature-toggles-service.ts | 7 +++ .../Parts/CurrentUser/CurrentUser.js | 2 +- .../client/popup/AddUser/AddUserByEmail.tsx | 36 ++++++++--- .../Pages/WorkspacePartner.tsx | 18 ++++-- .../Pages/WorkspacePartnerTabs/Pending.tsx | 4 +- 23 files changed, 313 insertions(+), 75 deletions(-) create mode 100644 twake/frontend/src/app/components/locked-features-components/locked-invite-alert/index.tsx diff --git a/twake/backend/node/src/services/console/clients/remote.ts b/twake/backend/node/src/services/console/clients/remote.ts index 67d5adf389..0866c96456 100644 --- a/twake/backend/node/src/services/console/clients/remote.ts +++ b/twake/backend/node/src/services/console/clients/remote.ts @@ -25,6 +25,7 @@ import UserServiceAPI from "../../user/api"; import coalesce from "../../../utils/coalesce"; import { logger } from "../../../core/platform/framework/logger"; import _ from "lodash"; +import { CompanyFeaturesEnum, CompanyLimitsEnum } from "../../user/web/types"; export class ConsoleRemoteClient implements ConsoleServiceClient { version: "1"; @@ -181,32 +182,37 @@ export class ConsoleRemoteClient implements ConsoleServiceClient { } if (!company.plan) { - company.plan = { name: "", features: {} }; + company.plan = { name: "", limits: undefined, features: undefined }; } //FIXME this is a hack right now! let planFeatures: any = { - "chat:guests": true, - "chat:message_history": true, - "chat:multiple_workspaces": true, - "chat:edit_files": true, - "chat:unlimited_storage": true, + [CompanyFeaturesEnum.CHAT_GUESTS]: true, + [CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: true, + [CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: true, + [CompanyFeaturesEnum.CHAT_EDIT_FILES]: true, + [CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: true, + [CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]: true, }; + if (companyDTO.limits.members < 0 && this.infos.type === "remote") { //Hack to say this is free version planFeatures = { - "chat:guests": false, - "chat:message_history": false, - "chat:message_history_limit": 10000, - "chat:multiple_workspaces": false, - "chat:edit_files": false, - "chat:unlimited_storage": false, //Currently inactive + [CompanyFeaturesEnum.CHAT_GUESTS]: false, + [CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: false, + [CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: false, + [CompanyFeaturesEnum.CHAT_EDIT_FILES]: false, + [CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: false, // Currently inactive }; company.plan.name = "free"; } else { company.plan.name = "standard"; } - company.plan.features = { ...planFeatures, ...companyDTO.limits }; + company.plan.features = { ...planFeatures }; + company.plan.limits = { + [CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]: 10000, // To remove duplicata since we define this in formatCompany function + [CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]: companyDTO.limits["members"], + }; company.stats = coalesce(companyDTO.stats, company.stats); diff --git a/twake/backend/node/src/services/console/web/controller.ts b/twake/backend/node/src/services/console/web/controller.ts index 8ce8872e66..524f5dee26 100644 --- a/twake/backend/node/src/services/console/web/controller.ts +++ b/twake/backend/node/src/services/console/web/controller.ts @@ -83,7 +83,7 @@ export class ConsoleController { if (!company) { const newCompany = getCompanyInstance({ name: "Twake", - plan: { name: "Local", features: {} }, + plan: { name: "Local", limits: undefined, features: undefined }, }); company = await this.userService.companies.createCompany(newCompany); } diff --git a/twake/backend/node/src/services/user/entities/company.ts b/twake/backend/node/src/services/user/entities/company.ts index c60c83f640..8473a55bcc 100644 --- a/twake/backend/node/src/services/user/entities/company.ts +++ b/twake/backend/node/src/services/user/entities/company.ts @@ -1,5 +1,6 @@ import { merge } from "lodash"; import { Column, Entity } from "../../../core/platform/services/database/services/orm/decorators"; +import { CompanyFeaturesObject, CompanyLimitsObject } from "../web/types"; // backward compatibility with PHP where companies used to be `group_entity` export const TYPE = "group_entity"; @@ -21,7 +22,8 @@ export default class Company { @Column("plan", "encoded_json") plan?: { name: string; - features: any; + limits: CompanyLimitsObject; + features: CompanyFeaturesObject; }; @Column("stats", "encoded_json") diff --git a/twake/backend/node/src/services/user/services/index.ts b/twake/backend/node/src/services/user/services/index.ts index 6f6ca612f6..9cd7a83ec4 100644 --- a/twake/backend/node/src/services/user/services/index.ts +++ b/twake/backend/node/src/services/user/services/index.ts @@ -10,6 +10,8 @@ import { getService as getExternalService } from "./external_links"; import { getService as getWorkspaceService } from "../../workspaces/services/workspace"; import { WorkspaceServiceAPI } from "../../workspaces/api"; import { + CompanyFeaturesEnum, + CompanyLimitsEnum, CompanyObject, CompanyShort, CompanyStatsObject, @@ -143,7 +145,7 @@ class Service implements UserServiceAPI { }; if (companyUserObject) { - res.status = "active"; // FIXME: with real status + res.status = "active"; // FIXME: Deactivated console user are removed from company on twake side res.role = companyUserObject.role; } @@ -151,6 +153,34 @@ class Service implements UserServiceAPI { res.stats = companyStats; } + res.plan = { + name: res.plan?.name || "free", + limits: res.plan?.limits || {}, + features: res.plan?.features || {}, + }; + + res.plan.limits = Object.assign( + { + [CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]: 10000, + [CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]: -1, + }, + res.plan?.limits || {}, + ); + + res.plan.features = Object.assign( + { + [CompanyFeaturesEnum.CHAT_GUESTS]: true, + [CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: true, + [CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: true, + [CompanyFeaturesEnum.CHAT_EDIT_FILES]: true, + [CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: true, + [CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]: + res.plan?.limits[CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT] <= 0 || + res.stats.total_members < res.plan?.limits[CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT], + }, + res.plan?.features || {}, + ); + return res; } } diff --git a/twake/backend/node/src/services/user/web/schemas.ts b/twake/backend/node/src/services/user/web/schemas.ts index c0a5bd89aa..c28774286a 100644 --- a/twake/backend/node/src/services/user/web/schemas.ts +++ b/twake/backend/node/src/services/user/web/schemas.ts @@ -1,4 +1,5 @@ import { webSocketSchema } from "../../../utils/types"; +import { CompanyFeaturesEnum, CompanyLimitsEnum } from "./types"; export const userObjectSchema = { type: "object", @@ -60,18 +61,27 @@ const companyObjectSchema = { type: ["object", "null"], properties: { name: { type: "string" }, + limits: { + type: ["object", "null"], + properties: { + [CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]: { type: "number" }, + [CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]: { type: "number" }, + }, + }, features: { type: "object", properties: { - "chat:edit_files": { type: "boolean" }, - "chat:guests": { type: "boolean" }, - "chat:message_history": { type: "boolean" }, - "chat:multiple_workspaces": { type: "boolean" }, - "chat:unlimited_storage": { type: "boolean" }, - guests: { type: "number" }, - members: { type: "number" }, - storage: { type: "number" }, + [CompanyFeaturesEnum.CHAT_EDIT_FILES]: { type: ["boolean"] }, + [CompanyFeaturesEnum.CHAT_GUESTS]: { type: ["boolean"] }, + [CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]: { type: "boolean" }, + [CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]: { type: "boolean" }, + [CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]: { type: "boolean" }, + [CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]: { type: "boolean" }, + guests: { type: "number" }, // to rename or delete + members: { type: "number" }, // to rename or delete + storage: { type: "number" }, // to rename or delete }, + required: [] as string[], }, }, }, diff --git a/twake/backend/node/src/services/user/web/types.ts b/twake/backend/node/src/services/user/web/types.ts index d58f2d899d..ad3f422bf8 100644 --- a/twake/backend/node/src/services/user/web/types.ts +++ b/twake/backend/node/src/services/user/web/types.ts @@ -65,9 +65,38 @@ export interface UserObject { companies?: CompanyUserObject[]; } +export enum CompanyLimitsEnum { + CHAT_MESSAGE_HISTORY_LIMIT = "chat:message_history_limit", + COMPANY_MEMBERS_LIMIT = "company:members_limit", // 100 +} + +export enum CompanyFeaturesEnum { + CHAT_GUESTS = "chat:guests", + CHAT_MESSAGE_HISTORY = "chat:message_history", + CHAT_MULTIPLE_WORKSPACES = "chat:multiple_workspaces", + CHAT_EDIT_FILES = "chat:edit_files", + CHAT_UNLIMITED_STORAGE = "chat:unlimited_storage", + COMPANY_INVITE_MEMBER = "company:invite_member", +} + +export type CompanyFeaturesObject = { + [CompanyFeaturesEnum.CHAT_GUESTS]?: boolean; + [CompanyFeaturesEnum.CHAT_MESSAGE_HISTORY]?: boolean; + [CompanyFeaturesEnum.CHAT_MULTIPLE_WORKSPACES]?: boolean; + [CompanyFeaturesEnum.CHAT_EDIT_FILES]?: boolean; + [CompanyFeaturesEnum.CHAT_UNLIMITED_STORAGE]?: boolean; + [CompanyFeaturesEnum.COMPANY_INVITE_MEMBER]?: boolean; +}; + +export type CompanyLimitsObject = { + [CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]?: number; + [CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]?: number; +}; + export interface CompanyPlanObject { name: string; - features: any; + limits?: CompanyLimitsObject; + features?: CompanyFeaturesObject; } export interface CompanyStatsObject { diff --git a/twake/backend/node/src/services/workspaces/web/routes.ts b/twake/backend/node/src/services/workspaces/web/routes.ts index afbda21d01..f3f1be3afd 100644 --- a/twake/backend/node/src/services/workspaces/web/routes.ts +++ b/twake/backend/node/src/services/workspaces/web/routes.ts @@ -26,6 +26,7 @@ import { hasWorkspaceAdminLevel, hasWorkspaceMemberLevel } from "../../../utils/ import { WorkspaceInviteTokensCrudController } from "./controllers/workspace-invite-tokens"; import WorkspaceUser from "../entities/workspace_user"; import { RealtimeServiceAPI } from "../../../core/platform/services/realtime/api"; +import { hasCompanyMemberLevel } from "../../../utils/company"; const workspacesUrl = "/companies/:company_id/workspaces"; const workspacePendingUsersUrl = "/companies/:company_id/workspaces/:workspace_id/pending"; @@ -110,11 +111,27 @@ const routes: FastifyPluginCallback<{ return workspaceUser; }; + const checkUserHasCompanyMemberLevel = async ( + request: FastifyRequest<{ Params: WorkspaceUsersRequest }>, + ) => { + if (!request.currentUser.id) { + throw fastify.httpErrors.forbidden("You must be authenticated"); + } + const companyUser = await options.service.companies.getCompanyUser( + { id: request.params.company_id }, + { id: request.currentUser.id }, + ); + + if (!hasCompanyMemberLevel(companyUser?.role)) { + throw fastify.httpErrors.forbidden("Only company member can perform this action"); + } + }; + const checkUserIsWorkspaceAdmin = async ( request: FastifyRequest<{ Params: WorkspaceUsersRequest }>, ) => { if (!request.currentUser.id) { - throw fastify.httpErrors.forbidden("Only workspace moderator can perform this action"); + throw fastify.httpErrors.forbidden("You must be authenticated"); } const workspaceUser = await checkUserWorkspace(request); const companyUser = await options.service.companies.getCompanyUser( @@ -130,7 +147,7 @@ const routes: FastifyPluginCallback<{ request: FastifyRequest<{ Params: WorkspaceUsersRequest }>, ) => { if (!request.currentUser.id) { - throw fastify.httpErrors.forbidden("Only workspace moderator can perform this action"); + throw fastify.httpErrors.forbidden("You must be authenticated"); } const workspaceUser = await checkUserWorkspace(request); const companyUser = await options.service.companies.getCompanyUser( @@ -240,7 +257,12 @@ const routes: FastifyPluginCallback<{ fastify.route({ method: "POST", url: `${workspaceUsersUrl}/invite`, - preHandler: [accessControl, companyCheck, checkUserIsWorkspaceAdmin], + preHandler: [ + accessControl, + companyCheck, + checkUserHasCompanyMemberLevel, + checkUserIsWorkspaceMember, + ], preValidation: [fastify.authenticate], schema: inviteWorkspaceUserSchema, handler: workspaceUsersController.invite.bind(workspaceUsersController), @@ -249,7 +271,12 @@ const routes: FastifyPluginCallback<{ fastify.route({ method: "DELETE", url: `${workspacePendingUsersUrl}/:email`, - preHandler: [accessControl, companyCheck, checkUserIsWorkspaceAdmin], + preHandler: [ + accessControl, + companyCheck, + checkUserHasCompanyMemberLevel, + checkUserIsWorkspaceMember, + ], preValidation: [fastify.authenticate], schema: deleteWorkspacePendingUsersSchema, handler: workspaceUsersController.deletePending.bind(workspaceUsersController), @@ -258,7 +285,12 @@ const routes: FastifyPluginCallback<{ fastify.route({ method: "GET", url: `${workspacePendingUsersUrl}`, - preHandler: [accessControl, companyCheck, checkUserIsWorkspaceAdmin], + preHandler: [ + accessControl, + companyCheck, + checkUserHasCompanyMemberLevel, + checkUserIsWorkspaceMember, + ], preValidation: [fastify.authenticate], schema: getWorkspacePendingUsersSchema, handler: workspaceUsersController.listPending.bind(workspaceUsersController), @@ -267,7 +299,12 @@ const routes: FastifyPluginCallback<{ fastify.route({ method: "GET", url: `${workspaceInviteTokensUrl}`, - preHandler: [accessControl, companyCheck, checkUserIsWorkspaceMember], + preHandler: [ + accessControl, + companyCheck, + checkUserIsWorkspaceMember, + checkUserHasCompanyMemberLevel, + ], preValidation: [fastify.authenticate], schema: getWorkspaceInviteTokenSchema, handler: workspaceInviteTokensController.list.bind(workspaceInviteTokensController), @@ -276,7 +313,12 @@ const routes: FastifyPluginCallback<{ fastify.route({ method: "POST", url: `${workspaceInviteTokensUrl}`, - preHandler: [accessControl, companyCheck, checkUserIsWorkspaceMember], + preHandler: [ + accessControl, + companyCheck, + checkUserIsWorkspaceMember, + checkUserHasCompanyMemberLevel, + ], preValidation: [fastify.authenticate], schema: postWorkspaceInviteTokenSchema, handler: workspaceInviteTokensController.save.bind(workspaceInviteTokensController), @@ -285,7 +327,12 @@ const routes: FastifyPluginCallback<{ fastify.route({ method: "DELETE", url: `${workspaceInviteTokensUrl}/:token`, - preHandler: [accessControl, companyCheck, checkUserIsWorkspaceMember], + preHandler: [ + accessControl, + companyCheck, + checkUserIsWorkspaceMember, + checkUserHasCompanyMemberLevel, + ], preValidation: [fastify.authenticate], schema: deleteWorkspaceInviteTokenSchema, handler: workspaceInviteTokensController.delete.bind(workspaceInviteTokensController), diff --git a/twake/backend/node/test/e2e/users/users.spec.ts b/twake/backend/node/test/e2e/users/users.spec.ts index 92f849fb59..10ffd6cc74 100644 --- a/twake/backend/node/test/e2e/users/users.spec.ts +++ b/twake/backend/node/test/e2e/users/users.spec.ts @@ -2,6 +2,7 @@ import { beforeAll, afterAll, afterEach, beforeEach, describe, expect, it } from import { init, TestPlatform } from "../setup"; import { TestDbService } from "../utils.prepare.db"; import { v1 as uuidv1 } from "uuid"; +import { CompanyLimitsEnum } from "../../../src/services/user/web/types"; describe("The /users API", () => { const url = "/internal/services/users/v1"; @@ -285,9 +286,8 @@ describe("The /users API", () => { expect(resource.plan).toMatchObject({ name: expect.any(String), limits: expect.objectContaining({ - members: expect.any(Number), - guests: expect.any(Number), - storage: expect.any(Number), + [CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]: expect.any(Number || undefined), + [CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]: expect.any(Number || undefined), }), }); } @@ -334,9 +334,8 @@ describe("The /users API", () => { expect(json.resource.plan).toMatchObject({ name: expect.any(String), limits: expect.objectContaining({ - members: expect.any(Number), - guests: expect.any(Number), - storage: expect.any(Number), + [CompanyLimitsEnum.CHAT_MESSAGE_HISTORY_LIMIT]: expect.any(Number || undefined), + [CompanyLimitsEnum.COMPANY_MEMBERS_LIMIT]: expect.any(Number || undefined), }), }); } diff --git a/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts b/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts index e57c94bcce..5390fe9ec1 100644 --- a/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts +++ b/twake/backend/node/test/e2e/workspaces/workspace-pending-users.spec.ts @@ -34,6 +34,7 @@ describe("The /workspace/pending users API", () => { const firstEmail = "first@test-user.com"; const secondEmail = "second@test-user.com"; const thirdEmail = "third@test-user.com"; + const fourthUser = "fourth@test-user.com"; const emailForExistedUser = "exist@email.com"; async function doTheTest() { @@ -65,8 +66,10 @@ describe("The /workspace/pending users API", () => { await testDbService.createCompany(companyId); const ws0pk = { id: uuidv1(), company_id: companyId }; const ws1pk = { id: uuidv1(), company_id: companyId }; + const ws2pk = { id: uuidv1(), company_id: companyId }; await testDbService.createWorkspace(ws0pk); await testDbService.createWorkspace(ws1pk); + await testDbService.createWorkspace(ws2pk); await testDbService.createUser([ws0pk], { companyRole: "member", workspaceRole: "moderator" }); await testDbService.createUser([ws0pk], { companyRole: "member", workspaceRole: "member" }); await testDbService.createUser([ws1pk], { @@ -74,6 +77,11 @@ describe("The /workspace/pending users API", () => { workspaceRole: "member", email: emailForExistedUser, }); + await testDbService.createUser([ws2pk], { + companyRole: "guest", + workspaceRole: "member", + email: fourthUser, + }); const console = platform.platform.getProvider("console"); consoleType = console.consoleType; @@ -122,9 +130,9 @@ describe("The /workspace/pending users API", () => { done(); }); - it("should 403 when requester is not workspace moderator", async done => { - const workspace_id = testDbService.workspaces[0].workspace.id; - const userId = testDbService.workspaces[0].users[1].id; + it("should 403 when requester is not at least workspace member", async done => { + const workspace_id = testDbService.workspaces[2].workspace.id; + const userId = testDbService.workspaces[2].users[0].id; const jwtToken = await platform.auth.getJWTToken({ sub: userId }); @@ -268,10 +276,10 @@ describe("The /workspace/pending users API", () => { done(); }); - it("should 403 when requester is not workspace moderator", async done => { + it("should 403 when requester is not at least workspace member", async done => { const companyId = testDbService.company.id; - const workspaceId = testDbService.workspaces[0].workspace.id; - const userId = testDbService.workspaces[0].users[1].id; + const workspaceId = testDbService.workspaces[2].workspace.id; + const userId = testDbService.workspaces[2].users[0].id; const email = "first@test-user.com"; const jwtToken = await platform.auth.getJWTToken({ sub: userId }); @@ -359,10 +367,10 @@ describe("The /workspace/pending users API", () => { done(); }); - it("should 403 when requester is not workspace moderator", async done => { + it("should 403 when requester is not at least workspace member", async done => { const companyId = testDbService.company.id; - const workspaceId = testDbService.workspaces[0].workspace.id; - const userId = testDbService.workspaces[0].users[1].id; + const workspaceId = testDbService.workspaces[2].workspace.id; + const userId = testDbService.workspaces[2].users[0].id; const email = "first@test-user.com"; const jwtToken = await platform.auth.getJWTToken({ sub: userId }); diff --git a/twake/frontend/public/locales/de.json b/twake/frontend/public/locales/de.json index 7851d8031e..7014a2244f 100644 --- a/twake/frontend/public/locales/de.json +++ b/twake/frontend/public/locales/de.json @@ -866,5 +866,8 @@ "components.rich_text_editor.plugins.suggestions.default_message.no_user_found": "Kein Benutzer gefunden", "scenes.app.channelsbar.currentuser.reset": "Zurücksetzen", "components.rich_text_editor.plugins.suggestions.default_message.no_emoji_found": "Keine Emojis gefunden", - "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Kein Befehl gefunden" + "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "Kein Befehl gefunden", + "components.locked_features_components.locked_invite_alert.message_part_1": "Ihr Unternehmen hat die maximale Anzahl von {{$1}} Mitgliedern erreicht. Bitte ", + "components.locked_features_components.locked_invite_alert.message_link": "aktualisieren Sie Ihr Unternehmen", + "components.locked_features_components.locked_invite_alert.message_part_2": ", um weitere Mitglieder einzuladen." } diff --git a/twake/frontend/public/locales/en.json b/twake/frontend/public/locales/en.json index e4d730dd28..59d633ae67 100644 --- a/twake/frontend/public/locales/en.json +++ b/twake/frontend/public/locales/en.json @@ -866,5 +866,8 @@ "components.rich_text_editor.plugins.suggestions.default_message.no_command_found": "No command found", "scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} is writing...", "scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} and {{$2}} are writing...", - "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} and {{$3}} more users are writing..." + "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} and {{$3}} more users are writing...", + "components.locked_features_components.locked_invite_alert.message_part_1": "Your company has reached it's maximum limit of {{$1}} members. Please ", + "components.locked_features_components.locked_invite_alert.message_link": "upgrade your company", + "components.locked_features_components.locked_invite_alert.message_part_2": " to invite more members." } diff --git a/twake/frontend/public/locales/es.json b/twake/frontend/public/locales/es.json index b1f8d89ccd..7bcbdd24f7 100644 --- a/twake/frontend/public/locales/es.json +++ b/twake/frontend/public/locales/es.json @@ -865,5 +865,8 @@ "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.bad_format": "Formato incorrecto, solo se permiten png gif y jpg", "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.unknown": "Error desconocido", "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.prefix": "Error", - "scenes.app.channelsbar.currentuser.reset": "Reiniciar" + "scenes.app.channelsbar.currentuser.reset": "Reiniciar", + "components.locked_features_components.locked_invite_alert.message_part_1": "Su empresa ha alcanzado el número máximo de {{$1}} miembros. Por favor, ", + "components.locked_features_components.locked_invite_alert.message_link": "actualice su empresa", + "components.locked_features_components.locked_invite_alert.message_part_2": " para invitar a más miembros." } diff --git a/twake/frontend/public/locales/fr.json b/twake/frontend/public/locales/fr.json index b3c2231006..2c7e4f96b0 100644 --- a/twake/frontend/public/locales/fr.json +++ b/twake/frontend/public/locales/fr.json @@ -866,5 +866,8 @@ "login.login_error": "Erreur lors de la connexion", "scenes.app.messages.input.parts.is_writing.message.user_is_writing": "{{$1}} est en train d'écrire...", "scenes.app.messages.input.parts.is_writing.message.users_are_writing": "{{$1}} et {{$2}} sont en train d'écrire...", - "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} et {{$3}} autres utilisateurs sont en train d'écrire..." + "scenes.app.messages.input.parts.is_writing.message.users_and_more_are_writing": "{{$1}}, {{$2}} et {{$3}} autres utilisateurs sont en train d'écrire...", + "components.locked_features_components.locked_invite_alert.message_part_1": "Votre entreprise a atteint sa limite maximale de {{$1}} membres. Veuillez ", + "components.locked_features_components.locked_invite_alert.message_link": "mettre à niveau votre entreprise", + "components.locked_features_components.locked_invite_alert.message_part_2": " pour inviter davantage de membres." } diff --git a/twake/frontend/public/locales/ru.json b/twake/frontend/public/locales/ru.json index 779d22f177..4dd255e9fe 100644 --- a/twake/frontend/public/locales/ru.json +++ b/twake/frontend/public/locales/ru.json @@ -866,5 +866,8 @@ "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.bad_format": "Неверный формат, разрешены только форматы png, gif и jpg", "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.unknown": "Неизвестная ошибка", "scenes.app.popup.workspaceparameter.pages.workspace_identity.toaster.error.prefix": "Ошибка", - "scenes.app.channelsbar.currentuser.reset": "Перезагрузить" + "scenes.app.channelsbar.currentuser.reset": "Перезагрузить", + "components.locked_features_components.locked_invite_alert.message_part_1": "Ваша компания достигла максимального лимита в {{$1}} участников. Пожалуйста, ", + "components.locked_features_components.locked_invite_alert.message_link": "повысьте статус вашей компании", + "components.locked_features_components.locked_invite_alert.message_part_2": " чтобы пригласить больше участников." } diff --git a/twake/frontend/src/app/components/auto-height/auto-height.js b/twake/frontend/src/app/components/auto-height/auto-height.js index 6954e34994..3a4279e3bd 100755 --- a/twake/frontend/src/app/components/auto-height/auto-height.js +++ b/twake/frontend/src/app/components/auto-height/auto-height.js @@ -66,6 +66,7 @@ export default class AutoHeight extends Component { > + ) : ( + } + type="text" + className={inputClassName + ' ' + props.inputClassName + ' ' + props.className} + {..._.omit(props, 'label', 'inputClassName', 'className', 'size')} + /> + ))} + + ); +}; diff --git a/twake/frontend/src/app/atoms/input/input.tsx b/twake/frontend/src/app/atoms/input/input.tsx deleted file mode 100644 index d4c3b56c72..0000000000 --- a/twake/frontend/src/app/atoms/input/input.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import _ from "lodash"; - -interface InputProps extends React.InputHTMLAttributes { - label?: string; - inputComponent?: React.ReactNode; - inputClassName?: string; - className?: string; -} - -export const defaultInputClassName = - "shadow-sm focus:ring-blue-600 focus:border-blue-600 block w-full sm:text-sm border-gray-200 rounded-lg"; - -export default function InputLabel(props: InputProps) { - return ( - <> - {props.label && ( -
- -
- {props.inputComponent || ( - - )} -
-
- )} - {!props.label && - (props.inputComponent || ( - - ))} - - ); -} diff --git a/twake/frontend/src/app/atoms/input/select.tsx b/twake/frontend/src/app/atoms/input/select.tsx deleted file mode 100644 index 6b6f49aa53..0000000000 --- a/twake/frontend/src/app/atoms/input/select.tsx +++ /dev/null @@ -1,18 +0,0 @@ -import _ from "lodash"; -import { defaultInputClassName } from "./input"; - -interface InputProps extends React.SelectHTMLAttributes { - className?: string; - children?: React.ReactNode; -} - -export default function Select(props: InputProps) { - return ( - - ); -} diff --git a/twake/frontend/src/app/atoms/input/stories/input-groups.stories.tsx b/twake/frontend/src/app/atoms/input/stories/input-groups.stories.tsx new file mode 100644 index 0000000000..dcad901c79 --- /dev/null +++ b/twake/frontend/src/app/atoms/input/stories/input-groups.stories.tsx @@ -0,0 +1,110 @@ +import { ComponentStory } from '@storybook/react'; +import { SearchIcon } from '@heroicons/react/solid'; +import { Title } from '@atoms/text'; +import { Input } from '../input-text'; +import { FilterIcon, CogIcon } from '@heroicons/react/outline'; +import Select from '../input-select'; +import { InputDecorationIcon } from '../input-decoration-icon'; + +export default { + title: '@atoms/input-groups', +}; + +const Template: ComponentStory = (props: { + text: string; + disabled: boolean; + loading: boolean; +}) => { + return ( + <> + Icons +
+ + } + /> +
+ + } + /> +
+ + } + /> +
+ + ( + + )} + /> +
+ + ( + + )} + /> + +
+
+ Groups +
+ +
+ + +
+ +
+
+ Mixed +
+ +
+ ( + + )} + /> + ( + + )} + /> +
+ + ); +}; + +export const Default = Template.bind({}); +Default.args = { + text: 'Text', + disabled: false, +}; diff --git a/twake/frontend/src/app/atoms/input/stories/input.stories.tsx b/twake/frontend/src/app/atoms/input/stories/input.stories.tsx new file mode 100644 index 0000000000..afb0ba8961 --- /dev/null +++ b/twake/frontend/src/app/atoms/input/stories/input.stories.tsx @@ -0,0 +1,72 @@ +import { ComponentStory } from '@storybook/react'; +import { Input } from '../input-text'; +import { Title } from '../../text'; +import { InputLabel } from '../input-decoration-label'; + +export default { + title: '@atoms/input', +}; + +const Template: ComponentStory = (props: { + text: string; + disabled: boolean; + loading: boolean; +}) => { + return ( +
+ Sizes and themes plain / outline +
+ + +
+ +
+ +
+ + +
+ +
+ +
+ Labels and errors +
+ + +
+ + } + /> +
+ + } + /> +
+ ); +}; + +export const Default = Template.bind({}); +Default.args = { + text: 'Text', + disabled: false, +}; diff --git a/twake/frontend/src/app/atoms/input/stories/select.stories.tsx b/twake/frontend/src/app/atoms/input/stories/select.stories.tsx new file mode 100644 index 0000000000..b3ad371871 --- /dev/null +++ b/twake/frontend/src/app/atoms/input/stories/select.stories.tsx @@ -0,0 +1,57 @@ +import { ComponentStory } from '@storybook/react'; +import { Title } from '@atoms/text'; +import { InputLabel } from '../input-decoration-label'; +import Select from '../input-select'; + +export default { + title: '@atoms/select', +}; + +const Template: ComponentStory = (props: { + text: string; + disabled: boolean; + loading: boolean; +}) => { + return ( +
+ Sizes and with error +
+ + +
+ +
+ +
+ + Labels +
+ + + + + + } + /> +
+ ); +}; + +export const Default = Template.bind({}); +Default.args = { + disabled: false, +}; diff --git a/twake/frontend/src/app/atoms/link/index.tsx b/twake/frontend/src/app/atoms/link/index.tsx index 5a82b05038..6968f600c2 100644 --- a/twake/frontend/src/app/atoms/link/index.tsx +++ b/twake/frontend/src/app/atoms/link/index.tsx @@ -1,5 +1,5 @@ -import _ from "lodash"; -import { Link } from "react-router-dom"; +import _ from 'lodash'; +import { Link } from 'react-router-dom'; export default function A( props: any & { @@ -7,18 +7,16 @@ export default function A( href?: string; children: React.ReactNode; noColor?: boolean; - } + }, ) { - const colors = props.noColor - ? "" - : "hover:text-blue-700 active:text-blue-800 text-blue-600"; + const colors = props.noColor ? '' : 'hover:text-blue-700 active:text-blue-800 text-blue-500'; if (props.to) { return ( {props.children} @@ -27,9 +25,9 @@ export default function A( return ( {props.children} diff --git a/twake/frontend/src/app/atoms/loader/index.tsx b/twake/frontend/src/app/atoms/loader/index.tsx index 5ac5b85aee..a2692306f7 100644 --- a/twake/frontend/src/app/atoms/loader/index.tsx +++ b/twake/frontend/src/app/atoms/loader/index.tsx @@ -1,7 +1,7 @@ -export const Loader = () => { +export const Loader = (props: { className?: string }) => { return ( = (props: {}) => { + const [openA, setOpenA] = useState(false); + const [openB, setOpenB] = useState(false); + + return ( + + setOpenB(false)}> + Title + Hello this is the modal B
+ No more popup now + + setOpenA(false)}> + Title + Hello this is the modal A
+ setOpenB(true)}>Open B +
+ + + ); +}; + +export const Default = Template.bind({}); +Default.args = {}; + +const TemplateWithContent: ComponentStory = (props: {}) => { + const [openA, setOpenA] = useState(false); + const [openB, setOpenB] = useState(false); + + return ( + + setOpenB(false)}> + + + + + } + /> + + setOpenA(false)}> + + setOpenB(true)}>Open modal B + + } + /> + + + + ); +}; + +export const WithModalContent = TemplateWithContent.bind({}); +WithModalContent.args = {}; diff --git a/twake/frontend/src/app/atoms/modal/index.tsx b/twake/frontend/src/app/atoms/modal/index.tsx index d37780d35a..7029202d5f 100644 --- a/twake/frontend/src/app/atoms/modal/index.tsx +++ b/twake/frontend/src/app/atoms/modal/index.tsx @@ -1,7 +1,8 @@ import { Dialog, Transition } from '@headlessui/react'; -import { ExclamationIcon, XIcon } from '@heroicons/react/outline'; import { Fragment, ReactNode, useCallback, useEffect, useState } from 'react'; import { atom, useRecoilState } from 'recoil'; +import { DismissIcon } from '../icons-colored'; +import { Title } from '../text'; const ModalsCountState = atom({ key: 'ModalsState', @@ -22,6 +23,7 @@ export const Modal = (props: { const [open, setOpen] = useState(false); const [modalsCountState, setModalsCountState] = useRecoilState(ModalsCountState); const [level, setLevel] = useState(0); + const [didOpenOnce, setDidOpenOnce] = useState(false); const onClose = useCallback(() => { visibleModals += -1; @@ -43,6 +45,7 @@ export const Modal = (props: { onClose(); } } + if (!didOpenOnce && props.open) setDidOpenOnce(true); }, [props.open]); useEffect(() => { @@ -55,7 +58,11 @@ export const Modal = (props: { return ( - {}}> + props.onClose && props.closable && props.onClose()} + >
@@ -106,7 +113,7 @@ export const Modal = (props: { >
)} - {props.children} + {didOpenOnce && props.children}
@@ -136,12 +142,13 @@ export const Modal = (props: { export const ModalContent = (props: { title: string; text?: string; + textCenter?: boolean; buttons?: ReactNode; children?: ReactNode; icon?: any; theme?: 'success' | 'danger' | 'warning' | 'gray'; }) => { - let color = 'indigo'; + let color = 'blue'; if (props.theme === 'success') color = 'green'; if (props.theme === 'danger') color = 'red'; if (props.theme === 'warning') color = 'orange'; @@ -156,17 +163,26 @@ export const ModalContent = (props: {
)} -
- - {props.title} - +
+ {props.title}

{props.text || ''}

{props.buttons && ( -
+
{props.buttons}
)} diff --git a/twake/frontend/src/app/atoms/text/index.tsx b/twake/frontend/src/app/atoms/text/index.tsx index 535b33bb40..6f71c559fc 100644 --- a/twake/frontend/src/app/atoms/text/index.tsx +++ b/twake/frontend/src/app/atoms/text/index.tsx @@ -34,31 +34,31 @@ const Text = (props: TextProps) => { defaultClassName = 'text-lg font-semibold block ' + ' ' + - (props.noColor ? '' : 'text-slate-900 dark:text-white'); + (props.noColor ? '' : 'text-zinc-900 dark:text-white'); break; case 'subtitle': defaultClassName = - 'text-base font-semibold' + ' ' + (props.noColor ? '' : 'text-slate-800 dark:text-white'); + 'text-base font-semibold' + ' ' + (props.noColor ? '' : 'text-zinc-800 dark:text-white'); break; case 'base': defaultClassName = - 'text-base font-normal' + ' ' + (props.noColor ? '' : 'text-slate-800 dark:text-white'); + 'text-base font-normal' + ' ' + (props.noColor ? '' : 'text-zinc-800 dark:text-white'); break; case 'base-small': defaultClassName = - 'text-sm font-normal' + ' ' + (props.noColor ? '' : 'text-slate-800 dark:text-white'); + 'text-sm font-normal' + ' ' + (props.noColor ? '' : 'text-zinc-800 dark:text-white'); break; case 'info': defaultClassName = 'text-sm font-normal' + ' ' + - (props.noColor ? '' : 'text-slate-400 dark:text-white dark:opacity-50'); + (props.noColor ? '' : 'text-zinc-400 dark:text-white dark:opacity-50'); break; case 'info-small': defaultClassName = 'text-xs font-normal' + ' ' + - (props.noColor ? '' : 'text-slate-400 dark:text-white dark:opacity-50'); + (props.noColor ? '' : 'text-zinc-400 dark:text-white dark:opacity-50'); break; } diff --git a/twake/frontend/src/app/components/channel-avatar/channel-avatar.scss b/twake/frontend/src/app/components/channel-avatar/channel-avatar.scss index cfa0923f29..113a8fb50c 100644 --- a/twake/frontend/src/app/components/channel-avatar/channel-avatar.scss +++ b/twake/frontend/src/app/components/channel-avatar/channel-avatar.scss @@ -19,7 +19,6 @@ height: $iconWidth; width: $iconWidth; border-radius: 50%; - box-shadow: 1px 1px 3px #ccc; margin-bottom:2px; align-items: center; text-align: center; diff --git a/twake/frontend/src/app/components/inputs/inputs.scss b/twake/frontend/src/app/components/inputs/inputs.scss index 704322292e..69995c5331 100755 --- a/twake/frontend/src/app/components/inputs/inputs.scss +++ b/twake/frontend/src/app/components/inputs/inputs.scss @@ -304,7 +304,6 @@ select, border-radius: var(--border-radius-base); background: white; font-size: 14px; - opacity: 0.8; background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTkuNzEsMTAuMjEsMTIsNy45MWwyLjI5LDIuM2ExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJsLTMtM2ExLDEsMCwwLDAtMS40MiwwbC0zLDNhMSwxLDAsMCwwLDEuNDIsMS40MlptNC41OCw0LjU4TDEyLDE3LjA5bC0yLjI5LTIuM2ExLDEsMCwwLDAtMS40MiwxLjQybDMsM2ExLDEsMCwwLDAsMS40MiwwbDMtM2ExLDEsMCwwLDAtMS40Mi0xLjQyWiIvPjwvc3ZnPg==); background-repeat: no-repeat; background-size: 16px; diff --git a/twake/frontend/src/app/components/search-popup/parts/channels-and-contacts.tsx b/twake/frontend/src/app/components/search-popup/old_parts/channels-and-contacts.tsx similarity index 87% rename from twake/frontend/src/app/components/search-popup/parts/channels-and-contacts.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/channels-and-contacts.tsx index bb9a173b83..9793162a5b 100644 --- a/twake/frontend/src/app/components/search-popup/parts/channels-and-contacts.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/channels-and-contacts.tsx @@ -1,6 +1,6 @@ import Search from 'features/global/services/search-service'; -import ChannelsResult from 'components/search-popup/parts/channels-result'; -import UsersResult from 'components/search-popup/parts/users-result'; +import ChannelsResult from 'app/components/search-popup/old_parts/channels-result'; +import UsersResult from 'app/components/search-popup/old_parts/users-result'; import React from 'react'; import { ChannelType } from 'app/features/channels/types/channel'; import { UserType } from 'features/users/types/user'; diff --git a/twake/frontend/src/app/components/search-popup/parts/channels-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/channels-result.tsx similarity index 96% rename from twake/frontend/src/app/components/search-popup/parts/channels-result.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/channels-result.tsx index 829526af53..1b75b77ed6 100755 --- a/twake/frontend/src/app/components/search-popup/parts/channels-result.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/channels-result.tsx @@ -5,7 +5,7 @@ import { ChannelType } from 'app/features/channels/types/channel'; import { useWorkspace } from 'features/workspaces/hooks/use-workspaces'; import assert from 'assert'; import RouterServices from 'features/router/services/router-service'; -import { highlightText } from 'components/search-popup/parts/common'; +import { highlightText } from 'app/components/search-popup/old_parts/common'; import ChannelAvatar from 'components/channel-avatar/channel-avatar'; import { WorkspaceType } from 'features/workspaces/types/workspace'; diff --git a/twake/frontend/src/app/components/search-popup/parts/common.tsx b/twake/frontend/src/app/components/search-popup/old_parts/common.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/parts/common.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/common.tsx diff --git a/twake/frontend/src/app/components/search-popup/parts/discussions.tsx b/twake/frontend/src/app/components/search-popup/old_parts/discussions.tsx similarity index 89% rename from twake/frontend/src/app/components/search-popup/parts/discussions.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/discussions.tsx index 8d59ead9e6..c27cdba01a 100644 --- a/twake/frontend/src/app/components/search-popup/parts/discussions.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/discussions.tsx @@ -1,6 +1,6 @@ import Search from 'features/global/services/search-service'; import React from 'react'; -import MessagesResult from 'components/search-popup/parts/messages-result'; +import MessagesResult from 'app/components/search-popup/old_parts/messages-result'; import { MessageExtended } from 'features/messages/types/message'; type PropsType = { diff --git a/twake/frontend/src/app/components/search-popup/parts/files.tsx b/twake/frontend/src/app/components/search-popup/old_parts/files.tsx similarity index 83% rename from twake/frontend/src/app/components/search-popup/parts/files.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/files.tsx index 4aabfdf9b7..9f1fb26834 100644 --- a/twake/frontend/src/app/components/search-popup/parts/files.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/files.tsx @@ -1,5 +1,8 @@ -import FilesResult from 'components/search-popup/parts/recent/files-result'; -import { onFileDownloadClick, onFilePreviewClick } from 'components/search-popup/parts/common'; +import FilesResult from 'app/components/search-popup/old_parts/recent/files-result'; +import { + onFileDownloadClick, + onFilePreviewClick, +} from 'app/components/search-popup/old_parts/common'; import React from 'react'; import { FileSearchResult } from 'features/messages/types/message'; diff --git a/twake/frontend/src/app/components/search-popup/parts/loading.tsx b/twake/frontend/src/app/components/search-popup/old_parts/loading.tsx similarity index 82% rename from twake/frontend/src/app/components/search-popup/parts/loading.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/loading.tsx index 9793bd1a16..95914cf85b 100644 --- a/twake/frontend/src/app/components/search-popup/parts/loading.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/loading.tsx @@ -4,7 +4,7 @@ import React from 'react'; export default () => (
- +
); diff --git a/twake/frontend/src/app/components/search-popup/old_parts/media-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/media-result.tsx new file mode 100644 index 0000000000..560b3b8f41 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/old_parts/media-result.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { FileSearchResult } from 'features/messages/types/message'; +import { Thumbnail } from 'app/components/search-popup/old_parts/thumbnail'; + +type PropsType = { + fileSearchResult: FileSearchResult; + onClick: () => void; +}; + +export default ({ fileSearchResult, onClick }: PropsType): JSX.Element => { + if (!fileSearchResult.thumbnail_url) { + return
; + } + + return ( +
+
+ +
+
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/parts/media.tsx b/twake/frontend/src/app/components/search-popup/old_parts/media.tsx similarity index 89% rename from twake/frontend/src/app/components/search-popup/parts/media.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/media.tsx index 3d785cceda..0a7d91b014 100644 --- a/twake/frontend/src/app/components/search-popup/parts/media.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/media.tsx @@ -1,6 +1,6 @@ -import { onFilePreviewClick } from 'components/search-popup/parts/common'; +import { onFilePreviewClick } from 'app/components/search-popup/old_parts/common'; import React from 'react'; -import MediaResult from 'components/search-popup/parts/media-result'; +import MediaResult from 'app/components/search-popup/old_parts/media-result'; import { FileSearchResult } from 'features/messages/types/message'; type PropsType = { @@ -46,7 +46,7 @@ export default ({ title, files, limit, splitByDates }: PropsType): JSX.Element = for (const date of dates.keys()) { const files = dates.get(date); - response.push(
{date}
); + response.push(
{date}
); const fileCont = []; for (const file of files || []) { diff --git a/twake/frontend/src/app/components/search-popup/parts/messages-filter.js b/twake/frontend/src/app/components/search-popup/old_parts/messages-filter.js similarity index 100% rename from twake/frontend/src/app/components/search-popup/parts/messages-filter.js rename to twake/frontend/src/app/components/search-popup/old_parts/messages-filter.js diff --git a/twake/frontend/src/app/components/search-popup/parts/messages-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/messages-result.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/parts/messages-result.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/messages-result.tsx diff --git a/twake/frontend/src/app/components/search-popup/parts/not-found.tsx b/twake/frontend/src/app/components/search-popup/old_parts/not-found.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/parts/not-found.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/not-found.tsx diff --git a/twake/frontend/src/app/components/search-popup/parts/quick-result.js b/twake/frontend/src/app/components/search-popup/old_parts/quick-result.js similarity index 100% rename from twake/frontend/src/app/components/search-popup/parts/quick-result.js rename to twake/frontend/src/app/components/search-popup/old_parts/quick-result.js diff --git a/twake/frontend/src/app/components/search-popup/parts/recent/channels-and-contacts.tsx b/twake/frontend/src/app/components/search-popup/old_parts/recent/channels-and-contacts.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/parts/recent/channels-and-contacts.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/recent/channels-and-contacts.tsx diff --git a/twake/frontend/src/app/components/search-popup/parts/recent/files-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/recent/files-result.tsx similarity index 97% rename from twake/frontend/src/app/components/search-popup/parts/recent/files-result.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/recent/files-result.tsx index dc0cb88d1e..fc0feccd7b 100644 --- a/twake/frontend/src/app/components/search-popup/parts/recent/files-result.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/recent/files-result.tsx @@ -10,7 +10,7 @@ import { } from '@atoms/icons-colored'; import { DownloadIcon, EyeIcon } from '@atoms/icons-agnostic'; -import { Thumbnail } from 'components/search-popup/parts/thumbnail'; +import { Thumbnail } from 'app/components/search-popup/old_parts/thumbnail'; const locale = navigator.languages[0]; diff --git a/twake/frontend/src/app/components/search-popup/parts/thumbnail.tsx b/twake/frontend/src/app/components/search-popup/old_parts/thumbnail.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/parts/thumbnail.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/thumbnail.tsx diff --git a/twake/frontend/src/app/components/search-popup/parts/users-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/users-result.tsx similarity index 96% rename from twake/frontend/src/app/components/search-popup/parts/users-result.tsx rename to twake/frontend/src/app/components/search-popup/old_parts/users-result.tsx index 662d1b3667..92bab039b2 100755 --- a/twake/frontend/src/app/components/search-popup/parts/users-result.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/users-result.tsx @@ -4,7 +4,7 @@ import { UserType } from 'features/users/types/user'; import User from 'features/users/services/current-user-service'; import { useDirectChannels } from 'features/channels/hooks/use-direct-channels'; import assert from 'assert'; -import { highlightText } from 'components/search-popup/parts/common'; +import { highlightText } from 'app/components/search-popup/old_parts/common'; type PropsType = { user: UserType; diff --git a/twake/frontend/src/app/components/search-popup/tabs/all/index.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/all/index.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/tabs/all/index.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/all/index.tsx diff --git a/twake/frontend/src/app/components/search-popup/tabs/all/recent.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/all/recent.tsx similarity index 73% rename from twake/frontend/src/app/components/search-popup/tabs/all/recent.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/all/recent.tsx index 369bd25539..c70bd23a3f 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/all/recent.tsx +++ b/twake/frontend/src/app/components/search-popup/old_tabs/all/recent.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; -import RecentChannelsAndContacts from 'components/search-popup/parts/recent/channels-and-contacts'; -import Files from 'components/search-popup/parts/files'; -import Media from 'components/search-popup/parts/media'; +import RecentChannelsAndContacts from 'app/components/search-popup/old_parts/recent/channels-and-contacts'; +import Files from 'app/components/search-popup/old_parts/files'; +import Media from 'app/components/search-popup/old_parts/media'; import Search from 'features/global/services/search-service'; import Languages from 'features/global/services/languages-service'; diff --git a/twake/frontend/src/app/components/search-popup/tabs/all/search.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/all/search.tsx similarity index 76% rename from twake/frontend/src/app/components/search-popup/tabs/all/search.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/all/search.tsx index f0131ab592..805342b525 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/all/search.tsx +++ b/twake/frontend/src/app/components/search-popup/old_tabs/all/search.tsx @@ -1,12 +1,12 @@ import Search from 'features/global/services/search-service'; import React from 'react'; -import ChannelsAndContacts from 'components/search-popup/parts/channels-and-contacts'; -import Discussions from 'components/search-popup/parts/discussions'; -import Files from 'components/search-popup/parts/files'; -import Media from 'components/search-popup/parts/media'; +import ChannelsAndContacts from 'app/components/search-popup/old_parts/channels-and-contacts'; +import Discussions from 'app/components/search-popup/old_parts/discussions'; +import Files from 'app/components/search-popup/old_parts/files'; +import Media from 'app/components/search-popup/old_parts/media'; import Languages from 'features/global/services/languages-service'; -import NotFound from 'components/search-popup/parts/not-found'; -import Loading from 'components/search-popup/parts/loading'; +import NotFound from 'app/components/search-popup/old_parts/not-found'; +import Loading from 'app/components/search-popup/old_parts/loading'; export default (): JSX.Element => { if (Search.searchInProgress) { diff --git a/twake/frontend/src/app/components/search-popup/tabs/chats/index.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/chats/index.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/tabs/chats/index.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/chats/index.tsx diff --git a/twake/frontend/src/app/components/search-popup/tabs/chats/recent.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/chats/recent.tsx similarity index 81% rename from twake/frontend/src/app/components/search-popup/tabs/chats/recent.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/chats/recent.tsx index 96483621bf..328528f02e 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/chats/recent.tsx +++ b/twake/frontend/src/app/components/search-popup/old_tabs/chats/recent.tsx @@ -1,7 +1,7 @@ import React, { useEffect } from 'react'; -import RecentChannelsAndContacts from 'components/search-popup/parts/recent/channels-and-contacts'; +import RecentChannelsAndContacts from 'app/components/search-popup/old_parts/recent/channels-and-contacts'; import Search from 'features/global/services/search-service'; -import ChannelsAndContacts from 'components/search-popup/parts/channels-and-contacts'; +import ChannelsAndContacts from 'app/components/search-popup/old_parts/channels-and-contacts'; import { UserType } from 'features/users/types/user'; export default (): JSX.Element => { diff --git a/twake/frontend/src/app/components/search-popup/tabs/chats/search.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/chats/search.tsx similarity index 81% rename from twake/frontend/src/app/components/search-popup/tabs/chats/search.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/chats/search.tsx index a499bc801f..fbeaa29a09 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/chats/search.tsx +++ b/twake/frontend/src/app/components/search-popup/old_tabs/chats/search.tsx @@ -1,9 +1,9 @@ import Search from 'features/global/services/search-service'; import React, { useEffect } from 'react'; -import ChannelsAndContacts from 'components/search-popup/parts/channels-and-contacts'; -import Discussions from 'components/search-popup/parts/discussions'; -import NotFound from 'components/search-popup/parts/not-found'; -import Loading from 'components/search-popup/parts/loading'; +import ChannelsAndContacts from 'app/components/search-popup/old_parts/channels-and-contacts'; +import Discussions from 'app/components/search-popup/old_parts/discussions'; +import NotFound from 'app/components/search-popup/old_parts/not-found'; +import Loading from 'app/components/search-popup/old_parts/loading'; import Languages from 'features/global/services/languages-service'; export default (): JSX.Element => { diff --git a/twake/frontend/src/app/components/search-popup/old_tabs/files/index.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/files/index.tsx new file mode 100644 index 0000000000..005c5809bf --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/old_tabs/files/index.tsx @@ -0,0 +1,50 @@ +import Languages from 'features/global/services/languages-service'; +import { useRecoilValue } from 'recoil'; +import { HasSearchQuerySelector } from 'app/features/search/state/search-input'; +import { useSearchMessagesFiles } from 'app/features/search/hooks/use-search-files-or-medias'; +import FilesResult from '../../old_parts/recent/files-result'; +import { + onFileDownloadClick, + onFilePreviewClick, +} from 'app/components/search-popup/old_parts/common'; + +export default (): JSX.Element => { + const isSearchMode = useRecoilValue(HasSearchQuerySelector); + const title = isSearchMode + ? Languages.t('components.searchpopup.files') + : Languages.t('components.searchpopup.recent_files'); + + return ( +
+
+
{title}
+ + +
+
+ ); +}; + +export const FilesResults = () => { + const { files } = useSearchMessagesFiles(); + + console.log(files); + + return ( +
+ {files.map(file => ( + /* { + onFilePreviewClick(file); + }} + onDownloadClick={() => { + onFileDownloadClick(file); + }} + showThumbnails={false} + />*/ <> + ))} +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/media/index.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/media/index.tsx similarity index 80% rename from twake/frontend/src/app/components/search-popup/tabs/media/index.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/media/index.tsx index 5b68300608..b5dbeb59bc 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/media/index.tsx +++ b/twake/frontend/src/app/components/search-popup/old_tabs/media/index.tsx @@ -1,9 +1,9 @@ import React from 'react'; import Search from 'features/global/services/search-service'; -import Files from 'components/search-popup/parts/files'; -import Media from 'components/search-popup/parts/media'; -import NotFound from 'components/search-popup/parts/not-found'; -import Loading from 'components/search-popup/parts/loading'; +import Files from 'app/components/search-popup/old_parts/files'; +import Media from 'app/components/search-popup/old_parts/media'; +import NotFound from 'app/components/search-popup/old_parts/not-found'; +import Loading from 'app/components/search-popup/old_parts/loading'; import Languages from 'features/global/services/languages-service'; export default (): JSX.Element => { diff --git a/twake/frontend/src/app/components/search-popup/tabs/tab.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/tab.tsx similarity index 100% rename from twake/frontend/src/app/components/search-popup/tabs/tab.tsx rename to twake/frontend/src/app/components/search-popup/old_tabs/tab.tsx diff --git a/twake/frontend/src/app/components/search-popup/parts/media-result.tsx b/twake/frontend/src/app/components/search-popup/parts/media-result.tsx deleted file mode 100644 index 21919657cf..0000000000 --- a/twake/frontend/src/app/components/search-popup/parts/media-result.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import React from 'react'; -import { FileSearchResult } from 'features/messages/types/message'; -import { Thumbnail } from 'components/search-popup/parts/thumbnail'; - -type PropsType = { - fileSearchResult: FileSearchResult; - onClick: () => void; -}; - -export default ({ fileSearchResult, onClick }: PropsType): JSX.Element => { - const thumbnail = Thumbnail({ - fileSearchResult, - className: - 'object-cover cursor-pointer w-24 h-24 rounded-md shadow-md transition-transform hover:scale-105', - }); - - if (!thumbnail) { - return
; - } - - return ( -
- {thumbnail} -
- ); -}; diff --git a/twake/frontend/src/app/components/search-popup/parts/nothing-found.tsx b/twake/frontend/src/app/components/search-popup/parts/nothing-found.tsx new file mode 100644 index 0000000000..42083cc074 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/nothing-found.tsx @@ -0,0 +1,3 @@ +export default () => { + return <>; +}; diff --git a/twake/frontend/src/app/components/search-popup/parts/nothing-searched.tsx b/twake/frontend/src/app/components/search-popup/parts/nothing-searched.tsx new file mode 100644 index 0000000000..42083cc074 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/nothing-searched.tsx @@ -0,0 +1,3 @@ +export default () => { + return <>; +}; diff --git a/twake/frontend/src/app/components/search-popup/search-input.tsx b/twake/frontend/src/app/components/search-popup/search-input.tsx new file mode 100755 index 0000000000..6ce8d04200 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/search-input.tsx @@ -0,0 +1,83 @@ +import { InputDecorationIcon } from '@atoms/input/input-decoration-icon'; +import { SearchIcon } from '@heroicons/react/solid'; +import { Select } from 'app/atoms/input/input-select'; +import { Input } from 'app/atoms/input/input-text'; +import { Loader } from 'app/atoms/loader'; +import Languages from 'app/features/global/services/languages-service'; +import useRouterChannel from 'app/features/router/hooks/use-router-channel'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import { useSearchChannelsLoading } from 'app/features/search/hooks/use-search-channels'; +import { + useSearchMessagesFilesLoading, + useSearchMessagesMediasLoading, +} from 'app/features/search/hooks/use-search-files-or-medias'; +import { useSearchMessagesLoading } from 'app/features/search/hooks/use-search-messages'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import _ from 'lodash'; +import { useEffect, useRef } from 'react'; +import { useRecoilState } from 'recoil'; + +export const SearchInput = () => { + const [input, setInput] = useRecoilState(SearchInputState); + const workspaceId = useRouterWorkspace(); + const channelId = useRouterChannel(); + + const inputElement = useRef(null); + useEffect(() => { + if (inputElement.current) inputElement.current.focus(); + }, []); + + const channelsLoading = useSearchChannelsLoading(); + const messagesLoading = useSearchMessagesLoading(); + const filesLoading = useSearchMessagesFilesLoading(); + const mediasLoading = useSearchMessagesMediasLoading(); + + const loading = channelsLoading || messagesLoading || filesLoading || mediasLoading; + + return ( +
+ ( +
+ +
+ ) + : SearchIcon + } + input={({ className }) => ( + setInput({ ...input, query: e.target.value })} + value={input.query} + className={className + ' rounded-tr-none rounded-br-none'} + placeholder={Languages.t('scenes.app.mainview.quick_search_placeholder')} + /> + )} + /> + +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/search-popup.js b/twake/frontend/src/app/components/search-popup/search-popup.js deleted file mode 100755 index adf7f795b5..0000000000 --- a/twake/frontend/src/app/components/search-popup/search-popup.js +++ /dev/null @@ -1,224 +0,0 @@ -import React from 'react'; -import Search from 'features/global/services/search-service'; -import Collections from 'app/deprecated/CollectionsV1/Collections/Collections.js'; -import './search-popup.scss'; -import InputIcon from 'components/inputs/input-icon.js'; - -import Languages from 'app/features/global/services/languages-service'; -import TabAll from './tabs/all'; -import TabFiles from './tabs/files'; -import TabMedia from './tabs/media'; -import TabChats from './tabs/chats'; -import Tab from './tabs/tab'; -import { DismissIcon } from '@atoms/icons-colored'; -import { InputClearIcon } from '@atoms/icons-agnostic'; - -export default class SearchPopup extends React.Component { - constructor(props) { - super(props); - - Search.addListener(this); - this.handleChange = this.handleChange.bind(this); - this.eventKey = this.eventKey.bind(this); - this.state = { - selected: 0, - total: 0, - withFilters: Search.withFilters || false, - hasFilters: Search.hasFilters || false, - filterType: Search.type || false, - activeTab: 'all', - }; - - this.tabs = [ - { key: 'all', title: Languages.t('components.searchpopup.all') }, - { key: 'chats', title: Languages.t('components.searchpopup.chats') }, - { key: 'media', title: Languages.t('components.searchpopup.media') }, - { key: 'files', title: Languages.t('components.searchpopup.files') }, - ]; - } - componentDidMount() { - document.addEventListener('keydown', this.eventKey); - } - componentWillUnmount() { - document.removeEventListener('keydown', this.eventKey); - Search.removeListener(this); - Collections.get('users').removeListener(this); - } - eventKey(evt) { - if (Search.isOpen()) { - if (evt.keyCode === 27) { - //ESC - Search.close(); - } - if (evt.keyCode === 38) { - //UP - this.moved_selector = true; - this.setState({ - selected: (this.state.selected - 1 + this.state.total) % Math.max(1, this.state.total), - }); - } - if (evt.keyCode === 40) { - //DOWN - this.moved_selector = true; - this.setState({ - selected: (this.state.selected + 1 + this.state.total) % Math.max(1, this.state.total), - }); - } - if (evt.keyCode === 13) { - //ENTER - if (this.current_selection) { - Search.select(this.current_selection); - } - } - } - } - componentDidUpdate() { - Search.withFilters = this.state.withFilters; - Search.hasFilters = this.state.hasFilters; - if (this.moved_selector && this.scroller) { - var selected = this.scroller.getElementsByClassName('selected')[0]; - if (selected) { - this.scroller.scrollTop = - selected.offsetTop - selected.offsetHeight / 2 - this.scroller.offsetHeight / 2; - } - } - this.moved_selector = false; - } - handleChange(event) { - if (event) { - Search.setValue(event.target.value); - } - // Search.setType(this.state.filterType); - Search.search(true); - } - - renderTableData() { - return Search.row.map(data => { - return ( - - {data.id} - - ); - }); - } - - listenUsers() { - if (!this.listen_user_collection) { - Collections.get('users').addListener(this); - this.listen_user_collection = true; - } - } - - onCloseButtonClick() { - Search.close(); - } - - onSearchFieldClearClick() { - Search.clear(); - } - - onTabClick(key) { - Search.setCurrentTab(key); - this.setState({ activeTab: key }); - } - - getTabContent() { - switch (this.state.activeTab) { - case 'all': - return ; - case 'chats': - return ; - case 'media': - return ; - case 'files': - return ; - default: - return
?
; - } - } - - render() { - if (!Search.isOpen()) { - this.state.selected = 0; - this.state.total = 0; - Collections.get('users').removeListener(this); - return ''; - } - - this.state.total = 0; - - return ( -
-
- -
-
-
-
- {Languages.t('components.searchpopup.header_title')} -
-
- -
-
- -
- (this.input = node)} - onChange={this.handleChange} - onKeyPress={event => { - if (event.key === 'Enter') { - Search.search(true); - } - }} - /> - - {Search.value && ( -
- -
- )} -
- -
-
- {this.tabs.map((tab, idx) => ( - { - this.onTabClick(tab.key); - }} - /> - ))} -
- -
-
- -
{this.getTabContent()}
-
-
-
- ); - } -} diff --git a/twake/frontend/src/app/components/search-popup/search-popup.tsx b/twake/frontend/src/app/components/search-popup/search-popup.tsx new file mode 100755 index 0000000000..54fdc23ef9 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/search-popup.tsx @@ -0,0 +1,24 @@ +import { Modal, ModalContent } from '@atoms/modal'; +import Languages from 'app/features/global/services/languages-service'; +import { useSearchModal } from 'app/features/search/hooks/use-search'; +import { SearchInput } from './search-input'; +import { SearchResultsIndex } from './search-tabs'; + +export default () => { + const { open, setOpen } = useSearchModal(); + + return ( + setOpen(false)} className="sm:w-[80vw] sm:max-w-4xl"> + + + ); +}; + +const SearchBox = () => { + return ( + + + + + ); +}; diff --git a/twake/frontend/src/app/components/search-popup/search-tabs.tsx b/twake/frontend/src/app/components/search-popup/search-tabs.tsx new file mode 100755 index 0000000000..2b6bc959e7 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/search-tabs.tsx @@ -0,0 +1,82 @@ +import Tabs from '@molecules/tabs'; +import Languages from 'app/features/global/services/languages-service'; +import { useSearchChannels } from 'app/features/search/hooks/use-search-channels'; +import { + useSearchMessagesFiles, + useSearchMessagesMedias, +} from 'app/features/search/hooks/use-search-files-or-medias'; +import { useSearchMessages } from 'app/features/search/hooks/use-search-messages'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { useState } from 'react'; +import { useRecoilValue } from 'recoil'; +import SearchResultsAll from './tabs/all'; +import SearchResultsChannels from './tabs/channels'; +import SearchResultsFiles from './tabs/files'; +import SearchResultsMedias from './tabs/medias'; +import SearchResultsMessages from './tabs/messages'; + +export const SearchResultsIndex = () => { + const input = useRecoilValue(SearchInputState); + const hasInput = input?.query?.length > 0; + const [tab, setTab] = useState(0); + + const { channels } = useSearchChannels(); + const { messages } = useSearchMessages(); + const { files } = useSearchMessagesFiles(); + const { files: medias } = useSearchMessagesMedias(); + + return ( + <> + {Languages.t('components.searchpopup.all')}
, +
+
+ {Languages.t('components.searchpopup.messages')} + {hasInput && } +
+
, +
+
+ {Languages.t('components.searchpopup.media')} + {hasInput && } +
+
, +
+
+ {Languages.t('components.searchpopup.files')} + {hasInput && } +
+
, + ...(!input.channelId + ? [ +
+
+ {Languages.t('components.searchpopup.channels')} + {hasInput && } +
+
, + ] + : []), + ]} + selected={tab} + onClick={idx => setTab(idx)} + /> + + {tab === 0 && } + {tab === 1 && } + {tab === 2 && } + {tab === 3 && } + {tab === 4 && } + + ); +}; + +const SearchCounterBadge = (props: { count: number }) => { + const count = props.count < 100 ? props.count : '99+'; + return ( +
+ {count} +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/all.tsx b/twake/frontend/src/app/components/search-popup/tabs/all.tsx new file mode 100644 index 0000000000..95ba616fee --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/tabs/all.tsx @@ -0,0 +1,9 @@ +import { Title } from '@atoms/text'; + +export default () => { + return ( +
+ SearchPopup +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/channels.tsx b/twake/frontend/src/app/components/search-popup/tabs/channels.tsx new file mode 100644 index 0000000000..95ba616fee --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/tabs/channels.tsx @@ -0,0 +1,9 @@ +import { Title } from '@atoms/text'; + +export default () => { + return ( +
+ SearchPopup +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/files.tsx b/twake/frontend/src/app/components/search-popup/tabs/files.tsx new file mode 100644 index 0000000000..95ba616fee --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/tabs/files.tsx @@ -0,0 +1,9 @@ +import { Title } from '@atoms/text'; + +export default () => { + return ( +
+ SearchPopup +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/files/index.tsx b/twake/frontend/src/app/components/search-popup/tabs/files/index.tsx deleted file mode 100644 index 15fc2c4db5..0000000000 --- a/twake/frontend/src/app/components/search-popup/tabs/files/index.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import React, { useEffect } from 'react'; -import Search from 'features/global/services/search-service'; -import Files from 'components/search-popup/parts/files'; -import NotFound from 'components/search-popup/parts/not-found'; -import Loading from 'components/search-popup/parts/loading'; -import Languages from 'features/global/services/languages-service'; - -export default (): JSX.Element => { - const isSearchMode = Boolean(Search.value); - - useEffect(() => {}, [Search.searchInProgress]); - - if (Search.searchInProgress) { - return Loading(); - } - - if ( - isSearchMode && - !Search.searchInProgress && - (!Search.results.files || !Search.results.files.length) - ) { - return ; - } - - if (Search.recent.files === undefined) { - return
; - } - - const groupTitle = isSearchMode - ? Languages.t('components.searchpopup.files') - : Languages.t('components.searchpopup.recent_files'); - - return ( -
- -
- ); -}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/medias.tsx b/twake/frontend/src/app/components/search-popup/tabs/medias.tsx new file mode 100644 index 0000000000..95ba616fee --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/tabs/medias.tsx @@ -0,0 +1,9 @@ +import { Title } from '@atoms/text'; + +export default () => { + return ( +
+ SearchPopup +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/messages.tsx b/twake/frontend/src/app/components/search-popup/tabs/messages.tsx new file mode 100644 index 0000000000..95ba616fee --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/tabs/messages.tsx @@ -0,0 +1,9 @@ +import { Title } from '@atoms/text'; + +export default () => { + return ( +
+ SearchPopup +
+ ); +}; diff --git a/twake/frontend/src/app/components/user-list-manager-depreciated/user-list-manager.tsx b/twake/frontend/src/app/components/user-list-manager-depreciated/user-list-manager.tsx index c78e35dd1b..d84477801f 100755 --- a/twake/frontend/src/app/components/user-list-manager-depreciated/user-list-manager.tsx +++ b/twake/frontend/src/app/components/user-list-manager-depreciated/user-list-manager.tsx @@ -24,7 +24,7 @@ type PropsType = { [key: string]: any; }; -const useSearchUserList = ({ +const useSearchUsers = ({ scope, }: { scope: SearchContextType['scope']; @@ -65,7 +65,7 @@ const useSearchUserList = ({ }; const UserListManager = (props: PropsType) => { - const { result, search } = useSearchUserList({ scope: props.scope || 'company' }); + const { result, search } = useSearchUsers({ scope: props.scope || 'company' }); const { workspaceId } = RouterServices.getStateFromRoute(); const [input, setInput] = useState(''); const [editing, setEditing] = useState(props.autoFocus ? props.autoFocus : false); diff --git a/twake/frontend/src/app/components/user-list-manager/user-list-manager.tsx b/twake/frontend/src/app/components/user-list-manager/user-list-manager.tsx index 396ea9c13a..9c966760da 100755 --- a/twake/frontend/src/app/components/user-list-manager/user-list-manager.tsx +++ b/twake/frontend/src/app/components/user-list-manager/user-list-manager.tsx @@ -17,14 +17,14 @@ import useRouterCompany from 'app/features/router/hooks/use-router-company'; import { useWorkspace } from 'app/features/workspaces/hooks/use-workspaces'; import './user-list-manager.scss'; -import { useSearchUserList } from 'app/features/users/hooks/use-search-user-list'; +import { useSearchUsers } from 'app/features/users/hooks/use-search-user-list'; type PropsType = { [key: string]: any; }; const UserListManager = (props: PropsType) => { - const { result, search } = useSearchUserList({ scope: props.scope || 'company' }); + const { result, search } = useSearchUsers({ scope: props.scope || 'company' }); const workspaceId = useRouterWorkspace(); const { workspace } = useWorkspace(workspaceId); const [input, setInput] = useState(''); diff --git a/twake/frontend/src/app/features/channels/api/channel-api-client.ts b/twake/frontend/src/app/features/channels/api/channel-api-client.ts index a92c6add6e..c3596945ed 100644 --- a/twake/frontend/src/app/features/channels/api/channel-api-client.ts +++ b/twake/frontend/src/app/features/channels/api/channel-api-client.ts @@ -9,7 +9,7 @@ import Logger from 'features/global/framework/logger-service'; const PREFIX = '/internal/services/channels/v1/companies'; export type SearchOptions = { - company_id?: string; + company_id: string; page_token?: string; limit?: number; }; @@ -82,9 +82,13 @@ class ChannelAPIClientService { } async search( - searchString: string, - options?: SearchOptions, + searchString: string | null, + options: SearchOptions, ): Promise<{ resources: ChannelType[] }> { + if (!searchString) { + return { resources: await this.recent(options.company_id, options?.limit || 100) }; + } + const companyId = options?.company_id || Workspace.currentGroupId; const query = `/internal/services/channels/v1/companies/${companyId}/search?q=${searchString}`; const res = await Api.getWithParams<{ resources: ChannelType[] }>(query, options); diff --git a/twake/frontend/src/app/features/channels/types/channel.ts b/twake/frontend/src/app/features/channels/types/channel.ts index 573d94081f..4d875cf6a9 100644 --- a/twake/frontend/src/app/features/channels/types/channel.ts +++ b/twake/frontend/src/app/features/channels/types/channel.ts @@ -30,3 +30,25 @@ export type ChannelType = { }; users?: UserType[]; }; + +export const createDirectChannelFromUsers = (companyId: string, users: UserType[]): ChannelType => { + const id = users.map(u => u.id).join('_') + '_frontend'; + return { + company_id: companyId, + workspace_id: 'direct', + visibility: 'direct', + id: id, + members: users.map(u => u.id).filter(a => a) as string[], + owner: users[0].id, + members_count: users.length, + guests_count: 0, + messages_count: 0, + archived: false, + user_member: { + user_id: users[0].id, + channel_id: id, + }, + connectors: [], + users: users, + }; +}; diff --git a/twake/frontend/src/app/features/messages/api/message-api-client.ts b/twake/frontend/src/app/features/messages/api/message-api-client.ts index 01efdb81a2..3f1d4f2dfd 100644 --- a/twake/frontend/src/app/features/messages/api/message-api-client.ts +++ b/twake/frontend/src/app/features/messages/api/message-api-client.ts @@ -25,7 +25,7 @@ import assert from 'assert'; export interface BaseSearchOptions { company_id?: string; - workspace_dd?: string; + workspace_id?: string; channel_id?: string; page_token?: string; limit?: number; @@ -36,6 +36,8 @@ export interface FileSearchOptions extends BaseSearchOptions { is_file?: boolean; is_media?: boolean; extension?: string; + workspace_id?: string; + channel_id?: string; } @TwakeService('MessageAPIClientService') @@ -175,24 +177,20 @@ class MessageAPIClient { return res; } - async searchFile( - searchString: string | null, - options?: FileSearchOptions, - ): Promise<{ resources: FileSearchResult[]; next_page_token: string | null }> { + async searchFile(searchString: string | null, options?: FileSearchOptions) { const companyId = options?.company_id ? options.company_id : Workspace.currentGroupId; let query = `/internal/services/messages/v1/companies/${companyId}/files/search`; if (searchString) { query += `?q=${searchString}`; } const res = await Api.getWithParams<{ - resources: MessageFileType & - { - company_id: string; - metadata: MetaDataType; - created_at: number; - message: Message; - user: UserType; - }[]; + resources: (MessageFileType & { + company_id: string; + metadata: MetaDataType; + created_at: number; + message: Message; + user: UserType; + })[]; next_page_token: string; }>(query, options); try { @@ -208,43 +206,8 @@ class MessageAPIClient { return { resources: [], next_page_token: null }; } - const resources = [] as FileSearchResult[]; - - for (const resource of res.resources) { - const fsr = { - company_id: resource.metadata.external_id?.company_id, - file_id: resource.metadata.external_id?.id, - // thumbnail_url: resource.metadata.thumbnails?.[0]?.url, - filetype: FileUploadAPIClient.mimeToType(resource.metadata.mime || ''), - size: resource.metadata.size, - filename: resource.metadata.name, - created_at: resource.message.created_at, - message: resource.message, - user: resource.user, - } as FileSearchResult; - - if (resource.metadata?.thumbnails?.[0]?.index !== undefined) { - fsr.thumbnail_url = - FileUploadAPIClient.getRoute({ - companyId: fsr.company_id, - fileId: fsr.file_id, - fullApiRouteUrl: true, - }) + `/thumbnails/${resource.metadata?.thumbnails?.[0]?.index}`; - } - - try { - assert(resource.metadata.external_id, 'no external_id object for fileSearchResult'); - ['company_id', 'file_id', 'filename', 'filetype', 'size', 'created_at'].forEach(k => { - assert((fsr as any)[k], `no ${k} for fileSearchResult`); - }); - resources.push(fsr); - } catch (e) { - console.error(e, resource); - } - } - return { - resources, + resources: res.resources, next_page_token: res.next_page_token, }; } diff --git a/twake/frontend/src/app/features/search/hooks/use-search-channels.ts b/twake/frontend/src/app/features/search/hooks/use-search-channels.ts new file mode 100644 index 0000000000..da4b3b2d00 --- /dev/null +++ b/twake/frontend/src/app/features/search/hooks/use-search-channels.ts @@ -0,0 +1,95 @@ +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; +import { useEffect } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; +import { SearchInputState } from '../state/search-input'; +import { LoadingState } from 'app/features/global/state/atoms/Loading'; +import { SearchChannelsResultsState } from '../state/search-channels-result'; +import { RecentChannelsState } from '../state/recent-channels'; +import ChannelAPIClient from 'app/features/channels/api/channel-api-client'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import { useSearchUsers } from 'app/features/users/hooks/use-search-user-list'; +import { createDirectChannelFromUsers } from 'app/features/channels/types/channel'; +import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; +import { UserType } from 'app/features/users/types/user'; +import { useGlobalEffect } from 'app/features/global/hooks/use-global-effect'; + +export const useSearchChannelsLoading = () => { + return useRecoilValue(LoadingState('useSearchChannels')); +}; + +export const useSearchChannels = () => { + const companyId = useRouterCompany(); + const { user: currentUser } = useCurrentUser(); + + const { search, result: users } = useSearchUsers({ scope: 'company' }); + + const searchInput = useRecoilValue(SearchInputState); + const [loading, setLoading] = useRecoilState(LoadingState('useSearchChannels')); + + const [_searched, setSearched] = useRecoilState(SearchChannelsResultsState); + const [recent, setRecent] = useRecoilState(RecentChannelsState); + + const opt = { limit: 100, company_id: companyId }; + + const refresh = async () => { + setLoading(true); + const isRecent = !searchInput.query; + + if (!isRecent) search(searchInput.query); + + const response = await ChannelAPIClient.search(searchInput.query || null, opt); + const results = (response.resources || []).sort( + (a, b) => + (b.last_activity || 0) / 100 + + (b.user_member?.last_access || 0) - + ((a.last_activity || 0) / 100 + (a.user_member?.last_access || 0)), + ); + + const update = { + results, + nextPage: null, + }; + + if (!isRecent) setSearched(update); + if (isRecent) setRecent(update); + setLoading(false); + }; + + const loadMore = async () => { + //Not implemented + console.error('Not implemented'); + }; + + useGlobalEffect( + 'useSearchChannels', + () => { + (async () => { + setLoading(true); + if (searchInput) { + delayRequest('useSearchChannels', async () => { + refresh(); + }); + } else { + refresh(); + } + })(); + }, + [searchInput.query], + ); + + //We have two simultaneous results: users and searched + let searched = _searched.results; + if (searchInput?.query) { + searched = [ + ..._searched.results, + ...users.map(u => createDirectChannelFromUsers(companyId, [currentUser as UserType, u])), + ]; + } + + return { + loading, + channels: searchInput?.query ? searched : recent.results, + loadMore, + refresh, + }; +}; diff --git a/twake/frontend/src/app/features/search/hooks/use-search-files-or-medias.ts b/twake/frontend/src/app/features/search/hooks/use-search-files-or-medias.ts new file mode 100644 index 0000000000..f30fa324d2 --- /dev/null +++ b/twake/frontend/src/app/features/search/hooks/use-search-files-or-medias.ts @@ -0,0 +1,103 @@ +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; +import { useEffect } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; +import { SearchInputState } from '../state/search-input'; +import MessagesAPIClient from 'app/features/messages/api/message-api-client'; +import { SearchFilesResultsState } from '../state/search-files-result'; +import { LoadingState } from 'app/features/global/state/atoms/Loading'; +import { RecentFilesState } from '../state/recent-files'; +import { RecentMediasState } from '../state/recent-medias'; +import { SearchMediasResultsState } from '../state/search-medias-result'; +import _ from 'lodash'; +import { useGlobalEffect } from 'app/features/global/hooks/use-global-effect'; + +export const useSearchMessagesFilesLoading = () => { + return useRecoilValue(LoadingState('useSearchMessagesFilesOrMedias-' + 'files')); +}; + +export const useSearchMessagesMediasLoading = () => { + return useRecoilValue(LoadingState('useSearchMessagesFilesOrMedias-' + 'medias')); +}; + +export const useSearchMessagesFilesOrMedias = (mode: 'files' | 'medias') => { + const searchInput = useRecoilValue(SearchInputState); + const [loading, setLoading] = useRecoilState( + LoadingState('useSearchMessagesFilesOrMedias-' + mode), + ); + + const [searched, setSearched] = useRecoilState( + mode === 'files' ? SearchFilesResultsState : SearchMediasResultsState, + ); + const [recent, setRecent] = useRecoilState( + mode === 'files' ? RecentFilesState : RecentMediasState, + ); + + const opt = _.omitBy( + { + limit: 100, + is_file: mode === 'files' || undefined, + is_media: mode === 'medias' || undefined, + workspace_id: searchInput.workspaceId, + channel_id: searchInput.channelId, + }, + _.isUndefined, + ); + + const refresh = async () => { + setLoading(true); + const isRecent = !searchInput.query; + + const response = await MessagesAPIClient.searchFile(searchInput.query || null, opt); + let results = response.resources || []; + if (isRecent) + results = results.sort( + (a, b) => (b?.message?.created_at || 0) - (a?.message?.created_at || 0), + ); + + const update = { + results, + nextPage: response.next_page_token, + }; + + if (!isRecent) setSearched(update); + if (isRecent) setRecent(update); + setLoading(false); + }; + + const loadMore = async () => { + //Not implemented + console.error('Not implemented'); + }; + + useGlobalEffect( + 'useSearchFiles' + mode, + () => { + (async () => { + setLoading(true); + if (searchInput) { + delayRequest('useSearchFiles' + mode, async () => { + refresh(); + }); + } else { + refresh(); + } + })(); + }, + [searchInput.query, searchInput.channelId, searchInput.workspaceId], + ); + + return { + loading, + files: searchInput?.query ? searched.results : recent.results, + loadMore, + refresh, + }; +}; + +export const useSearchMessagesMedias = () => { + return useSearchMessagesFilesOrMedias('medias'); +}; + +export const useSearchMessagesFiles = () => { + return useSearchMessagesFilesOrMedias('files'); +}; diff --git a/twake/frontend/src/app/features/search/hooks/use-search-messages.ts b/twake/frontend/src/app/features/search/hooks/use-search-messages.ts new file mode 100644 index 0000000000..3ee4aafd08 --- /dev/null +++ b/twake/frontend/src/app/features/search/hooks/use-search-messages.ts @@ -0,0 +1,74 @@ +import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; +import { useEffect } from 'react'; +import { useRecoilState, useRecoilValue } from 'recoil'; +import { SearchInputState } from '../state/search-input'; +import { LoadingState } from 'app/features/global/state/atoms/Loading'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import { SearchMessagesResultsState } from '../state/search-messages-result'; +import messageApiClient from 'app/features/messages/api/message-api-client'; +import { MessageExtended } from 'app/features/messages/types/message'; +import _ from 'lodash'; +import { useGlobalEffect } from 'app/features/global/hooks/use-global-effect'; + +export const useSearchMessagesLoading = () => { + return useRecoilValue(LoadingState('useSearchMessages')); +}; + +export const useSearchMessages = () => { + const companyId = useRouterCompany(); + const searchInput = useRecoilValue(SearchInputState); + const [loading, setLoading] = useRecoilState(LoadingState('useSearchMessages')); + + const [searched, setSearched] = useRecoilState(SearchMessagesResultsState); + + const opt = _.omitBy( + { + limit: 100, + company_id: companyId, + workspace_id: searchInput.workspaceId, + channel_id: searchInput.channelId, + }, + _.isUndefined, + ); + + const refresh = async () => { + setLoading(true); + + let results: MessageExtended[] = []; + + if (searchInput.query) { + const response = await messageApiClient.search(searchInput.query, opt); + results = response.resources; + } + + setSearched({ + results, + nextPage: null, + }); + setLoading(false); + }; + + const loadMore = async () => { + //Not implemented + console.error('Not implemented'); + }; + + useGlobalEffect( + 'useSearchMessages', + () => { + (async () => { + setLoading(true); + if (searchInput) { + delayRequest('useSearchMessages', async () => { + refresh(); + }); + } else { + refresh(); + } + })(); + }, + [searchInput.query, searchInput.channelId, searchInput.workspaceId], + ); + + return { loading, messages: searched.results, loadMore, refresh }; +}; diff --git a/twake/frontend/src/app/features/search/hooks/use-search.ts b/twake/frontend/src/app/features/search/hooks/use-search.ts new file mode 100644 index 0000000000..f99ec62161 --- /dev/null +++ b/twake/frontend/src/app/features/search/hooks/use-search.ts @@ -0,0 +1,11 @@ +import { atom, useRecoilState } from 'recoil'; + +const SearchModalOpenState = atom({ key: 'SearchModalOpenState', default: false }); + +export const useSearchModal = () => { + const [open, setOpen] = useRecoilState(SearchModalOpenState); + return { + open, + setOpen, + }; +}; diff --git a/twake/frontend/src/app/features/search/state/recent-channels.ts b/twake/frontend/src/app/features/search/state/recent-channels.ts new file mode 100644 index 0000000000..9dee78b788 --- /dev/null +++ b/twake/frontend/src/app/features/search/state/recent-channels.ts @@ -0,0 +1,12 @@ +import { ChannelType } from 'app/features/channels/types/channel'; +import { atom, selector } from 'recoil'; + +export type RecentChannels = { + results: ChannelType[]; + nextPage: string | null; +}; + +export const RecentChannelsState = atom({ + key: 'RecentChannelsState', + default: { results: [], nextPage: '' }, +}); diff --git a/twake/frontend/src/app/features/search/state/recent-files.ts b/twake/frontend/src/app/features/search/state/recent-files.ts new file mode 100644 index 0000000000..75edbaadd5 --- /dev/null +++ b/twake/frontend/src/app/features/search/state/recent-files.ts @@ -0,0 +1,12 @@ +import { MessageFileType } from 'app/features/messages/types/message'; +import { atom, selector } from 'recoil'; + +export type RecentFiles = { + results: MessageFileType[]; + nextPage: string | null; +}; + +export const RecentFilesState = atom({ + key: 'RecentFilesState', + default: { results: [], nextPage: '' }, +}); diff --git a/twake/frontend/src/app/features/search/state/recent-medias.ts b/twake/frontend/src/app/features/search/state/recent-medias.ts new file mode 100644 index 0000000000..6ad447cc8b --- /dev/null +++ b/twake/frontend/src/app/features/search/state/recent-medias.ts @@ -0,0 +1,12 @@ +import { MessageFileType } from 'app/features/messages/types/message'; +import { atom, selector } from 'recoil'; + +export type RecentMedias = { + results: MessageFileType[]; + nextPage: string | null; +}; + +export const RecentMediasState = atom({ + key: 'RecentMediasState', + default: { results: [], nextPage: '' }, +}); diff --git a/twake/frontend/src/app/features/search/state/search-channels-result.ts b/twake/frontend/src/app/features/search/state/search-channels-result.ts new file mode 100644 index 0000000000..3824647f55 --- /dev/null +++ b/twake/frontend/src/app/features/search/state/search-channels-result.ts @@ -0,0 +1,20 @@ +import { ChannelType } from 'app/features/channels/types/channel'; +import { atom, selector } from 'recoil'; + +export type SearchChannelsResults = { + results: ChannelType[]; + nextPage: string | null; +}; + +export const SearchChannelsResultsState = atom({ + key: 'SearchChannelsResultsState', + default: { results: [], nextPage: '' }, +}); + +export const SearchChannelsResultsNumberSelector = selector({ + key: 'SearchChannelsResultsNumberSelector', + get: ({ get }) => { + const snapshot = get(SearchChannelsResultsState); + return snapshot.results.length; + }, +}); diff --git a/twake/frontend/src/app/features/search/state/search-files-result.ts b/twake/frontend/src/app/features/search/state/search-files-result.ts new file mode 100644 index 0000000000..d46146adce --- /dev/null +++ b/twake/frontend/src/app/features/search/state/search-files-result.ts @@ -0,0 +1,20 @@ +import { MessageFileType } from 'app/features/messages/types/message'; +import { atom, selector } from 'recoil'; + +export type SearchFilesResults = { + results: MessageFileType[]; + nextPage: string | null; +}; + +export const SearchFilesResultsState = atom({ + key: 'SearchFilesResultsState', + default: { results: [], nextPage: '' }, +}); + +export const SearchFilesResultsNumberSelector = selector({ + key: 'SearchFilesResultsNumberSelector', + get: ({ get }) => { + const snapshot = get(SearchFilesResultsState); + return snapshot.results.length; + }, +}); diff --git a/twake/frontend/src/app/features/search/state/search-input.ts b/twake/frontend/src/app/features/search/state/search-input.ts new file mode 100644 index 0000000000..549cc36a81 --- /dev/null +++ b/twake/frontend/src/app/features/search/state/search-input.ts @@ -0,0 +1,27 @@ +import { atom, selector } from 'recoil'; + +export type SearchInput = { + query: string; + + //Scope + workspaceId?: string; + channelId?: string; + + //Additional filters (for later) + //TODO +}; + +export const SearchInputState = atom({ + key: 'SearchInputState', + default: { + query: '', + }, +}); + +export const HasSearchQuerySelector = selector({ + key: 'HasSearchQuerySelector', + get: ({ get }) => { + const searchInput = get(SearchInputState); + return searchInput.query.length > 0; + }, +}); diff --git a/twake/frontend/src/app/features/search/state/search-medias-result.ts b/twake/frontend/src/app/features/search/state/search-medias-result.ts new file mode 100644 index 0000000000..1319896b75 --- /dev/null +++ b/twake/frontend/src/app/features/search/state/search-medias-result.ts @@ -0,0 +1,20 @@ +import { MessageFileType } from 'app/features/messages/types/message'; +import { atom, selector } from 'recoil'; + +export type SearchMediasResults = { + results: MessageFileType[]; + nextPage: string | null; +}; + +export const SearchMediasResultsState = atom({ + key: 'SearchMediasResultsState', + default: { results: [], nextPage: '' }, +}); + +export const SearchMediasResultsNumberSelector = selector({ + key: 'SearchMediasResultsNumberSelector', + get: ({ get }) => { + const snapshot = get(SearchMediasResultsState); + return snapshot.results.length; + }, +}); diff --git a/twake/frontend/src/app/features/search/state/search-messages-result.ts b/twake/frontend/src/app/features/search/state/search-messages-result.ts new file mode 100644 index 0000000000..6111bb97cc --- /dev/null +++ b/twake/frontend/src/app/features/search/state/search-messages-result.ts @@ -0,0 +1,20 @@ +import { ChannelType } from 'app/features/channels/types/channel'; +import { atom, selector } from 'recoil'; + +export type SearchMessagesResults = { + results: ChannelType[]; + nextPage: string | null; +}; + +export const SearchMessagesResultsState = atom({ + key: 'SearchMessagesResultsState', + default: { results: [], nextPage: '' }, +}); + +export const SearchMessagesResultsNumberSelector = selector({ + key: 'SearchMessagesResultsNumberSelector', + get: ({ get }) => { + const snapshot = get(SearchMessagesResultsState); + return snapshot.results.length; + }, +}); diff --git a/twake/frontend/src/app/features/users/hooks/use-search-user-list.ts b/twake/frontend/src/app/features/users/hooks/use-search-user-list.ts index ac596b8167..a4947d8906 100644 --- a/twake/frontend/src/app/features/users/hooks/use-search-user-list.ts +++ b/twake/frontend/src/app/features/users/hooks/use-search-user-list.ts @@ -23,7 +23,7 @@ export const searchBackend = async ( callback?: () => void; }, ) => { - delayRequest('useSearchUserList', async () => { + delayRequest('useSearchUsers', async () => { await UserAPIClient.search( query, { @@ -106,7 +106,7 @@ export const searchFrontend = ( return result; }; -export const useSearchUserList = ({ +export const useSearchUsers = ({ scope, }: { scope: SearchContextType['scope']; diff --git a/twake/frontend/src/app/molecules/media/index.tsx b/twake/frontend/src/app/molecules/media/index.tsx index e6828644d8..6b4f979525 100644 --- a/twake/frontend/src/app/molecules/media/index.tsx +++ b/twake/frontend/src/app/molecules/media/index.tsx @@ -27,7 +27,7 @@ export default function Media(props: MediaProps) { } const wrpClassName = `relative cursor-inherit w-${size} h-${size}`; - const imgClassName = `object-cover rounded-md w-${size} h-${size} border border-slate-300`; + const imgClassName = `object-cover rounded-md w-${size} h-${size} border border-zinc-300`; return (
diff --git a/twake/frontend/src/app/molecules/tabs/index.tsx b/twake/frontend/src/app/molecules/tabs/index.tsx index bc97066e62..9bad985fff 100644 --- a/twake/frontend/src/app/molecules/tabs/index.tsx +++ b/twake/frontend/src/app/molecules/tabs/index.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, { useEffect } from 'react'; // @ts-ignore interface TabsProps extends React.InputHTMLAttributes { @@ -8,15 +8,22 @@ interface TabsProps extends React.InputHTMLAttributes { } const defaultTabClassName = - 'h-12 px-4 flex items-center border-b-2 border-transparent text-slate-400 hover:text-blue-600 cursor-default transition-all'; -const activeTabClassName = ' text-blue-500 border-blue-500'; + ' cursor-pointer h-12 px-4 flex items-center border-b-2 border-transparent hover:text-blue-600 transition-colors'; +const activeTabClassName = ' text-blue-500 border-blue-500 font-semibold '; +const inactiveTabClassName = ' text-zinc-500 '; export default function Tab(props: TabsProps) { + useEffect(() => { + if (props.selected >= props.tabs.length) props.onClick(0); + }, [props.tabs.length]); + return ( <> -
+
{props.tabs.map((tab, idx) => { - const cl = defaultTabClassName + (idx === props.selected ? activeTabClassName : ''); + const cl = + defaultTabClassName + + (idx === props.selected ? activeTabClassName : inactiveTabClassName); return (
props.onClick(idx)}> {tab} diff --git a/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelMembersList.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelMembersList.tsx index 20fbb26abd..24a90037a4 100644 --- a/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelMembersList.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/ChannelMembersList.tsx @@ -15,7 +15,7 @@ import { delayRequest } from 'app/features/global/utils/managedSearchRequest'; import { useChannelMembers } from 'app/features/channel-members/hooks/use-channel-members'; import { ChannelMemberType } from 'app/features/channel-members/types/channel-member-types'; import { getUser, useSetUserList } from 'app/features/users/hooks/use-user-list'; -import { useSearchUserList } from 'app/features/users/hooks/use-search-user-list'; +import { useSearchUsers } from 'app/features/users/hooks/use-search-user-list'; type PropsType = { closable?: boolean; @@ -38,7 +38,7 @@ const ChannelMembersList = (props: PropsType) => { channelId: id || '', }); - const { search: searchUserList, result } = useSearchUserList({ + const { search: searchUserList, result } = useSearchUsers({ scope: 'workspace', }); diff --git a/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList.tsx index 9dad747c69..a509ebf484 100644 --- a/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/WorkspaceChannelList.tsx @@ -19,7 +19,7 @@ import ChannelMembersAPIClient from 'app/features/channel-members/api/channel-me import ChannelsReachableAPIClient from 'app/features/channels/api/channels-reachable-api-client'; import { useFavoriteChannels } from 'app/features/channels/hooks/use-favorite-channels'; import { useSetUserList, useUserList } from 'app/features/users/hooks/use-user-list'; -import { useSearchUserList } from 'app/features/users/hooks/use-search-user-list'; +import { useSearchUsers } from 'app/features/users/hooks/use-search-user-list'; import useRouterCompany from 'app/features/router/hooks/use-router-company'; import { useDirectChannels } from 'app/features/channels/hooks/use-direct-channels'; @@ -35,7 +35,7 @@ export default () => { const { userList } = useUserList(); const { openDiscussion } = useDirectChannels(); - const { search: searchUserList, result: searchedUserList } = useSearchUserList({ + const { search: searchUserList, result: searchedUserList } = useSearchUsers({ scope: 'company', }); diff --git a/twake/frontend/src/app/views/client/channels-bar/Modals/new-direct-channel-popup/select-users.tsx b/twake/frontend/src/app/views/client/channels-bar/Modals/new-direct-channel-popup/select-users.tsx index c631606f82..4eb28bcdc6 100644 --- a/twake/frontend/src/app/views/client/channels-bar/Modals/new-direct-channel-popup/select-users.tsx +++ b/twake/frontend/src/app/views/client/channels-bar/Modals/new-direct-channel-popup/select-users.tsx @@ -1,6 +1,6 @@ import React, { useEffect, useState } from 'react'; import Input from 'app/components/inputs/input'; -import { useSearchUserList } from 'app/features/users/hooks/use-search-user-list'; +import { useSearchUsers } from 'app/features/users/hooks/use-search-user-list'; import User from 'app/components/ui/user'; import Button from 'app/components/buttons/button'; import { UserType } from 'app/features/users/types/user'; @@ -8,7 +8,7 @@ import { Trash, Trash2, X, XCircle } from 'react-feather'; export default (props: { onChange: (users: UserType[]) => void; initialUsers: UserType[] }) => { const [users, setUsers] = useState(props.initialUsers); - const { search, query, result } = useSearchUserList({ scope: 'company' }); + const { search, query, result } = useSearchUsers({ scope: 'company' }); useEffect(() => { props.onChange(users); diff --git a/twake/frontend/src/app/views/client/index.tsx b/twake/frontend/src/app/views/client/index.tsx index 57ca75c762..abf42103e4 100755 --- a/twake/frontend/src/app/views/client/index.tsx +++ b/twake/frontend/src/app/views/client/index.tsx @@ -16,7 +16,7 @@ import ConfigBodyLayer from 'components/configurators/config-body-layer.js'; import Viewer from 'app/views/applications/drive/viewer/viewer'; import ModalComponent from 'app/components/modal/modal-component'; import ConnectionIndicator from 'components/connection-indicator/connection-indicator'; -import SearchPopup from 'components/search-popup/search-popup.js'; +import SearchPopup from 'components/search-popup/search-popup'; import NewVersionComponent from 'components/new-version/new-version-component'; import SideBars, { LoadingSidebar } from './side-bars'; import CompanyStatusComponent from 'app/components/on-boarding/company-status-component'; diff --git a/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx b/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx index 1255fc0053..061af050d8 100644 --- a/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx +++ b/twake/frontend/src/app/views/client/main-view/MainHeader/Search.tsx @@ -1,19 +1,25 @@ -import { Button, Col, Input, Row } from 'antd'; -import React from 'react'; +import { Col, Row } from 'antd'; import { Search } from 'react-feather'; import RouterServices from 'app/features/router/services/router-service'; import AccessRightsService from 'app/features/workspace-members/services/workspace-members-access-rights-service'; import Languages from 'app/features/global/services/languages-service'; -import SearchService from "features/global/services/search-service"; +import { useSearchModal } from 'app/features/search/hooks/use-search'; +import { Button } from '@atoms/button/button'; +import { SearchIcon } from '@heroicons/react/solid'; +import { Input } from '@atoms/input/input-text'; +import { InputDecorationIcon } from 'app/atoms/input/input-decoration-icon'; +import { useRecoilValue } from 'recoil'; +import { SearchInputState } from 'app/features/search/state/search-input'; export default (): JSX.Element => { const { workspaceId, companyId } = RouterServices.getStateFromRoute(); + const { setOpen } = useSearchModal(); + const searchState = useRecoilValue(SearchInputState); - const disable = - !( - AccessRightsService.hasLevel(workspaceId, 'member') && - AccessRightsService.getCompanyLevel(companyId) !== 'guest' - ); + const disable = !( + AccessRightsService.hasLevel(workspaceId, 'member') && + AccessRightsService.getCompanyLevel(companyId) !== 'guest' + ); return ( <> @@ -22,12 +28,18 @@ export default (): JSX.Element => {
{!disable && ( - } - placeholder={Languages.t('scenes.client.main_view.main_header.search_input')} - onClick={() => SearchService.open()} + ( + setOpen(true)} + /> + )} /> )}
@@ -39,12 +51,11 @@ export default (): JSX.Element => {
{!disable && (
diff --git a/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx index ea2ad52ba9..85e53e165d 100644 --- a/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx +++ b/twake/frontend/src/app/views/client/popup/WorkspaceParameter/Pages/WorkspacePartnerTabs/Members.tsx @@ -25,7 +25,7 @@ import { useSetUserList } from 'app/features/users/hooks/use-user-list'; import { searchBackend, searchFrontend, - useSearchUserList, + useSearchUsers, } from 'app/features/users/hooks/use-search-user-list'; type ColumnObjectType = { [key: string]: any }; @@ -55,7 +55,7 @@ export default ({ filter }: { filter: string }) => { const companyId = useRouterCompany(); const workspaceId = useRouterWorkspace(); - const { search, result } = useSearchUserList({ scope: 'workspace' }); + const { search, result } = useSearchUsers({ scope: 'workspace' }); const prefixRoute = '/internal/services/workspaces/v1'; const workspaceUsersRoute = `${prefixRoute}/companies/${companyId}/workspaces/${workspaceId}/users`; diff --git a/twake/frontend/src/tailwind.css b/twake/frontend/src/tailwind.css index d35f3c88bf..8ba25a7a9a 100644 --- a/twake/frontend/src/tailwind.css +++ b/twake/frontend/src/tailwind.css @@ -6,10 +6,10 @@ input.ant-input { background-color: transparent; } -[type='text'], [type='email'], [type='url'], [type='password'], [type='number'], [type='date'], [type='datetime-local'], [type='month'], [type='search'], [type='tel'], [type='time'], [type='week'], [multiple], textarea, select { +[type='text']:not(.tw-input), [type='email']:not(.tw-input), [type='url']:not(.tw-input), [type='password']:not(.tw-input), [type='number']:not(.tw-input), [type='date']:not(.tw-input), [type='datetime-local']:not(.tw-input), [type='month']:not(.tw-input), [type='search']:not(.tw-input), [type='tel']:not(.tw-input), [type='time']:not(.tw-input), [type='week']:not(.tw-input), [multiple]:not(.tw-input), textarea:not(.tw-input), select:not(.tw-input) { border-color: var(--grey-light); } -[type='text']:hover, [type='email']:hover, [type='url']:hover, [type='password']:hover, [type='number']:hover, [type='date']:hover, [type='datetime-local']:hover, [type='month']:hover, [type='search']:hover, [type='tel']:hover, [type='time']:hover, [type='week']:hover, [multiple]:hover, textarea:hover, select:hover { +[type='text']:hover:not(.tw-input), [type='email']:hover:not(.tw-input), [type='url']:hover:not(.tw-input), [type='password']:hover:not(.tw-input), [type='number']:hover:not(.tw-input), [type='date']:hover:not(.tw-input), [type='datetime-local']:hover:not(.tw-input), [type='month']:hover:not(.tw-input), [type='search']:hover:not(.tw-input), [type='tel']:hover:not(.tw-input), [type='time']:hover:not(.tw-input), [type='week']:hover:not(.tw-input), [multiple]:hover:not(.tw-input), textarea:hover:not(.tw-input), select:hover:not(.tw-input) { border-color: var(--grey-light); } \ No newline at end of file diff --git a/twake/frontend/tailwind.config.js b/twake/frontend/tailwind.config.js index d0dbbcd99d..a061b55c0b 100644 --- a/twake/frontend/tailwind.config.js +++ b/twake/frontend/tailwind.config.js @@ -1,10 +1,14 @@ const defaultTheme = require('tailwindcss/defaultTheme'); let shades = []; -['slate', 'red', 'orange', 'green', 'blue'].map(color => { +['zink', 'red', 'orange', 'green', 'blue'].map(color => { [50, 100, 200, 300, 400, 500, 600, 700, 800, 900].map(shade => { shades.push(`bg-${color}-${shade}`); + shades.push(`border-${color}-${shade}`); shades.push(`text-${color}-${shade}`); + shades.push(`dark:bg-${color}-${shade}`); + shades.push(`dark:border-${color}-${shade}`); + shades.push(`dark:text-${color}-${shade}`); }); }); @@ -18,17 +22,52 @@ module.exports = { }, borderRadius: { xl: '24px', - lg: '16px', + lg: '14px', md: '10px', + sm: '8px', }, fontSize: { - lg: '17px', - base: '15px', - sm: '13px', - xs: '11px', + lg: '18px', + base: '16px', + sm: '14px', + xs: '12px', + }, + + colors: { + zinc: { + 50: '#f7f8f9', //From figma + 100: '#f2f4f5', //From figma + 200: '#ebedf0', //From figma + 300: '#d9dadb', //From figma + 400: '#b8c1cc', //From figma + 500: '#818c99', //From figma + 600: '#52525b', + 700: '#3f3f46', + 800: '#27272a', + 900: '#18181b', + }, + blue: { + 500: '#007AFF', //From figma + }, }, }, }, - safelist: ['bg-green-500', 'bg-red-500', 'bg-orange-500', ...shades], + safelist: [ + 'cursor-pointer', + 'w-32', + 'h-32', + 'h-8', + 'w-8', + 'bg-green-500', + 'bg-red-500', + 'bg-orange-500', + 'h-12', + 'px-4', + 'flex', + 'items-center', + 'border-b-2', + 'border-transparent', + ...shades, + ], plugins: [require('@tailwindcss/forms')], }; From 9c74a7ce71b60a7c8e3c559cf83a014ddaa79044 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Fri, 24 Jun 2022 17:27:42 +0200 Subject: [PATCH 177/276] =?UTF-8?q?=F0=9F=9B=A0=20Fix=20infinite=20calls?= =?UTF-8?q?=20when=20scrolling=20down?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/views/applications/messages/list-builder.tsx | 11 +++++++---- .../app/views/applications/messages/messages-list.tsx | 3 ++- .../applications/messages/thread-messages-list.tsx | 3 ++- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/twake/frontend/src/app/views/applications/messages/list-builder.tsx b/twake/frontend/src/app/views/applications/messages/list-builder.tsx index e40020fc0a..6feb2edceb 100644 --- a/twake/frontend/src/app/views/applications/messages/list-builder.tsx +++ b/twake/frontend/src/app/views/applications/messages/list-builder.tsx @@ -63,11 +63,14 @@ export default React.memo( useEffect(() => { // Detect append or prepend or full replace items const ids = items.map(i => itemId(i)); + //Find the first index in props _items that is already in displayed items const first = _items.findIndex(i => ids.includes(itemId(i))); - const last = - _items.length - - 1 - - _items.findIndex((_, i) => ids.includes(itemId(_items[_items.length - 1 - i]))); + //Find the last index in props _items that is already in displayed items + const lastIndex = _items + .slice() + .reverse() + .findIndex(i => ids.includes(itemId(i))); + const last = lastIndex >= 0 ? _items.length - 1 - lastIndex : lastIndex; if (first == -1) { //Replacement setFirstItemIndex(START_INDEX); diff --git a/twake/frontend/src/app/views/applications/messages/messages-list.tsx b/twake/frontend/src/app/views/applications/messages/messages-list.tsx index b94f751ad1..83295fd6fe 100644 --- a/twake/frontend/src/app/views/applications/messages/messages-list.tsx +++ b/twake/frontend/src/app/views/applications/messages/messages-list.tsx @@ -20,6 +20,7 @@ import RouterServices from 'app/features/router/services/router-service'; import GoToBottom from './parts/go-to-bottom'; import { MessagesPlaceholder } from './placeholder'; import { cleanFrontMessagesFromListOfMessages } from 'app/features/messages/hooks/use-message-editor'; +import { getMessage } from 'app/features/messages/hooks/use-message'; type Props = { companyId: string; @@ -177,7 +178,7 @@ export default ({ channelId, companyId, workspaceId, threadId }: Props) => { filterOnAppend={messages => { return cleanFrontMessagesFromListOfMessages(messages); }} - itemId={m => m.type + m.threadId} + itemId={m => m.type + (getMessage(m.id)?.context?._front_id || m.threadId)} emptyListComponent={} itemContent={row} followOutput={!!window.reachedEnd && 'smooth'} diff --git a/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx b/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx index 4ea29fd5bf..6914099c6d 100644 --- a/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx +++ b/twake/frontend/src/app/views/applications/messages/thread-messages-list.tsx @@ -14,6 +14,7 @@ import { VirtuosoHandle } from 'react-virtuoso'; import GoToBottom from './parts/go-to-bottom'; import { MessagesPlaceholder } from './placeholder'; import { cleanFrontMessagesFromListOfMessages } from 'app/features/messages/hooks/use-message-editor'; +import { getMessage } from 'app/features/messages/hooks/use-message'; type Props = { companyId: string; @@ -111,7 +112,7 @@ export default ({ companyId, threadId }: Props) => { cancelHighlight(); }} items={messages} - itemId={m => m.type + m.id} + itemId={m => m.type + (getMessage(m.id)?.context?._front_id || m.id)} emptyListComponent={} filterOnAppend={messages => { return cleanFrontMessagesFromListOfMessages(messages); From 8d8de6ce64b6b31eaed69c09a173d17f2406ae5d Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Fri, 24 Jun 2022 17:27:54 +0200 Subject: [PATCH 178/276] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Create=20next=20ve?= =?UTF-8?q?rsion=20number=20and=20changelog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/saas-update-backend.yml | 12 ++++++------ .github/workflows/saas-update-front.yml | 6 +++--- changelog.md | 11 +++++++++-- .../core/src/Twake/Core/Controller/Version.php | 4 ++-- twake/backend/node/src/version.ts | 4 ++-- twake/frontend/src/app/environment/version.ts | 4 ++-- twake/update_version.js | 6 +++--- 7 files changed, 27 insertions(+), 20 deletions(-) diff --git a/.github/workflows/saas-update-backend.yml b/.github/workflows/saas-update-backend.yml index 8ac6ca2a5e..3cb2364eac 100644 --- a/.github/workflows/saas-update-backend.yml +++ b/.github/workflows/saas-update-backend.yml @@ -13,13 +13,13 @@ jobs: deploy-php: runs-on: ubuntu-20.04 steps: - - run: 'echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' @@ -40,13 +40,13 @@ jobs: deploy-node: runs-on: ubuntu-20.04 steps: - - run: 'echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' diff --git a/.github/workflows/saas-update-front.yml b/.github/workflows/saas-update-front.yml index b882fcb19e..9c5dd75107 100644 --- a/.github/workflows/saas-update-front.yml +++ b/.github/workflows/saas-update-front.yml @@ -48,13 +48,13 @@ jobs: runs-on: ubuntu-20.04 if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/qa' || github.ref == 'refs/heads/canary' steps: - - run: 'echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + - run: 'echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/develop') - run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=develop" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/qa') - run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q2.975" >> $GITHUB_ENV' + run: 'echo "DOCKERTAG=qa" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=2022.Q3.1050" >> $GITHUB_ENV' - name: Set env to develop if: endsWith(github.ref, '/canary') run: 'echo "DOCKERTAG=canary" >> $GITHUB_ENV; echo "DOCKERTAGVERSION=${{ env.DOCKERTAGVERSION }}-canary" >> $GITHUB_ENV' diff --git a/changelog.md b/changelog.md index 53d5a59bda..01f1b262a4 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,9 @@ +# Twake 2022.Q3.1050 + +- [Search anything on Twake](https://github.com/linagora/Twake/issues/1710) +- Started using Tailwindcss for future new design +- Started using Storybooks + # Twake 2022.Q2.975 ### Backend @@ -5,12 +11,14 @@ - [Implemented the list of uploaded in our backend](https://github.com/linagora/Twake/issues/2127) - [Jump to a message](https://github.com/linagora/Twake/issues/1926) - [Search for messages](https://github.com/linagora/Twake/issues/1710) +- Generate links previews +- Multiple bug fixes ### Bug fixed - [Fixed thumbnail rotatation when uploaded from mobile](https://github.com/linagora/Twake/issues/2111) - [Scrolling message feed isn't smooth](https://github.com/linagora/Twake/issues/2039) -- [Position of Close (x) buttons are not consistent](https://github.com/linagora/Twake/issues/2031) +- [Position of Close (x) buttons are not consistent](https://github.com/linagora/Twake/issues/2031) - [Mention user by any namu or identifier](https://github.com/linagora/Twake/issues/2042) - [Update workspace name reset the logo](https://github.com/linagora/Twake/issues/1950) - [Empty channel isn't working](https://github.com/linagora/Twake/issues/2146) @@ -18,7 +26,6 @@ - [Windows notification has no redirection](https://github.com/linagora/Twake/issues/125) - [Clicking on push notification does not open the right message](https://github.com/linagora/Twake/issues/396) - # Twake 2022.Q2.930 ### Backend diff --git a/twake/backend/core/src/Twake/Core/Controller/Version.php b/twake/backend/core/src/Twake/Core/Controller/Version.php index c1527db315..40578938e6 100755 --- a/twake/backend/core/src/Twake/Core/Controller/Version.php +++ b/twake/backend/core/src/Twake/Core/Controller/Version.php @@ -49,9 +49,9 @@ function getVersion(Request $request) "auth_mode" => array_keys($auth), "auth" => $auth, "version" => [ - "current" => /* @VERSION_DETAIL */ "2022.Q2.975", + "current" => /* @VERSION_DETAIL */ "2022.Q3.1050", "minimal" => [ - "web" => /* @MIN_VERSION_WEB */ "2022.Q1.874", + "web" => /* @MIN_VERSION_WEB */ "2022.Q2.975", "mobile" => /* @MIN_VERSION_MOBILE */ "2022.Q1.874", ] ], diff --git a/twake/backend/node/src/version.ts b/twake/backend/node/src/version.ts index 54869912a0..0520658d15 100644 --- a/twake/backend/node/src/version.ts +++ b/twake/backend/node/src/version.ts @@ -1,7 +1,7 @@ export default { - current: /* @VERSION_DETAIL */ "2022.Q2.975", + current: /* @VERSION_DETAIL */ "2022.Q3.1050", minimal: { - web: /* @MIN_VERSION_WEB */ "2022.Q1.874", + web: /* @MIN_VERSION_WEB */ "2022.Q2.975", mobile: /* @MIN_VERSION_MOBILE */ "2022.Q1.874", }, }; diff --git a/twake/frontend/src/app/environment/version.ts b/twake/frontend/src/app/environment/version.ts index 5a49ec3f41..c33258bb0a 100644 --- a/twake/frontend/src/app/environment/version.ts +++ b/twake/frontend/src/app/environment/version.ts @@ -1,5 +1,5 @@ export default { - version: /* @VERSION */ '2022.Q2', - version_detail: /* @VERSION_DETAIL */ '2022.Q2.975', + version: /* @VERSION */ '2022.Q3', + version_detail: /* @VERSION_DETAIL */ '2022.Q3.1050', version_name: /* @VERSION_NAME */ 'Albatros', }; diff --git a/twake/update_version.js b/twake/update_version.js index 6eca276b2d..bce685c189 100755 --- a/twake/update_version.js +++ b/twake/update_version.js @@ -4,9 +4,9 @@ const versions = { VERSION_NAME: process.env.TWAKE_VERSION_NAME || "Albatros", - VERSION: process.env.TWAKE_VERSION || "2022.Q2", - VERSION_DETAIL: process.env.TWAKE_VERSION_DETAIL || "2022.Q2.975", - MIN_VERSION_WEB: process.env.TWAKE_MIN_VERSION_WEB || "2022.Q1.874", + VERSION: process.env.TWAKE_VERSION || "2022.Q3", + VERSION_DETAIL: process.env.TWAKE_VERSION_DETAIL || "2022.Q3.1050", + MIN_VERSION_WEB: process.env.TWAKE_MIN_VERSION_WEB || "2022.Q2.975", MIN_VERSION_MOBILE: process.env.TWAKE_MIN_VERSION_MOBILE || "2022.Q1.874", }; From d07234d900aa162859f7ba390b4cdc1d5a75a5e2 Mon Sep 17 00:00:00 2001 From: Khaled Ferjani Date: Tue, 28 Jun 2022 13:52:41 +0100 Subject: [PATCH 179/276] =?UTF-8?q?=F0=9F=8C=9F=20Added=20open=20desktop?= =?UTF-8?q?=20app=20when=20it's=20a=20Twake=20link=20#2316=20=20(#2345)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🌟 Added logo atom * 🌟 Added static dir to storybook config * 🌟 Added opened in desktop view * 🛠 ui improvements * 🌟 Added translated strings * 🌟 desktop app detection methods for chrome, firefox and chrome * 🛠 detection improvements * 🛠 added static dir when running storybook --- twake/frontend/.storybook/main.js | 2 +- twake/frontend/package.json | 3 +- twake/frontend/public/locales/de.json | 4 +- twake/frontend/public/locales/en.json | 4 +- twake/frontend/public/locales/eo.json | 4 +- twake/frontend/public/locales/es.json | 4 +- twake/frontend/public/locales/eu.json | 4 +- twake/frontend/public/locales/fi.json | 4 +- twake/frontend/public/locales/fr.json | 4 +- twake/frontend/public/locales/it.json | 4 +- twake/frontend/public/locales/ja.json | 4 +- twake/frontend/public/locales/nb_NO.json | 4 +- twake/frontend/public/locales/ru.json | 4 +- twake/frontend/public/locales/si.json | 4 +- twake/frontend/public/locales/tr.json | 4 +- twake/frontend/public/locales/vi.json | 4 +- twake/frontend/public/locales/zh_Hans.json | 4 +- .../public/public/img/logo/128x128.png | Bin 0 -> 5656 bytes .../frontend/public/public/img/logo/16x16.png | Bin 0 -> 789 bytes .../public/public/img/logo/256x256.png | Bin 0 -> 11524 bytes .../frontend/public/public/img/logo/32x32.png | Bin 0 -> 1363 bytes .../frontend/public/public/img/logo/64x64.png | Bin 0 -> 2231 bytes twake/frontend/public/styles/tailwind.css | 50 ++++++------- twake/frontend/src/app/app.tsx | 69 +++++++++--------- .../src/app/atoms/link/link.stories.tsx | 31 ++++++++ twake/frontend/src/app/atoms/logo/index.tsx | 23 ++++++ .../src/app/atoms/logo/logo.stories.tsx | 38 ++++++++++ .../open-desktop-popup/open-desktop-popup.tsx | 30 ++++++++ .../features/global/state/atoms/use-web.ts | 6 ++ .../src/app/views/desktop-redirect/index.tsx | 42 +++++++++++ .../src/utils/browser-detect/common.ts | 59 +++++++++++++++ .../src/utils/browser-detect/detect.ts | 40 ++++++++++ .../src/utils/browser-detect/index.ts | 21 ++++++ .../src/utils/browser-detect/types.ts | 7 ++ .../src/utils/browser-detect/window.ts | 47 ++++++++++++ 35 files changed, 450 insertions(+), 78 deletions(-) create mode 100644 twake/frontend/public/public/img/logo/128x128.png create mode 100644 twake/frontend/public/public/img/logo/16x16.png create mode 100644 twake/frontend/public/public/img/logo/256x256.png create mode 100644 twake/frontend/public/public/img/logo/32x32.png create mode 100644 twake/frontend/public/public/img/logo/64x64.png create mode 100644 twake/frontend/src/app/atoms/link/link.stories.tsx create mode 100644 twake/frontend/src/app/atoms/logo/index.tsx create mode 100644 twake/frontend/src/app/atoms/logo/logo.stories.tsx create mode 100644 twake/frontend/src/app/components/open-desktop-popup/open-desktop-popup.tsx create mode 100644 twake/frontend/src/app/features/global/state/atoms/use-web.ts create mode 100644 twake/frontend/src/app/views/desktop-redirect/index.tsx create mode 100644 twake/frontend/src/utils/browser-detect/common.ts create mode 100644 twake/frontend/src/utils/browser-detect/detect.ts create mode 100644 twake/frontend/src/utils/browser-detect/index.ts create mode 100644 twake/frontend/src/utils/browser-detect/types.ts create mode 100644 twake/frontend/src/utils/browser-detect/window.ts diff --git a/twake/frontend/.storybook/main.js b/twake/frontend/.storybook/main.js index 697fda92b1..b98f45843c 100644 --- a/twake/frontend/.storybook/main.js +++ b/twake/frontend/.storybook/main.js @@ -65,5 +65,5 @@ module.exports = { }), core: { builder: 'webpack5', - }, + } }; diff --git a/twake/frontend/package.json b/twake/frontend/package.json index 4721c09e3e..0fca135e74 100644 --- a/twake/frontend/package.json +++ b/twake/frontend/package.json @@ -14,7 +14,7 @@ "start": "npm run dev:start", "build": "npm run build-storybook && CI=false craco --max_old_space_size=4096 --optimize-for-size build", "build-storybook": "build-storybook -o public/storybook", - "storybook": "concurrently \"start-storybook -p 6006\" \"npm run dev:tailwind\"" + "storybook": "concurrently \"start-storybook -p 6006 -s public\" \"npm run dev:tailwind\"" }, "eslintConfig": { "extends": "eslint-config-react-app-eslint-six", @@ -138,6 +138,7 @@ "craco-less": "^2.0.0", "crypto-js": "^4.0.0", "css-loader": "3.6.0", + "detect-browser": "^5.3.0", "dotenv": "8.2.0", "dotenv-expand": "5.1.0", "draft-js": "^0.11.7", diff --git a/twake/frontend/public/locales/de.json b/twake/frontend/public/locales/de.json index 62fd1b6774..4b208ad9a7 100644 --- a/twake/frontend/public/locales/de.json +++ b/twake/frontend/public/locales/de.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Erfolgreiche {{$1}} Bewerbung!", "scenes.app.integrations_parameters.add_application": "Neue Einbindung", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Entwicklereinstellungen", - "components.rich_text_editor.plugins.suggestions.loading": "Auf der Suche nach mehr" + "components.rich_text_editor.plugins.suggestions.loading": "Auf der Suche nach mehr", + "components.open_desktop_popup.subtitle": "in der Twake-App geöffnet", + "components.open_desktop_popup.open_here_link": "Öffnen Sie stattdessen hier" } diff --git a/twake/frontend/public/locales/en.json b/twake/frontend/public/locales/en.json index da31083afd..f259fa71dd 100644 --- a/twake/frontend/public/locales/en.json +++ b/twake/frontend/public/locales/en.json @@ -902,5 +902,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "Error while removing application {{$1}} !", "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Successfully {{$1}} application!", "scenes.app.integrations_parameters.add_application": "New integration", - "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Developer settings" + "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Developer settings", + "components.open_desktop_popup.subtitle": "Opened in Twake app", + "components.open_desktop_popup.open_here_link": "Open here instead" } diff --git a/twake/frontend/public/locales/eo.json b/twake/frontend/public/locales/eo.json index 946f149313..3ab45c3971 100644 --- a/twake/frontend/public/locales/eo.json +++ b/twake/frontend/public/locales/eo.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Sukcese {{$1}} aplikaĵo!", "scenes.app.integrations_parameters.add_application": "Nova integriĝo", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Agordoj por programistoj", - "components.rich_text_editor.plugins.suggestions.loading": "Serĉante pli" + "components.rich_text_editor.plugins.suggestions.loading": "Serĉante pli", + "components.open_desktop_popup.subtitle": "malfermita en Twake-aplikaĵo", + "components.open_desktop_popup.open_here_link": "Malfermu ĉi tie anstataŭe" } diff --git a/twake/frontend/public/locales/es.json b/twake/frontend/public/locales/es.json index 77d0cf91cb..28198891d4 100644 --- a/twake/frontend/public/locales/es.json +++ b/twake/frontend/public/locales/es.json @@ -885,5 +885,7 @@ "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Configuración de desarrollador", "scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "¡Error al eliminar la aplicación {{$1}}!", "scenes.app.popup.appsparameters.pages.application_editor.application_published": "¡Aplicación exitosa {{$1}}!", - "components.rich_text_editor.plugins.suggestions.loading": "Buscando por mas" + "components.rich_text_editor.plugins.suggestions.loading": "Buscando por mas", + "components.open_desktop_popup.subtitle": "abierto en la aplicación Twake", + "components.open_desktop_popup.open_here_link": "Abrir aquí en su lugar" } diff --git a/twake/frontend/public/locales/eu.json b/twake/frontend/public/locales/eu.json index 98d7326445..1f850d56e1 100644 --- a/twake/frontend/public/locales/eu.json +++ b/twake/frontend/public/locales/eu.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Arrakastaz {{$1}} aplikazioa!", "scenes.app.integrations_parameters.add_application": "Integrazio berria", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Garatzaileen ezarpenak", - "components.rich_text_editor.plugins.suggestions.loading": "Gehiagoren bila" + "components.rich_text_editor.plugins.suggestions.loading": "Gehiagoren bila", + "components.open_desktop_popup.subtitle": "Twake aplikazioan ireki da", + "components.open_desktop_popup.open_here_link": "Ireki hemen ordez" } diff --git a/twake/frontend/public/locales/fi.json b/twake/frontend/public/locales/fi.json index b55259b6c3..bfc1fba8de 100644 --- a/twake/frontend/public/locales/fi.json +++ b/twake/frontend/public/locales/fi.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_published": "{{$1}} -sovellus onnistui!", "scenes.app.integrations_parameters.add_application": "Uusi integraatio", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Kehittäjäasetukset", - "components.rich_text_editor.plugins.suggestions.loading": "Etsitkö lisää" + "components.rich_text_editor.plugins.suggestions.loading": "Etsitkö lisää", + "components.open_desktop_popup.subtitle": "avattu Twake-sovelluksessa", + "components.open_desktop_popup.open_here_link": "Avaa sen sijaan tästä" } diff --git a/twake/frontend/public/locales/fr.json b/twake/frontend/public/locales/fr.json index 3c53b9007e..29351f28b9 100644 --- a/twake/frontend/public/locales/fr.json +++ b/twake/frontend/public/locales/fr.json @@ -887,5 +887,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "Erreur lors de la suppression de l'application {{$1}} !", "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Application {{$1}} réussie !", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Paramètres du développeur", - "scenes.app.integrations_parameters.add_application": "Nouvelle intégration" + "scenes.app.integrations_parameters.add_application": "Nouvelle intégration", + "components.open_desktop_popup.subtitle": "ouvert dans l'application Twake", + "components.open_desktop_popup.open_here_link": "Ouvrez plutôt ici" } diff --git a/twake/frontend/public/locales/it.json b/twake/frontend/public/locales/it.json index 60c485abf8..7b843df1ee 100644 --- a/twake/frontend/public/locales/it.json +++ b/twake/frontend/public/locales/it.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_removed_error": "Errore durante la rimozione dell'applicazione {{$1}} !", "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Applicazione {{$1}} riuscita!", "scenes.app.integrations_parameters.add_application": "Nuova integrazione", - "components.rich_text_editor.plugins.suggestions.loading": "Alla ricerca di più" + "components.rich_text_editor.plugins.suggestions.loading": "Alla ricerca di più", + "components.open_desktop_popup.subtitle": "aperto nell'app Twake", + "components.open_desktop_popup.open_here_link": "Apri qui invece" } diff --git a/twake/frontend/public/locales/ja.json b/twake/frontend/public/locales/ja.json index be2c7996f9..9992ef6ad2 100644 --- a/twake/frontend/public/locales/ja.json +++ b/twake/frontend/public/locales/ja.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_published": "{{$1}}アプリケーションに成功しました!", "scenes.app.integrations_parameters.add_application": "新しい統合", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "開発者設定", - "components.rich_text_editor.plugins.suggestions.loading": "もっとお探しですか" + "components.rich_text_editor.plugins.suggestions.loading": "もっとお探しですか", + "components.open_desktop_popup.subtitle": "Twakeアプリで開きました", + "components.open_desktop_popup.open_here_link": "代わりにここを開く" } diff --git a/twake/frontend/public/locales/nb_NO.json b/twake/frontend/public/locales/nb_NO.json index 2ab1c86f51..dc4475bf80 100644 --- a/twake/frontend/public/locales/nb_NO.json +++ b/twake/frontend/public/locales/nb_NO.json @@ -885,5 +885,7 @@ "twake.application.access.title": "Velg de riktige omfangene for applikasjonen din.", "twake.application.access.no_default_scopes_available'": "Denne integrasjonen har ingen {{$1}}-tilgang", "scenes.app.popup.appsparameters.pages.application_editor.help_text": "Hvis du ikke vet hvordan du fyller disse, gå til ", - "components.rich_text_editor.plugins.suggestions.loading": "Ser etter mer" + "components.rich_text_editor.plugins.suggestions.loading": "Ser etter mer", + "components.open_desktop_popup.subtitle": "åpnet i Twake-appen", + "components.open_desktop_popup.open_here_link": "Åpne her i stedet" } diff --git a/twake/frontend/public/locales/ru.json b/twake/frontend/public/locales/ru.json index 959f361ed9..c214a4d014 100644 --- a/twake/frontend/public/locales/ru.json +++ b/twake/frontend/public/locales/ru.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Успешная заявка {{$1}}!", "scenes.app.integrations_parameters.add_application": "Новая интеграция", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Настройки разработчика", - "components.rich_text_editor.plugins.suggestions.loading": "Ищете больше" + "components.rich_text_editor.plugins.suggestions.loading": "Ищете больше", + "components.open_desktop_popup.subtitle": "открыто в приложении Twake", + "components.open_desktop_popup.open_here_link": "Вместо этого откройте здесь" } diff --git a/twake/frontend/public/locales/si.json b/twake/frontend/public/locales/si.json index b234e0e905..e64f174c3f 100644 --- a/twake/frontend/public/locales/si.json +++ b/twake/frontend/public/locales/si.json @@ -885,5 +885,7 @@ "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "සංවර්ධක සැකසුම්", "scenes.app.popup.appsparameters.pages.amazing_app_description": "ඔබේ යෙදුම වචන කිහිපයකින් විස්තර කරන්න", "scenes.app.popup.appsparameters.pages.app.private_key": "පුද්ගලික යතුර", - "components.rich_text_editor.plugins.suggestions.loading": "තව හොයනවා" + "components.rich_text_editor.plugins.suggestions.loading": "තව හොයනවා", + "components.open_desktop_popup.subtitle": "Twake යෙදුම තුළ විවෘත කරන ලදී", + "components.open_desktop_popup.open_here_link": "ඒ වෙනුවට මෙතන විවෘත කරන්න" } diff --git a/twake/frontend/public/locales/tr.json b/twake/frontend/public/locales/tr.json index 4304134557..ec380c5c49 100644 --- a/twake/frontend/public/locales/tr.json +++ b/twake/frontend/public/locales/tr.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.application_published": "Başarıyla {{$1}} uygulaması!", "scenes.app.integrations_parameters.add_application": "Yeni entegrasyon", "scenes.app.integrations_parameters.company_applications_table.more_menu.developer_settings": "Geliştirici ayarları", - "components.rich_text_editor.plugins.suggestions.loading": "daha fazlasını arıyorum" + "components.rich_text_editor.plugins.suggestions.loading": "daha fazlasını arıyorum", + "components.open_desktop_popup.subtitle": "Twake uygulamasında açıldı", + "components.open_desktop_popup.open_here_link": "Bunun yerine burada aç" } diff --git a/twake/frontend/public/locales/vi.json b/twake/frontend/public/locales/vi.json index 0c5a259c06..e53a7592dd 100644 --- a/twake/frontend/public/locales/vi.json +++ b/twake/frontend/public/locales/vi.json @@ -885,5 +885,7 @@ "twake.application.access.title": "Chọn phạm vi phù hợp cho ứng dụng của bạn.", "twake.application.access.no_default_scopes_available'": "Tích hợp này không có bất kỳ quyền truy cập {{$1}} nào", "scenes.app.popup.appsparameters.pages.application_editor.help_link": "tài liệu API Twake", - "components.rich_text_editor.plugins.suggestions.loading": "Tìm kiếm thêm" + "components.rich_text_editor.plugins.suggestions.loading": "Tìm kiếm thêm", + "components.open_desktop_popup.subtitle": "được mở trong ứng dụng Twake", + "components.open_desktop_popup.open_here_link": "Thay vào đó hãy mở ở đây" } diff --git a/twake/frontend/public/locales/zh_Hans.json b/twake/frontend/public/locales/zh_Hans.json index 18960317eb..d28e6296d4 100644 --- a/twake/frontend/public/locales/zh_Hans.json +++ b/twake/frontend/public/locales/zh_Hans.json @@ -885,5 +885,7 @@ "scenes.app.popup.appsparameters.pages.application_editor.help_link": "Twake API 文档", "scenes.app.popup.appsparameters.pages.application_editor.help_text": "如果您不知道如何填写这些,请访问 ", "scenes.app.popup.appsparameters.pages.app.private_key": "私钥", - "components.rich_text_editor.plugins.suggestions.loading": "寻找更多" + "components.rich_text_editor.plugins.suggestions.loading": "寻找更多", + "components.open_desktop_popup.subtitle": "在 Twake 應用中打開", + "components.open_desktop_popup.open_here_link": "改為在此處打開" } diff --git a/twake/frontend/public/public/img/logo/128x128.png b/twake/frontend/public/public/img/logo/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..b6bffc97b80bf9423bed3315fa1a648db2e07f93 GIT binary patch literal 5656 zcmZ`-S2P?9uwE>S#S*JUkKPxnixxFO5Tdu}y|)ln7c~;SC!&|EUc>6WC3@WrLDUtZ zM7#N)?zs>5%$fPl%zWQG&Y3fBb+pw;i60UJ002@Ab!EMOi1^P53I4@CIqR{10CZ5) zQUn0%QouLX`2TVi8+AP`0N^#}KVB37@b^FdE&$*M0|54{008MM0D#6buU%L6UxVP) zGc{$v{eM>Uwd}*c3dmPOO9k{3L_^9X9C#*A0RT`jXecY{2QDAx2jxLkGKRWSjo&D; z#nQwlCWw|J;)t33rsqz28%{2(r7hyPm^SNp*QI~_2uBPBvNGEd;8SdS78wrAWb684 zQKnF+xw#+X7nNj!_T1X>MR^NlJAd6dxR#%xz2BW&Va#6jL3Mdxci{0r0*w%~rbnIh zp$f4U-n&Q9s>LUsI7wgEoDn1M}9^)nN{#2 zUIC8#lLkW8aGTnM0|vN{PXgP;+(WkwaFkH>KAt8}djzh6!AZW-nD%`t*1R2YZn0cHqibePx8R)Trg-gb`#I5MnD zs8cL_*U_uSM%K?fL!y>CsD1pPpNI$Q1n&!%$K_!&{TPuItgrefp-||aw-jK*LJ>-Y z8pTq;X;`df=@q_dtNsaY<^IM!2^=gsQIE1DR;M#gR`lYG_vH+&(v7!i6lqXrUZe;F zPh^ti~EYmk}oJO(Oh|3(pLpXY_V0L;z{J@D9xY!pF@hZeh(fP#dgQ=>c{($ z;1J|WJPXh;jPyo%p-l0#=?>&{YP;`+cj2vbXqRdKrO$9{JK3z)F`p3_1!L})W+u}` zP)QyvJ<27j5E7~3(1XSC9*cljA9z^LtQ7I0YJeMf=9Q`BseW{@RYmX1rx4Zr4nc0_ zPO9lL30W^u{ydi6i>4a}7@+-|wJ(vC zN1i{sd*-+lT6nP`J}EN+1wtmhenquRoN}Ze?g9HRBfe|B9uTUT&PpQbswkh?DEejo zz;bdq2!Gu~q33OEZz7eoXcZR#u~?eR7@XtR|IO&jYYmWj~l5CFExMcPUYv6=in#n>P<>1BhMM z-kctUh7QMp&tmF_=-{=3q**?RT&Z<=G0gJ2PpZ>JbICTt5QP zoc`qR$k?mozh*kTg!pN6dSts`{TyS(ehLUK`S=x%&J1~IxfI%S3+{t z*=zBqTdTCMG!Ve(CrSwIN3?#UUJKcW{H)ksl0R&!W)Mq*L&X%E`%&YEb87%q*a-VhtaNfDC>?mSeZVH0CZ94>zKY9+R3HJ^>2wKW9 zFlJi3l8_6({Sy6su;)IMt=Uv2=pe+D;v7QWfP5u(bG-)J(knNIDno06vVJol*V!9Y z&FGco1y)^&Xa2x!X&Jk(7P~Jnv>d ziFORAX88+5Ab_O6N`uJCjD3}*Ji7Hf=X365@$y=Gc?GqW3eq@x?nOyAOhv|dPX*9` zYIXanUZ9gZzZy4b^QA=C7?{YCu3puz+p3X}d>OD;Vz*PnD_Xo7c$1xKFVmQnpVJgA zd-FK0?!KMEvq#{=F}c_yqtPc*YAqij6)kxo*m+? zRsEEq=;?hiz=iOtG&6Lquz(b&L_(Ni?hA04HN){@BP<+T-Ib*Uj|03As+XCE=;IIQ zh6?O2{mVbJOB=g2;@=nIpr!l;lv(BrL$k*nI}D2snF?z%WFe<)BzNgi4hFmrZZl|z zv$Hz`xfn#)jpRMkpat!(rN@I5yK+~WE~9y5EbyZCE~HGHf4g-j&F-2?Dn>CUw@8#& zcUZt0<&knO2}b=z(1Oh=;a3Mkv`8sMNY52>aL|nlP}RfD}MM+bM^$@*wsR70jzbTW=pmo@cbiHK3MPh zA^n8tfXU)_ii0HlwxxX8theA(~R7SqpSLUGqVVO7>3 zZsNEAnWV>g#vC)I4Kj>0bb#A{{z@M{15_PN@HDSKrEL_I4WqfadVRU%KauI#$C#1S zT4uL&zGCpKqj9yEZ#7u3^OT(7?u*{=vd25QhVA0VGjc$f^LW$u_Vnon`qcoAP9LGf z#fG54+WzFq3At9kwDi7=iqlmNFYp+Je`{B81)971hN`c zLC#T!=L`7q#WqPp{T~fs=%f8zpH*3XJFD`4f<~bdHtGhZ4&zpM80MDX>YV7dp)cO+QHM0 z7K!+j>`2K1Pa~rzu4YrOIYQ4?bRtKpYTqu_Ac`;C3a%*alyd;_Rsz=Jsh(F-@7&=- z-2t9^`r26xYPsLm^&va?WC3|R9xZCS&C_v;l=uZgJewYm2|>qvWwCy?d-|eL-VA=l zTXG~DV2cjsQVae)c|pFyIu^u4)rIV$57*^>U{rmb`p|d27{Do1Jz(D$@EZ#OOD9 z-s>VB^^cK$H1H1y!>E}^HJ1`<%Kc9f{&4QhEsV})~9+2mjps+%cK7SgwB6^7#-SIjwiog$;G&{U>LP3mpTGo}bH z8YRDy@{{rG(51uKBD0asKMRTzJ=nWGJ>}O4mD@arCHfk&^AA}PL+%s}@K-}b_}?h+ zkzFPM=TwyDRMXhR2ni0@O&7M;2xUAxJ_S+KogNCe5^Ey{OV2%gpAGw!dMrn-KgP6V z_T192WjC>Ep=mM9aOnD1d1=#y`fI^&QsG??ebh=JL3(q7v6)mz=@-VYT`{LAQH4kB zISOjO2PxCVj^o} zAzj?=UO!naFHj^6UcIbGR-g5Z|;`swe>jTkYI_Tns5}UFO z@0tzagpq#cMSt2vXS`rHvf1Bhy2zHb?gcK9#JV`ho4^LiB$i`7}hpgAho8~!}( zDOwXpM!;3b4cU{eS{gP#+ZQF@vn8)^%j?-5J-S7OWITMqKH9(41i5ow^ar)t!1IFC z(fKVy*|JL!hMcn3eY~{tpwijizcKHyqT&h`e9tS>82td6a$x^8R^P0s7e)<56Y@{- z3$4qto(m%OLqV2r1k*W3C( ztNLfI6`}%8j690_3yQ~Go-5g~zi3oN6L3XeG$Wm(Ujf^FfP;Y!{QA{5Thvdq}*SpY)qmW;1dz|jW z!^5Uc4%1W0N%t}9CapHq)fPzSwSAZ z3_TAwVaIkNDzp;8P&+3f21z^MsuXc(yhv@)b}=A2x)<@1i^{t8~a z(R(@*w@u!^GTG3zGt&W8tBl~b$JZW)sG0`Mj6;!A4V_9Qs#qO#g@5NeX@Y|h#7YFpB6Tn#6W(k^mj2V1^`JL*08PU|z>}b2_ zUh9UqcE;3h^i?t^wj4AUwyciJtB=70%I;t%uG!-DVCei*bO%8u9JTpf}#`ZmS=sUU< zhihp$Wr;AmXA{ZiWXJKI)rsexxIx9*nY8R?S{kAzdZkg3si2s{JlNv6E)~$51)=HEA*@~l4)g_Geam0v9OVT-e#WQvUA#Oep2&EwL9FN zmiIv?i3Hh#=3C#$o1?7FSMh?E)XV!~IDZg)I}~d5UyEkAp&rsGz3;8uu8j|j%BJvY zBKit$xfA~;H5#^gyMO%7(R+yRw%j<2W5MU|^1IhJZ=wxinZQ0SQu}xY{`)X`fx(J( zI!ZAA3<;zUA8scy+MSNRz-f4pym4N}8Anu|Nb^1Yf^q&+`10@-4$(4r{%)b3;4sT_ z8^H81K$Izug^Zjo7{vgUbTorML$qyY(58v0PpcX&O{z2illG%{AFjE5`%LM8)c@#} zGh(8lSMJe>QnDh*CTRn55Ol~%<4q{p5Qhv1n|#!X3utA-Qs)S;QPF84+mNZ zQoNp^ULtnhK2;$R$8iu)ocPddf`pY-$rt@mOIA%6l&B;+NMa*Xq;lCb;c!l`dRwni zgeAYe2f_#k`1LuXs#CL-MC=X%FXQqTRIz07#wZr$mpp78oxQOcxR2SI%q8k=k!%}k zbrPOc47E43 z_mFNq`7K84u;72MQx0DhBVSuLq4m3?POKHJ+QUl=s=OU*oUSLT)78QfE^8zU{4(q4uisAC_&*VPzcyj5X9r;Wdv^l zM-Oo}D%&t?JxGpVBi@cfdk~5uy#IpDm53^UogNXnu-VY_1j20y+=4DMtTtGzNIi;# zQdq6f7elli-DZ6K4pS3mCqa;i1I?J2Lgx@1)o@D&g@RO=mjZ4y*cuFETBn(p@r8+lUSgzADw#CSeQ;sL zaKh~{fy_f0dDYkJR)6X_ckk}(Re>=vb6n@{=-BTy29$WO$UXbfkZg*bcT6AUkr>E| z8<2jnY#y4t^O)b}=hr;sQQpp1o^o<&Saa9@RhQ3c*M(s+UBK>hUH+E_T%593CynOS znA24-eT!_pa-#8R$Z*S24!_~L_282G7duanYQqGPzD>`{&y?Mtx;D)7(iQf*sczOM zizXlLb8uL1?tV6dEB1`9RHWayKKglGs2?x9=Xg)k>q_(G$%@hk>b*QZV6u;_4OUkKWl>b!K+ZvI|f!QcR}^CuD<8Y={`nzqA?@Qm?=r$mB|o^grb!J y!k_?=IBum_A{H_57YZdpq2o0Z`!B=R?HM_n^8ath9|^v}7)T}8%38ux5BvgS%3e|c literal 0 HcmV?d00001 diff --git a/twake/frontend/public/public/img/logo/256x256.png b/twake/frontend/public/public/img/logo/256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..caf50a8fb529c5d186495f18afd03b82f438bc33 GIT binary patch literal 11524 zcmb_?Wmr^S)b9*6G(&?U-O`=H(9$4E$Iv3(NY2nHAt{X#D$>$1bcaaiP$G>qQt$ll zbHCgV_uKoN5Br>T)^DA?_t|^xRk6C-szmrt@Bsh-k=hHTmjD0|eG3HO;-DKd&vJWo zgXJKvB@Y19BoW+MVWXcJZC3k3l1;HoLfzw%!^%=62AHM20# zxwE=}p-~4*w2oy~!Y)oNe-kDe%lB5qIyP=wIkCUDe4fBJWj>7gBaI0AJQ;IVd2%`F zl2cz;;gFL!C)HkeM)Or$sLamzGMz8X*xq+%TxM+ow33&d=lNT<^Q_+MeGxZ}RhKn@ zfCkyK0d(A=-+Zu)v?G841i*ht&N0O>X0i9+CX6#|1&Uw1r=Tp8fFPnEoFLpb%r>IY zz7t>u6%r;q7l^Nj8=)iytJW0GdjLuuQ|^Cnv%rP-jnD)S9^=vy!F67QqHd8#NH9#J zchDnrVWvPyZ!wTg4C5HH3OIqGv;LPD><)5grbk)f;^6_qck+V+cFZRGLet+gSjLq= zlDqxtLg7h$sok~Y?lkTIp^?DvIP);CsAccrK*O}lx>M1&Hgn~76wIq#Yw&1+wlF3w zI53DXLj=eT&(GVWq&Qw6X#h9TT1IvI^^i-2uVP7%(O^3l2zw)Lhq(6wU!`r>Fl}D_ z%QoHq8bXjos0n=7$LjF{y2E|w5lP!seS+Z|GW)pP_U~_TH}*hBS8l*grG(CL+72I; z+jB?!T`{T5fqifR&Kbn6gXd)v>I*2lqGNUGuY0BWKdX|c5l6%A4z z(gBZP2NC5CcpiPG3XeW+!^+|MRAu)AcKFcZ^IR@&?HAGj>4sQ8`o5P?#px8~kCn>i zPbPuqPqOiD zQSot7v86GG7fgJQ?8t(eAnF(2*16TYVpHKf%P)od^EV;%q3L=b0 zU?LpgUq_2SiE@%R@PpiSbNV~QPnv{7#!k7_cSwEkE^+8pooo6QO1H3x-xiQp2V}?8 z-Z!K#b%IW4GLFWte|*r?%u*LUe5`dAu~vRr zj!nA;#=4-DfT@WG&*Y_E{aJ=+WdC68Dv?l5FlSsUMa9T=@O$SfIR@hfe#k}hD!c*& zmYQ3$w~ism{i}L=$rYFSG=ZDQHD=z^`w8gpD&U5xwOO@3@c2D)#OUkvIVD?{Z7a}M z#en#qQtLa-k$gpKq35AOw@DuT4Bmf~DV4d1dI`!EoTUP33b+aE6#@G#v4r6WmgVms zul3Vx$rnyYX>g?F2j|-}zYv*Z?uF}{ZzNpgkhg= zh4bzyOJri4-?2uGnMrqcSrKND05NwmIh+72vY*lR9?qD0pw3@T#>6P z&TVCi4F)Z`D3d8L-S3}RJPwAobxD7GmGy?B2TMV9x#o_kOKnD{$6!Nd-78DIVNx|5 z1>1e9%@k%Wal+cNEE!EMOS7K?!pWyw1r8=_Wof)W#qTj&tX`yC;=)xru$_;OUR`xQ z_2@sm^`wj#VQM#eh#Xl#oXh^T7bv-laSjZ8aziEW>y`8z;63D)ZQbQ%8C*^Aas@W| zUcgzpnkqjKWRU}s$Mmlyps?~j|NPRz)+LAp^*t^A*6-Ivh+Pb}4N@c4gS;EK7X2** zKfHlr6ZCF$&WM3A80@B-Wz9e33rl5gPBK^h0rHxEw~=Gp@ZNey#;f&J#91&{clKAfSF>1e3XH zEL2GLRvI+~gg=J?CW*A}Ss~Orw;jDV>~MYJ=;p>A{=L5HUx>hj5s*@y?4V12%D}4< zR7JSe5v#~H-|F6C z{DkPU^{%Ff7AUde;m1 zR#Yat6s~_$30yq89-yq=q_XZ!UOVv;WOw@YbL}(cycI!~AXTX)(UJ>M7c=9bh4iIG zT5rvF(D^TZ0r@7W_T$#W94h&$Bli{BlizMA)UkR6y@{Z;4ePGMB5fnY%*^`#s@E)W4E+0lnvI(eBvu z_Vb(4?mc+bXJXdgRtTcdlE!2ftb9_zk7rD|&uQs%u>DbU&8Nlq@{TOO?suXBS}8P0 z?rYVP%kz&BS{h`PYqRbvoHWe?!~Ha(hZJYu5+WE4z3GFo$8VmGW@DB@{6!b#bf*Td zYDab5OshYiYdjOI7`-<7vNLyq5RBG%S6OL5$dD`1EA>xm`+J`SKkm>LtI3qWt_RJn z>h)=7Whin&R;8+jOrayGzG(IBUTIqOl=mj>T*rP_%59hE0JM`Rj(o@O`up!8lAs@0 zmHq&BS;DcAu6?GYxjX1?5r*!w-X%Xsmsl6yT82dEJk+DHN7pR4D*nHr=5xpiT-nfg ziOZbwUoEtZ>`bB|g&31Fy_6+AqtR|&#$R!h_8im)V0jKrJr86ZzhX50;< z6~lKK7!u5UAk0anmJbuKZegw+i8l7S0#o|M2VtyRsj35A)3^4AgI=BU+GHE#4~C2jyq)MYDC>p zn4v|cYd8267JdRglqohLl=h&RTvM{qf5dwvG3W*e_XtJnGA#Y?roF(V z*F9;301qLO(=&q@*=hVfp?Mc)5=)*IP8YVsWj|vVHm`!m3KW*+SYu2aK&)R zQn*-mNO*yFMD+--zC4+Vj1rDvMVOpnu=<9fee_U0dT>i)`S@NO`{jbJx^dtu0Df%b z;@hiF7N4=1_zHi_lykp^p@|8L!GCq#zMhl=IMuN~VH9#wCg8)1UkN+|#J%kL-y!O* z{~=aMPs}IKmEX!olGAp|lkk3dHH}#g*np&!VhUcTk#J4ipVeLcxDZ#rDW-?gk{68q zLfqw^Zd0rdSVlI=WhjbAIb+|FAm~??Ys`*=okj8Nd}wwuWM|X<{xOF{t^?;%5@b<85aL#7^8T4l z^eI0fayo{y?UbERjvyq6_s*eXgv4l!B#rwS0Iw{)mElE{+;&f`io_%R{JMjH54-=$ zmL*Di*~O>({Wn4^puf*)(-&b_wElYTP__TN%O+vUuu}zW#v-E}pQ~_P!e3W?mB%3% zIJx+9tJq_R(F46*w{%q}+P^po+@Zh7y03>$%|6hN{3h$xwGhT9c!ir9j}OHdN<8~? z@KEPvH76*rr=HabxbtE3&Ie9*cwH>pgh3x>EkRU4*kxuQ={!7POY)+jEl|a8P%3(H zhYg~kv^O94*UK$?sx7f7`+=4+l9wDk8b%Ed}83jN8Ej5}u;p;v(t979<5>{GD zI9dPHV&D7WfDRCe4CYb+PNsGQrB;oET%m;O8%XTEB0-4G3(Ur4f~7nR@(1?r&o_uI zv`#HH%K5SR#$M~@Wbd)-iVvQW*&SV=p5WRpntrbV?V< zDd@R*H@NZ`M4BrCjLHYpq_rC+Nr_wo)70^;1p}5wE2@1Tf#Vyb) z3H&5{D0S`2TRv+}FWInr{%}%iWb3g;MPg@$UAr~;1PP<{4|lxWcPxamioK&(i{m8a z=6-a~0Fk}neMG05Uk%2$x2A4;P%Ozi2{=GOSZT1Lh^Y-0eV;e6JP&Rwh=@8p{ zL)Yi?499VxNI56lE)%Agt0O1WHAtGlF3H>e^d>y>WSW#C&W<(D?*q8Lq&w%X=@s8W8H??Mv(5|8NfHY1d3R@T5N|4k6lkHZ@t-_d zCwatryH%rZB{1#uwnUc(i8EOyE%T0!aP?U$Q?zozD$UJfYr(L3tE0{k!#^L_f{xGQ z*N0s`9RFk^#$XUw&LM1>Q{uYSxQAq!l9r)LpB?$R6F&DXW=xwh2Cc4ZU^3NX)vh{C zyAJNt^haTho=l<5H2qqUrlktMUM?hHk{#^%dFK-P%VLcnL;0_tF19y5ZE;Z>Ayh9jZZ&oHnD620aD)QMr-A1IBz<`b0mhDg5C7r_<5b&}?GFLUmR_10eePWH4SgR4~hArMDG3+2E}n-~;od3?m9WwV{y& z^4s`uukGL+lhmjW#Obt~qv2bZ-i*{Hch;sWt|E}jahdj)oP=P7p%r`bhl~o~b`@8LPVlo{RZt@Xv_ubEQ0A?G5IzyW1FJ!OxnWDyj+4aX9&y&|Y z>v8ib7{BZ5vd;-IP~FN_E~Z=ac(X+>up`!FD>7{`bak9POhoWZ6<|%o%AQ6GtJ8uF z8)egWwEOJmz568h^L{5)W2?q^DL{3@bw=Ql)8C2tX@gt@_f|oH=b9fjp1d6{-0SK& zOPr-XHg!^zWMemJV7;unu&h`4VJ4{g2DlkfxE6JSYCh@pr;&krLhGAs1ztsf(;5L1 zikJGv>2l7YS;C}za`-JXXk1;pM@Oor(8haQ`Fi>N6T0;h2yBDKs51!{5j{ep)Cx}L z+U5fMt+j{`Dhdb1Ov(9Ia)wF`_D7Sxz24SwH9`e0IIX8KsFPivvvd(K8JRrT^_-Fc z%4S0kb4!QL;{tDq8{wp$Wh>uiv z>8o^Zx&`=$JYDu7b)GhC)0towmP>vLbgz>gD{fN+b=8T-F}u~~_ur^{#57U{=9^i{ zGm3@Wt)5&eNd!`SPT+>Le0ZPAj4=d;&j*|&-o~BE$`SiQ&`#;M!&Y^V*h(%)dbYXI z(Ir%c!9<# z9aJkDc48_UKUd4mB4Yx0*lBGra;K}lto)^f3w?>Bua~OAj0M$8L%To!E2euYjrVK+ zbv+=bfK*{5htS>IM(nni65bL7qd4tD@85no#>)dIEIEYMU2I*waeHBRh-L-MqbNVuV2fL zDA3emCM;UIo{@VV7?7clNJhP&fU&>TYwm9>l9%;uS_#EfI{0noPASiiNl47GR=zIF z3;vN!iB!NYgewL1%zfU@ekO#n3E4 zV)_nn!-7)(B#r2UHTrypZKx`h1l>r|Atzm|W<^g>+togDxKtR3*6X6$2xO#u2R}8e z8h3UdlYBhN&^01BdN3=}pntNk-;(DQAP#!;r3M|sn`eyZ@r`a|M_zQoWuI?tRFx|g z#h(RRwlVQX{CXdOj!!v)27`B@{bO^RYw_>#p`@{VCXg{-KAv**u7zmivf4>q3d+=h zur%Qe)4<+Sj*UsTn(&eir%D@+_sMF7UPvsTv}=@3u|%RA;EnM&UV@T5tfL(@tB?Az zgi>A0+%jxZ=a-#2w^OmXfW;WG3-gGsScK-jeq03_(ZtGAB|+ziv-kC2TH*a zIbCaf8C!FOKrj!^NAi45XO{8f*BnI?`;Ew$qA7{=*t5j`8*>Ccl*8sta7|f|U>IZa z*4&6VGH<6xCD^V(#0ujK^RGlGZE_SjNxH=2fg&rGI_OC7$&Me_Gl030Yq5ZO2rVYZ zA;^oP8=FJkCEbZt2=5JRT;END+Ub)(;z(*Y#9BTv>HkM-#`D8M%y9fkBN zRw*teb7hVDar{wNCNpFWeml_JSsCT#*6x|>rq{!d{R*HSVaCK*mhz`L$7+7OGNt@W z#3?3~jNDSkQacWx9OZ9Kcu%z2ZryhYOP5ZO|6C0r6@`73;$vrmx=No!rJPJCi{5m{ zzT!M%N&6>aaMJchimra1&z0ynzd2fZ@{A~1JFO_$#X*=#vA=PZvHg8fI4V1*SO2E} z--20G|4j+nJ;3`=l~TSaN;cL?7vhU`?XAF~H!ie-Hl^BtnjN_L44_t$<8g~!3+R}@O*_KreI)%4bo_LJFYINH4l&xJwRxSWbW0eO ziMEVeb(hazDM4MOELI5Y&2YS}cfQNS4}$ci`6Q-p2g3nRb~y5taN&o0FAecht5R?= zISw$-*t>5y;0$mrmNoCdfuFRU=D^@RRD)oxrr)uAi)Q2UiwHn3zW`RA;oPN7PE0-VA_C-iBPJU9G-xI4Bm@x_9d^CY| zG6@_h!IY)1ehI@AU(6sG29OyLsFy~=(}mf6E`^r~vf63{@E>rJr1q^<=L(+EdaX9} z1hWB?)~LnS%%pG)9h>-a3xUKCoK|N7UdM%1nTNaKJ>ylSIX}mS@Kh@JB*u@E;Xr{a zmh7(X>Wc=`;o;sy5jtp+>&Xfbs&AmQ^w4vVbW1oSo7sQ!jXi`{MNTJ_)Nzv2L)`>W zEPIww;(n7hs+FxR?DQJ^vY+n8oV_CfoTVN$(?t{-R^-qXf85|25v$7t-q=h&wOYXUx1!hG?Ecyo znsxuE?`B`1p)95m^mK#m=LB`v-$o>my1SO0G1ByGdFI%ECanX|lrcLQHb-s|fa!aW zoqG+rw)SWsRf%N0UHJ6A>v#R~Wh?E;Uscphg}rlvmvL(kW*uyGU}H*Ug8X?X8(Cyd zf1)1E@Q=CFD34GCf}>~a3+yd;lZ5NtCP-kK;}5rwBv1i2vs(&+oVWR`op)N-j40RE z!u~FuG%+ooMHf9_5gE=OUYdM4)DGEnmpl*x(|3~1?*8nbe<>N;<)6#Yq8=-Fa`MDSe{mg2wm&9_W}1NJ-VMFs$B?;gz1ZC^cNH9&_deMGEF4^mS^E%1L?7M{N$3?1@p z`prZWD)-rH%)aCW))Uys7;5$xDq7mklEsAPm7@*hdqdC}ro=v9)=fpiw>5Lm*J?5i zGVd_J>m5%gq6_6+pENU=g+6tjHS7>@8ZpG(pw~`wynODVcKi>Na8Ew^Xw=QV|1og( z&xSWM3{sMQjdpjgH;W#{4f63uJe-%vX85Ul?5?^#?Z7Xt^_+yLK3)Y*w`hJ3ES!^g>RD8MbEdeSw(T*mffJq$D;6+}Cw% z6QSVLg@4ikZrfrFdbx7D9!&=p*L%XGuQ!`(O2TbSnOQ9Xj1Ve+A=Aha*wP`Y{{u=@ zIx}hiW2~~vWxd%15}l|K^y~S+56JgYa{<}k&m_7qGPnNy?LJdeOAW2ZAW@T|7k z1`@lMFxR^hy3Z@H!kY52ULy2$S~NhZw*?~I1a(z(TsA`X`V38T>ej3CR&*J9GmVE z`MB)UacPP@=0*vim3)Vh_qtHi(S-YmrBz?Cwy)aCTltBm<#>?lA;}#5hl*v5yWqa6 z=sqI%8AUWtq2reXURLRGOG>mEKUuoJ=;lNd8s=PKJd73Lm`iNG#^?*c8J zLE`=Pu%D#c@^@i!FoPRR8p(Jg>{E&FxW{pLaBfEVU*fQS9rn#Z-w^kF| zvu)k{caZTry0*Kwh}1H?;yY|cW{ywhGep{QSbVg2!2#a)3F%b}TaoWlQ8^dP3m?6V z3b8DK17aTnje+&Z)z&T|4&-}N-}b@Z1SPU&fSnbVeN9~RT+8w;M}_jIK)8Xa>45O! z-1{(_sFBE&oS%G`kstZ-F3{od_4X5_9Kt(=JP7;gTGL?ZTdQ+inn0|IwbrvU%w~GZ zK__vM?(5F(3leA#Gxbhuqyw9DgK}{#79+FxrxmQ$Lk#f(EOf*~QrMuwc=sEd`-P(W zlE@pg4Qss*g&)1lY|Te510ZT6mqWKZjtiyLn@%gCi>KvB1=u^oNhh0&ezyC26?gx~0q!@Uj_c5smDG07YqD5tW~ zUf4j^?>tWj6&AS8uai0?YuH;ct+L==$IFHnxRrmJyj;8fwe5RQ`iEWq?ghWD*0a=B z&Bi(~a1vphovV^*vES3D+C>W*p4IuLZo4gfhaHcK1EJol7QQpqzNCG&BOQ}Y^ojN0 zNU`L*f2J?1)mh@PDMPn$XEf~uAS65Rm6L{w*}e-wMjEj$q_-PmiD!QkM3~kNx`d?4 zrKCfm`P|6-&RamRb&SklZO^bO_+}0lq=ogMoI#Duchl!A(A4F%Haho5UY0%~v{KA6 zXTGTGmTA3Pg!u#ClbSX%b?`~3jPnmY1KeVxVetjt(Z_QUvmpMU69ymErCuTv8N8)3 zelu^1+z`O@t7hINXL~;h$%N_e3T>MnP3IQZo*|k>++&~ia6RvNg{PM$s-4TjXNZew z2^_t5S0Uq)PeXjb=X%L<)PY|ByVLk5fCLj6=)e z2?_*BcpDn~-c7ZhAiZiOc_{pk!-u=91!-2rrk6sk7YGys8xvnK1{MW?MKBX>ZQ#$c z|H>0}_VkWKjie+JeS=dmVq5t66})#-#jWwD$$tT4*aP?i8ZUgoFQmWBaR<^x%^r4E z$-W*CG~T>y8AyfmO;7zb*RWld)dU{cUCljcJ3kofgXMtaXMYc42}W+X{h@GD_IuDF-uN@5SP^vCb8J|hfQ z64^qsYKl3X)ND7a$dWH}Hy?9x&^aHbUT4{_w-Xr14Zn*(eTtG8bWWcN9!)YW0P-JM zDYAkWr*WjXbSe{hopiBi#i{U|l(*`WBjR4>D>dA6CK^qBmeDK)TpKnntM>quxm0;V zxJ|{4NN~RZ_x$Oz4(Y%CCxJReYohf1&X<%WR=oKaadt+iByA=ULfy1e=F{`XK_Q;R z&x~I&XcYW*?vd6+m=qTc?Fw*N5V8p}4!@$A}0DB*#qw6OGnN2$wMh1*t z#;C&VR^=w25atJ>V5n`QZnR^}%JPi^6Xw7=v15bxu6Ldj3!I7Eu*oLU^a%ZG0WW6F z8H_4}WgoI%a&Ap{V=U&1&d%Aq`DuoJ^HlJfs<*UG`diCm96;00lhFc-KLSCrUQz5} zbE*r)I{T4jh%aA0z9jY*D_Fstgr(#eGGC$I5*A4FLr22mQh6$J?&VaSB|oA(VnZ4E z0KYW1=p&%`StMppTDA1jKEs5`Z%Sf#%Y=Mocym_V+6hitTY?q4o{?O(s+W4m;~FfQ?}VJ{L#aQ0ZX$+kUFHQ=Dnt;C!Qhx!wXH zxmP}V(Og<%k4-akaJ{zKjO~>8=6X36g;DEFBZi&dRU1jqR?5ky=si6LLJFYtYsHpI z_Ze!WFyH^f{4|9sLo)Gk(X_*hIn7mV@8aQ#V2Bne?c-art8Y~BUG}$61dOJRVjVD9 z1b7Tdb<_CRgdVn$xV>Wf;|4@HIlHH0J$vTYjyP=w%({^WoL`v>(Q+#PPGEc$>ObC2 zy4|b~?K;Md-{-C66P*w1g(SgtzsJfe?}`*htXZR=DB9j@QzOjHXi>EdE#ZaxaA$9I z=?Orf_4S}AzGJMeUYy1v?V~C(KZdB(x?d+SkzrOOUT$nY3s*@JAr3beY(oX$OuZQ> zET(u8&vs~V-VQj3o40uO`!YVU66j>nPfi-MgBA27D``ED=BPK>vz6e_B2bx&5aBeY zAqlyqCmK~Xx!e$Ze4^7vw|4Fnk$6d)E(^SoM7r|`05x>3S{n_jK5?eU`*2?e5o#cQ z)hus@G%A(I{(8ug%lsic8UT5&I?c1i^bYaFTNxX%<RB~DimMbf*1a8nc|M`pgq0VrX%&} z^)_3)eEXO>91HJfHYQb1Bis^06~iZ+PJO#a^&OTnmmzBi^(XOh3`p|#YqxG8P>sf# zR<2cl#_ZIJTl|LI4oO3Aar!}=?dB^IF?l5zMRoAEao~p`$~V~ZYEpU)9T!7Op07J2 zofieMulcRH^3RIw=sFKZ?QWbrMhma|eUe9rc>1U4$~|v@xXb-4Ts+diXdno1ANw-? zue^vPSy6Xk8dZirX6{(C%61vpA9M{l0Y@1Me8v+J?kI_bZ$sUv_vOr%N7~L3IEP7; zI7kDsCmC&@GVNfZ$fp>tWvitHu;$6i#|S;N1}Iq!Ch2h@Lp5nNpKf%F;#UpX z=$E^nNm<+g9XPU>vP$+hjfiF%*}?N&hlw?HyN$rO56e#ck0exy%NI7wQb=@}Fq^ls zk+-dtx1E%YryaTh2nh%Y@(PIa3JJdw6qXW_loAo)77&mU5HK3ZqWXUTE^fAt_V51x V0IrXWU(o=7nzFW1r2;JMe*k_coh<+W literal 0 HcmV?d00001 diff --git a/twake/frontend/public/public/img/logo/32x32.png b/twake/frontend/public/public/img/logo/32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..e28beb27f5c8289f97c119d3d20332d64029ceb4 GIT binary patch literal 1363 zcmah}X;2ep5d8v3I7$U{1WynI<*MN_HX=3xMgw$qgPY2HVcnoHH^9V^aCq$e=$dqy=enm(Ojga9T zgfQ|5F^D?fw8@DO%BUAt;6`{LT>R6OL-_T+;w!8`z&9H;A$T#D{~ za1MiTU=)OkR-CHE;Sw}RVHSp44{)X)M@rH5JBSBleaNau%4K9#gV3SA2~=;8HApGO z(_uI#z$p%ohtSyvsT@^pFcX4o0A(X6T$J91^bw|~F*<>a8fXh3zJ&K<=zI)eHfWJp zyaRjB!6*>rt+?6=o84F`L}LeLW>Iz*#z9c=gzG_c51{J_*kTYCh#Pn*csPg+3HZbd z%p_>?G1mvIL!feD#oAw`bcU|To9{!2ib`O|gigb3tzss){jY0-GJWNZ6135sWpTeT zb%k=Eia0zs>Ix-H${g@%} zkNLsznfICD#cb2dR~B(xZ>;cj)Z1J?uc(e&;97s&!Ixum*SBeGRasfQ$FbuL>`Fex zYnCk`jf(%CxWcy;+z1!N6KA*uUY5&+8}+YFCp> zprKyR2}A!nhf*G;Fp-|Kkj68V*1BZ+5kHflEemDKD#|oOrfpqv?FDy+L82=(Q-4eM z>=%g5&-|&o?Pnj0=0MY__~abQS<7Z#zJhwiM5^_6q~Gq9&ng>=fYlf&Zw_ux_YMt@ z8mcs-|uC#)$sm1{n+ZA30Td>qRcEPW6)1E&yz4N_`x=sB2 zS;LHM@$+Mo(S_w2r$#t68vJ*qUz^D(irz1>rZe_!WQW=HeP*SnYxy#I=*{{Uv#Nus zWfUh72{<_4HD&oT`n!p=z=*c@8cx11ZZ9cqldL~_k9$4-yN>3>lk_0P*wS(Ty*?ATGtJfBtRZ~WatKf7SoEa|R}ad}_NQlO z>4%;e+HG4Y-0qNZ%;2@xqb+R~joW(bD(RI8CH2^TIzMyZMnvvhrMt{TZvLW>Kv5_o zcweXzh#k$&)`mv6v9lN0+B58J84h$S8jV4tU5j1X@-M=ky&(}{3I9#FZ&m#9SrU#L KpH=0uBl&N~HJiZz literal 0 HcmV?d00001 diff --git a/twake/frontend/public/public/img/logo/64x64.png b/twake/frontend/public/public/img/logo/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..6bfdf13b00d8cb1cb04344b85c1514b27fa3e4db GIT binary patch literal 2231 zcmaJ>do&c<9^S^F2ZF`bqCur5@|+mM7z|M%3MD!&5(-1ok;o~EN|a|}LJz0p zQ9^2pR1TF$ITcdmk>_`&d;hxYu6y?S?cZyE-&%X^_3d9ghixG(xmc1ABF(fkw--j^ zAA6Rl&}WoK_X`8n$Hc~jkkS)UQyyZ%ddW^pdmBQ+H3;Fw5;7rd@jeo=pGHXU4npW@ zgeU}@zinqg2&I{0&1DDy#0JC~g#B;-pIqqw*@XCi2K?`-HAHMcwS}lHh!u!2C_;=8 z<~o9xkElGzI)Wm+gBd86@HmOTK0~;AKEv}QC`^cQAYuVx0>e-|dWGp3OitnPYZ!-v zn1XBug@q-axLk{w8B9-uUyo(p5V3-k9isCwJcg-hjE&FAK;e;!i1a)#D#Cdf`~P!R+zUH zGF-$LKv0xj%4rAaO{&gN=LZT(;A!uxe=3Xq^jxWP# z?S>@}%I?Un#^4C9J%ol2s5S__h@nx)Z^vvqj87u*D)R1PXarh*P;`Zs7sNQAa-ish z=mLl^5S)p7&#^8DB24J~is}}qdE)FX#19V~K%!2wK6p`{B}(Xcy;*MFh*1=a>)&l&U$qNg8J7G~MvU^d=}9-0~2Ii~ey zEMi*fNlrzFdgHoR8SX;{>0w4;K0{TVV=8eTEY_jgb~$y6MAgFvNjljUiOP3n#!^$t zj(Zsu`Sq`lrHx8vX*MKkDS69TvFfkQ*SN%tjJmbuVC=)`8RqV8YRDnxFSQeGjSc|} zkyhqru?xECih7$ude<0Ka)Ri2@Af#jsMVf+ta#RNxnRZ4MIjo6!gOhzo{M*@Uw>7U zK&2*Vz$jn2=|Y{rgg>e{=orJPQ{Q5~;cTsd5vdR)khmWvp&DE=x2wbS{)xYI_id~( z*|Y}9zC1Chy{3nn(~U=KxOBFM_I6Dz`hulp%F(xLQ+BtFuLxNFu57%n`($p`!^J#} zD*@l-JR^i{MT<$^_5KIq&HFixSxwoeo90uJsP&Di`l^+b;32Pt50=Qf9L-B@ShG>? zyuqycq$BcW2Ob$5NxrytU+8N}q3>bppsM)h3Q64}I=@{nOJ;aZ(4*PXPRd_Yn#Jkw z=SZ_xkN{63UjI_lq)QP6#8dl<@6Z}4i2^5OM}3#ybL3@8y7S-WoU+}JYR+X{R82O^ z>2$qqUUXGq=-ajqdW&gyYxy+iyO@u#a&Fek#ZSq>$`~9n` zLZoY4d=82xbNdZ^I&LkZ$5h1J3;W<6;PIS!&W{KNH5B~0g5$%>1>tr5@2%g|940i$ zb1jTMeZ>u1tx7(2v$UnxzU2O-#H*m(tGDSmGr0bM%I5Q7w{C_dw4G8#m`|s(pKF?20|#W zpM6-Eb+7X2WT5(B}79 ze6o5AUrv~pEjhJ)K(5^2vP1fCuZW8ob>woQX-!R<)XKihHy8Lf26$ZMISby4H5n*% z9u>3&HT|4xxZ%@0i598m41U4&g5Axdm*U;S7d=02Z{t)Hw?)}7H1&^kH%rN~H{|LO z)2p>gf$N-)>Z_1hjLz_l>guu#dU zulm@K`CypyiAAsY{H$p~t(`1w+%@xy^#P~J>g4c7cbaeP>aqC^>c%&WCwu$+Tm&uV zD}6hkM~`Z`Om~cxI!Afv+{-9ci=<{$O@H#asJ|^Oh@1Yv_wnj#%GAxF1Iyb|kKNzF znRwUKL86Ki>jPP4?CkjXl7y($IC_6>rlYfbf(mBJtrdBB-Yfl!wY9WHWzOA6lsZ}b zC9jxY*#jZCVgH}7kb9dgBoHQpZO%8{5%V{Pe`~h@ literal 0 HcmV?d00001 diff --git a/twake/frontend/public/styles/tailwind.css b/twake/frontend/public/styles/tailwind.css index cfb891a498..7bf241fec1 100644 --- a/twake/frontend/public/styles/tailwind.css +++ b/twake/frontend/public/styles/tailwind.css @@ -918,10 +918,6 @@ select { margin-bottom: 1rem; } -.mr-3 { - margin-right: 0.75rem; -} - .ml-2 { margin-left: 0.5rem; } @@ -930,6 +926,10 @@ select { margin-top: 1.25rem; } +.mt-4 { + margin-top: 1rem; +} + .ml-px { margin-left: 1px; } @@ -1022,32 +1022,24 @@ select { height: 2rem; } -.h-5 { - height: 1.25rem; -} - .h-12 { height: 3rem; } -.h-32 { - height: 8rem; -} - -.h-16 { - height: 4rem; +.\!h-6 { + height: 1.5rem !important; } -.\!h-4 { - height: 1rem !important; +.h-5 { + height: 1.25rem; } -.\!h-5 { - height: 1.25rem !important; +.h-32 { + height: 8rem; } -.\!h-6 { - height: 1.5rem !important; +.h-16 { + height: 4rem; } .min-h-full { @@ -1098,20 +1090,16 @@ select { width: auto; } -.w-5 { - width: 1.25rem; -} - .w-12 { width: 3rem; } -.w-32 { - width: 8rem; +.w-5 { + width: 1.25rem; } -.\!w-4 { - width: 1rem !important; +.w-32 { + width: 8rem; } .min-w-0 { @@ -1279,6 +1267,12 @@ select { margin-bottom: calc(0.375rem * var(--tw-space-y-reverse)); } +.space-y-2 > :not([hidden]) ~ :not([hidden]) { + --tw-space-y-reverse: 0; + margin-top: calc(0.5rem * calc(1 - var(--tw-space-y-reverse))); + margin-bottom: calc(0.5rem * var(--tw-space-y-reverse)); +} + .overflow-auto { overflow: auto; } diff --git a/twake/frontend/src/app/app.tsx b/twake/frontend/src/app/app.tsx index 21840e6157..8600a9b719 100755 --- a/twake/frontend/src/app/app.tsx +++ b/twake/frontend/src/app/app.tsx @@ -14,6 +14,7 @@ import ApplicationLoader from './components/loader/application-loader'; import DebugState from './components/debug/debug-state'; import 'app/styles/index.less'; +import DesktopRedirect from './views/desktop-redirect'; const delayMessage = 5000; @@ -57,39 +58,41 @@ export default () => { - - - {RouterServices.routes.map((route: RouteType, index: number) => ( - - route.options?.withErrorBoundary ? ( - - - - ) : ( - - ) - } - /> - ))} - { - { - RouterServices.replace( - `${ - RouterServices.pathnames.LOGIN - }?auto&${RouterServices.history.location.search.substr(1)}`, - ); - return
; - }} - /> - } - - + + + + {RouterServices.routes.map((route: RouteType, index: number) => ( + + route.options?.withErrorBoundary ? ( + + + + ) : ( + + ) + } + /> + ))} + { + { + RouterServices.replace( + `${ + RouterServices.pathnames.LOGIN + }?auto&${RouterServices.history.location.search.substr(1)}`, + ); + return
; + }} + /> + } + + + diff --git a/twake/frontend/src/app/atoms/link/link.stories.tsx b/twake/frontend/src/app/atoms/link/link.stories.tsx new file mode 100644 index 0000000000..f5e1d1516f --- /dev/null +++ b/twake/frontend/src/app/atoms/link/link.stories.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { MemoryRouter } from 'react-router-dom'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import A from './index'; + +export default { + title: '@atoms/link', + component: A, + decorators: [(Story) => ()] +} as ComponentMeta; + +const Template: ComponentStory = args => ; + +export const Default = Template.bind({}); +Default.args = { + href: 'https://www.google.com', + children: 'Link', +} + +export const noColor = Template.bind({}); +noColor.args = { + href: 'https://www.google.com', + children: 'Link', + noColor: true, +}; + +export const internal = Template.bind({}); +internal.args = { + to: '/', + children: 'Link', +}; diff --git a/twake/frontend/src/app/atoms/logo/index.tsx b/twake/frontend/src/app/atoms/logo/index.tsx new file mode 100644 index 0000000000..cc1086f8c7 --- /dev/null +++ b/twake/frontend/src/app/atoms/logo/index.tsx @@ -0,0 +1,23 @@ +import _ from 'lodash'; +import React from 'react'; + +interface PropsType extends Omit, 'size'> { + size?: 16 | 32 | 64 | 128 | 256; +} + +export const Logo = (props: PropsType): React.ReactElement => { + const { size = 128 } = props; + + return ( +
+ Twake logo +
+ ); +}; diff --git a/twake/frontend/src/app/atoms/logo/logo.stories.tsx b/twake/frontend/src/app/atoms/logo/logo.stories.tsx new file mode 100644 index 0000000000..83ad70b9b0 --- /dev/null +++ b/twake/frontend/src/app/atoms/logo/logo.stories.tsx @@ -0,0 +1,38 @@ +import React from 'react'; +import { ComponentStory, ComponentMeta } from '@storybook/react'; +import { Logo } from '.'; + +export default { + title: '@atoms/logo', + component: Logo, +} as ComponentMeta; + +const Template: ComponentStory = args => ; + +export const Default = Template.bind({}); +Default.args = {}; + +export const extraSmall = Template.bind({}); +extraSmall.args = { + size: 16, +}; + +export const small = Template.bind({}); +small.args = { + size: 32, +}; + +export const mediumSmall = Template.bind({}); +mediumSmall.args = { + size: 64, +}; + +export const medium = Template.bind({}); +medium.args = { + size: 128, +}; + +export const large = Template.bind({}); +large.args = { + size: 256, +}; diff --git a/twake/frontend/src/app/components/open-desktop-popup/open-desktop-popup.tsx b/twake/frontend/src/app/components/open-desktop-popup/open-desktop-popup.tsx new file mode 100644 index 0000000000..2cd9df41e5 --- /dev/null +++ b/twake/frontend/src/app/components/open-desktop-popup/open-desktop-popup.tsx @@ -0,0 +1,30 @@ +import React, { useState, useEffect } from 'react'; +import { Logo } from 'app/atoms/logo'; +import { Subtitle } from 'app/atoms/text'; +import A from 'app/atoms/link'; +import { useRecoilState } from 'recoil'; +import { useWebState } from 'app/features/global/state/atoms/use-web'; +import Languages from 'app/features/global/services/languages-service'; + +export const OpenDesktopPopup = (): React.ReactElement => { + const [showLink, setShowLink] = useState(false); + const [, setUseWeb] = useRecoilState(useWebState); + + useEffect(() => { + setTimeout(() => { + setShowLink(true); + }, 5000); + }, []); + + return ( +
+ ); +}; diff --git a/twake/frontend/src/app/features/global/state/atoms/use-web.ts b/twake/frontend/src/app/features/global/state/atoms/use-web.ts new file mode 100644 index 0000000000..a1531f46aa --- /dev/null +++ b/twake/frontend/src/app/features/global/state/atoms/use-web.ts @@ -0,0 +1,6 @@ +import { atom } from 'recoil'; + +export const useWebState = atom({ + key: 'useWebState', + default: true, +}); diff --git a/twake/frontend/src/app/views/desktop-redirect/index.tsx b/twake/frontend/src/app/views/desktop-redirect/index.tsx new file mode 100644 index 0000000000..09668eb039 --- /dev/null +++ b/twake/frontend/src/app/views/desktop-redirect/index.tsx @@ -0,0 +1,42 @@ +import { OpenDesktopPopup } from 'app/components/open-desktop-popup/open-desktop-popup'; +import { useWebState } from 'app/features/global/state/atoms/use-web'; +import React, { useEffect } from 'react'; +import { useRecoilState } from 'recoil'; +import { detectDesktopAppPresence } from 'src/utils/browser-detect'; + +type PropsType = { + children: React.ReactNode; +}; + +export default ({ children }: PropsType): React.ReactElement => { + const [useWeb, setUseWeb] = useRecoilState(useWebState); + + useEffect(() => { + detectDesktopAppPresence().then(isDesktopAppPresent => { + if (!isDesktopAppPresent) { + setUseWeb(true); + return; + } + + try { + const path = window.location.href.replace(window.location.origin, ''); + window.location.replace(`twake://${path}`); + setUseWeb(false); + } catch (e) { + setUseWeb(true); + } + }); + }, []); + + return ( + <> + {useWeb ? ( + children + ) : ( +
+ +
+ )} + + ); +}; diff --git a/twake/frontend/src/utils/browser-detect/common.ts b/twake/frontend/src/utils/browser-detect/common.ts new file mode 100644 index 0000000000..f0dcd40b0f --- /dev/null +++ b/twake/frontend/src/utils/browser-detect/common.ts @@ -0,0 +1,59 @@ +import { detect, } from "detect-browser"; +import { BrowserInformation } from './types'; + +export const twakeApplicationUrlScheme = 'twake://check'; + +/** + * Detects the current browser and operating system. + * + * @returns {BrowserInformation | null} the browser information or null if it could not be detected + */ +export const getBrowserInformation = (): BrowserInformation | null => { + const browser = detect(); + + if(!browser) + return null; + + return { + name: browser.name, + version: browser.version, + os: browser.os + } +} + +/** + * Checks if the browser OS is Windows + * + * @returns {boolean} true if the detected OS is Windows + */ +const isWindows = (): boolean => { + const browser = detect(); + const platformCheck = navigator.platform.indexOf('Win') > -1; + + if(browser && browser.os) { + return browser.os?.startsWith('Win') || platformCheck; + } + + return platformCheck; +} + +/** + * Get the waiting time based on the OS + * + * @param {Number} normal - the normal waiting time value + * @param {Number} windowsTiming - the timing for windows + * @returns {Number} the adjusted timing + */ +export const getOsWaitingTime = (normal: number, windowsTiming: number): number => { + return isWindows() ? windowsTiming : normal; +} + +/** + * Waits for the specified amount of time + * + * @param {number} ms - the number of milliseconds to wait + * @returns {Promise} + */ +export const wait = async (ms: number): Promise => { + return new Promise(resolve => setTimeout(resolve, ms)); +} diff --git a/twake/frontend/src/utils/browser-detect/detect.ts b/twake/frontend/src/utils/browser-detect/detect.ts new file mode 100644 index 0000000000..f94eb390f7 --- /dev/null +++ b/twake/frontend/src/utils/browser-detect/detect.ts @@ -0,0 +1,40 @@ +import { getOsWaitingTime, twakeApplicationUrlScheme, wait } from './common'; +import { invoke, spawnPopup } from './window' + +/** + * checks if the twake app is installed in the system using the browser + * + * @returns {boolean} true if the twake app is installed + */ +export const detect = async (): Promise => { + let initialLoadingPrimise: Promise; + + return await invoke('main', async () => { + await Promise.all([initialLoadingPrimise, wait(getOsWaitingTime(300, 400))]); + + const handler = spawnPopup(); + let isTwakeDetected = true; + + const input = document.createElement('input'); + + input.style.opacity = '0'; + input.style.position = 'absolute'; + input.onfocus = () => { + isTwakeDetected = false; + } + + await wait(getOsWaitingTime(40, 100)); + + handler.document.body.appendChild(input); + handler.location.replace(twakeApplicationUrlScheme); + + await wait(getOsWaitingTime(125, 250)); + + input.focus(); + await wait(getOsWaitingTime(15, 50)); + input.remove(); + handler.close(); + + return isTwakeDetected; + }); +} diff --git a/twake/frontend/src/utils/browser-detect/index.ts b/twake/frontend/src/utils/browser-detect/index.ts new file mode 100644 index 0000000000..e346e5b5df --- /dev/null +++ b/twake/frontend/src/utils/browser-detect/index.ts @@ -0,0 +1,21 @@ +import { getBrowserInformation } from './common'; +import { detect } from './detect'; + +/** + * Checks if the twake desktop app is installed in the system. + * + * @returns {Promise} true if the twake app is installed + */ +export async function detectDesktopAppPresence (): Promise { + const targetBrowser = getBrowserInformation(); + + // Chrome on linux is not supported + if (targetBrowser?.name === 'chrome' && targetBrowser?.os === 'Linux') { + console.debug('Desktop app detection: Chrome on Linux is not supported'); + return false; + } + + console.debug(`Desktop app detection: target browser: ${targetBrowser?.name} on ${targetBrowser?.os}`); + + return await detect(); +} diff --git a/twake/frontend/src/utils/browser-detect/types.ts b/twake/frontend/src/utils/browser-detect/types.ts new file mode 100644 index 0000000000..0fa83f0a0f --- /dev/null +++ b/twake/frontend/src/utils/browser-detect/types.ts @@ -0,0 +1,7 @@ +export type BrowserInformation = { + name: string; + version: string | null; + os: string | null; +}; + +export type TargetWindow = 'main' | 'popup'; diff --git a/twake/frontend/src/utils/browser-detect/window.ts b/twake/frontend/src/utils/browser-detect/window.ts new file mode 100644 index 0000000000..155a303f79 --- /dev/null +++ b/twake/frontend/src/utils/browser-detect/window.ts @@ -0,0 +1,47 @@ +import { TargetWindow } from './types'; + +let popupHandler: Window | null = null; + +/** + * Checks if the current window instance is a popup window. + * + * @returns {boolean} true if it is a popup window + */ +function isPopup (): boolean { + return window.opener !== null && window.opener !== window; +} + +/** + * invoke instructions on desired window + * + * @param {TargetWindow} type the window to invoke the instructions on + * @param {Function} callback the instructions to invoke + * @returns {Promise} + */ +export async function invoke(type: TargetWindow, callback: () => Promise): Promise { + if(type === 'main' && !isPopup()) { + return await callback(); + } + + return false; +} + +/** + * Creates a new window to spawn a popup + * + * @returns {Window} the popup window + */ +export const spawnPopup = (): Window => { + if (popupHandler) { + return popupHandler; + } + + popupHandler = window.open('about:blank', '', 'height=50,width=50,left=9999,top=9999'); + + if (!popupHandler) { + throw new Error('Failed to open popup'); + } + + return popupHandler; +} + From 766f7c474eae85fd8af1aa0d2db97bcfd11e32b7 Mon Sep 17 00:00:00 2001 From: Romaric Mourgues Date: Tue, 28 Jun 2022 18:08:17 +0200 Subject: [PATCH 180/276] =?UTF-8?q?=F0=9F=9B=A0=20Fix=20search=202=20(#235?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Implement results for medias * Continuing the work * Implemented messages results * Ability to click on channels and add files actions * Add statistics to searched channel object * Show channels in a row in "all" * Remove console log * react-highlight-words was missing --- .../channels/web/controllers/channel.ts | 2 + .../messages/web/controllers/views.ts | 15 +- twake/frontend/package.json | 1 + twake/frontend/public/locales/en.json | 2 + twake/frontend/public/styles/tailwind.css | 121 ++++++++- .../app/atoms/icons-agnostic/assets/copy.svg | 2 +- .../atoms/icons-agnostic/assets/delete.svg | 2 +- .../atoms/icons-agnostic/assets/download.svg | 2 +- .../app/atoms/icons-agnostic/assets/eye.svg | 2 +- .../icons-agnostic/assets/input-clear.svg | 2 +- .../app/atoms/icons-agnostic/assets/share.svg | 2 +- .../app/components/search-popup/common.tsx | 83 ++++++ .../old_parts/channels-result.tsx | 4 +- .../search-popup/old_parts/common.tsx | 40 --- .../search-popup/old_parts/files.tsx | 5 +- .../search-popup/old_parts/media.tsx | 2 +- .../old_parts/messages-result.tsx | 4 +- .../recent/channels-and-contacts.tsx | 2 +- .../search-popup/old_parts/users-result.tsx | 2 +- .../search-popup/old_tabs/files/index.tsx | 5 +- .../parts}/channel-avatar/channel-avatar.scss | 0 .../parts}/channel-avatar/channel-avatar.tsx | 15 +- .../parts/channel-line-result.tsx | 46 ++++ .../search-popup/parts/channel-result.tsx | 25 ++ .../search-popup/parts/file-result.tsx | 113 ++++++++ .../search-popup/parts/media-result.tsx | 28 ++ .../search-popup/parts/message-result.tsx | 74 ++++++ .../search-popup/parts/nothing-found.tsx | 18 +- .../search-popup/parts/nothing-searched.tsx | 14 +- .../search-popup/parts/result-context.tsx | 57 +++++ .../components/search-popup/search-tabs.tsx | 52 ++-- .../app/components/search-popup/tabs/all.tsx | 95 ++++++- .../components/search-popup/tabs/channels.tsx | 82 +++++- .../components/search-popup/tabs/files.tsx | 40 ++- .../components/search-popup/tabs/medias.tsx | 46 +++- .../components/search-popup/tabs/messages.tsx | 42 ++- .../app/features/channels/types/channel.ts | 4 + .../app/features/global/utils/format-date.ts | 14 + .../features/global/utils/format-file-size.ts | 11 + .../messages/api/message-api-client.ts | 2 +- .../app/features/messages/types/message.ts | 8 +- .../search/hooks/use-search-channels.ts | 49 ++-- .../hooks/use-search-files-or-medias.ts | 11 +- .../search/hooks/use-search-messages.ts | 21 +- .../search/state/search-channels-result.ts | 5 + .../app/features/search/state/search-input.ts | 11 +- .../search/state/search-messages-result.ts | 3 +- .../src/app/molecules/media/index.tsx | 4 +- twake/frontend/src/app/styles/ui.less | 2 + .../applications/drive/viewer/viewer.scss | 10 +- .../applications/drive/viewer/viewer.tsx | 242 +++++++++--------- .../client/main-view/MainHeader/Search.tsx | 23 +- twake/frontend/src/react-app-env.d.ts | 1 + twake/frontend/tailwind.config.js | 6 + twake/frontend/yarn.lock | 24 ++ 55 files changed, 1222 insertions(+), 276 deletions(-) create mode 100644 twake/frontend/src/app/components/search-popup/common.tsx delete mode 100644 twake/frontend/src/app/components/search-popup/old_parts/common.tsx rename twake/frontend/src/app/components/{ => search-popup/parts}/channel-avatar/channel-avatar.scss (100%) rename twake/frontend/src/app/components/{ => search-popup/parts}/channel-avatar/channel-avatar.tsx (87%) create mode 100755 twake/frontend/src/app/components/search-popup/parts/channel-line-result.tsx create mode 100755 twake/frontend/src/app/components/search-popup/parts/channel-result.tsx create mode 100644 twake/frontend/src/app/components/search-popup/parts/file-result.tsx create mode 100644 twake/frontend/src/app/components/search-popup/parts/media-result.tsx create mode 100644 twake/frontend/src/app/components/search-popup/parts/message-result.tsx create mode 100644 twake/frontend/src/app/components/search-popup/parts/result-context.tsx create mode 100644 twake/frontend/src/app/features/global/utils/format-date.ts create mode 100644 twake/frontend/src/app/features/global/utils/format-file-size.ts diff --git a/twake/backend/node/src/services/channels/web/controllers/channel.ts b/twake/backend/node/src/services/channels/web/controllers/channel.ts index 72f94e3384..6347416c5e 100644 --- a/twake/backend/node/src/services/channels/web/controllers/channel.ts +++ b/twake/backend/node/src/services/channels/web/controllers/channel.ts @@ -190,6 +190,8 @@ export class ChannelCrudController } } + await this.completeWithStatistics(channels as ChannelObject[]); + return { resources: channels }; } diff --git a/twake/backend/node/src/services/messages/web/controllers/views.ts b/twake/backend/node/src/services/messages/web/controllers/views.ts index 553d951a3f..f8456c126d 100644 --- a/twake/backend/node/src/services/messages/web/controllers/views.ts +++ b/twake/backend/node/src/services/messages/web/controllers/views.ts @@ -216,8 +216,21 @@ export class ViewsController { } } + const extendedMessages = []; + for (const message of messages) { + const extended = { + ...(await gr.services.messages.messages.includeUsersInMessage(message)), + channel: await gr.services.channels.channels.get({ + company_id: message.cache?.company_id, + workspace_id: message.cache?.workspace_id, + id: message.cache?.channel_id, + }), + }; + extendedMessages.push(extended); + } + return { - resources: messages, + resources: extendedMessages, ...(lastPageToken && { next_page_token: lastPageToken, }), diff --git a/twake/frontend/package.json b/twake/frontend/package.json index 0fca135e74..726d190eff 100644 --- a/twake/frontend/package.json +++ b/twake/frontend/package.json @@ -206,6 +206,7 @@ "react-fastclick": "^3.0.2", "react-feather": "^2.0.8", "react-google-login": "^5.1.1", + "react-highlight-words": "^0.18.0", "react-i18next": "^11.15.3", "react-moment": "^0.9.7", "react-outside-click-handler": "^1.3.0", diff --git a/twake/frontend/public/locales/en.json b/twake/frontend/public/locales/en.json index f259fa71dd..2f81bea9a8 100644 --- a/twake/frontend/public/locales/en.json +++ b/twake/frontend/public/locales/en.json @@ -644,6 +644,7 @@ "components.searchpopup.hide_filters": "hide filters", "components.searchpopup.show_filters": "show filters", "components.searchpopup.load_more": "Load more results", + "components.searchpopup.start_search": "Enter few keywords to start the search.", "components.searchpopup.no_results_for": "There were no results for", "components.searchpopup.try_new_search": "Try a new search", "components.searchpopup.scope.company": "in all company", @@ -654,6 +655,7 @@ "components.searchpopup.messages": "Messages", "components.searchpopup.media": "Media", "components.searchpopup.files": "Files", + "components.searchpopup.see_more": "See more", "components.searchpopup.recent_chats": "Recent chats", "components.searchpopup.recent_media": "Recent media", "components.searchpopup.recent_files": "Recent files", diff --git a/twake/frontend/public/styles/tailwind.css b/twake/frontend/public/styles/tailwind.css index 7bf241fec1..b7841cc457 100644 --- a/twake/frontend/public/styles/tailwind.css +++ b/twake/frontend/public/styles/tailwind.css @@ -815,6 +815,14 @@ select { right: 0.25rem; } +.left-0 { + left: 0px; +} + +.left-1 { + left: 0.25rem; +} + .z-0 { z-index: 0; } @@ -835,6 +843,10 @@ select { margin: auto; } +.\!m-0 { + margin: 0px !important; +} + .my-4 { margin-top: 1rem; margin-bottom: 1rem; @@ -870,6 +882,11 @@ select { margin-right: auto; } +.-mx-2 { + margin-left: -0.5rem; + margin-right: -0.5rem; +} + .ml-3 { margin-left: 0.75rem; } @@ -934,6 +951,10 @@ select { margin-left: 1px; } +.-mb-4 { + margin-bottom: -1rem; +} + .ml-\[7px\] { margin-left: 7px; } @@ -946,6 +967,22 @@ select { margin-right: 1px; } +.mr-3 { + margin-right: 0.75rem; +} + +.-mt-4 { + margin-top: -1rem; +} + +.mt-4 { + margin-top: 1rem; +} + +.-mt-2 { + margin-top: -0.5rem; +} + .block { display: block; } @@ -1038,6 +1075,24 @@ select { height: 8rem; } +.h-14 { + height: 3.5rem; +} + +.h-64 { + height: 16rem; +} + +} + +.h-5 { + height: 1.25rem; +} + +.h-32 { + height: 8rem; +} + .h-16 { height: 4rem; } @@ -1102,6 +1157,14 @@ select { width: 8rem; } +.w-14 { + width: 3.5rem; +} + +.w-32 { + width: 8rem; +} + .min-w-0 { min-width: 0px; } @@ -1118,6 +1181,10 @@ select { max-width: 28rem; } +.\!max-w-none { + max-width: none !important; +} + .flex-1 { flex: 1 1 0%; } @@ -1220,6 +1287,10 @@ select { place-items: center; } +.items-start { + align-items: flex-start; +} + .items-end { align-items: flex-end; } @@ -1303,6 +1374,10 @@ select { white-space: nowrap; } +.whitespace-pre-line { + white-space: pre-line; +} + .break-words { overflow-wrap: break-word; } @@ -1327,6 +1402,10 @@ select { border-radius: 14px; } +.\!rounded-none { + border-radius: 0px !important; +} + .rounded-tr-xl { border-top-right-radius: 24px; } @@ -1363,6 +1442,10 @@ select { border-bottom-width: 1px; } +.border-none { + border-style: none; +} + .border-transparent { border-color: transparent; } @@ -1635,6 +1718,11 @@ select { background-color: rgb(0 0 0 / 0.5); } +.bg-blue-50 { + --tw-bg-opacity: 1; + background-color: rgb(239 246 255 / var(--tw-bg-opacity)); +} + .bg-green-500 { --tw-bg-opacity: 1; background-color: rgb(34 197 94 / var(--tw-bg-opacity)); @@ -1775,11 +1863,6 @@ select { background-color: rgb(20 83 45 / var(--tw-bg-opacity)); } -.bg-blue-50 { - --tw-bg-opacity: 1; - background-color: rgb(239 246 255 / var(--tw-bg-opacity)); -} - .bg-blue-200 { --tw-bg-opacity: 1; background-color: rgb(191 219 254 / var(--tw-bg-opacity)); @@ -1843,6 +1926,10 @@ select { padding: 0.5rem; } +.p-0 { + padding: 0px; +} + .px-3 { padding-left: 0.75rem; padding-right: 0.75rem; @@ -1883,6 +1970,16 @@ select { padding-bottom: 2rem; } +.py-3 { + padding-top: 0.75rem; + padding-bottom: 0.75rem; +} + +.px-2 { + padding-left: 0.5rem; + padding-right: 0.5rem; +} + .px-1\.5 { padding-left: 0.375rem; padding-right: 0.375rem; @@ -1893,11 +1990,6 @@ select { padding-right: 0.25rem; } -.px-2 { - padding-left: 0.5rem; - padding-right: 0.5rem; -} - .pl-5 { padding-left: 1.25rem; } @@ -1934,6 +2026,10 @@ select { text-align: center; } +.align-top { + vertical-align: top; +} + .align-bottom { vertical-align: bottom; } @@ -2388,6 +2484,11 @@ input.ant-input { background-color: rgb(249 250 251 / var(--tw-bg-opacity)); } +.hover\:bg-zinc-50:hover { + --tw-bg-opacity: 1; + background-color: rgb(247 248 249 / var(--tw-bg-opacity)); +} + .hover\:text-blue-700:hover { --tw-text-opacity: 1; color: rgb(29 78 216 / var(--tw-text-opacity)); diff --git a/twake/frontend/src/app/atoms/icons-agnostic/assets/copy.svg b/twake/frontend/src/app/atoms/icons-agnostic/assets/copy.svg index 51d7fefbc3..29ca723bd1 100644 --- a/twake/frontend/src/app/atoms/icons-agnostic/assets/copy.svg +++ b/twake/frontend/src/app/atoms/icons-agnostic/assets/copy.svg @@ -1,3 +1,3 @@ - + diff --git a/twake/frontend/src/app/atoms/icons-agnostic/assets/delete.svg b/twake/frontend/src/app/atoms/icons-agnostic/assets/delete.svg index 19b6c49b71..a508bd5099 100644 --- a/twake/frontend/src/app/atoms/icons-agnostic/assets/delete.svg +++ b/twake/frontend/src/app/atoms/icons-agnostic/assets/delete.svg @@ -1,3 +1,3 @@ - + diff --git a/twake/frontend/src/app/atoms/icons-agnostic/assets/download.svg b/twake/frontend/src/app/atoms/icons-agnostic/assets/download.svg index 2ace878a37..452d1edcab 100644 --- a/twake/frontend/src/app/atoms/icons-agnostic/assets/download.svg +++ b/twake/frontend/src/app/atoms/icons-agnostic/assets/download.svg @@ -1,5 +1,5 @@ - + diff --git a/twake/frontend/src/app/atoms/icons-agnostic/assets/eye.svg b/twake/frontend/src/app/atoms/icons-agnostic/assets/eye.svg index 8807327bd5..c19b8afc2e 100644 --- a/twake/frontend/src/app/atoms/icons-agnostic/assets/eye.svg +++ b/twake/frontend/src/app/atoms/icons-agnostic/assets/eye.svg @@ -1,3 +1,3 @@ - + diff --git a/twake/frontend/src/app/atoms/icons-agnostic/assets/input-clear.svg b/twake/frontend/src/app/atoms/icons-agnostic/assets/input-clear.svg index 72c4f766a0..95b3dd513b 100644 --- a/twake/frontend/src/app/atoms/icons-agnostic/assets/input-clear.svg +++ b/twake/frontend/src/app/atoms/icons-agnostic/assets/input-clear.svg @@ -1,3 +1,3 @@ - + diff --git a/twake/frontend/src/app/atoms/icons-agnostic/assets/share.svg b/twake/frontend/src/app/atoms/icons-agnostic/assets/share.svg index 117687e0e0..1de8c4a95e 100644 --- a/twake/frontend/src/app/atoms/icons-agnostic/assets/share.svg +++ b/twake/frontend/src/app/atoms/icons-agnostic/assets/share.svg @@ -1,3 +1,3 @@ - + diff --git a/twake/frontend/src/app/components/search-popup/common.tsx b/twake/frontend/src/app/components/search-popup/common.tsx new file mode 100644 index 0000000000..6237fdaeef --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/common.tsx @@ -0,0 +1,83 @@ +import Strings from 'features/global/utils/strings'; +import { FileSearchResult, Message, MessageFileType } from 'features/messages/types/message'; +import DriveService from 'deprecated/Apps/Drive/Drive'; +import FileUploadService from 'features/files/services/file-upload-service'; +import routerService from 'app/features/router/services/router-service'; +import { ChannelType } from 'app/features/channels/types/channel'; +import ChannelAPIClient from 'app/features/channels/api/channel-api-client'; + +export const highlightText = (text?: string, highlight?: string) => { + if (!text) { + return ''; + } + if (!highlight) { + return text; + } + const reg = new RegExp('(' + Strings.removeAccents(highlight) + ')', 'ig'); + return Strings.removeAccents(text).replace(reg, "$1"); +}; + +export const getFileMessageDownloadRoute = (file: MessageFileType): string => { + if (file?.metadata?.source === 'internal') + return FileUploadService.getDownloadRoute({ + companyId: file.metadata?.external_id?.company_id, + fileId: file.metadata?.external_id?.id, + }); + return ''; +}; + +export const onFilePreviewClick = (file: MessageFileType) => { + if (file?.metadata?.source === 'internal') + DriveService.viewDocument( + { + id: file.metadata?.external_id?.id, + name: file.metadata?.name, + url: getFileMessageDownloadRoute(file), + extension: (file.metadata?.name || '').split('.').pop(), + }, + true, + ); +}; + +export const onFileDownloadClick = (file: MessageFileType) => { + const url = getFileMessageDownloadRoute(file); + + url && (window.location.href = url); +}; + +export const openChannel = async (channel: ChannelType, currentWorkspaceId: string) => { + if (channel.workspace_id === 'direct') { + const direct = await ChannelAPIClient.getDirect( + channel.company_id || '', + channel.members || [], + ); + if (direct) { + channel.id === direct.id; + } + } + + routerService.push( + routerService.generateRouteFromState({ + companyId: channel.company_id, + workspaceId: + (channel.workspace_id === 'direct' ? undefined : channel.workspace_id) || + currentWorkspaceId, + channelId: channel.id, + }), + ); +}; + +export const openMessage = async (message: Message, currentWorkspaceId: string) => { + routerService.push( + routerService.generateRouteFromState({ + companyId: message?.cache?.company_id, + workspaceId: + message?.cache?.workspace_id === 'direct' + ? currentWorkspaceId + : message?.cache?.workspace_id, + channelId: message?.cache?.channel_id, + threadId: message?.thread_id, + ...(message.id !== message?.thread_id ? { messageId: message.id } : {}), + }), + ); +}; diff --git a/twake/frontend/src/app/components/search-popup/old_parts/channels-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/channels-result.tsx index 1b75b77ed6..4d53e60388 100755 --- a/twake/frontend/src/app/components/search-popup/old_parts/channels-result.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/channels-result.tsx @@ -5,8 +5,8 @@ import { ChannelType } from 'app/features/channels/types/channel'; import { useWorkspace } from 'features/workspaces/hooks/use-workspaces'; import assert from 'assert'; import RouterServices from 'features/router/services/router-service'; -import { highlightText } from 'app/components/search-popup/old_parts/common'; -import ChannelAvatar from 'components/channel-avatar/channel-avatar'; +import { highlightText } from 'app/components/search-popup/common'; +import ChannelAvatar from 'app/components/search-popup/parts/channel-avatar/channel-avatar'; import { WorkspaceType } from 'features/workspaces/types/workspace'; type PropsType = { diff --git a/twake/frontend/src/app/components/search-popup/old_parts/common.tsx b/twake/frontend/src/app/components/search-popup/old_parts/common.tsx deleted file mode 100644 index a6f6ac8d56..0000000000 --- a/twake/frontend/src/app/components/search-popup/old_parts/common.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import Strings from 'features/global/utils/strings'; -import { FileSearchResult } from 'features/messages/types/message'; -import DriveService from 'deprecated/Apps/Drive/Drive'; -import FileUploadService from 'features/files/services/file-upload-service'; - -export const highlightText = (text?: string, highlight?: string) => { - if (!text) { - return ''; - } - if (!highlight) { - return text; - } - const reg = new RegExp('(' + Strings.removeAccents(highlight) + ')', 'ig'); - return Strings.removeAccents(text).replace(reg, "$1"); -}; - -export const getFileMessageDownloadRoute = (fileSearchResult: FileSearchResult): string => { - return FileUploadService.getDownloadRoute({ - companyId: fileSearchResult.company_id, - fileId: fileSearchResult.file_id, - }); -}; - -export const onFilePreviewClick = (fileSearchResult: FileSearchResult) => { - DriveService.viewDocument( - { - id: fileSearchResult.file_id, - name: fileSearchResult.filename, - url: getFileMessageDownloadRoute(fileSearchResult), - extension: fileSearchResult.filename.split('.').pop(), - }, - true, - ); -}; - -export const onFileDownloadClick = (fileSearchResult: FileSearchResult) => { - const url = getFileMessageDownloadRoute(fileSearchResult); - - url && (window.location.href = url); -}; diff --git a/twake/frontend/src/app/components/search-popup/old_parts/files.tsx b/twake/frontend/src/app/components/search-popup/old_parts/files.tsx index 9f1fb26834..f798f47998 100644 --- a/twake/frontend/src/app/components/search-popup/old_parts/files.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/files.tsx @@ -1,8 +1,5 @@ import FilesResult from 'app/components/search-popup/old_parts/recent/files-result'; -import { - onFileDownloadClick, - onFilePreviewClick, -} from 'app/components/search-popup/old_parts/common'; +import { onFileDownloadClick, onFilePreviewClick } from 'app/components/search-popup/common'; import React from 'react'; import { FileSearchResult } from 'features/messages/types/message'; diff --git a/twake/frontend/src/app/components/search-popup/old_parts/media.tsx b/twake/frontend/src/app/components/search-popup/old_parts/media.tsx index 0a7d91b014..26e698e034 100644 --- a/twake/frontend/src/app/components/search-popup/old_parts/media.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/media.tsx @@ -1,4 +1,4 @@ -import { onFilePreviewClick } from 'app/components/search-popup/old_parts/common'; +import { onFilePreviewClick } from 'app/components/search-popup/common'; import React from 'react'; import MediaResult from 'app/components/search-popup/old_parts/media-result'; import { FileSearchResult } from 'features/messages/types/message'; diff --git a/twake/frontend/src/app/components/search-popup/old_parts/messages-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/messages-result.tsx index c9c4b31f2e..df29ae7b78 100755 --- a/twake/frontend/src/app/components/search-popup/old_parts/messages-result.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/messages-result.tsx @@ -5,9 +5,9 @@ import { Tooltip } from 'antd'; import User from 'features/users/services/current-user-service'; import { useWorkspace } from 'features/workspaces/hooks/use-workspaces'; import RouterServices from 'features/router/services/router-service'; -import { highlightText } from './common'; +import { highlightText } from '../common'; import { MessageExtended } from 'features/messages/types/message'; -import ChannelAvatar from 'components/channel-avatar/channel-avatar'; +import ChannelAvatar from 'app/components/search-popup/parts/channel-avatar/channel-avatar'; import ChannelAPIClient from 'app/features/channels/api/channel-api-client'; import { ChannelType } from 'features/channels/types/channel'; diff --git a/twake/frontend/src/app/components/search-popup/old_parts/recent/channels-and-contacts.tsx b/twake/frontend/src/app/components/search-popup/old_parts/recent/channels-and-contacts.tsx index 7cf3ff498c..71c01ac545 100644 --- a/twake/frontend/src/app/components/search-popup/old_parts/recent/channels-and-contacts.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/recent/channels-and-contacts.tsx @@ -4,7 +4,7 @@ import React from 'react'; import RouterServices, { ClientStateType } from 'features/router/services/router-service'; import { ChannelType } from 'features/channels/types/channel'; import assert from 'assert'; -import ChannelAvatar from 'components/channel-avatar/channel-avatar'; +import ChannelAvatar from 'app/components/search-popup/parts/channel-avatar/channel-avatar'; import Languages from 'app/features/global/services/languages-service'; export default (): JSX.Element => { diff --git a/twake/frontend/src/app/components/search-popup/old_parts/users-result.tsx b/twake/frontend/src/app/components/search-popup/old_parts/users-result.tsx index 92bab039b2..30a4315b56 100755 --- a/twake/frontend/src/app/components/search-popup/old_parts/users-result.tsx +++ b/twake/frontend/src/app/components/search-popup/old_parts/users-result.tsx @@ -4,7 +4,7 @@ import { UserType } from 'features/users/types/user'; import User from 'features/users/services/current-user-service'; import { useDirectChannels } from 'features/channels/hooks/use-direct-channels'; import assert from 'assert'; -import { highlightText } from 'app/components/search-popup/old_parts/common'; +import { highlightText } from 'app/components/search-popup/common'; type PropsType = { user: UserType; diff --git a/twake/frontend/src/app/components/search-popup/old_tabs/files/index.tsx b/twake/frontend/src/app/components/search-popup/old_tabs/files/index.tsx index 005c5809bf..7b56926b5b 100644 --- a/twake/frontend/src/app/components/search-popup/old_tabs/files/index.tsx +++ b/twake/frontend/src/app/components/search-popup/old_tabs/files/index.tsx @@ -3,10 +3,7 @@ import { useRecoilValue } from 'recoil'; import { HasSearchQuerySelector } from 'app/features/search/state/search-input'; import { useSearchMessagesFiles } from 'app/features/search/hooks/use-search-files-or-medias'; import FilesResult from '../../old_parts/recent/files-result'; -import { - onFileDownloadClick, - onFilePreviewClick, -} from 'app/components/search-popup/old_parts/common'; +import { onFileDownloadClick, onFilePreviewClick } from 'app/components/search-popup/common'; export default (): JSX.Element => { const isSearchMode = useRecoilValue(HasSearchQuerySelector); diff --git a/twake/frontend/src/app/components/channel-avatar/channel-avatar.scss b/twake/frontend/src/app/components/search-popup/parts/channel-avatar/channel-avatar.scss similarity index 100% rename from twake/frontend/src/app/components/channel-avatar/channel-avatar.scss rename to twake/frontend/src/app/components/search-popup/parts/channel-avatar/channel-avatar.scss diff --git a/twake/frontend/src/app/components/channel-avatar/channel-avatar.tsx b/twake/frontend/src/app/components/search-popup/parts/channel-avatar/channel-avatar.tsx similarity index 87% rename from twake/frontend/src/app/components/channel-avatar/channel-avatar.tsx rename to twake/frontend/src/app/components/search-popup/parts/channel-avatar/channel-avatar.tsx index 3744dc026a..7af6729306 100644 --- a/twake/frontend/src/app/components/channel-avatar/channel-avatar.tsx +++ b/twake/frontend/src/app/components/search-popup/parts/channel-avatar/channel-avatar.tsx @@ -16,18 +16,15 @@ type PropsType = { export default ({ channel, showLabel, collapseToOne }: PropsType): JSX.Element => { if (channel.visibility === 'direct') { - let channelMembers = (channel.members || []).filter(e => e !== UsersService.getCurrentUserId()); - channelMembers = channelMembers.filter((e, i) => channelMembers.indexOf(e) === i); + const channelUsers = (channel.users || []) + .filter(e => e.id !== UsersService.getCurrentUserId() || channel.users?.length === 1) + .filter(a => a); const channelName: string[] = []; - const users: UserType[] = []; - - channelMembers.forEach(userId => users.push(getUser(userId))); - const icons = [] as JSX.Element[]; - users.forEach(member => { + channelUsers.forEach(member => { channelName.push(UserService.getFullName(member)); if (!(collapseToOne && icons.length > 0)) { icons.push(getThumbnail(member)); @@ -36,9 +33,9 @@ export default ({ channel, showLabel, collapseToOne }: PropsType): JSX.Element = let width = 64; - if (!collapseToOne && channelMembers.length > 1) { + if (!collapseToOne && channelUsers.length > 1) { const shift = 64 - (64 * 2) / 5; - width = 64 + (channelMembers.length - 1) * shift; + width = 64 + (channelUsers.length - 1) * shift; } return ( diff --git a/twake/frontend/src/app/components/search-popup/parts/channel-line-result.tsx b/twake/frontend/src/app/components/search-popup/parts/channel-line-result.tsx new file mode 100755 index 0000000000..c91c7218ab --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/channel-line-result.tsx @@ -0,0 +1,46 @@ +import * as Text from '@atoms/text'; +import { ChannelType } from 'app/features/channels/types/channel'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import { useSearchModal } from 'app/features/search/hooks/use-search'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import ChannelAvatar from 'app/components/search-popup/parts/channel-avatar/channel-avatar'; +import Highlighter from 'react-highlight-words'; +import { useRecoilValue } from 'recoil'; +import { openChannel } from '../common'; + +type PropsType = { + channel: ChannelType; +}; + +export default ({ channel }: PropsType): JSX.Element => { + const currentWorkspaceId = useRouterWorkspace(); + const input = useRecoilValue(SearchInputState); + const name = channel.name; + const { setOpen } = useSearchModal(); + + return ( +
{ + openChannel(channel, currentWorkspaceId); + setOpen(false); + }} + > +
+ +
+
+ + + + {channel?.stats?.members} members +
+
{/*Actions todo*/}
+
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/parts/channel-result.tsx b/twake/frontend/src/app/components/search-popup/parts/channel-result.tsx new file mode 100755 index 0000000000..0f2190bc74 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/channel-result.tsx @@ -0,0 +1,25 @@ +import { ChannelType } from 'app/features/channels/types/channel'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import { useSearchModal } from 'app/features/search/hooks/use-search'; +import ChannelAvatar from 'app/components/search-popup/parts/channel-avatar/channel-avatar'; +import { openChannel } from '../common'; + +type PropsType = { + channel: ChannelType; +}; + +export default ({ channel }: PropsType): JSX.Element => { + const currentWorkspaceId = useRouterWorkspace(); + const { setOpen } = useSearchModal(); + + return ( +
{ + openChannel(channel, currentWorkspaceId); + setOpen(false); + }} + > + +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/parts/file-result.tsx b/twake/frontend/src/app/components/search-popup/parts/file-result.tsx new file mode 100644 index 0000000000..b5b2916e84 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/file-result.tsx @@ -0,0 +1,113 @@ +import * as Text from '@atoms/text'; +import FileUploadAPIClient from '@features/files/api/file-upload-api-client'; +import { Button } from 'app/atoms/button/button'; +import { DownloadIcon, ShareIcon } from 'app/atoms/icons-agnostic'; +import { + FileTypeArchiveIcon, + FileTypeDocumentIcon, + FileTypePdfIcon, + FileTypeSpreadsheetIcon, + FileTypeUnknownIcon, +} from 'app/atoms/icons-colored'; +import { formatDate } from 'app/features/global/utils/format-date'; +import { formatSize } from 'app/features/global/utils/format-file-size'; +import { Message, MessageFileType } from 'app/features/messages/types/message'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import { useSearchModal } from 'app/features/search/hooks/use-search'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { UserType } from 'app/features/users/types/user'; +import Media from 'app/molecules/media'; +import Highlighter from 'react-highlight-words'; +import { useRecoilValue } from 'recoil'; +import { onFilePreviewClick, onFileDownloadClick, openMessage } from '../common'; +import ResultContext from './result-context'; + +export default (props: { file: MessageFileType & { message?: Message } & { user?: UserType } }) => { + const input = useRecoilValue(SearchInputState); + const currentWorkspaceId = useRouterWorkspace(); + const file = props.file; + const type = FileUploadAPIClient.mimeToType(file?.metadata?.mime || ''); + const name = file?.metadata?.name; + const extension = name?.split('.').pop(); + const url = FileUploadAPIClient.getFileThumbnailUrlFromMessageFile(file); + + let iconClassName = 'absolute left-0 top-0 bottom-0 right-0 m-auto w-8 h-8'; + if (url) iconClassName = 'absolute bottom-1 left-1 w-6 h-6'; + + const { setOpen } = useSearchModal(); + + return ( +
onFilePreviewClick(file)} + > +
+ + {!['image', 'video'].includes(type) && ( + <> + {type === 'archive' ? ( + + ) : type === 'pdf' ? ( + + ) : type === 'document' ? ( + + ) : type === 'slides' ? ( + + ) : ( + + )} + + )} +
+
+ + + + + {extension?.toLocaleUpperCase()} • {formatDate(file?.message?.created_at)} •{' '} + {formatSize(file?.metadata?.size)} + + +
+
{ + e.preventDefault(); + e.stopPropagation(); + }} + > + + + {!!file.message && ( + + )} +
+
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/parts/media-result.tsx b/twake/frontend/src/app/components/search-popup/parts/media-result.tsx new file mode 100644 index 0000000000..12dcf50c60 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/media-result.tsx @@ -0,0 +1,28 @@ +import FileUploadAPIClient from '@features/files/api/file-upload-api-client'; +import { MessageFileType } from '@features/messages/types/message'; +import Media from '@molecules/media'; +import { onFilePreviewClick } from '../common'; + +export default (props: { file: MessageFileType }) => { + const file = props.file; + const url = FileUploadAPIClient.getFileThumbnailUrlFromMessageFile(file); + const type = FileUploadAPIClient.mimeToType(file?.metadata?.mime || ''); + + return ( +
onFilePreviewClick(file)} + > + +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/parts/message-result.tsx b/twake/frontend/src/app/components/search-popup/parts/message-result.tsx new file mode 100644 index 0000000000..0ee4784f85 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/message-result.tsx @@ -0,0 +1,74 @@ +import A from '@atoms/link'; +import * as Text from '@atoms/text'; +import { formatDate } from '@features/global/utils/format-date'; +import { Message } from '@features/messages/types/message'; +import ChannelAvatar from 'app/components/search-popup/parts/channel-avatar/channel-avatar'; +import { useChannel } from 'app/features/channels/hooks/use-channel'; +import { ChannelType } from 'app/features/channels/types/channel'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import routerService from 'app/features/router/services/router-service'; +import { useSearchModal } from 'app/features/search/hooks/use-search'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { useUser } from 'app/features/users/hooks/use-user'; +import { UserType } from 'app/features/users/types/user'; +import { useState } from 'react'; +import Highlighter from 'react-highlight-words'; +import { useRecoilValue } from 'recoil'; +import { openMessage } from '../common'; +import ResultContext from './result-context'; + +export default ({ + message, +}: { + message: Message & { users?: UserType[]; channel?: ChannelType }; +}) => { + const input = useRecoilValue(SearchInputState); + const currentWorkspaceId = useRouterWorkspace(); + const user = + (message.users || []).find(u => u.id === message.user_id) || useUser(message.user_id || ''); + const channel = message.channel || useChannel(message?.cache?.channel_id || '').channel; + const [truncated, setTruncated] = useState(true); + const { setOpen } = useSearchModal(); + + return ( +
{ + openMessage(message, currentWorkspaceId); + setOpen(false); + }} + > +
+ {channel && } +
+
+
+ +
+
+ + + {truncated && (message.text?.length || 0) > 500 && ( + setTruncated(false)}> + See more + + )} + +
+ {formatDate(message.created_at)} +
+
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/parts/nothing-found.tsx b/twake/frontend/src/app/components/search-popup/parts/nothing-found.tsx index 42083cc074..0c181b32d4 100644 --- a/twake/frontend/src/app/components/search-popup/parts/nothing-found.tsx +++ b/twake/frontend/src/app/components/search-popup/parts/nothing-found.tsx @@ -1,3 +1,19 @@ +import { NotFoundIcon } from 'app/atoms/icons-colored'; +import Languages from 'app/features/global/services/languages-service'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { useRecoilValue } from 'recoil'; +import * as Text from '@atoms/text'; + export default () => { - return <>; + const input = useRecoilValue(SearchInputState); + return ( +
+ + + {Languages.t('components.searchpopup.no_results_for')} “ + {input?.query}”.{' '} + {Languages.t('components.searchpopup.try_new_search')} + +
+ ); }; diff --git a/twake/frontend/src/app/components/search-popup/parts/nothing-searched.tsx b/twake/frontend/src/app/components/search-popup/parts/nothing-searched.tsx index 42083cc074..d0c7351aca 100644 --- a/twake/frontend/src/app/components/search-popup/parts/nothing-searched.tsx +++ b/twake/frontend/src/app/components/search-popup/parts/nothing-searched.tsx @@ -1,3 +1,15 @@ +import { NotFoundIcon } from 'app/atoms/icons-colored'; +import Languages from 'app/features/global/services/languages-service'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { useRecoilValue } from 'recoil'; +import * as Text from '@atoms/text'; + export default () => { - return <>; + const input = useRecoilValue(SearchInputState); + return ( +
+ + {Languages.t('components.searchpopup.start_search')} +
+ ); }; diff --git a/twake/frontend/src/app/components/search-popup/parts/result-context.tsx b/twake/frontend/src/app/components/search-popup/parts/result-context.tsx new file mode 100644 index 0000000000..9d3b28f112 --- /dev/null +++ b/twake/frontend/src/app/components/search-popup/parts/result-context.tsx @@ -0,0 +1,57 @@ +import A from '@atoms/link'; +import { getChannel } from '@features/channels/hooks/use-channel'; +import { UserType } from '@features/users/types/user'; +import { useWorkspace } from '@features/workspaces/hooks/use-workspaces'; +import UsersService from '@features/users/services/current-user-service'; +import RouterServices from '@features/router/services/router-service'; +import useRouterCompany from 'app/features/router/hooks/use-router-company'; +import useRouterWorkspace from 'app/features/router/hooks/use-router-workspace'; +import { useSearchModal } from 'app/features/search/hooks/use-search'; + +export default ({ + user, + context, +}: { + user?: UserType; + context?: { channelId?: string; workspaceId?: string; companyId?: string }; +}) => { + const channel = getChannel(context?.channelId || ''); + const workspaceId = + (context?.workspaceId !== 'direct' ? context?.workspaceId : '') || useRouterWorkspace(); + const { workspace } = useWorkspace(workspaceId || ''); + const companyId = context?.companyId || useRouterCompany(); + + const { setOpen } = useSearchModal(); + + return ( +
+ {!!user && <>{UsersService.getFullName(user)}}{' '} + {channel && ( + <> + {'->'}{' '} + + {context?.workspaceId === 'direct' + ? 'Direct / ' + : workspace?.name + ? workspace?.name + ' / ' + : ''} + + { + setOpen(false); + RouterServices.push( + RouterServices.generateRouteFromState({ + companyId: companyId || '', + workspaceId: workspaceId || '', + channelId: context?.channelId || '', + }), + ); + }} + > + {channel?.name} + + + )} +
+ ); +}; diff --git a/twake/frontend/src/app/components/search-popup/search-tabs.tsx b/twake/frontend/src/app/components/search-popup/search-tabs.tsx index 2b6bc959e7..d58cc920c4 100755 --- a/twake/frontend/src/app/components/search-popup/search-tabs.tsx +++ b/twake/frontend/src/app/components/search-popup/search-tabs.tsx @@ -1,26 +1,29 @@ import Tabs from '@molecules/tabs'; import Languages from 'app/features/global/services/languages-service'; +import useRouterChannel from 'app/features/router/hooks/use-router-channel'; import { useSearchChannels } from 'app/features/search/hooks/use-search-channels'; import { useSearchMessagesFiles, useSearchMessagesMedias, } from 'app/features/search/hooks/use-search-files-or-medias'; import { useSearchMessages } from 'app/features/search/hooks/use-search-messages'; -import { SearchInputState } from 'app/features/search/state/search-input'; -import { useState } from 'react'; -import { useRecoilValue } from 'recoil'; +import { SearchInputState, SearchTabsState } from 'app/features/search/state/search-input'; +import { useEffect } from 'react'; +import PerfectScrollbar from 'react-perfect-scrollbar'; +import { useRecoilState, useRecoilValue } from 'recoil'; import SearchResultsAll from './tabs/all'; import SearchResultsChannels from './tabs/channels'; import SearchResultsFiles from './tabs/files'; import SearchResultsMedias from './tabs/medias'; import SearchResultsMessages from './tabs/messages'; +const orderedTabs = ['all', 'messages', 'medias', 'files', 'channels']; + export const SearchResultsIndex = () => { const input = useRecoilValue(SearchInputState); const hasInput = input?.query?.length > 0; - const [tab, setTab] = useState(0); + const [tab, setTab] = useRecoilState(SearchTabsState); - const { channels } = useSearchChannels(); const { messages } = useSearchMessages(); const { files } = useSearchMessagesFiles(); const { files: medias } = useSearchMessagesMedias(); @@ -51,27 +54,44 @@ export const SearchResultsIndex = () => { ...(!input.channelId ? [
-
- {Languages.t('components.searchpopup.channels')} - {hasInput && } -
+
, ] : []), ]} - selected={tab} - onClick={idx => setTab(idx)} + selected={orderedTabs.indexOf(tab)} + onClick={idx => setTab(orderedTabs[idx] as any)} /> - {tab === 0 && } - {tab === 1 && } - {tab === 2 && } - {tab === 3 && } - {tab === 4 && } + + {tab === 'all' && } + {tab === 'messages' && } + {tab === 'medias' && } + {tab === 'files' && } + {tab === 'channels' && } + ); }; +const ChannelsTab = () => { + const input = useRecoilValue(SearchInputState); + const hasInput = input?.query?.length > 0; + const { channels } = useSearchChannels(); + + return ( +
+ {Languages.t('components.searchpopup.channels')} + {hasInput && } +
+ ); +}; + const SearchCounterBadge = (props: { count: number }) => { const count = props.count < 100 ? props.count : '99+'; return ( diff --git a/twake/frontend/src/app/components/search-popup/tabs/all.tsx b/twake/frontend/src/app/components/search-popup/tabs/all.tsx index 95ba616fee..cfcc68dc91 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/all.tsx +++ b/twake/frontend/src/app/components/search-popup/tabs/all.tsx @@ -1,9 +1,98 @@ -import { Title } from '@atoms/text'; +import * as Text from '@atoms/text'; +import A from 'app/atoms/link'; +import Languages from 'app/features/global/services/languages-service'; +import { useSearchChannels } from 'app/features/search/hooks/use-search-channels'; +import { + useSearchMessagesFiles, + useSearchMessagesMedias, +} from 'app/features/search/hooks/use-search-files-or-medias'; +import { useSearchMessages } from 'app/features/search/hooks/use-search-messages'; +import { SearchInputState, SearchTabsState } from 'app/features/search/state/search-input'; +import { useRecoilValue, useSetRecoilState } from 'recoil'; +import { ChannelsResults, ChannelsRowResults } from './channels'; +import { FilesResults } from './files'; +import { MediasResults } from './medias'; +import { MessagesResults } from './messages'; export default () => { + const setTab = useSetRecoilState(SearchTabsState); + + const input = useRecoilValue(SearchInputState); + const isRecent = input?.query?.length === 0; + + const { channels } = useSearchChannels(); + const { messages } = useSearchMessages(); + const { files } = useSearchMessagesFiles(); + const { files: medias } = useSearchMessagesMedias(); + return ( -
- SearchPopup +
+ {!input.channelId && channels.length > 0 && ( + <> +
+ + {Languages.t('components.searchpopup.channels')} + + +
+
+ +
+ + )} + + {medias.length > 0 && ( + <> +
+ + {Languages.t('components.searchpopup.media')} + + +
+
+ +
+ + )} + + {files.length > 0 && ( + <> +
+ + {Languages.t('components.searchpopup.files')} + + +
+
+ +
+ + )} + + {messages.length > 0 && ( + <> +
+ + {Languages.t('components.searchpopup.messages')} + +
+
+ +
+ + )}
); }; diff --git a/twake/frontend/src/app/components/search-popup/tabs/channels.tsx b/twake/frontend/src/app/components/search-popup/tabs/channels.tsx index 95ba616fee..233cd758aa 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/channels.tsx +++ b/twake/frontend/src/app/components/search-popup/tabs/channels.tsx @@ -1,9 +1,87 @@ -import { Title } from '@atoms/text'; +import * as Text from '@atoms/text'; +import Languages from 'app/features/global/services/languages-service'; +import { useSearchChannels } from 'app/features/search/hooks/use-search-channels'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { useRecoilValue } from 'recoil'; +import ChannelLineResult from '../parts/channel-line-result'; +import ChannelResult from '../parts/channel-result'; +import NothingFound from '../parts/nothing-found'; export default () => { + const input = useRecoilValue(SearchInputState); + const isRecent = input?.query?.length === 0; + const { channels, loading, loadMore } = useSearchChannels(); + + if (channels.length === 0 && !loading) return ; + + const topChannels = channels + .slice() + .filter(a => Date.now() - (a.last_activity || 0) < 1000 * 60 * 60 * 24 * 31) + .sort((a, b) => Math.min(50, b?.stats?.messages || 0) - Math.min(50, a?.stats?.messages || 0)) + .slice(0, 5); + return (
- SearchPopup + {isRecent && topChannels.length && ( +
+ + {Languages.t('components.searchpopup.recent_channels_and_contacts')} + + +
+ {topChannels.map(channel => ( +
+ +
+ ))} +
+
+ )} + + + {Languages.t('components.searchpopup.channels')} + +
+ +
); }; + +export const ChannelsRowResults = (props: { max?: number }) => { + const { channels, loading, loadMore } = useSearchChannels(); + + if (channels.length === 0 && !loading) return ; + + return ( + <> + {channels.slice(0, props?.max || channels.length).map(channel => ( +
+ +
+ ))} + + ); +}; + +export const ChannelsResults = (props: { max?: number }) => { + const { channels, loading, loadMore } = useSearchChannels(); + + if (channels.length === 0 && !loading) return ; + + console.log('channels', channels); + + return ( + <> + {channels.slice(0, props?.max || channels.length).map(channel => ( + + ))} + + ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/files.tsx b/twake/frontend/src/app/components/search-popup/tabs/files.tsx index 95ba616fee..0c67205876 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/files.tsx +++ b/twake/frontend/src/app/components/search-popup/tabs/files.tsx @@ -1,9 +1,45 @@ -import { Title } from '@atoms/text'; +import * as Text from '@atoms/text'; +import Languages from 'app/features/global/services/languages-service'; +import { useSearchMessagesFiles } from 'app/features/search/hooks/use-search-files-or-medias'; +import { SearchInputState } from 'app/features/search/state/search-input'; +import { useRecoilValue } from 'recoil'; +import NothingFound from '../parts/nothing-found'; +import FileUploadAPIClient from '@features/files/api/file-upload-api-client'; +import { onFilePreviewClick } from '../common'; +import FileResult from '../parts/file-result'; export default () => { + const input = useRecoilValue(SearchInputState); + const isRecent = input?.query?.length === 0; + const { files, loading, loadMore } = useSearchMessagesFiles(); + + if (files.length === 0 && !loading) return ; + return (
- SearchPopup + + {isRecent + ? Languages.t('components.searchpopup.recent_files') + : Languages.t('components.searchpopup.files')} + + +
+ +
); }; + +export const FilesResults = (props: { max?: number }) => { + const { files, loading, loadMore } = useSearchMessagesFiles(); + + if (files.length === 0 && !loading) return ; + + return ( + <> + {files.slice(0, props?.max || files.length).map(file => ( + + ))} + + ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/medias.tsx b/twake/frontend/src/app/components/search-popup/tabs/medias.tsx index 95ba616fee..aaedc7d6e8 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/medias.tsx +++ b/twake/frontend/src/app/components/search-popup/tabs/medias.tsx @@ -1,9 +1,51 @@ -import { Title } from '@atoms/text'; +import * as Text from '@atoms/text'; +import FileUploadAPIClient from '@features/files/api/file-upload-api-client'; +import Languages from '@features/global/services/languages-service'; +import { useSearchMessagesMedias } from '@features/search/hooks/use-search-files-or-medias'; +import { SearchInputState } from '@features/search/state/search-input'; +import { useRecoilValue } from 'recoil'; +import FileResult from '../parts/file-result'; +import MediaResult from '../parts/media-result'; +import NothingFound from '../parts/nothing-found'; export default () => { + const input = useRecoilValue(SearchInputState); + const isRecent = input?.query?.length === 0; + return (
- SearchPopup + + {isRecent + ? Languages.t('components.searchpopup.recent_media') + : Languages.t('components.searchpopup.media')} + + +
+ +
); }; + +export const MediasResults = (props: { max?: number; showAsFiles?: boolean }) => { + const { files, loading, loadMore } = useSearchMessagesMedias(); + + if (files.length === 0 && !loading) return ; + + return ( + <> + {files + .slice(0, props?.max || files.length) + .map(file => { + const url = FileUploadAPIClient.getFileThumbnailUrlFromMessageFile(file); + if (url) + return props.showAsFiles ? ( + + ) : ( + + ); + }) + .filter(a => a)} + + ); +}; diff --git a/twake/frontend/src/app/components/search-popup/tabs/messages.tsx b/twake/frontend/src/app/components/search-popup/tabs/messages.tsx index 95ba616fee..61b54a0f3f 100644 --- a/twake/frontend/src/app/components/search-popup/tabs/messages.tsx +++ b/twake/frontend/src/app/components/search-popup/tabs/messages.tsx @@ -1,9 +1,47 @@ -import { Title } from '@atoms/text'; +import * as Text from '@atoms/text'; +import Languages from '@features/global/services/languages-service'; +import { SearchInputState } from '@features/search/state/search-input'; +import { useSearchMessages } from 'app/features/search/hooks/use-search-messages'; +import { useRecoilValue } from 'recoil'; +import MessageResult from '../parts/message-result'; +import NothingFound from '../parts/nothing-found'; +import NothingSearched from '../parts/nothing-searched'; export default () => { return (
- SearchPopup + + {Languages.t('components.searchpopup.messages')} + + +
+ +
); }; + +export const MessagesResults = (props: { max?: number }) => { + const input = useRecoilValue(SearchInputState); + const isRecent = input?.query?.length === 0; + const { messages, loading, loadMore } = useSearchMessages(); + + if (isRecent) return ; + if (messages.length === 0 && !loading) return ; + + return ( + <> +
+ {messages + .map(message => { + return ( +
+ +
+ ); + }) + .filter(a => a)} +
+ + ); +}; diff --git a/twake/frontend/src/app/features/channels/types/channel.ts b/twake/frontend/src/app/features/channels/types/channel.ts index 4d875cf6a9..9c659f434d 100644 --- a/twake/frontend/src/app/features/channels/types/channel.ts +++ b/twake/frontend/src/app/features/channels/types/channel.ts @@ -28,6 +28,10 @@ export type ChannelType = { title: string; text: string; }; + stats?: { + members: number; + messages: number; + }; users?: UserType[]; }; diff --git a/twake/frontend/src/app/features/global/utils/format-date.ts b/twake/frontend/src/app/features/global/utils/format-date.ts new file mode 100644 index 0000000000..1455488f9d --- /dev/null +++ b/twake/frontend/src/app/features/global/utils/format-date.ts @@ -0,0 +1,14 @@ +export const formatDate = (date?: number) => { + return date + ? new Intl.DateTimeFormat(navigator.languages[0], { + year: 'numeric', + month: 'numeric', + day: 'numeric', + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + weekday: 'short', + hour12: false, + }).format(new Date(date)) + : ''; +}; diff --git a/twake/frontend/src/app/features/global/utils/format-file-size.ts b/twake/frontend/src/app/features/global/utils/format-file-size.ts new file mode 100644 index 0000000000..ccf5b6d69f --- /dev/null +++ b/twake/frontend/src/app/features/global/utils/format-file-size.ts @@ -0,0 +1,11 @@ +export const formatSize = (size?: number) => { + if (size && size >= 0) { + let pos = 0; + while (size > 1024) { + size = size / 1024; + pos++; + } + return size.toFixed(2) + ' ' + ['B', 'KB', 'MB', 'GB', 'TB', 'PB'][pos]; + } + return 'Unknown size'; +}; diff --git a/twake/frontend/src/app/features/messages/api/message-api-client.ts b/twake/frontend/src/app/features/messages/api/message-api-client.ts index 3f1d4f2dfd..a0f2deadd7 100644 --- a/twake/frontend/src/app/features/messages/api/message-api-client.ts +++ b/twake/frontend/src/app/features/messages/api/message-api-client.ts @@ -166,7 +166,7 @@ class MessageAPIClient { async search(searchString: string, options?: BaseSearchOptions) { const companyId = options?.company_id ? options.company_id : Workspace.currentGroupId; - const query = `/internal/services/messages/v1/companies/${companyId}/search?q=${searchString}`; + const query = `/internal/services/messages/v1/companies/${companyId}/search?q=${searchString}&include_users=1`; const res = await Api.getWithParams<{ resources: MessageExtended[] }>(query, options); this.logger.debug( `Message search by text "${searchString}". Found`, diff --git a/twake/frontend/src/app/features/messages/types/message.ts b/twake/frontend/src/app/features/messages/types/message.ts index 2eda6d216a..140fc1292c 100644 --- a/twake/frontend/src/app/features/messages/types/message.ts +++ b/twake/frontend/src/app/features/messages/types/message.ts @@ -48,6 +48,7 @@ export type FileSearchResult = { export type Message = { created_at?: number; id?: string; + thread_id?: string; application_id?: string | null; channel_id?: string; content?: any; @@ -62,8 +63,13 @@ export type Message = { pinned?: boolean; reactions?: ReactionType[]; responses_count?: number | null; - sender?: string | null; + user_id?: string | null; user_specific_content?: any; + cache?: { + company_id?: string; + workspace_id?: string; + channel_id?: string; + }; _user_ephemeral?: any; _last_modified?: string; _user_reaction?: any; diff --git a/twake/frontend/src/app/features/search/hooks/use-search-channels.ts b/twake/frontend/src/app/features/search/hooks/use-search-channels.ts index da4b3b2d00..74ab19b930 100644 --- a/twake/frontend/src/app/features/search/hooks/use-search-channels.ts +++ b/twake/frontend/src/app/features/search/hooks/use-search-channels.ts @@ -3,30 +3,34 @@ import { useEffect } from 'react'; import { useRecoilState, useRecoilValue } from 'recoil'; import { SearchInputState } from '../state/search-input'; import { LoadingState } from 'app/features/global/state/atoms/Loading'; -import { SearchChannelsResultsState } from '../state/search-channels-result'; +import { + SearchChannelsResultsState, + SearchUsersChannelsResultsState, +} from '../state/search-channels-result'; import { RecentChannelsState } from '../state/recent-channels'; import ChannelAPIClient from 'app/features/channels/api/channel-api-client'; import useRouterCompany from 'app/features/router/hooks/use-router-company'; -import { useSearchUsers } from 'app/features/users/hooks/use-search-user-list'; +import { searchBackend, useSearchUsers } from 'app/features/users/hooks/use-search-user-list'; import { createDirectChannelFromUsers } from 'app/features/channels/types/channel'; import { useCurrentUser } from 'app/features/users/hooks/use-current-user'; -import { UserType } from 'app/features/users/types/user'; import { useGlobalEffect } from 'app/features/global/hooks/use-global-effect'; +import _ from 'lodash'; +import UserAPIClient from 'app/features/users/api/user-api-client'; export const useSearchChannelsLoading = () => { return useRecoilValue(LoadingState('useSearchChannels')); }; +let currentQuery = ''; + export const useSearchChannels = () => { const companyId = useRouterCompany(); const { user: currentUser } = useCurrentUser(); - const { search, result: users } = useSearchUsers({ scope: 'company' }); - const searchInput = useRecoilValue(SearchInputState); const [loading, setLoading] = useRecoilState(LoadingState('useSearchChannels')); - const [_searched, setSearched] = useRecoilState(SearchChannelsResultsState); + const [searched, setSearched] = useRecoilState(SearchChannelsResultsState); const [recent, setRecent] = useRecoilState(RecentChannelsState); const opt = { limit: 100, company_id: companyId }; @@ -35,21 +39,37 @@ export const useSearchChannels = () => { setLoading(true); const isRecent = !searchInput.query; - if (!isRecent) search(searchInput.query); + const query = searchInput.query; + currentQuery = query; const response = await ChannelAPIClient.search(searchInput.query || null, opt); - const results = (response.resources || []).sort( + let results = (response.resources || []).sort( (a, b) => (b.last_activity || 0) / 100 + (b.user_member?.last_access || 0) - ((a.last_activity || 0) / 100 + (a.user_member?.last_access || 0)), ); + if (!isRecent) { + const users = await UserAPIClient.search(searchInput.query, { + scope: 'company', + companyId, + }); + results = [ + ...results, + ...(users || []).map(user => createDirectChannelFromUsers(companyId, [currentUser, user])), + ]; + } + const update = { results, nextPage: null, }; + if (currentQuery !== query) { + return; + } + if (!isRecent) setSearched(update); if (isRecent) setRecent(update); setLoading(false); @@ -67,7 +87,7 @@ export const useSearchChannels = () => { setLoading(true); if (searchInput) { delayRequest('useSearchChannels', async () => { - refresh(); + await refresh(); }); } else { refresh(); @@ -77,18 +97,9 @@ export const useSearchChannels = () => { [searchInput.query], ); - //We have two simultaneous results: users and searched - let searched = _searched.results; - if (searchInput?.query) { - searched = [ - ..._searched.results, - ...users.map(u => createDirectChannelFromUsers(companyId, [currentUser as UserType, u])), - ]; - } - return { loading, - channels: searchInput?.query ? searched : recent.results, + channels: searchInput?.query ? searched.results : recent.results, loadMore, refresh, }; diff --git a/twake/frontend/src/app/features/search/hooks/use-search-files-or-medias.ts b/twake/frontend/src/app/features/search/hooks/use-search-files-or-medias.ts index f30fa324d2..ef95355528 100644 --- a/twake/frontend/src/app/features/search/hooks/use-search-files-or-medias.ts +++ b/twake/frontend/src/app/features/search/hooks/use-search-files-or-medias.ts @@ -19,6 +19,8 @@ export const useSearchMessagesMediasLoading = () => { return useRecoilValue(LoadingState('useSearchMessagesFilesOrMedias-' + 'medias')); }; +let currentQuery = ''; + export const useSearchMessagesFilesOrMedias = (mode: 'files' | 'medias') => { const searchInput = useRecoilValue(SearchInputState); const [loading, setLoading] = useRecoilState( @@ -47,6 +49,9 @@ export const useSearchMessagesFilesOrMedias = (mode: 'files' | 'medias') => { setLoading(true); const isRecent = !searchInput.query; + const query = searchInput.query; + currentQuery = query; + const response = await MessagesAPIClient.searchFile(searchInput.query || null, opt); let results = response.resources || []; if (isRecent) @@ -59,6 +64,10 @@ export const useSearchMessagesFilesOrMedias = (mode: 'files' | 'medias') => { nextPage: response.next_page_token, }; + if (currentQuery !== query) { + return; + } + if (!isRecent) setSearched(update); if (isRecent) setRecent(update); setLoading(false); @@ -76,7 +85,7 @@ export const useSearchMessagesFilesOrMedias = (mode: 'files' | 'medias') => { setLoading(true); if (searchInput) { delayRequest('useSearchFiles' + mode, async () => { - refresh(); + await refresh(); }); } else { refresh(); diff --git a/twake/frontend/src/app/features/search/hooks/use-search-messages.ts b/twake/frontend/src/app/features/search/hooks/use-search-messages.ts index 3ee4aafd08..c61ec3b4d1 100644 --- a/twake/frontend/src/app/features/search/hooks/use-search-messages.ts +++ b/twake/frontend/src/app/features/search/hooks/use-search-messages.ts @@ -14,6 +14,8 @@ export const useSearchMessagesLoading = () => { return useRecoilValue(LoadingState('useSearchMessages')); }; +let currentQuery = ''; + export const useSearchMessages = () => { const companyId = useRouterCompany(); const searchInput = useRecoilValue(SearchInputState); @@ -34,18 +36,23 @@ export const useSearchMessages = () => { const refresh = async () => { setLoading(true); + const query = searchInput.query; + currentQuery = query; + let results: MessageExtended[] = []; if (searchInput.query) { - const response = await messageApiClient.search(searchInput.query, opt); + const response = await messageApiClient.search(query, opt); results = response.resources; } - setSearched({ - results, - nextPage: null, - }); - setLoading(false); + if (currentQuery === query) { + setSearched({ + results, + nextPage: null, + }); + setLoading(false); + } }; const loadMore = async () => { @@ -60,7 +67,7 @@ export const useSearchMessages = () => { setLoading(true); if (searchInput) { delayRequest('useSearchMessages', async () => { - refresh(); + await refresh(); }); } else { refresh(); diff --git a/twake/frontend/src/app/features/search/state/search-channels-result.ts b/twake/frontend/src/app/features/search/state/search-channels-result.ts index 3824647f55..9b9f30f84a 100644 --- a/twake/frontend/src/app/features/search/state/search-channels-result.ts +++ b/twake/frontend/src/app/features/search/state/search-channels-result.ts @@ -6,6 +6,11 @@ export type SearchChannelsResults = { nextPage: string | null; }; +export const SearchUsersChannelsResultsState = atom({ + key: 'SearchChannelsResultsState', + default: { results: [], nextPage: '' }, +}); + export const SearchChannelsResultsState = atom({ key: 'SearchChannelsResultsState', default: { results: [], nextPage: '' }, diff --git a/twake/frontend/src/app/features/search/state/search-input.ts b/twake/frontend/src/app/features/search/state/search-input.ts index 549cc36a81..c6ab16db19 100644 --- a/twake/frontend/src/app/features/search/state/search-input.ts +++ b/twake/frontend/src/app/features/search/state/search-input.ts @@ -1,4 +1,4 @@ -import { atom, selector } from 'recoil'; +import { atom } from 'recoil'; export type SearchInput = { query: string; @@ -18,10 +18,7 @@ export const SearchInputState = atom({ }, }); -export const HasSearchQuerySelector = selector({ - key: 'HasSearchQuerySelector', - get: ({ get }) => { - const searchInput = get(SearchInputState); - return searchInput.query.length > 0; - }, +export const SearchTabsState = atom<'all' | 'channels' | 'messages' | 'files' | 'medias'>({ + key: 'SearchTabsState', + default: 'all', }); diff --git a/twake/frontend/src/app/features/search/state/search-messages-result.ts b/twake/frontend/src/app/features/search/state/search-messages-result.ts index 6111bb97cc..afabbaf005 100644 --- a/twake/frontend/src/app/features/search/state/search-messages-result.ts +++ b/twake/frontend/src/app/features/search/state/search-messages-result.ts @@ -1,8 +1,9 @@ import { ChannelType } from 'app/features/channels/types/channel'; +import { Message } from 'app/features/messages/types/message'; import { atom, selector } from 'recoil'; export type SearchMessagesResults = { - results: ChannelType[]; + results: Message[]; nextPage: string | null; }; diff --git a/twake/frontend/src/app/molecules/media/index.tsx b/twake/frontend/src/app/molecules/media/index.tsx index 6b4f979525..270ff6ec48 100644 --- a/twake/frontend/src/app/molecules/media/index.tsx +++ b/twake/frontend/src/app/molecules/media/index.tsx @@ -26,8 +26,8 @@ export default function Media(props: MediaProps) { } } - const wrpClassName = `relative cursor-inherit w-${size} h-${size}`; - const imgClassName = `object-cover rounded-md w-${size} h-${size} border border-zinc-300`; + const wrpClassName = `relative border border-zinc-200 rounded-md overflow-hidden cursor-inherit w-${size} h-${size}`; + const imgClassName = `object-cover w-${size} h-${size} border border-zinc-300`; return (
diff --git a/twake/frontend/src/app/styles/ui.less b/twake/frontend/src/app/styles/ui.less index 9c1bfb980e..2a6899246e 100755 --- a/twake/frontend/src/app/styles/ui.less +++ b/twake/frontend/src/app/styles/ui.less @@ -253,6 +253,8 @@ SCROLLBARS /* please don't change 'position' */ position: absolute; z-index: 1; + right: 0 !important; + left: auto !important; } .ps--active-x > .ps__rail-x, diff --git a/twake/frontend/src/app/views/applications/drive/viewer/viewer.scss b/twake/frontend/src/app/views/applications/drive/viewer/viewer.scss index cdd98419d9..91d17641d8 100755 --- a/twake/frontend/src/app/views/applications/drive/viewer/viewer.scss +++ b/twake/frontend/src/app/views/applications/drive/viewer/viewer.scss @@ -1,11 +1,7 @@ .drive_viewer { - background: var(--white); - width: 100%; - height: 100%; - position: fixed; - top: 0; - left: 0; - z-index: 10; + width: 100vw; + height: 100vh; + margin: -16px; display: flex; flex-direction: column; diff --git a/twake/frontend/src/app/views/applications/drive/viewer/viewer.tsx b/twake/frontend/src/app/views/applications/drive/viewer/viewer.tsx index 19c7e6ed14..071547f074 100755 --- a/twake/frontend/src/app/views/applications/drive/viewer/viewer.tsx +++ b/twake/frontend/src/app/views/applications/drive/viewer/viewer.tsx @@ -17,6 +17,7 @@ import ModalManager from 'app/components/modal/modal-manager'; import LockedOnlyOfficePopup from 'app/components/locked-features-components/locked-only-office-popup/locked-only-office-popup'; import './viewer.scss'; +import { Modal } from 'app/atoms/modal'; type PropsType = { [key: string]: any }; type StateType = { [key: string]: any }; @@ -89,11 +90,12 @@ export default class Viewer extends Component { setTimeout(() => { this.setState({}); }, 1000); - return ''; } const current = this.viewed_document; - const candidates = DriveService.getEditorsCandidates(current); + const candidates = current + ? DriveService.getEditorsCandidates(current) + : { preview_candidate: [], editor_candidate: [] }; const preview_candidate: any = candidates.preview_candidate || []; const editor_candidate: any = candidates.editor_candidate || []; @@ -107,134 +109,146 @@ export default class Viewer extends Component { } const canPreviewWithElectron = - preview_candidate.length === 0 && current.url && ElectronService.isElectron(); + preview_candidate?.length === 0 && current?.url && ElectronService.isElectron(); return ( -
- {!this.props.disableHeader && ( -
-
{current.name}
- {!DriveService.previewonly && editor_candidate.length === 1 && ( - + )} + {!DriveService.previewonly && editor_candidate.length > 1 && ( + { + return { + type: 'menu', + text: editor?.app?.identity?.name || editor?.app?.name || editor.name, + onClick: () => { + this.openFile(editor); + }, + }; + })} + position="bottom" + > + + + )} + + {!DriveService.previewonly && ( +
{ + const link = DriveService.getLink(current, null, true, null); + window.open(link, current.url ? 'blank' : undefined); + }} + > + {current.url && } + {!current.url && } +
)} - - )} - {!DriveService.previewonly && editor_candidate.length > 1 && ( - { - return { - type: 'menu', - text: editor?.app?.identity?.name || editor?.app?.name || editor.name, - onClick: () => { - this.openFile(editor); - }, - }; - })} - position="bottom" - > - - - )} - {!DriveService.previewonly && ( -
{ - const link = DriveService.getLink(current, null, true, null); - window.open(link, current.url ? 'blank' : undefined); - }} - > - {current.url && } - {!current.url && } +
DriveService.viewDocument(null)}> + +
)} -
DriveService.viewDocument(null)}> - -
-
- )} +
+ {this.state.did_load_preview && preview_candidate.length > 0 && ( +