Compare commits

..

18 Commits

Author SHA1 Message Date
Balu Babu
5226c74d0c feat: updated base node version of hoppscotch-old-backend to v20.12.2 2024-05-10 14:16:54 +05:30
Balu Babu
7dbdabb5b8 feat: updated node version to node20-apline3.19 in prod.dockerfile 2024-05-10 14:16:54 +05:30
islamzeki
be353d9f72 chore(i18n): update tr.json (#4039) 2024-05-10 14:16:04 +05:30
Nivedin
38bc2c12c3 refactor: set default interceptor to "proxy" (#4051) 2024-05-10 14:01:43 +05:30
Stéfany Larissa
97644fa508 chore: update pt-br translations (#4003) 2024-05-10 13:56:58 +05:30
Dmitry
eb3446ae23 locale: update ru locale (#4005)
Co-authored-by: Dmitry Mukovkin <d.mukovkin@cft.ru>
Co-authored-by: Liyas Thomas <liyascthomas@gmail.com>
Co-authored-by: Joel Jacob Stephen <70131076+JoelJacobStephen@users.noreply.github.com>
2024-05-10 13:51:25 +05:30
Dmitry
6c29961d09 Added new button to save request modal (#3976)
Co-authored-by: Dmitry Mukovkin <d.mukovkin@cft.ru>
Co-authored-by: Nivedin <53208152+nivedin@users.noreply.github.com>
2024-05-09 20:52:22 +05:30
Nivedin
ef1117d8cc refactor: switch workspace after creation (#4015)
Co-authored-by: amk-dev <akash.k.mohan98@gmail.com>
2024-05-09 20:28:24 +05:30
Balu Babu
5c4b651aee feat: healthcheck for external services (#4048)
* chore: installed terminus package and scaffolded the health module

* feat: added healthcheck for database with prisma

* chore: renamed label from prisma to database in health check route

* chore: reverted target of hopp-old-backend service to prod
2024-05-07 20:05:17 +05:30
Andrew Bastin
391e5a20f5 chore: bump versions to 2024.3.3 2024-05-06 22:57:33 +05:30
Andrew Bastin
4b8f3bd8da fix: code generate modal erroring out (#4033) 2024-05-06 22:44:13 +05:30
Joel Jacob Stephen
94248076e6 refactor(sh-admin): improved handling of server configurations in admin dashboard (#3971)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2024-05-06 21:50:31 +05:30
Nivedin
eecc3db4e9 chore: update placeholder text (#4023) 2024-04-30 16:49:32 +05:30
Andrew Bastin
426e7594f4 fix: tab systems erroring out due to out of sync tabOrdering and tabMap 2024-04-29 20:32:27 +05:30
Andrew Bastin
934dc473f0 chore: bump version to 2024.3.2 2024-04-29 19:21:48 +05:30
Andrew Bastin
be57255bf7 refactor: update to dioc v3 (#4009)
Co-authored-by: jamesgeorge007 <jamesgeorge998001@gmail.com>
2024-04-29 19:06:18 +05:30
Balu Babu
f89561da54 fix: resolved mailer module email issue (#4000) 2024-04-29 12:05:07 +05:30
Joel Jacob Stephen
c2c4e620c2 fix(common): rest and graphql pages not being rendered when french is selected as app language (#4004)
Co-authored-by: nivedin <nivedinp@gmail.com>
2024-04-25 18:01:46 +05:30
90 changed files with 1482 additions and 1246 deletions

View File

@@ -38,7 +38,7 @@
}, },
"packageExtensions": { "packageExtensions": {
"httpsnippet@3.0.1": { "httpsnippet@3.0.1": {
"peerDependencies": { "dependencies": {
"ajv": "6.12.3" "ajv": "6.12.3"
} }
} }

View File

@@ -1,4 +1,4 @@
FROM node:18.8.0 AS builder FROM node:20.12.2 AS builder
WORKDIR /usr/src/app WORKDIR /usr/src/app

View File

@@ -3,9 +3,7 @@
"collection": "@nestjs/schematics", "collection": "@nestjs/schematics",
"sourceRoot": "src", "sourceRoot": "src",
"compilerOptions": { "compilerOptions": {
"assets": [ "assets": [{ "include": "mailer/templates/**/*", "outDir": "dist" }],
"**/*.hbs"
],
"watchAssets": true "watchAssets": true
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "hoppscotch-backend", "name": "hoppscotch-backend",
"version": "2024.3.1", "version": "2024.3.3",
"description": "", "description": "",
"author": "", "author": "",
"private": true, "private": true,
@@ -35,6 +35,7 @@
"@nestjs/passport": "10.0.2", "@nestjs/passport": "10.0.2",
"@nestjs/platform-express": "10.2.7", "@nestjs/platform-express": "10.2.7",
"@nestjs/schedule": "4.0.1", "@nestjs/schedule": "4.0.1",
"@nestjs/terminus": "10.2.3",
"@nestjs/throttler": "5.0.1", "@nestjs/throttler": "5.0.1",
"@prisma/client": "5.8.1", "@prisma/client": "5.8.1",
"argon2": "0.30.3", "argon2": "0.30.3",

View File

@@ -26,6 +26,7 @@ import { loadInfraConfiguration } from './infra-config/helper';
import { MailerModule } from './mailer/mailer.module'; import { MailerModule } from './mailer/mailer.module';
import { PosthogModule } from './posthog/posthog.module'; import { PosthogModule } from './posthog/posthog.module';
import { ScheduleModule } from '@nestjs/schedule'; import { ScheduleModule } from '@nestjs/schedule';
import { HealthModule } from './health/health.module';
@Module({ @Module({
imports: [ imports: [
@@ -100,6 +101,7 @@ import { ScheduleModule } from '@nestjs/schedule';
InfraConfigModule, InfraConfigModule,
PosthogModule, PosthogModule,
ScheduleModule.forRoot(), ScheduleModule.forRoot(),
HealthModule,
], ],
providers: [GQLComplexityPlugin], providers: [GQLComplexityPlugin],
controllers: [AppController], controllers: [AppController],

View File

@@ -0,0 +1,24 @@
import { Controller, Get } from '@nestjs/common';
import {
HealthCheck,
HealthCheckService,
PrismaHealthIndicator,
} from '@nestjs/terminus';
import { PrismaService } from 'src/prisma/prisma.service';
@Controller('health')
export class HealthController {
constructor(
private health: HealthCheckService,
private prismaHealth: PrismaHealthIndicator,
private prisma: PrismaService,
) {}
@Get()
@HealthCheck()
check() {
return this.health.check([
async () => this.prismaHealth.pingCheck('database', this.prisma),
]);
}
}

View File

@@ -0,0 +1,10 @@
import { Module } from '@nestjs/common';
import { HealthController } from './health.controller';
import { PrismaModule } from 'src/prisma/prisma.module';
import { TerminusModule } from '@nestjs/terminus';
@Module({
imports: [PrismaModule, TerminusModule],
controllers: [HealthController],
})
export class HealthModule {}

View File

@@ -374,7 +374,8 @@
"mutations": "Mutations", "mutations": "Mutations",
"schema": "Schema", "schema": "Schema",
"subscriptions": "Subscriptions", "subscriptions": "Subscriptions",
"switch_connection": "Switch connection" "switch_connection": "Switch connection",
"url_placeholder": "Enter a GraphQL endpoint URL"
}, },
"graphql_collections": { "graphql_collections": {
"title": "GraphQL Collections" "title": "GraphQL Collections"
@@ -598,6 +599,7 @@
"title": "Request", "title": "Request",
"type": "Request type", "type": "Request type",
"url": "URL", "url": "URL",
"url_placeholder": "Enter a URL or paste a cURL command",
"variables": "Variables", "variables": "Variables",
"view_my_links": "View my links" "view_my_links": "View my links"
}, },

View File

@@ -58,24 +58,6 @@
"new": "Ajouter un nouveau", "new": "Ajouter un nouveau",
"star": "Ajouter une étoile" "star": "Ajouter une étoile"
}, },
"cookies": {
"modal": {
"new_domain_name": "Nouveau nom de domaine",
"set": "Définir un cookie",
"cookie_string": "Chaîne de caractères de cookie",
"enter_cookie_string": "Saisir la chaîne de caractères du cookie",
"cookie_name": "Nom",
"cookie_value": "Valeur",
"cookie_path": "Chemin d'accès",
"cookie_expires": "Expiration",
"managed_tab": "Gestion",
"raw_tab": "Brut",
"interceptor_no_support": "L'intercepteur que vous avez sélectionné ne prend pas en charge les cookies. Sélectionnez un autre intercepteur et réessayez.",
"empty_domains": "La liste des domaines est vide",
"empty_domain": "Le domaine est vide",
"no_cookies_in_domain": "Aucun cookie n'est défini pour ce domaine"
}
},
"app": { "app": {
"chat_with_us": "Discuter avec nous", "chat_with_us": "Discuter avec nous",
"contact_us": "Nous contacter", "contact_us": "Nous contacter",
@@ -187,7 +169,7 @@
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Êtes-vous sûr de vouloir fermer cet onglet ?", "close_unsaved_tab": "Êtes-vous sûr de vouloir fermer cet onglet ?",
"close_unsaved_tabs": "Êtes-vous sûr de vouloir fermer tous les onglets ? {Les onglets non enregistrés seront perdus.", "close_unsaved_tabs": "Êtes-vous sûr de vouloir fermer tous les onglets ? {count} onglets non enregistrés seront perdus",
"exit_team": "Êtes-vous sûr de vouloir quitter cette équipe ?", "exit_team": "Êtes-vous sûr de vouloir quitter cette équipe ?",
"logout": "Êtes-vous sûr de vouloir vous déconnecter?", "logout": "Êtes-vous sûr de vouloir vous déconnecter?",
"remove_collection": "Voulez-vous vraiment supprimer définitivement cette collection ?", "remove_collection": "Voulez-vous vraiment supprimer définitivement cette collection ?",
@@ -207,6 +189,24 @@
"open_request_in_new_tab": "Ouvrir la demande dans un nouvel onglet", "open_request_in_new_tab": "Ouvrir la demande dans un nouvel onglet",
"set_environment_variable": "Définir comme variable" "set_environment_variable": "Définir comme variable"
}, },
"cookies": {
"modal": {
"new_domain_name": "Nouveau nom de domaine",
"set": "Définir un cookie",
"cookie_string": "Chaîne de caractères de cookie",
"enter_cookie_string": "Saisir la chaîne de caractères du cookie",
"cookie_name": "Nom",
"cookie_value": "Valeur",
"cookie_path": "Chemin d'accès",
"cookie_expires": "Expiration",
"managed_tab": "Gestion",
"raw_tab": "Brut",
"interceptor_no_support": "L'intercepteur que vous avez sélectionné ne prend pas en charge les cookies. Sélectionnez un autre intercepteur et réessayez.",
"empty_domains": "La liste des domaines est vide",
"empty_domain": "Le domaine est vide",
"no_cookies_in_domain": "Aucun cookie n'est défini pour ce domaine"
}
},
"count": { "count": {
"header": "En-tête {count}", "header": "En-tête {count}",
"message": "Message {compte}", "message": "Message {compte}",
@@ -410,7 +410,7 @@
"description": "Inspecter les erreurs possibles", "description": "Inspecter les erreurs possibles",
"environment": { "environment": {
"add_environment": "Ajouter à l'environnement", "add_environment": "Ajouter à l'environnement",
"not_found": "La variable d'environnement “{environnement}“ n'a pas été trouvée." "not_found": "La variable d'environnement “{environment}“ n'a pas été trouvée."
}, },
"header": { "header": {
"cookie": "Le navigateur ne permet pas à Hoppscotch de définir l'en-tête Cookie. Pendant que nous travaillons sur l'application de bureau Hoppscotch (bientôt disponible), veuillez utiliser l'en-tête d'autorisation à la place." "cookie": "Le navigateur ne permet pas à Hoppscotch de définir l'en-tête Cookie. Pendant que nous travaillons sur l'application de bureau Hoppscotch (bientôt disponible), veuillez utiliser l'en-tête d'autorisation à la place."

File diff suppressed because it is too large Load Diff

View File

@@ -11,12 +11,13 @@
"connect": "Подключиться", "connect": "Подключиться",
"connecting": "Соединение...", "connecting": "Соединение...",
"copy": "Скопировать", "copy": "Скопировать",
"create": "Create", "create": "Создать",
"delete": "Удалить", "delete": "Удалить",
"disconnect": "Отключиться", "disconnect": "Отключиться",
"dismiss": "Скрыть", "dismiss": "Скрыть",
"dont_save": "Не сохранять", "dont_save": "Не сохранять",
"download_file": "Скачать файл", "download_file": "Скачать файл",
"download_here": "Download here",
"drag_to_reorder": "Перетягивайте для сортировки", "drag_to_reorder": "Перетягивайте для сортировки",
"duplicate": "Дублировать", "duplicate": "Дублировать",
"edit": "Редактировать", "edit": "Редактировать",
@@ -24,6 +25,7 @@
"go_back": "Вернуться", "go_back": "Вернуться",
"go_forward": "Вперёд", "go_forward": "Вперёд",
"group_by": "Сгруппировать по", "group_by": "Сгруппировать по",
"hide_secret": "Hide secret",
"label": "Название", "label": "Название",
"learn_more": "Узнать больше", "learn_more": "Узнать больше",
"less": "Меньше", "less": "Меньше",
@@ -33,7 +35,7 @@
"open_workspace": "Открыть пространство", "open_workspace": "Открыть пространство",
"paste": "Вставить", "paste": "Вставить",
"prettify": "Форматировать", "prettify": "Форматировать",
"properties": "Properties", "properties": "Параметры",
"remove": "Удалить", "remove": "Удалить",
"rename": "Переименовать", "rename": "Переименовать",
"restore": "Восстановить", "restore": "Восстановить",
@@ -42,13 +44,14 @@
"scroll_to_top": "Вверх", "scroll_to_top": "Вверх",
"search": "Поиск", "search": "Поиск",
"send": "Отправить", "send": "Отправить",
"share": "Share", "share": "Поделиться",
"show_secret": "Show secret",
"start": "Начать", "start": "Начать",
"starting": "Запускаю", "starting": "Запускаю",
"stop": "Стоп", "stop": "Стоп",
"to_close": "что бы закрыть", "to_close": "закрыть",
"to_navigate": "для навигации", "to_navigate": "для навигации",
"to_select": "выборать", "to_select": "выбрать",
"turn_off": "Выключить", "turn_off": "Выключить",
"turn_on": "Включить", "turn_on": "Включить",
"undo": "Отменить", "undo": "Отменить",
@@ -66,12 +69,12 @@
"copy_interface_type": "Copy interface type", "copy_interface_type": "Copy interface type",
"copy_user_id": "Копировать токен пользователя", "copy_user_id": "Копировать токен пользователя",
"developer_option": "Настройки разработчика", "developer_option": "Настройки разработчика",
"developer_option_description": "Инструмент разработчика помогает обслуживить и развивить Hoppscotch", "developer_option_description": "Инструмент разработчика помогает обслуживать и развивать Hoppscotch",
"discord": "Discord", "discord": "Discord",
"documentation": "Документация", "documentation": "Документация",
"github": "GitHub", "github": "GitHub",
"help": "Справка, отзывы и документация", "help": "Справка, отзывы и документация",
"home": "Дом", "home": "На главную",
"invite": "Пригласить", "invite": "Пригласить",
"invite_description": "В Hoppscotch мы разработали простой и интуитивно понятный интерфейс для создания и управления вашими API. Hoppscotch - это инструмент, который помогает создавать, тестировать, документировать и делиться своими API.", "invite_description": "В Hoppscotch мы разработали простой и интуитивно понятный интерфейс для создания и управления вашими API. Hoppscotch - это инструмент, который помогает создавать, тестировать, документировать и делиться своими API.",
"invite_your_friends": "Пригласить своих друзей", "invite_your_friends": "Пригласить своих друзей",
@@ -85,7 +88,7 @@
"reload": "Перезагрузить", "reload": "Перезагрузить",
"search": "Поиск", "search": "Поиск",
"share": "Поделиться", "share": "Поделиться",
"shortcuts": "Ярлыки", "shortcuts": "Горячие клавиши",
"social_description": "Подписывайся на наши соц. сети и оставайся всегда в курсе последних новостей, обновлений и релизов.", "social_description": "Подписывайся на наши соц. сети и оставайся всегда в курсе последних новостей, обновлений и релизов.",
"social_links": "Социальные сети", "social_links": "Социальные сети",
"spotlight": "Прожектор", "spotlight": "Прожектор",
@@ -96,17 +99,19 @@
"type_a_command_search": "Введите команду или выполните поиск…", "type_a_command_search": "Введите команду или выполните поиск…",
"we_use_cookies": "Мы используем куки", "we_use_cookies": "Мы используем куки",
"whats_new": "Что нового?", "whats_new": "Что нового?",
"wiki": "Вики" "wiki": "Узнать больше"
}, },
"auth": { "auth": {
"account_exists": "Учетная запись существует с разными учетными данными - войдите, чтобы связать обе учетные записи", "account_exists": "Учетная запись существует с разными учетными данными - войдите, чтобы связать обе учетные записи",
"all_sign_in_options": "Все варианты входа", "all_sign_in_options": "Все варианты входа",
"continue_with_auth_provider": "Continue with {provider}",
"continue_with_email": "Продолжить с электронной почтой", "continue_with_email": "Продолжить с электронной почтой",
"continue_with_github": "Продолжить с GitHub", "continue_with_github": "Продолжить с GitHub",
"continue_with_github_enterprise": "Continue with GitHub Enterprise",
"continue_with_google": "Продолжить с Google", "continue_with_google": "Продолжить с Google",
"continue_with_microsoft": "Продолжить с Microsoft", "continue_with_microsoft": "Продолжить с Microsoft",
"email": "Электронное письмо", "email": "Электронное письмо",
"logged_out": "Вышли из", "logged_out": "Успешно вышли. Будем скучать!",
"login": "Авторизоваться", "login": "Авторизоваться",
"login_success": "Успешный вход в систему", "login_success": "Успешный вход в систему",
"login_to_hoppscotch": "Войти в Hoppscotch", "login_to_hoppscotch": "Войти в Hoppscotch",
@@ -121,7 +126,7 @@
"generate_token": "Сгенерировать токен", "generate_token": "Сгенерировать токен",
"graphql_headers": "Authorization Headers are sent as part of the payload to connection_init", "graphql_headers": "Authorization Headers are sent as part of the payload to connection_init",
"include_in_url": "Добавить в URL", "include_in_url": "Добавить в URL",
"inherited_from": "Inherited {auth} from parent collection {collection} ", "inherited_from": "Унаследован тип аутентификации {auth} из родительской коллекции {collection}",
"learn": "Узнать больше", "learn": "Узнать больше",
"oauth": { "oauth": {
"redirect_auth_server_returned_error": "Auth Server returned an error state", "redirect_auth_server_returned_error": "Auth Server returned an error state",
@@ -135,11 +140,32 @@
"redirect_no_token_endpoint": "No Token Endpoint Defined", "redirect_no_token_endpoint": "No Token Endpoint Defined",
"something_went_wrong_on_oauth_redirect": "Something went wrong during OAuth Redirect", "something_went_wrong_on_oauth_redirect": "Something went wrong during OAuth Redirect",
"something_went_wrong_on_token_generation": "Something went wrong on token generation", "something_went_wrong_on_token_generation": "Something went wrong on token generation",
"token_generation_oidc_discovery_failed": "Failure on token generation: OpenID Connect Discovery Failed" "token_generation_oidc_discovery_failed": "Failure on token generation: OpenID Connect Discovery Failed",
"grant_type": "Grant Type",
"grant_type_auth_code": "Authorization Code",
"token_fetched_successfully": "Token fetched successfully",
"token_fetch_failed": "Failed to fetch token",
"validation_failed": "Validation Failed, please check the form fields",
"label_authorization_endpoint": "Authorization Endpoint",
"label_client_id": "Client ID",
"label_client_secret": "Client Secret",
"label_code_challenge": "Code Challenge",
"label_code_challenge_method": "Code Challenge Method",
"label_code_verifier": "Code Verifier",
"label_scopes": "Scopes",
"label_token_endpoint": "Token Endpoint",
"label_use_pkce": "Use PKCE",
"label_implicit": "Implicit",
"label_password": "Password",
"label_username": "Username",
"label_auth_code": "Authorization Code",
"label_client_credentials": "Client Credentials"
}, },
"pass_by_headers_label": "Headers",
"pass_by_query_params_label": "Query Parameters",
"pass_key_by": "Pass by", "pass_key_by": "Pass by",
"password": "Пароль", "password": "Пароль",
"save_to_inherit": "Please save this request in any collection to inherit the authorization", "save_to_inherit": "Чтобы унаследовать аутентификации, нужно сохранить запрос в коллекции",
"token": "Токен", "token": "Токен",
"type": "Метод авторизации", "type": "Метод авторизации",
"username": "Имя пользователя" "username": "Имя пользователя"
@@ -149,6 +175,7 @@
"different_parent": "Нельзя сортировать коллекцию с разной родительской коллекцией", "different_parent": "Нельзя сортировать коллекцию с разной родительской коллекцией",
"edit": "Редактировать коллекцию", "edit": "Редактировать коллекцию",
"import_or_create": "Вы можете импортировать существующую или создать новую коллекцию", "import_or_create": "Вы можете импортировать существующую или создать новую коллекцию",
"import_collection": "Импортировать коллекцию",
"invalid_name": "Укажите допустимое название коллекции", "invalid_name": "Укажите допустимое название коллекции",
"invalid_root_move": "Коллекция уже в корне", "invalid_root_move": "Коллекция уже в корне",
"moved": "Перемещено успешно", "moved": "Перемещено успешно",
@@ -157,38 +184,36 @@
"name_length_insufficient": "Имя коллекции должно иметь 3 или более символов", "name_length_insufficient": "Имя коллекции должно иметь 3 или более символов",
"new": "Создать коллекцию", "new": "Создать коллекцию",
"order_changed": "Порядок коллекции обновлён", "order_changed": "Порядок коллекции обновлён",
"properties": "Collection Properties", "properties": "Параметры коллекции",
"properties_updated": "Collection Properties Updated", "properties_updated": "Параметры коллекции обновлены",
"renamed": "Коллекция переименована", "renamed": "Коллекция переименована",
"request_in_use": "Запрос обрабатывается", "request_in_use": "Запрос обрабатывается",
"save_as": "Сохранить как", "save_as": "Сохранить как",
"save_to_collection": "Сохранить в коллекцию", "save_to_collection": "Сохранить в коллекцию",
"select": "Выбрать коллекцию", "select": "Выбрать коллекцию",
"select_location": "Выберите местоположение", "select_location": "Выберите местоположение"
"select_team": "Выберите команду",
"team_collections": "Коллекции команд"
}, },
"confirm": { "confirm": {
"close_unsaved_tab": "Вы уверены что хотите закрыть эту вкладку?", "close_unsaved_tab": "Вы уверены, что хотите закрыть эту вкладку?",
"close_unsaved_tabs": "Вы уверены что хотите закрыть все эти вкладки? Несохранённые данные {count} вкладок будут утеряны.", "close_unsaved_tabs": "Вы уверены, что хотите закрыть все эти вкладки? Несохранённые данные {count} вкладок будут утеряны.",
"exit_team": "Вы точно хотите покинуть эту команду?", "exit_team": "Вы точно хотите покинуть эту команду?",
"logout": "Вы действительно хотите выйти?", "logout": "Вы действительно хотите выйти?",
"remove_collection": "Вы уверены, что хотите навсегда удалить эту коллекцию?", "remove_collection": "Вы уверены, что хотите навсегда удалить эту коллекцию?",
"remove_environment": "Вы действительно хотите удалить эту среду без возможности восстановления?", "remove_environment": "Вы действительно хотите удалить это окружение без возможности восстановления?",
"remove_folder": "Вы уверены, что хотите навсегда удалить эту папку?", "remove_folder": "Вы уверены, что хотите навсегда удалить эту папку?",
"remove_history": "Вы уверены, что хотите навсегда удалить всю историю?", "remove_history": "Вы уверены, что хотите навсегда удалить всю историю?",
"remove_request": "Вы уверены, что хотите навсегда удалить этот запрос?", "remove_request": "Вы уверены, что хотите навсегда удалить этот запрос?",
"remove_shared_request": "Are you sure you want to permanently delete this shared request?", "remove_shared_request": "Вы уверены, что хотите навсегда удалить этот запрос?",
"remove_team": "Вы уверены, что хотите удалить эту команду?", "remove_team": "Вы уверены, что хотите удалить эту команду?",
"remove_telemetry": "Вы действительно хотите отказаться от телеметрии?", "remove_telemetry": "Вы действительно хотите отказаться от телеметрии?",
"request_change": "Вы уверены что хотите сбросить текущий запрос, все не сохранённые данные будт утеряны?", "request_change": "Вы уверены, что хотите сбросить текущий запрос, все не сохранённые данные будт утеряны?",
"save_unsaved_tab": "Вы хотите сохранить изменения в этой вкладке?", "save_unsaved_tab": "Вы хотите сохранить изменения в этой вкладке?",
"sync": "Вы уверены, что хотите синхронизировать это рабочее пространство?" "sync": "Вы уверены, что хотите синхронизировать это рабочее пространство?"
}, },
"context_menu": { "context_menu": {
"add_parameters": "Add to parameters", "add_parameters": "Добавить в список параметров",
"open_request_in_new_tab": "Open request in new tab", "open_request_in_new_tab": "Открыть запрос в новом окне",
"set_environment_variable": "Set as variable" "set_environment_variable": "Добавить значение в переменную"
}, },
"cookies": { "cookies": {
"modal": { "modal": {
@@ -227,24 +252,25 @@
"collections": "Коллекции пустые", "collections": "Коллекции пустые",
"documentation": "Подключите GraphQL endpoint, чтобы увидеть документацию.", "documentation": "Подключите GraphQL endpoint, чтобы увидеть документацию.",
"endpoint": "Endpoint не может быть пустым", "endpoint": "Endpoint не может быть пустым",
"environments": "Окружения пусты", "environments": "Переменных окружения нет",
"folder": "Папка пуста", "folder": "Папка пуста",
"headers": "У этого запроса нет заголовков", "headers": "У этого запроса нет заголовков",
"history": "История пуста", "history": "История пуста",
"invites": "Вы еще никого не приглашали", "invites": "Вы еще никого не приглашали",
"members": "В этой команде еще нет участников", "members": "В этой команде еще нет участников",
"parameters": "Этот запрос не имеет параметров", "parameters": "Этот запрос не содержит параметров",
"pending_invites": "Пока что нет ожидающих заявок на вступление в команду", "pending_invites": "Пока что нет ожидающих заявок на вступление в команду",
"profile": "Войдите, чтобы просмотреть свой профиль", "profile": "Войдите, чтобы просмотреть свой профиль",
"protocols": "Протоколы пустые", "protocols": "Протоколы пустые",
"request_variables": "Этот запрос не содержит никаких переменных",
"secret_environments": "Секреты хранятся только на этом устройстве и не синхронизируются с сервером",
"schema": "Подключиться к конечной точке GraphQL", "schema": "Подключиться к конечной точке GraphQL",
"shared_requests": "Shared requests are empty", "shared_requests": "Вы еще не делились запросами с другими",
"shared_requests_logout": "Login to view your shared requests or create a new one", "shared_requests_logout": "Нужно войти, чтобы делиться запросами и управлять ими",
"subscription": "Нет подписок", "subscription": "Нет подписок",
"team_name": "Название команды пусто", "team_name": "Название команды пусто",
"teams": "Команды пустые", "teams": "Команды пустые",
"tests": "Для этого запроса нет тестов", "tests": "Для этого запроса нет тестов"
"shortcodes": "Нет коротких ссылок"
}, },
"environment": { "environment": {
"add_to_global": "Добавить в глобальное окружение", "add_to_global": "Добавить в глобальное окружение",
@@ -252,53 +278,57 @@
"create_new": "Создать новое окружение", "create_new": "Создать новое окружение",
"created": "Окружение создано", "created": "Окружение создано",
"deleted": "Окружение удалено", "deleted": "Окружение удалено",
"duplicated": "Environment duplicated", "duplicated": "Окружение продублировано",
"edit": "Редактировать окружение", "edit": "Редактировать окружение",
"empty_variables": "No variables", "empty_variables": "Переменные еще не добавлены",
"global": "Global", "global": "Global",
"global_variables": "Global variables", "global_variables": "Глобальные переменные",
"import_or_create": "Импортировать или создать новое окружение", "import_or_create": "Импортировать или создать новое окружение",
"invalid_name": "Укажите допустимое имя для окружения", "invalid_name": "Укажите допустимое имя для окружения",
"list": "Переменные окружения", "list": "Переменные окружения",
"my_environments": "Мои окружения", "my_environments": "Мои окружения",
"name": "Name", "name": "Имя",
"nested_overflow": "максимальный уровень вложения переменных окружения - 10", "nested_overflow": "максимальный уровень вложения переменных окружения - 10",
"new": "Новая среда", "new": "Новая среда",
"no_active_environment": "Нет активных окружений", "no_active_environment": "Нет активных окружений",
"no_environment": "Нет окружения", "no_environment": "Нет окружения",
"no_environment_description": "Не выбрано окружение, выберите что делать с переменными.", "no_environment_description": "Не выбрано окружение, выберите что делать с переменными.",
"quick_peek": "Environment Quick Peek", "quick_peek": "Быстрый просмотр переменных",
"replace_with_variable": "Replace with variable", "replace_with_variable": "Replace with variable",
"scope": "Scope", "scope": "Scope",
"secrets": "Секретные переменные",
"secret_value": "Секретное значение",
"select": "Выберите среду", "select": "Выберите среду",
"set": "Set environment", "set": "Выбрать окружение",
"set_as_environment": "Set as environment", "set_as_environment": "Поместить значение в переменную",
"team_environments": "Окружения команды", "team_environments": "Окружения команды",
"title": "Окружения", "title": "Окружения",
"updated": "Окружение обновлено", "updated": "Окружение обновлено",
"value": "Value", "value": "Значение",
"variable": "Variable", "variable": "Переменная",
"variables": "Переменные",
"variable_list": "Список переменных" "variable_list": "Список переменных"
}, },
"error": { "error": {
"authproviders_load_error": "Unable to load auth providers", "authproviders_load_error": "Unable to load auth providers",
"browser_support_sse": "Похоже, в этом браузере нет поддержки событий, отправленных сервером.", "browser_support_sse": "Похоже, в этом браузере нет поддержки событий, отправленных сервером.",
"check_console_details": "Подробности смотрите в журнале консоли.", "check_console_details": "Подробности смотрите в журнале консоли.",
"check_how_to_add_origin": "Инструкция как добавить origin в настройки расширения", "check_how_to_add_origin": "Инструкция как это сделать",
"curl_invalid_format": "cURL неправильно отформатирован", "curl_invalid_format": "cURL неправильно отформатирован",
"danger_zone": "Опасная зона", "danger_zone": "Опасная зона",
"delete_account": "Вы являетесь владельцем этой команды:", "delete_account": "Вы являетесь владельцем этой команды:",
"delete_account_description": "Прежде чем удалить аккаунт вам необходимо либо назначить владельцом другого пользователя, либо удалить команды в которых вы являетесь владельцем.", "delete_account_description": "Прежде чем удалить аккаунт вам необходимо либо назначить владельцом другого пользователя, либо удалить команды в которых вы являетесь владельцем.",
"empty_profile_name": "Имя пользователя не может быть пустым",
"empty_req_name": "Пустое имя запроса", "empty_req_name": "Пустое имя запроса",
"f12_details": "(F12 для подробностей)", "f12_details": "(F12 для подробностей)",
"gql_prettify_invalid_query": "Не удалось определить недопустимый запрос, устранить синтаксические ошибки запроса и повторить попытку.", "gql_prettify_invalid_query": "Не удалось отформатировать, т.к. в запросе есть синтаксические ошибки. Устраните их и повторите попытку.",
"incomplete_config_urls": "Не заполнены URL конфигурации", "incomplete_config_urls": "Не заполнены URL конфигурации",
"incorrect_email": "Не корректный Email", "incorrect_email": "Не корректный Email",
"invalid_link": "Не корректная ссылка", "invalid_link": "Не корректная ссылка",
"invalid_link_description": "Ссылка, по которой вы перешли, - недействительна, либо срок ее действия истек.", "invalid_link_description": "Ссылка, по которой вы перешли, - недействительна, либо срок ее действия истек.",
"invalid_embed_link": "The embed does not exist or is invalid.", "invalid_embed_link": "The embed does not exist or is invalid.",
"json_parsing_failed": "Не корректный JSON", "json_parsing_failed": "Не корректный JSON",
"json_prettify_invalid_body": "Не удалось определить недопустимое тело, устранить синтаксические ошибки json и повторить попытку.", "json_prettify_invalid_body": "Не удалось определить формат строки, устраните синтаксические ошибки и повторите попытку.",
"network_error": "Похоже, возникла проблема с соединением. Попробуйте еще раз.", "network_error": "Похоже, возникла проблема с соединением. Попробуйте еще раз.",
"network_fail": "Не удалось отправить запрос", "network_fail": "Не удалось отправить запрос",
"no_collections_to_export": "Нечего экспортировать. Для начала нужно создать коллекцию.", "no_collections_to_export": "Нечего экспортировать. Для начала нужно создать коллекцию.",
@@ -306,8 +336,10 @@
"no_environments_to_export": "Нечего экспортировать. Для начала нужно создать переменные окружения.", "no_environments_to_export": "Нечего экспортировать. Для начала нужно создать переменные окружения.",
"no_results_found": "Совпадения не найдены", "no_results_found": "Совпадения не найдены",
"page_not_found": "Эта страница не найдена", "page_not_found": "Эта страница не найдена",
"please_install_extension": "Нужно установить специальное расширение и добавить этот домен как новый origin в настройках расширения.", "please_install_extension": "Ничего страшного. Просто нужно установить специальное расширение в браузере.",
"proxy_error": "Proxy error", "proxy_error": "Proxy error",
"reading_files": "Произошла ошибка при чтении файла или нескольких файлов",
"same_profile_name": "Задано имя пользователя такое же как и было",
"script_fail": "Не удалось выполнить сценарий предварительного запроса", "script_fail": "Не удалось выполнить сценарий предварительного запроса",
"something_went_wrong": "Что-то пошло не так", "something_went_wrong": "Что-то пошло не так",
"test_script_fail": "Не удалось выполнить тестирование запроса" "test_script_fail": "Не удалось выполнить тестирование запроса"
@@ -315,13 +347,12 @@
"export": { "export": {
"as_json": "Экспорт как JSON", "as_json": "Экспорт как JSON",
"create_secret_gist": "Создать секретный Gist", "create_secret_gist": "Создать секретный Gist",
"create_secret_gist_tooltip_text": "Export as secret Gist", "create_secret_gist_tooltip_text": "Экспортировать как секретный Gist",
"failed": "Something went wrong while exporting", "failed": "Произошла ошибка во время экспорта",
"secret_gist_success": "Successfully exported as secret Gist", "secret_gist_success": "Успешно экспортировано как секретный Gist",
"require_github": "Войдите через GitHub, чтобы создать секретную суть", "require_github": "Войдите через GitHub, чтобы создать секретную суть",
"title": "Экспорт", "title": "Экспорт",
"success": "Successfully exported", "success": "Успешно экспортировано"
"gist_created": "Gist создан"
}, },
"filter": { "filter": {
"all": "Все", "all": "Все",
@@ -346,7 +377,7 @@
"switch_connection": "Изменить соединение" "switch_connection": "Изменить соединение"
}, },
"graphql_collections": { "graphql_collections": {
"title": "GraphQL Collections" "title": "Коллекции GraphQL"
}, },
"group": { "group": {
"time": "Время", "time": "Время",
@@ -359,8 +390,8 @@
}, },
"helpers": { "helpers": {
"authorization": "Заголовок авторизации будет автоматически сгенерирован при отправке запроса.", "authorization": "Заголовок авторизации будет автоматически сгенерирован при отправке запроса.",
"collection_properties_authorization": " This authorization will be set for every request in this collection.", "collection_properties_authorization": "Этот заголовок авторизации будет подставляться при каждом запросе в этой коллекции.",
"collection_properties_header": "This header will be set for every request in this collection.", "collection_properties_header": "Этот заголовок будет подставляться при каждом запросе в этой коллекции.",
"generate_documentation_first": "Сначала создайте документацию", "generate_documentation_first": "Сначала создайте документацию",
"network_fail": "Невозможно достичь конечной точки API. Проверьте подключение к сети и попробуйте еще раз.", "network_fail": "Невозможно достичь конечной точки API. Проверьте подключение к сети и попробуйте еще раз.",
"offline": "Кажется, вы не в сети. Данные в этой рабочей области могут быть устаревшими.", "offline": "Кажется, вы не в сети. Данные в этой рабочей области могут быть устаревшими.",
@@ -380,10 +411,12 @@
"import": { "import": {
"collections": "Импортировать коллекции", "collections": "Импортировать коллекции",
"curl": "Импортировать из cURL", "curl": "Импортировать из cURL",
"environments_from_gist": "Import From Gist", "environments_from_gist": "Импортировать из Gist",
"environments_from_gist_description": "Import Hoppscotch Environments From Gist", "environments_from_gist_description": "Импортировать переменные окружения Hoppscotch из Gist",
"failed": "Ошибка импорта", "failed": "Ошибка импорта",
"from_file": "Import from File", "file_size_limit_exceeded_warning_multiple_files": "Выбранные файлы превышают рекомендованный лимит в 10MB. Были импортированы только первые {files}",
"file_size_limit_exceeded_warning_single_file": "Размер выбранного в данный момент файла превышает рекомендуемый лимит в 10 МБ. Пожалуйста, выберите другой файл.",
"from_file": "Импортировать из одного или нескольких файлов",
"from_gist": "Импорт из Gist", "from_gist": "Импорт из Gist",
"from_gist_description": "Импортировать через Gist URL", "from_gist_description": "Импортировать через Gist URL",
"from_insomnia": "Импортировать с Insomnia", "from_insomnia": "Импортировать с Insomnia",
@@ -398,9 +431,9 @@
"from_postman_description": "Импортировать из коллекции Postman", "from_postman_description": "Импортировать из коллекции Postman",
"from_url": "Импортировать из URL", "from_url": "Импортировать из URL",
"gist_url": "Введите URL-адрес Gist", "gist_url": "Введите URL-адрес Gist",
"gql_collections_from_gist_description": "Import GraphQL Collections From Gist", "gql_collections_from_gist_description": "Импортировать GraphQL коллекцию из Gist",
"hoppscotch_environment": "Hoppscotch Environment", "hoppscotch_environment": "Hoppscotch Environment",
"hoppscotch_environment_description": "Import Hoppscotch Environment JSON file", "hoppscotch_environment_description": "Импортировать окружение Hoppscotch из JSON файла",
"import_from_url_invalid_fetch": "Не удалить получить данные по этому URL", "import_from_url_invalid_fetch": "Не удалить получить данные по этому URL",
"import_from_url_invalid_file_format": "Ошибка при импорте коллекций", "import_from_url_invalid_file_format": "Ошибка при импорте коллекций",
"import_from_url_invalid_type": "Неподдерживаемый тип. Поддерживаемые типы: 'hoppscotch', 'openapi', 'postman', 'insomnia'", "import_from_url_invalid_type": "Неподдерживаемый тип. Поддерживаемые типы: 'hoppscotch', 'openapi', 'postman', 'insomnia'",
@@ -409,16 +442,19 @@
"json_description": "Импортировать из коллекции Hoppscotch", "json_description": "Импортировать из коллекции Hoppscotch",
"postman_environment": "Postman Environment", "postman_environment": "Postman Environment",
"postman_environment_description": "Import Postman Environment from a JSON file", "postman_environment_description": "Import Postman Environment from a JSON file",
"success": "Успешно импортировано",
"title": "Импортировать" "title": "Импортировать"
}, },
"inspections": { "inspections": {
"description": "Inspect possible errors", "description": "Показать возможные ошибки",
"environment": { "environment": {
"add_environment": "Add to Environment", "add_environment": "Добавить переменную",
"not_found": "Environment variable “{environment}” not found." "add_environment_value": "Заполнить значение",
"empty_value": "Значение переменной окружения '{variable}' пустое",
"not_found": "Переменная окружения “{environment}” не задана."
}, },
"header": { "header": {
"cookie": "The browser doesn't allow Hoppscotch to set the Cookie Header. While we're working on the Hoppscotch Desktop App (coming soon), please use the Authorization Header instead." "cookie": "Из-за ограничений безопасности в веб версии нельзя задать Cookie параметры. Пожалуйста, используйте Hoppscotch Desktop приложение или используйте заголовок Authorization вместо этого."
}, },
"response": { "response": {
"401_error": "Please check your authentication credentials.", "401_error": "Please check your authentication credentials.",
@@ -427,12 +463,12 @@
"default_error": "Please check your request.", "default_error": "Please check your request.",
"network_error": "Please check your network connection." "network_error": "Please check your network connection."
}, },
"title": "Inspector", "title": "Помощник",
"url": { "url": {
"extension_not_installed": "Extension not installed.", "extension_not_installed": "Расширение не установлено.",
"extension_unknown_origin": "Make sure you've added the API endpoint's origin to the Hoppscotch Browser Extension list.", "extension_unknown_origin": "Убедитесь, что текущий домен добавлен в список доверенных ресурсов в расширении браузера",
"extention_enable_action": "Enable Browser Extension", "extention_enable_action": "Подключить расширение",
"extention_not_enabled": "Extension not enabled." "extention_not_enabled": "Расширение в браузере не подключено."
} }
}, },
"layout": { "layout": {
@@ -445,11 +481,11 @@
"modal": { "modal": {
"close_unsaved_tab": "У вас есть не сохранённые изменения", "close_unsaved_tab": "У вас есть не сохранённые изменения",
"collections": "Коллекции", "collections": "Коллекции",
"confirm": "Подтверждать", "confirm": "Подтвердите действие",
"customize_request": "Customize Request", "customize_request": "Customize Request",
"edit_request": "Изменить запрос", "edit_request": "Изменить запрос",
"import_export": "Импорт Экспорт", "import_export": "Импорт Экспорт",
"share_request": "Share Request" "share_request": "Поделиться запросом"
}, },
"mqtt": { "mqtt": {
"already_subscribed": "Вы уже подписаны на этот топик", "already_subscribed": "Вы уже подписаны на этот топик",
@@ -485,7 +521,7 @@
"doc": "Документы", "doc": "Документы",
"graphql": "GraphQL", "graphql": "GraphQL",
"profile": "Профиль", "profile": "Профиль",
"realtime": "В реальном времени", "realtime": "Realtime",
"rest": "REST", "rest": "REST",
"settings": "Настройки" "settings": "Настройки"
}, },
@@ -507,8 +543,8 @@
"roles": "Роли", "roles": "Роли",
"roles_description": "Роли позволяют настраивать доступ конкретным людям к публичным коллекциям.", "roles_description": "Роли позволяют настраивать доступ конкретным людям к публичным коллекциям.",
"updated": "Профиль обновлен", "updated": "Профиль обновлен",
"viewer": "Зритель", "viewer": "Читатель",
"viewer_description": "Зрительно могут только просматривать и использовать запросы." "viewer_description": "Могут только просматривать и использовать запросы."
}, },
"remove": { "remove": {
"star": "Удалить звезду" "star": "Удалить звезду"
@@ -530,11 +566,11 @@
"enter_curl": "Введите сюда команду cURL", "enter_curl": "Введите сюда команду cURL",
"generate_code": "Сгенерировать код", "generate_code": "Сгенерировать код",
"generated_code": "Сгенерированный код", "generated_code": "Сгенерированный код",
"go_to_authorization_tab": "Go to Authorization", "go_to_authorization_tab": "Перейти на вкладку авторизации",
"go_to_body_tab": "Go to Body tab", "go_to_body_tab": "Перейти на вкладку тела запроса",
"header_list": "Список заголовков", "header_list": "Список заголовков",
"invalid_name": "Укажите имя для запроса", "invalid_name": "Укажите имя для запроса",
"method": "Методика", "method": "Метод",
"moved": "Запрос перемещён", "moved": "Запрос перемещён",
"name": "Имя запроса", "name": "Имя запроса",
"new": "Новый запрос", "new": "Новый запрос",
@@ -548,22 +584,22 @@
"payload": "Полезная нагрузка", "payload": "Полезная нагрузка",
"query": "Запрос", "query": "Запрос",
"raw_body": "Необработанное тело запроса", "raw_body": "Необработанное тело запроса",
"rename": "Переименость запрос", "rename": "Переименовать запрос",
"renamed": "Запрос переименован", "renamed": "Запрос переименован",
"request_variables": "Переменные запроса",
"run": "Запустить", "run": "Запустить",
"save": "Сохранить", "save": "Сохранить",
"save_as": "Сохранить как", "save_as": "Сохранить как",
"saved": "Запрос сохранен", "saved": "Запрос сохранен",
"share": "Делиться", "share": "Поделиться",
"share_description": "Поделиться Hoppscotch с друзьями", "share_description": "Поделиться Hoppscotch с друзьями",
"share_request": "Share Request", "share_request": "Поделиться запросом",
"stop": "Stop", "stop": "Стоп",
"title": "Запрос", "title": "Запрос",
"type": "Тип запроса", "type": "Тип запроса",
"url": "URL", "url": "URL",
"variables": "Переменные", "variables": "Переменные",
"view_my_links": "Посмотреть мои ссылки", "view_my_links": "Посмотреть мои ссылки"
"copy_link": "Копировать ссылку"
}, },
"response": { "response": {
"audio": "Аудио", "audio": "Аудио",
@@ -586,7 +622,7 @@
}, },
"settings": { "settings": {
"accent_color": "Основной цвет", "accent_color": "Основной цвет",
"account": "Счет", "account": "Аккаунт",
"account_deleted": "Ваш аккаунт был удалён", "account_deleted": "Ваш аккаунт был удалён",
"account_description": "Настройте параметры своей учетной записи.", "account_description": "Настройте параметры своей учетной записи.",
"account_email_description": "Ваш основной адрес электронной почты.", "account_email_description": "Ваш основной адрес электронной почты.",
@@ -639,29 +675,29 @@
"verify_email": "Подтвердить Email" "verify_email": "Подтвердить Email"
}, },
"shared_requests": { "shared_requests": {
"button": "Button", "button": "Кнопка",
"button_info": "Create a 'Run in Hoppscotch' button for your website, blog or a README.", "button_info": "Создать кнопку 'Run in Hoppscotch' на свой сайт, блог или README.",
"copy_html": "Copy HTML", "copy_html": "Копировать HTML код",
"copy_link": "Copy Link", "copy_link": "Копировать ссылку",
"copy_markdown": "Copy Markdown", "copy_markdown": "Копировать Markdown",
"creating_widget": "Creating widget", "creating_widget": "Создание виджет",
"customize": "Customize", "customize": "Настроить",
"deleted": "Shared request deleted", "deleted": "Запрос удален",
"description": "Select a widget, you can change and customize this later", "description": "Выберите вид как вы поделитесь запросом, позже вы сможете дополнительно его настроить",
"embed": "Embed", "embed": "Встраиваемое окно",
"embed_info": "Add a mini 'Hoppscotch API Playground' to your website, blog or documentation.", "embed_info": "Добавьте небольшую площадку 'Hoppscotch API Playground' на свой веб-сайт, блог или документацию.",
"link": "Link", "link": "Ссылка",
"link_info": "Create a shareable link to share with anyone on the internet with view access.", "link_info": "Создайте общедоступную ссылку, которой можно поделиться с любым пользователем, имеющим доступ к просмотру.",
"modified": "Shared request modified", "modified": "Запрос изменен",
"not_found": "Shared request not found", "not_found": "Такой ссылке не нашлось",
"open_new_tab": "Open in new tab", "open_new_tab": "Открыть в новом окне",
"preview": "Preview", "preview": "Preview",
"run_in_hoppscotch": "Run in Hoppscotch", "run_in_hoppscotch": "Run in Hoppscotch",
"theme": { "theme": {
"dark": "Dark", "dark": "Темная",
"light": "Light", "light": "Светлая",
"system": "System", "system": "Системная",
"title": "Theme" "title": "Тема"
} }
}, },
"shortcut": { "shortcut": {
@@ -669,7 +705,7 @@
"close_current_menu": "Закрыть текущее меню", "close_current_menu": "Закрыть текущее меню",
"command_menu": "Меню поиска и команд", "command_menu": "Меню поиска и команд",
"help_menu": "Меню помощи", "help_menu": "Меню помощи",
"show_all": "Горячие клавиши", "show_all": "Список горячих клавиш",
"title": "Общий" "title": "Общий"
}, },
"miscellaneous": { "miscellaneous": {
@@ -696,20 +732,19 @@
"get_method": "Выберите метод GET", "get_method": "Выберите метод GET",
"head_method": "Выберите метод HEAD", "head_method": "Выберите метод HEAD",
"import_curl": "Импортировать из cURL", "import_curl": "Импортировать из cURL",
"method": "Методика", "method": "Метод",
"next_method": "Выберите следующий метод", "next_method": "Выберите следующий метод",
"post_method": "Выберите метод POST", "post_method": "Выберите метод POST",
"previous_method": "Выбрать предыдущий метод", "previous_method": "Выбрать предыдущий метод",
"put_method": "Выберите метод PUT", "put_method": "Выберите метод PUT",
"rename": "Переименовать запрос", "rename": "Переименовать запрос",
"reset_request": "Сбросить запрос", "reset_request": "Сбросить запрос",
"save_request": "Сохарнить запрос", "save_request": "Сохранить запрос",
"save_to_collections": "Сохранить в коллекции", "save_to_collections": "Сохранить в коллекции",
"send_request": "Послать запрос", "send_request": "Послать запрос",
"share_request": "Share Request", "share_request": "Поделиться запросом",
"show_code": "Generate code snippet", "show_code": "Сгенерировать фрагмент кода из запроса",
"title": "Запрос", "title": "Запрос"
"copy_request_link": "Копировать ссылку на запрос"
}, },
"response": { "response": {
"copy": "Копировать запрос в буфер обмена", "copy": "Копировать запрос в буфер обмена",
@@ -717,11 +752,11 @@
"title": "Запрос" "title": "Запрос"
}, },
"theme": { "theme": {
"black": "Черный режим", "black": "Переключить на черный режим",
"dark": "Тёмный режим", "dark": "Переключить на тёмный режим",
"light": "Светлый режим", "light": "Переключить на светлый режим",
"system": "Определяется системой", "system": "Переключить на тему, исходя из настроек системы",
"title": "Тема" "title": "Внешний вид"
} }
}, },
"show": { "show": {
@@ -730,6 +765,11 @@
"more": "Показать больше", "more": "Показать больше",
"sidebar": "Показать боковую панель" "sidebar": "Показать боковую панель"
}, },
"site_protection": {
"error_fetching_site_protection_status": "Something Went Wrong While Fetching Site Protection Status",
"login_to_continue": "Login to continue",
"login_to_continue_description": "You need to be logged in to access this Hoppscotch Enterprise Instance."
},
"socketio": { "socketio": {
"communication": "Коммуникация", "communication": "Коммуникация",
"connection_not_authorized": "Это SocketIO соединение не использует какую-либо авторизацию.", "connection_not_authorized": "Это SocketIO соединение не использует какую-либо авторизацию.",
@@ -739,82 +779,89 @@
"url": "URL" "url": "URL"
}, },
"spotlight": { "spotlight": {
"change_language": "Change Language", "change_language": "Изменить язык",
"environments": { "environments": {
"delete": "Delete current environment", "delete": "Удалить текущее окружение",
"duplicate": "Duplicate current environment", "duplicate": "Дублировать текущее окружение",
"duplicate_global": "Duplicate global environment", "duplicate_global": "Дублировать глобальное окружение",
"edit": "Edit current environment", "edit": "Редактировать текущее окружение",
"edit_global": "Edit global environment", "edit_global": "Редактировать глобальное окружение",
"new": "Create new environment", "new": "Создать новое окружение",
"new_variable": "Create a new environment variable", "new_variable": "Создать новую переменную окружения",
"title": "Environments" "title": "Окружение"
}, },
"general": { "general": {
"chat": "Chat with support", "chat": "Чат с поддержкой",
"help_menu": "Help and support", "help_menu": "Помощь",
"open_docs": "Read Documentation", "open_docs": "Почитать документацию",
"open_github": "Open GitHub repository", "open_github": "Открыть GitHub репозиторий",
"open_keybindings": "Keyboard shortcuts", "open_keybindings": "Горячие клавиши",
"social": "Social", "social": "Соц. сети",
"title": "General" "title": "Общее"
}, },
"graphql": { "graphql": {
"connect": "Connect to server", "connect": "Подключиться к серверу",
"disconnect": "Disconnect from server" "disconnect": "Отключиться от сервера"
}, },
"miscellaneous": { "miscellaneous": {
"invite": "Invite your friends to Hoppscotch", "invite": "Пригласить друзей в Hoppscotch",
"title": "Miscellaneous" "title": "Другое"
},
"phrases": {
"create_environment": "Создать окружение",
"create_workspace": "Создать пространство",
"import_collections": "Импортировать коллекцию",
"share_request": "Поделиться запросом",
"try": "Попробовать"
}, },
"request": { "request": {
"save_as_new": "Save as new request", "save_as_new": "Сохранить как новый запрос",
"select_method": "Select method", "select_method": "Выбрать метод",
"switch_to": "Switch to", "switch_to": "Переключиться",
"tab_authorization": "Authorization tab", "tab_authorization": "На вкладку авторизации",
"tab_body": "Body tab", "tab_body": "На вкладку тела запроса",
"tab_headers": "Headers tab", "tab_headers": "На вкладку заголовков",
"tab_parameters": "Parameters tab", "tab_parameters": "На вкладку параметров",
"tab_pre_request_script": "Pre-request script tab", "tab_pre_request_script": "На вкладку пред-скрипта запроса",
"tab_query": "Query tab", "tab_query": "На вкладку запроса",
"tab_tests": "Tests tab", "tab_tests": "На вкладку тестов",
"tab_variables": "Variables tab" "tab_variables": "На вкладку переменных запроса"
}, },
"response": { "response": {
"copy": "Copy response", "copy": "Копировать содержимое ответа",
"download": "Download response as file", "download": "Сказать содержимое ответа как файл",
"title": "Response" "title": "Ответ запроса"
}, },
"section": { "section": {
"interceptor": "Interceptor", "interceptor": "Перехватчик",
"interface": "Interface", "interface": "Интерфейс",
"theme": "Theme", "theme": "Внешний вид",
"user": "User" "user": "Пользователь"
}, },
"settings": { "settings": {
"change_interceptor": "Change Interceptor", "change_interceptor": "Изменить перехватчик",
"change_language": "Change Language", "change_language": "Изменить язык",
"theme": { "theme": {
"black": "Black", "black": "Черная",
"dark": "Dark", "dark": "Темная",
"light": "Light", "light": "Светлая",
"system": "System preference" "system": "Как задано в системе"
} }
}, },
"tab": { "tab": {
"close_current": "Close current tab", "close_current": "Закрыть текущую вкладку",
"close_others": "Close all other tabs", "close_others": "Закрыть все вкладки",
"duplicate": "Duplicate current tab", "duplicate": "Продублировать текущую вкладку",
"new_tab": "Open a new tab", "new_tab": "Открыть в новой вкладке",
"title": "Tabs" "title": "Вкладки"
}, },
"workspace": { "workspace": {
"delete": "Delete current team", "delete": "Удалить текущую команду",
"edit": "Edit current team", "edit": "Редактировать текущую команду",
"invite": "Invite people to team", "invite": "Пригласить людей в команду",
"new": "Create new team", "new": "Создать новую команду",
"switch_to_personal": "Switch to your personal workspace", "switch_to_personal": "Переключить на персональное пространство",
"title": "Teams" "title": "Команды"
} }
}, },
"sse": { "sse": {
@@ -824,7 +871,7 @@
}, },
"state": { "state": {
"bulk_mode": "Множественное редактирование", "bulk_mode": "Множественное редактирование",
"bulk_mode_placeholder": "Каждый параметр должен начинаться с новой строки\nКлючи и значения разедляются двоеточием\nИспользуйте # для комментария", "bulk_mode_placeholder": "Каждый параметр должен начинаться с новой строки\nКлючи и значения разделяются двоеточием\nИспользуйте # для комментария",
"cleared": "Очищено", "cleared": "Очищено",
"connected": "Связаны", "connected": "Связаны",
"connected_to": "Подключено к {name}", "connected_to": "Подключено к {name}",
@@ -843,20 +890,20 @@
"download_failed": "Download failed", "download_failed": "Download failed",
"download_started": "Скачивание началось", "download_started": "Скачивание началось",
"enabled": "Включено", "enabled": "Включено",
"file_imported": "Файл импортирован", "file_imported": "Файл успешно импортирован",
"finished_in": "Завершено через {duration} мс", "finished_in": "Завершено через {duration} мс",
"hide": "Hide", "hide": "Скрыть",
"history_deleted": "История удалена", "history_deleted": "История удалена",
"linewrap": "Обернуть линии", "linewrap": "Обернуть линии",
"loading": "Загрузка...", "loading": "Загрузка...",
"message_received": "Сообщение: {message} получено по топику: {topic}", "message_received": "Сообщение: {message} получено по топику: {topic}",
"mqtt_subscription_failed": "Что-то пошло не так, при попытке подписаться на топик: {topic}", "mqtt_subscription_failed": "Что-то пошло не так, при попытке подписаться на топик: {topic}",
"none": "Никто", "none": "Не задан",
"nothing_found": "Ничего не найдено для", "nothing_found": "Ничего не найдено для",
"published_error": "Что-то пошло не так при попытке опубликовать сообщение в топик {topic}: {message}", "published_error": "Что-то пошло не так при попытке опубликовать сообщение в топик {topic}: {message}",
"published_message": "Опубликовано сообщение: {message} в топик: {topic}", "published_message": "Опубликовано сообщение: {message} в топик: {topic}",
"reconnection_error": "Не удалось переподключиться", "reconnection_error": "Не удалось переподключиться",
"show": "Show", "show": "Показать",
"subscribed_failed": "Не удалось подписаться на топик: {topic}", "subscribed_failed": "Не удалось подписаться на топик: {topic}",
"subscribed_success": "Успешно подписался на топик: {topic}", "subscribed_success": "Успешно подписался на топик: {topic}",
"unsubscribed_failed": "Не удалось отписаться от топика: {topic}", "unsubscribed_failed": "Не удалось отписаться от топика: {topic}",
@@ -871,7 +918,6 @@
"forum": "Задавайте вопросы и получайте ответы", "forum": "Задавайте вопросы и получайте ответы",
"github": "Подпишитесь на нас на Github", "github": "Подпишитесь на нас на Github",
"shortcuts": "Просматривайте приложение быстрее", "shortcuts": "Просматривайте приложение быстрее",
"team": "Свяжитесь с командой",
"title": "Служба поддержки", "title": "Служба поддержки",
"twitter": "Следуйте за нами на Twitter" "twitter": "Следуйте за нами на Twitter"
}, },
@@ -882,7 +928,7 @@
"close_others": "Закрыть остальные вкладки", "close_others": "Закрыть остальные вкладки",
"collections": "Коллекции", "collections": "Коллекции",
"documentation": "Документация", "documentation": "Документация",
"duplicate": "Duplicate Tab", "duplicate": "Дублировать вкладку",
"environments": "Окружения", "environments": "Окружения",
"headers": "Заголовки", "headers": "Заголовки",
"history": "История", "history": "История",
@@ -892,7 +938,8 @@
"queries": "Запросы", "queries": "Запросы",
"query": "Запрос", "query": "Запрос",
"schema": "Схема", "schema": "Схема",
"shared_requests": "Shared Requests", "shared_requests": "Запросы в общем доступе",
"share_tab_request": "Поделиться запросом",
"socketio": "Socket.IO", "socketio": "Socket.IO",
"sse": "SSE", "sse": "SSE",
"tests": "Тесты", "tests": "Тесты",
@@ -921,7 +968,6 @@
"invite_tooltip": "Пригласить людей в Ваше рабочее пространство", "invite_tooltip": "Пригласить людей в Ваше рабочее пространство",
"invited_to_team": "{owner} приглашает Вас присоединиться к команде {team}", "invited_to_team": "{owner} приглашает Вас присоединиться к команде {team}",
"join": "Приглашение принято", "join": "Приглашение принято",
"join_beta": "Присоединяйтесь к бета-программе, чтобы получить доступ к командам.",
"join_team": "Присоединиться к {team}", "join_team": "Присоединиться к {team}",
"joined_team": "Вы присоединились к команде {team}", "joined_team": "Вы присоединились к команде {team}",
"joined_team_description": "Теперь Вы участник этой команды", "joined_team_description": "Теперь Вы участник этой команды",
@@ -950,6 +996,7 @@
"permissions": "Разрешения", "permissions": "Разрешения",
"same_target_destination": "Таже цель и конечная точка", "same_target_destination": "Таже цель и конечная точка",
"saved": "Команда сохранена", "saved": "Команда сохранена",
"search_title": "Team Requests",
"select_a_team": "Выбрать команду", "select_a_team": "Выбрать команду",
"success_invites": "Принятые приглашения", "success_invites": "Принятые приглашения",
"title": "Команды", "title": "Команды",
@@ -981,16 +1028,8 @@
"workspace": { "workspace": {
"change": "Изменить пространство", "change": "Изменить пространство",
"personal": "Моё пространство", "personal": "Моё пространство",
"other_workspaces": "Пространства",
"team": "Пространство команды", "team": "Пространство команды",
"title": "Рабочие пространства" "title": "Рабочие пространства"
},
"shortcodes": {
"actions": "Действия",
"created_on": "Создано",
"deleted": "Удалёна",
"method": "Метод",
"not_found": "Короткая ссылка не найдена",
"short_code": "Короткая ссылка",
"url": "URL"
} }
} }

View File

@@ -68,9 +68,9 @@
"developer_option": "Developer options", "developer_option": "Developer options",
"developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.", "developer_option_description": "Developer tools which helps in development and maintenance of Hoppscotch.",
"discord": "Discord", "discord": "Discord",
"documentation": "Dökümanlar", "documentation": "Dokümanlar",
"github": "GitHub", "github": "GitHub",
"help": "Yardım, geri bildirim ve dökümanlar", "help": "Yardım, geri bildirim ve dokümanlar",
"home": "Ana sayfa", "home": "Ana sayfa",
"invite": "Davet et", "invite": "Davet et",
"invite_description": "Hoppscotch'ta API'lerinizi oluşturmak ve yönetmek için basit ve sezgisel bir arayüz tasarladık. Hoppscotch, API'lerinizi oluşturmanıza, test etmenize, belgelemenize ve paylaşmanıza yardımcı olan bir araçtır.", "invite_description": "Hoppscotch'ta API'lerinizi oluşturmak ve yönetmek için basit ve sezgisel bir arayüz tasarladık. Hoppscotch, API'lerinizi oluşturmanıza, test etmenize, belgelemenize ve paylaşmanıza yardımcı olan bir araçtır.",
@@ -225,7 +225,7 @@
"body": "Bu isteğin bir gövdesi yok", "body": "Bu isteğin bir gövdesi yok",
"collection": "Koleksiyon boş", "collection": "Koleksiyon boş",
"collections": "Koleksiyonlar boş", "collections": "Koleksiyonlar boş",
"documentation": "Dökümanları görmek için GraphQL uç noktasını bağlayın", "documentation": "Dokümanları görmek için GraphQL uç noktasını bağlayın",
"endpoint": "Uç nokta boş olamaz", "endpoint": "Uç nokta boş olamaz",
"environments": "Ortamlar boş", "environments": "Ortamlar boş",
"folder": "Klasör boş", "folder": "Klasör boş",
@@ -735,7 +735,7 @@
"url": "Bağlantı" "url": "Bağlantı"
}, },
"spotlight": { "spotlight": {
"change_language": "Change Language", "change_language": "Dil Değiştir",
"environments": { "environments": {
"delete": "Delete current environment", "delete": "Delete current environment",
"duplicate": "Duplicate current environment", "duplicate": "Duplicate current environment",
@@ -744,7 +744,7 @@
"edit_global": "Edit global environment", "edit_global": "Edit global environment",
"new": "Create new environment", "new": "Create new environment",
"new_variable": "Create a new environment variable", "new_variable": "Create a new environment variable",
"title": "Environments" "title": "Ortamlar"
}, },
"general": { "general": {
"chat": "Chat with support", "chat": "Chat with support",

View File

@@ -1,7 +1,7 @@
{ {
"name": "@hoppscotch/common", "name": "@hoppscotch/common",
"private": true, "private": true,
"version": "2024.3.1", "version": "2024.3.3",
"scripts": { "scripts": {
"dev": "pnpm exec npm-run-all -p -l dev:*", "dev": "pnpm exec npm-run-all -p -l dev:*",
"test": "vitest --run", "test": "vitest --run",
@@ -50,7 +50,7 @@
"axios": "1.6.2", "axios": "1.6.2",
"buffer": "6.0.3", "buffer": "6.0.3",
"cookie-es": "1.0.0", "cookie-es": "1.0.0",
"dioc": "1.0.1", "dioc": "3.0.1",
"esprima": "4.0.1", "esprima": "4.0.1",
"events": "3.3.0", "events": "3.3.0",
"fp-ts": "2.16.1", "fp-ts": "2.16.1",

View File

@@ -32,6 +32,7 @@ declare module 'vue' {
AppSpotlightEntryRESTHistory: typeof import('./components/app/spotlight/entry/RESTHistory.vue')['default'] AppSpotlightEntryRESTHistory: typeof import('./components/app/spotlight/entry/RESTHistory.vue')['default']
AppSpotlightEntryRESTRequest: typeof import('./components/app/spotlight/entry/RESTRequest.vue')['default'] AppSpotlightEntryRESTRequest: typeof import('./components/app/spotlight/entry/RESTRequest.vue')['default']
AppSpotlightEntryRESTTeamRequestEntry: typeof import('./components/app/spotlight/entry/RESTTeamRequestEntry.vue')['default'] AppSpotlightEntryRESTTeamRequestEntry: typeof import('./components/app/spotlight/entry/RESTTeamRequestEntry.vue')['default']
AppSpotlightSearch: typeof import('./components/app/SpotlightSearch.vue')['default']
AppSupport: typeof import('./components/app/Support.vue')['default'] AppSupport: typeof import('./components/app/Support.vue')['default']
Collections: typeof import('./components/collections/index.vue')['default'] Collections: typeof import('./components/collections/index.vue')['default']
CollectionsAdd: typeof import('./components/collections/Add.vue')['default'] CollectionsAdd: typeof import('./components/collections/Add.vue')['default']

View File

@@ -32,7 +32,6 @@ import { useI18n } from "~/composables/i18n"
import { useToast } from "~/composables/toast" import { useToast } from "~/composables/toast"
import { appendRESTCollections, restCollections$ } from "~/newstore/collections" import { appendRESTCollections, restCollections$ } from "~/newstore/collections"
import MyCollectionImport from "~/components/importExport/ImportExportSteps/MyCollectionImport.vue" import MyCollectionImport from "~/components/importExport/ImportExportSteps/MyCollectionImport.vue"
import { GetMyTeamsQuery } from "~/helpers/backend/graphql"
import IconFolderPlus from "~icons/lucide/folder-plus" import IconFolderPlus from "~icons/lucide/folder-plus"
import IconOpenAPI from "~icons/lucide/file" import IconOpenAPI from "~icons/lucide/file"
@@ -55,16 +54,15 @@ import { teamCollectionsExporter } from "~/helpers/import-export/export/teamColl
import { GistSource } from "~/helpers/import-export/import/import-sources/GistSource" import { GistSource } from "~/helpers/import-export/import/import-sources/GistSource"
import { ImporterOrExporter } from "~/components/importExport/types" import { ImporterOrExporter } from "~/components/importExport/types"
import { TeamWorkspace } from "~/services/workspace.service"
const t = useI18n() const t = useI18n()
const toast = useToast() const toast = useToast()
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
type CollectionType = type CollectionType =
| { | {
type: "team-collections" type: "team-collections"
selectedTeam: SelectedTeam selectedTeam: TeamWorkspace
} }
| { type: "my-collections" } | { type: "my-collections" }
@@ -433,7 +431,7 @@ const HoppTeamCollectionsExporter: ImporterOrExporter = {
props.collectionsType.selectedTeam props.collectionsType.selectedTeam
) { ) {
const res = await teamCollectionsExporter( const res = await teamCollectionsExporter(
props.collectionsType.selectedTeam.id props.collectionsType.selectedTeam.teamID
) )
if (E.isRight(res)) { if (E.isRight(res)) {
@@ -569,8 +567,8 @@ const hasTeamWriteAccess = computed(() => {
} }
return ( return (
collectionsType.selectedTeam.myRole === "EDITOR" || collectionsType.selectedTeam.role === "EDITOR" ||
collectionsType.selectedTeam.myRole === "OWNER" collectionsType.selectedTeam.role === "OWNER"
) )
}) })
@@ -578,17 +576,17 @@ const selectedTeamID = computed(() => {
const { collectionsType } = props const { collectionsType } = props
return collectionsType.type === "team-collections" return collectionsType.type === "team-collections"
? collectionsType.selectedTeam?.id ? collectionsType.selectedTeam?.teamID
: undefined : undefined
}) })
const getCollectionJSON = async () => { const getCollectionJSON = async () => {
if ( if (
props.collectionsType.type === "team-collections" && props.collectionsType.type === "team-collections" &&
props.collectionsType.selectedTeam?.id props.collectionsType.selectedTeam?.teamID
) { ) {
const res = await getTeamCollectionJSON( const res = await getTeamCollectionJSON(
props.collectionsType.selectedTeam?.id props.collectionsType.selectedTeam?.teamID
) )
return E.isRight(res) return E.isRight(res)

View File

@@ -56,23 +56,25 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, nextTick, reactive, ref, watch } from "vue" import { useI18n } from "@composables/i18n"
import { cloneDeep } from "lodash-es" import { useToast } from "@composables/toast"
import { import {
HoppGQLRequest, HoppGQLRequest,
HoppRESTRequest, HoppRESTRequest,
isHoppRESTRequest, isHoppRESTRequest,
} from "@hoppscotch/data" } from "@hoppscotch/data"
import { pipe } from "fp-ts/function" import { computedWithControl } from "@vueuse/core"
import { useService } from "dioc/vue"
import * as TE from "fp-ts/TaskEither" import * as TE from "fp-ts/TaskEither"
import { GetMyTeamsQuery } from "~/helpers/backend/graphql" import { pipe } from "fp-ts/function"
import { cloneDeep } from "lodash-es"
import { computed, nextTick, reactive, ref, watch } from "vue"
import { GQLError } from "~/helpers/backend/GQLClient"
import { import {
createRequestInCollection, createRequestInCollection,
updateTeamRequest, updateTeamRequest,
} from "~/helpers/backend/mutations/TeamRequest" } from "~/helpers/backend/mutations/TeamRequest"
import { Picked } from "~/helpers/types/HoppPicked" import { Picked } from "~/helpers/types/HoppPicked"
import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast"
import { import {
cascadeParentCollectionForHeaderAuth, cascadeParentCollectionForHeaderAuth,
editGraphqlRequest, editGraphqlRequest,
@@ -80,12 +82,10 @@ import {
saveGraphqlRequestAs, saveGraphqlRequestAs,
saveRESTRequestAs, saveRESTRequestAs,
} from "~/newstore/collections" } from "~/newstore/collections"
import { GQLError } from "~/helpers/backend/GQLClient"
import { computedWithControl } from "@vueuse/core"
import { platform } from "~/platform" import { platform } from "~/platform"
import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest"
import { GQLTabService } from "~/services/tab/graphql" import { GQLTabService } from "~/services/tab/graphql"
import { RESTTabService } from "~/services/tab/rest"
import { TeamWorkspace } from "~/services/workspace.service"
const t = useI18n() const t = useI18n()
const toast = useToast() const toast = useToast()
@@ -93,12 +93,10 @@ const toast = useToast()
const RESTTabs = useService(RESTTabService) const RESTTabs = useService(RESTTabService)
const GQLTabs = useService(GQLTabService) const GQLTabs = useService(GQLTabService)
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
type CollectionType = type CollectionType =
| { | {
type: "team-collections" type: "team-collections"
selectedTeam: SelectedTeam selectedTeam: TeamWorkspace
} }
| { type: "my-collections"; selectedTeam: undefined } | { type: "my-collections"; selectedTeam: undefined }
@@ -192,7 +190,7 @@ watch(
} }
) )
const updateTeam = (newTeam: SelectedTeam) => { const updateTeam = (newTeam: TeamWorkspace) => {
collectionsType.value.selectedTeam = newTeam collectionsType.value.selectedTeam = newTeam
} }
@@ -493,7 +491,7 @@ const updateTeamCollectionOrFolder = (
const data = { const data = {
title: requestUpdated.name, title: requestUpdated.name,
request: JSON.stringify(requestUpdated), request: JSON.stringify(requestUpdated),
teamID: collectionsType.value.selectedTeam.id, teamID: collectionsType.value.selectedTeam.teamID,
} }
pipe( pipe(
createRequestInCollection(collectionID, data), createRequestInCollection(collectionID, data),

View File

@@ -387,7 +387,6 @@ import IconPlus from "~icons/lucide/plus"
import IconHelpCircle from "~icons/lucide/help-circle" import IconHelpCircle from "~icons/lucide/help-circle"
import IconImport from "~icons/lucide/folder-down" import IconImport from "~icons/lucide/folder-down"
import { computed, PropType, Ref, toRef } from "vue" import { computed, PropType, Ref, toRef } from "vue"
import { GetMyTeamsQuery } from "~/helpers/backend/graphql"
import { useI18n } from "@composables/i18n" import { useI18n } from "@composables/i18n"
import { useColorMode } from "@composables/theming" import { useColorMode } from "@composables/theming"
import { TeamCollection } from "~/helpers/teams/TeamCollection" import { TeamCollection } from "~/helpers/teams/TeamCollection"
@@ -400,17 +399,16 @@ import * as O from "fp-ts/Option"
import { Picked } from "~/helpers/types/HoppPicked.js" import { Picked } from "~/helpers/types/HoppPicked.js"
import { RESTTabService } from "~/services/tab/rest" import { RESTTabService } from "~/services/tab/rest"
import { useService } from "dioc/vue" import { useService } from "dioc/vue"
import { TeamWorkspace } from "~/services/workspace.service"
const t = useI18n() const t = useI18n()
const colorMode = useColorMode() const colorMode = useColorMode()
const tabs = useService(RESTTabService) const tabs = useService(RESTTabService)
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
type CollectionType = type CollectionType =
| { | {
type: "team-collections" type: "team-collections"
selectedTeam: SelectedTeam selectedTeam: TeamWorkspace
} }
| { type: "my-collections"; selectedTeam: undefined } | { type: "my-collections"; selectedTeam: undefined }
@@ -614,7 +612,7 @@ const hasNoTeamAccess = computed(
() => () =>
props.collectionsType.type === "team-collections" && props.collectionsType.type === "team-collections" &&
(props.collectionsType.selectedTeam === undefined || (props.collectionsType.selectedTeam === undefined ||
props.collectionsType.selectedTeam.myRole === "VIEWER") props.collectionsType.selectedTeam.role === "VIEWER")
) )
const isSelected = ({ const isSelected = ({

View File

@@ -200,7 +200,7 @@ const toast = useToast()
defineProps<{ defineProps<{
// Whether to activate the ability to pick items (activates 'select' events) // Whether to activate the ability to pick items (activates 'select' events)
saveRequest: boolean saveRequest: boolean
picked: Picked picked: Picked | null
}>() }>()
const collections = useReadonlyStream(graphqlCollections$, [], "deep") const collections = useReadonlyStream(graphqlCollections$, [], "deep")

View File

@@ -178,7 +178,6 @@ import { useI18n } from "@composables/i18n"
import { Picked } from "~/helpers/types/HoppPicked" import { Picked } from "~/helpers/types/HoppPicked"
import { useReadonlyStream } from "~/composables/stream" import { useReadonlyStream } from "~/composables/stream"
import { useLocalState } from "~/newstore/localstate" import { useLocalState } from "~/newstore/localstate"
import { GetMyTeamsQuery } from "~/helpers/backend/graphql"
import { pipe } from "fp-ts/function" import { pipe } from "fp-ts/function"
import * as TE from "fp-ts/TaskEither" import * as TE from "fp-ts/TaskEither"
import { import {
@@ -245,7 +244,7 @@ import {
} from "~/helpers/collection/collection" } from "~/helpers/collection/collection"
import { currentReorderingStatus$ } from "~/newstore/reordering" import { currentReorderingStatus$ } from "~/newstore/reordering"
import { defineActionHandler, invokeAction } from "~/helpers/actions" import { defineActionHandler, invokeAction } from "~/helpers/actions"
import { WorkspaceService } from "~/services/workspace.service" import { TeamWorkspace, WorkspaceService } from "~/services/workspace.service"
import { useService } from "dioc/vue" import { useService } from "dioc/vue"
import { RESTTabService } from "~/services/tab/rest" import { RESTTabService } from "~/services/tab/rest"
import { HoppInheritedProperty } from "~/helpers/types/HoppInheritedProperties" import { HoppInheritedProperty } from "~/helpers/types/HoppInheritedProperties"
@@ -274,16 +273,14 @@ const props = defineProps({
const emit = defineEmits<{ const emit = defineEmits<{
(event: "select", payload: Picked | null): void (event: "select", payload: Picked | null): void
(event: "update-team", team: SelectedTeam): void (event: "update-team", team: TeamWorkspace): void
(event: "update-collection-type", type: CollectionType["type"]): void (event: "update-collection-type", type: CollectionType["type"]): void
}>() }>()
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
type CollectionType = type CollectionType =
| { | {
type: "team-collections" type: "team-collections"
selectedTeam: SelectedTeam selectedTeam: TeamWorkspace
} }
| { type: "my-collections"; selectedTeam: undefined } | { type: "my-collections"; selectedTeam: undefined }
@@ -330,9 +327,7 @@ const requestMoveLoading = ref<string[]>([])
// TeamList-Adapter // TeamList-Adapter
const workspaceService = useService(WorkspaceService) const workspaceService = useService(WorkspaceService)
const teamListAdapter = workspaceService.acquireTeamListAdapter(null) const teamListAdapter = workspaceService.acquireTeamListAdapter(null)
const myTeams = useReadonlyStream(teamListAdapter.teamList$, null)
const REMEMBERED_TEAM_ID = useLocalState("REMEMBERED_TEAM_ID") const REMEMBERED_TEAM_ID = useLocalState("REMEMBERED_TEAM_ID")
const teamListFetched = ref(false)
// Team Collection Adapter // Team Collection Adapter
const teamCollectionAdapter = new TeamCollectionAdapter(null) const teamCollectionAdapter = new TeamCollectionAdapter(null)
@@ -378,7 +373,7 @@ watch(
filterTexts, filterTexts,
(newFilterText) => { (newFilterText) => {
if (collectionsType.value.type === "team-collections") { if (collectionsType.value.type === "team-collections") {
const selectedTeamID = collectionsType.value.selectedTeam?.id const selectedTeamID = collectionsType.value.selectedTeam?.teamID
selectedTeamID && selectedTeamID &&
debouncedSearch(newFilterText, selectedTeamID)?.catch(() => {}) debouncedSearch(newFilterText, selectedTeamID)?.catch(() => {})
@@ -435,28 +430,6 @@ onMounted(() => {
} }
}) })
watch(
() => myTeams.value,
(newTeams) => {
if (newTeams && !teamListFetched.value) {
teamListFetched.value = true
if (REMEMBERED_TEAM_ID.value && currentUser.value) {
const team = newTeams.find((t) => t.id === REMEMBERED_TEAM_ID.value)
if (team) updateSelectedTeam(team)
}
}
}
)
watch(
() => collectionsType.value.selectedTeam,
(newTeam) => {
if (newTeam) {
teamCollectionAdapter.changeTeamID(newTeam.id)
}
}
)
const switchToMyCollections = () => { const switchToMyCollections = () => {
collectionsType.value.type = "my-collections" collectionsType.value.type = "my-collections"
collectionsType.value.selectedTeam = undefined collectionsType.value.selectedTeam = undefined
@@ -488,11 +461,12 @@ const expandTeamCollection = (collectionID: string) => {
teamCollectionAdapter.expandCollection(collectionID) teamCollectionAdapter.expandCollection(collectionID)
} }
const updateSelectedTeam = (team: SelectedTeam) => { const updateSelectedTeam = (team: TeamWorkspace) => {
if (team) { if (team) {
collectionsType.value.type = "team-collections" collectionsType.value.type = "team-collections"
teamCollectionAdapter.changeTeamID(team.teamID)
collectionsType.value.selectedTeam = team collectionsType.value.selectedTeam = team
REMEMBERED_TEAM_ID.value = team.id REMEMBERED_TEAM_ID.value = team.teamID
emit("update-team", team) emit("update-team", team)
emit("update-collection-type", "team-collections") emit("update-collection-type", "team-collections")
} }
@@ -501,23 +475,14 @@ const updateSelectedTeam = (team: SelectedTeam) => {
const workspace = workspaceService.currentWorkspace const workspace = workspaceService.currentWorkspace
// Used to switch collection type and team when user switch workspace in the global workspace switcher // Used to switch collection type and team when user switch workspace in the global workspace switcher
// Check if there is a teamID in the workspace, if yes, switch to team collections and select the team
// If there is no teamID, switch to my collections
watch( watch(
() => { workspace,
const space = workspace.value (newWorkspace) => {
return space.type === "personal" ? undefined : space.teamID if (newWorkspace.type === "personal") {
}, switchToMyCollections()
(teamID) => { } else if (newWorkspace.type === "team") {
if (teamID) { updateSelectedTeam(newWorkspace)
const team = myTeams.value?.find((t) => t.id === teamID)
if (team) {
updateSelectedTeam(team)
} }
return
}
return switchToMyCollections()
}, },
{ {
immediate: true, immediate: true,
@@ -545,7 +510,7 @@ const hasTeamWriteAccess = computed(() => {
return false return false
} }
const role = collectionsType.value.selectedTeam?.myRole const role = collectionsType.value.selectedTeam?.role
return role === "OWNER" || role === "EDITOR" return role === "OWNER" || role === "EDITOR"
}) })
@@ -760,7 +725,7 @@ const addNewRootCollection = (name: string) => {
}) })
pipe( pipe(
createNewRootCollection(name, collectionsType.value.selectedTeam.id), createNewRootCollection(name, collectionsType.value.selectedTeam.teamID),
TE.match( TE.match(
(err: GQLError<string>) => { (err: GQLError<string>) => {
toast.error(`${getErrorMessage(err)}`) toast.error(`${getErrorMessage(err)}`)
@@ -831,7 +796,7 @@ const onAddRequest = (requestName: string) => {
const data = { const data = {
request: JSON.stringify(newRequest), request: JSON.stringify(newRequest),
teamID: collectionsType.value.selectedTeam.id, teamID: collectionsType.value.selectedTeam.teamID,
title: requestName, title: requestName,
} }
@@ -1158,7 +1123,7 @@ const duplicateRequest = (payload: {
const data = { const data = {
request: JSON.stringify(newRequest), request: JSON.stringify(newRequest),
teamID: collectionsType.value.selectedTeam.id, teamID: collectionsType.value.selectedTeam.teamID,
title: `${request.name} - ${t("action.duplicate")}`, title: `${request.name} - ${t("action.duplicate")}`,
} }

View File

@@ -364,6 +364,7 @@ const switchToTeamWorkspace = (team: GetMyTeamsQuery["myTeams"][number]) => {
teamID: team.id, teamID: team.id,
teamName: team.name, teamName: team.name,
type: "team", type: "team",
role: team.myRole,
}) })
} }
watch( watch(

View File

@@ -46,41 +46,38 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, ref, watch } from "vue"
import { isEqual } from "lodash-es"
import { platform } from "~/platform"
import { GetMyTeamsQuery } from "~/helpers/backend/graphql"
import { useReadonlyStream, useStream } from "@composables/stream" import { useReadonlyStream, useStream } from "@composables/stream"
import { Environment } from "@hoppscotch/data"
import { useService } from "dioc/vue"
import * as TE from "fp-ts/TaskEither"
import { pipe } from "fp-ts/function"
import { isEqual } from "lodash-es"
import { computed, ref, watch } from "vue"
import { useI18n } from "~/composables/i18n" import { useI18n } from "~/composables/i18n"
import { useToast } from "~/composables/toast"
import { defineActionHandler } from "~/helpers/actions"
import { GQLError } from "~/helpers/backend/GQLClient"
import { deleteTeamEnvironment } from "~/helpers/backend/mutations/TeamEnvironment"
import TeamEnvironmentAdapter from "~/helpers/teams/TeamEnvironmentAdapter"
import { import {
deleteEnvironment,
getSelectedEnvironmentIndex, getSelectedEnvironmentIndex,
globalEnv$, globalEnv$,
selectedEnvironmentIndex$, selectedEnvironmentIndex$,
setSelectedEnvironmentIndex, setSelectedEnvironmentIndex,
} from "~/newstore/environments" } from "~/newstore/environments"
import TeamEnvironmentAdapter from "~/helpers/teams/TeamEnvironmentAdapter"
import { defineActionHandler } from "~/helpers/actions"
import { useLocalState } from "~/newstore/localstate" import { useLocalState } from "~/newstore/localstate"
import { pipe } from "fp-ts/function" import { platform } from "~/platform"
import * as TE from "fp-ts/TaskEither" import { TeamWorkspace, WorkspaceService } from "~/services/workspace.service"
import { GQLError } from "~/helpers/backend/GQLClient"
import { deleteEnvironment } from "~/newstore/environments"
import { deleteTeamEnvironment } from "~/helpers/backend/mutations/TeamEnvironment"
import { useToast } from "~/composables/toast"
import { WorkspaceService } from "~/services/workspace.service"
import { useService } from "dioc/vue"
import { Environment } from "@hoppscotch/data"
const t = useI18n() const t = useI18n()
const toast = useToast() const toast = useToast()
type EnvironmentType = "my-environments" | "team-environments" type EnvironmentType = "my-environments" | "team-environments"
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
type EnvironmentsChooseType = { type EnvironmentsChooseType = {
type: EnvironmentType type: EnvironmentType
selectedTeam: SelectedTeam selectedTeam: TeamWorkspace | undefined
} }
const environmentType = ref<EnvironmentsChooseType>({ const environmentType = ref<EnvironmentsChooseType>({
@@ -102,11 +99,7 @@ const currentUser = useReadonlyStream(
platform.auth.getCurrentUser() platform.auth.getCurrentUser()
) )
// TeamList-Adapter
const workspaceService = useService(WorkspaceService) const workspaceService = useService(WorkspaceService)
const teamListAdapter = workspaceService.acquireTeamListAdapter(null)
const myTeams = useReadonlyStream(teamListAdapter.teamList$, null)
const teamListFetched = ref(false)
const REMEMBERED_TEAM_ID = useLocalState("REMEMBERED_TEAM_ID") const REMEMBERED_TEAM_ID = useLocalState("REMEMBERED_TEAM_ID")
const adapter = new TeamEnvironmentAdapter(undefined) const adapter = new TeamEnvironmentAdapter(undefined)
@@ -118,29 +111,17 @@ const loading = computed(
() => adapterLoading.value && teamEnvironmentList.value.length === 0 () => adapterLoading.value && teamEnvironmentList.value.length === 0
) )
watch(
() => myTeams.value,
(newTeams) => {
if (newTeams && !teamListFetched.value) {
teamListFetched.value = true
if (REMEMBERED_TEAM_ID.value && currentUser.value) {
const team = newTeams.find((t) => t.id === REMEMBERED_TEAM_ID.value)
if (team) updateSelectedTeam(team)
}
}
}
)
const switchToMyEnvironments = () => { const switchToMyEnvironments = () => {
environmentType.value.selectedTeam = undefined environmentType.value.selectedTeam = undefined
updateEnvironmentType("my-environments") updateEnvironmentType("my-environments")
adapter.changeTeamID(undefined) adapter.changeTeamID(undefined)
} }
const updateSelectedTeam = (newSelectedTeam: SelectedTeam | undefined) => { const updateSelectedTeam = (newSelectedTeam: TeamWorkspace | undefined) => {
if (newSelectedTeam) { if (newSelectedTeam) {
adapter.changeTeamID(newSelectedTeam.teamID)
environmentType.value.selectedTeam = newSelectedTeam environmentType.value.selectedTeam = newSelectedTeam
REMEMBERED_TEAM_ID.value = newSelectedTeam.id REMEMBERED_TEAM_ID.value = newSelectedTeam.teamID
updateEnvironmentType("team-environments") updateEnvironmentType("team-environments")
} }
} }
@@ -148,15 +129,6 @@ const updateEnvironmentType = (newEnvironmentType: EnvironmentType) => {
environmentType.value.type = newEnvironmentType environmentType.value.type = newEnvironmentType
} }
watch(
() => environmentType.value.selectedTeam,
(newTeam) => {
if (newTeam) {
adapter.changeTeamID(newTeam.id)
}
}
)
const workspace = workspaceService.currentWorkspace const workspace = workspaceService.currentWorkspace
// Switch to my environments if workspace is personal and to team environments if workspace is team // Switch to my environments if workspace is personal and to team environments if workspace is team
@@ -170,8 +142,7 @@ watch(workspace, (newWorkspace) => {
}) })
} }
} else if (newWorkspace.type === "team") { } else if (newWorkspace.type === "team") {
const team = myTeams.value?.find((t) => t.id === newWorkspace.teamID) updateSelectedTeam(newWorkspace)
updateSelectedTeam(team)
} }
}) })

View File

@@ -54,9 +54,7 @@
:key="tab.id" :key="tab.id"
:label="tab.label" :label="tab.label"
> >
<div <div class="divide-y divide-dividerLight">
class="divide-y divide-dividerLight rounded border border-divider"
>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-if="tab.variables.length === 0" v-if="tab.variables.length === 0"
:src="`/images/states/${colorMode.value}/blockchain.svg`" :src="`/images/states/${colorMode.value}/blockchain.svg`"

View File

@@ -56,9 +56,7 @@
:key="tab.id" :key="tab.id"
:label="tab.label" :label="tab.label"
> >
<div <div class="divide-y divide-dividerLight">
class="divide-y divide-dividerLight rounded border border-divider"
>
<HoppSmartPlaceholder <HoppSmartPlaceholder
v-if="tab.variables.length === 0" v-if="tab.variables.length === 0"
:src="`/images/states/${colorMode.value}/blockchain.svg`" :src="`/images/states/${colorMode.value}/blockchain.svg`"

View File

@@ -4,7 +4,7 @@
class="sticky top-upperPrimaryStickyFold z-10 flex flex-1 flex-shrink-0 justify-between overflow-x-auto border-b border-dividerLight bg-primary" class="sticky top-upperPrimaryStickyFold z-10 flex flex-1 flex-shrink-0 justify-between overflow-x-auto border-b border-dividerLight bg-primary"
> >
<HoppButtonSecondary <HoppButtonSecondary
v-if="team === undefined || team.myRole === 'VIEWER'" v-if="team === undefined || team.role === 'VIEWER'"
v-tippy="{ theme: 'tooltip' }" v-tippy="{ theme: 'tooltip' }"
disabled disabled
class="!rounded-none" class="!rounded-none"
@@ -28,7 +28,7 @@
:icon="IconHelpCircle" :icon="IconHelpCircle"
/> />
<HoppButtonSecondary <HoppButtonSecondary
v-if="team !== undefined && team.myRole === 'VIEWER'" v-if="team !== undefined && team.role === 'VIEWER'"
v-tippy="{ theme: 'tooltip' }" v-tippy="{ theme: 'tooltip' }"
disabled disabled
:icon="IconImport" :icon="IconImport"
@@ -84,7 +84,7 @@
)" )"
:key="`environment-${index}`" :key="`environment-${index}`"
:environment="environment" :environment="environment"
:is-viewer="team?.myRole === 'VIEWER'" :is-viewer="team?.role === 'VIEWER'"
@edit-environment="editEnvironment(environment)" @edit-environment="editEnvironment(environment)"
/> />
</div> </div>
@@ -103,16 +103,16 @@
:show="showModalDetails" :show="showModalDetails"
:action="action" :action="action"
:editing-environment="editingEnvironment" :editing-environment="editingEnvironment"
:editing-team-id="team?.id" :editing-team-id="team?.teamID"
:editing-variable-name="editingVariableName" :editing-variable-name="editingVariableName"
:is-secret-option-selected="secretOptionSelected" :is-secret-option-selected="secretOptionSelected"
:is-viewer="team?.myRole === 'VIEWER'" :is-viewer="team?.role === 'VIEWER'"
@hide-modal="displayModalEdit(false)" @hide-modal="displayModalEdit(false)"
/> />
<EnvironmentsImportExport <EnvironmentsImportExport
v-if="showModalImportExport" v-if="showModalImportExport"
:team-environments="teamEnvironments" :team-environments="teamEnvironments"
:team-id="team?.id" :team-id="team?.teamID"
environment-type="TEAM_ENV" environment-type="TEAM_ENV"
@hide-modal="displayModalImportExport(false)" @hide-modal="displayModalImportExport(false)"
/> />
@@ -129,16 +129,14 @@ import IconPlus from "~icons/lucide/plus"
import IconHelpCircle from "~icons/lucide/help-circle" import IconHelpCircle from "~icons/lucide/help-circle"
import IconImport from "~icons/lucide/folder-down" import IconImport from "~icons/lucide/folder-down"
import { defineActionHandler } from "~/helpers/actions" import { defineActionHandler } from "~/helpers/actions"
import { GetMyTeamsQuery } from "~/helpers/backend/graphql" import { TeamWorkspace } from "~/services/workspace.service"
const t = useI18n() const t = useI18n()
const colorMode = useColorMode() const colorMode = useColorMode()
type SelectedTeam = GetMyTeamsQuery["myTeams"][number] | undefined
const props = defineProps<{ const props = defineProps<{
team: SelectedTeam team: TeamWorkspace | undefined
teamEnvironments: TeamEnvironment[] teamEnvironments: TeamEnvironment[]
adapterError: GQLError<string> | null adapterError: GQLError<string> | null
loading: boolean loading: boolean
@@ -151,7 +149,7 @@ const editingEnvironment = ref<TeamEnvironment | null>(null)
const editingVariableName = ref("") const editingVariableName = ref("")
const secretOptionSelected = ref(false) const secretOptionSelected = ref(false)
const isTeamViewer = computed(() => props.team?.myRole === "VIEWER") const isTeamViewer = computed(() => props.team?.role === "VIEWER")
const displayModalAdd = (shouldDisplay: boolean) => { const displayModalAdd = (shouldDisplay: boolean) => {
action.value = "new" action.value = "new"

View File

@@ -10,7 +10,7 @@
autocomplete="off" autocomplete="off"
spellcheck="false" spellcheck="false"
class="w-full rounded border border-divider bg-primaryLight px-4 py-2 text-secondaryDark" class="w-full rounded border border-divider bg-primaryLight px-4 py-2 text-secondaryDark"
:placeholder="`${t('request.url')}`" :placeholder="`${t('graphql.url_placeholder')}`"
:disabled="connected" :disabled="connected"
@keyup.enter="onConnectClick" @keyup.enter="onConnectClick"
/> />

View File

@@ -54,7 +54,7 @@
> >
<SmartEnvInput <SmartEnvInput
v-model="tab.document.request.endpoint" v-model="tab.document.request.endpoint"
:placeholder="`${t('request.url')}`" :placeholder="`${t('request.url_placeholder')}`"
:auto-complete-source="userHistories" :auto-complete-source="userHistories"
:auto-complete-env="true" :auto-complete-env="true"
:inspection-results="tabResults" :inspection-results="tabResults"

View File

@@ -37,13 +37,17 @@ import { TeamNameCodec } from "~/helpers/backend/types/TeamName"
import { useI18n } from "@composables/i18n" import { useI18n } from "@composables/i18n"
import { useToast } from "@composables/toast" import { useToast } from "@composables/toast"
import { platform } from "~/platform" import { platform } from "~/platform"
import { useService } from "dioc/vue"
import { WorkspaceService } from "~/services/workspace.service"
import { useLocalState } from "~/newstore/localstate"
const t = useI18n() const t = useI18n()
const toast = useToast() const toast = useToast()
defineProps<{ const props = defineProps<{
show: boolean show: boolean
switchWorkspaceAfterCreation?: boolean
}>() }>()
const emit = defineEmits<{ const emit = defineEmits<{
@@ -52,8 +56,12 @@ const emit = defineEmits<{
const editingName = ref<string | null>(null) const editingName = ref<string | null>(null)
const REMEMBERED_TEAM_ID = useLocalState("REMEMBERED_TEAM_ID")
const isLoading = ref(false) const isLoading = ref(false)
const workspaceService = useService(WorkspaceService)
const addNewTeam = async () => { const addNewTeam = async () => {
isLoading.value = true isLoading.value = true
await pipe( await pipe(
@@ -76,8 +84,19 @@ const addNewTeam = async () => {
// Handle GQL errors (use err obj) // Handle GQL errors (use err obj)
} }
}, },
() => { (team) => {
toast.success(`${t("team.new_created")}`) toast.success(`${t("team.new_created")}`)
if (props.switchWorkspaceAfterCreation) {
REMEMBERED_TEAM_ID.value = team.id
workspaceService.changeWorkspace({
teamID: team.id,
teamName: team.name,
type: "team",
role: team.myRole,
})
}
hideModal() hideModal()
} }
) )

View File

@@ -66,7 +66,11 @@
{{ t("error.something_went_wrong") }} {{ t("error.something_went_wrong") }}
</div> </div>
</div> </div>
<TeamsAdd :show="showModalAdd" @hide-modal="displayModalAdd(false)" /> <TeamsAdd
:show="showModalAdd"
:switch-workspace-after-creation="true"
@hide-modal="displayModalAdd(false)"
/>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@@ -153,6 +157,7 @@ const switchToTeamWorkspace = (team: GetMyTeamsQuery["myTeams"][number]) => {
workspaceService.changeWorkspace({ workspaceService.changeWorkspace({
teamID: team.id, teamID: team.id,
teamName: team.name, teamName: team.name,
role: team.myRole,
type: "team", type: "team",
}) })
} }
@@ -175,7 +180,6 @@ watch(
const displayModalAdd = (shouldDisplay: boolean) => { const displayModalAdd = (shouldDisplay: boolean) => {
showModalAdd.value = shouldDisplay showModalAdd.value = shouldDisplay
teamListadapter.fetchList()
} }
defineActionHandler("modals.team.new", () => { defineActionHandler("modals.team.new", () => {

View File

@@ -201,7 +201,7 @@ export class TeamSearchService extends Service {
expandingCollections: Ref<string[]> = ref([]) expandingCollections: Ref<string[]> = ref([])
expandedCollections: Ref<string[]> = ref([]) expandedCollections: Ref<string[]> = ref([])
// FUTURE-TODO: ideally this should return the search results / formatted results instead of directly manipulating the result set // TODO: ideally this should return the search results / formatted results instead of directly manipulating the result set
// eg: do the spotlight formatting in the spotlight searcher and not here // eg: do the spotlight formatting in the spotlight searcher and not here
searchTeams = async (query: string, teamID: string) => { searchTeams = async (query: string, teamID: string) => {
if (!query.length) { if (!query.length) {

View File

@@ -1,5 +1,5 @@
import { HoppModule } from "." import { HoppModule } from "."
import { Container, Service } from "dioc" import { Container, ServiceClassInstance } from "dioc"
import { diocPlugin } from "dioc/vue" import { diocPlugin } from "dioc/vue"
import { DebugService } from "~/services/debug.service" import { DebugService } from "~/services/debug.service"
import { platform } from "~/platform" import { platform } from "~/platform"
@@ -22,7 +22,7 @@ if (import.meta.env.DEV) {
* services. Please use `useService` if within components or try to convert your * services. Please use `useService` if within components or try to convert your
* legacy subsystem into a service if possible. * legacy subsystem into a service if possible.
*/ */
export function getService<T extends typeof Service<any> & { ID: string }>( export function getService<T extends ServiceClassInstance<any>>(
service: T service: T
): InstanceType<T> { ): InstanceType<T> {
return serviceContainer.bind(service) return serviceContainer.bind(service)
@@ -30,11 +30,10 @@ export function getService<T extends typeof Service<any> & { ID: string }>(
export default <HoppModule>{ export default <HoppModule>{
onVueAppInit(app) { onVueAppInit(app) {
// TODO: look into this
// @ts-expect-error Something weird with Vue versions
app.use(diocPlugin, { app.use(diocPlugin, {
container: serviceContainer, container: serviceContainer,
}) })
for (const service of platform.addedServices ?? []) { for (const service of platform.addedServices ?? []) {
serviceContainer.bind(service) serviceContainer.bind(service)
} }

View File

@@ -1,9 +1,10 @@
import { pluck, distinctUntilChanged } from "rxjs/operators"
import { cloneDeep, defaultsDeep, has } from "lodash-es" import { cloneDeep, defaultsDeep, has } from "lodash-es"
import { Observable } from "rxjs" import { Observable } from "rxjs"
import { distinctUntilChanged, pluck } from "rxjs/operators"
import DispatchingStore, { defineDispatchers } from "./DispatchingStore" import { nextTick } from "vue"
import { platform } from "~/platform"
import type { KeysMatching } from "~/types/ts-utils" import type { KeysMatching } from "~/types/ts-utils"
import DispatchingStore, { defineDispatchers } from "./DispatchingStore"
export const HoppBgColors = ["system", "light", "dark", "black"] as const export const HoppBgColors = ["system", "light", "dark", "black"] as const
@@ -69,7 +70,8 @@ export type SettingsDef = {
HAS_OPENED_SPOTLIGHT: boolean HAS_OPENED_SPOTLIGHT: boolean
} }
export const getDefaultSettings = (): SettingsDef => ({ export const getDefaultSettings = (): SettingsDef => {
const defaultSettings: SettingsDef = {
syncCollections: true, syncCollections: true,
syncHistory: true, syncHistory: true,
syncEnvironments: true, syncEnvironments: true,
@@ -93,7 +95,7 @@ export const getDefaultSettings = (): SettingsDef => ({
cookie: true, cookie: true,
}, },
CURRENT_INTERCEPTOR_ID: "browser", // TODO: Allow the platform definition to take this place CURRENT_INTERCEPTOR_ID: "",
// TODO: Interceptor related settings should move under the interceptor systems // TODO: Interceptor related settings should move under the interceptor systems
PROXY_URL: "https://proxy.hoppscotch.io/", PROXY_URL: "https://proxy.hoppscotch.io/",
@@ -113,7 +115,18 @@ export const getDefaultSettings = (): SettingsDef => ({
COLUMN_LAYOUT: true, COLUMN_LAYOUT: true,
HAS_OPENED_SPOTLIGHT: false, HAS_OPENED_SPOTLIGHT: false,
}) }
// Wait for platform to initialize before setting CURRENT_INTERCEPTOR_ID
nextTick(() => {
applySetting(
"CURRENT_INTERCEPTOR_ID",
platform?.interceptors.default || "browser"
)
})
return defaultSettings
}
type ApplySettingPayload = { type ApplySettingPayload = {
[K in keyof SettingsDef]: { [K in keyof SettingsDef]: {

View File

@@ -64,13 +64,6 @@
@submit="renameReqName" @submit="renameReqName"
@hide-modal="showRenamingReqNameModal = false" @hide-modal="showRenamingReqNameModal = false"
/> />
<HoppSmartConfirmModal
:show="confirmingCloseForTabID !== null"
:confirm="t('modal.close_unsaved_tab')"
:title="t('confirm.save_unsaved_tab')"
@hide-modal="onCloseConfirmSaveTab"
@resolve="onResolveConfirmSaveTab"
/>
<HoppSmartConfirmModal <HoppSmartConfirmModal
:show="confirmingCloseAllTabs" :show="confirmingCloseAllTabs"
:confirm="t('modal.close_unsaved_tab')" :confirm="t('modal.close_unsaved_tab')"
@@ -78,6 +71,36 @@
@hide-modal="confirmingCloseAllTabs = false" @hide-modal="confirmingCloseAllTabs = false"
@resolve="onResolveConfirmCloseAllTabs" @resolve="onResolveConfirmCloseAllTabs"
/> />
<HoppSmartModal
v-if="confirmingCloseForTabID !== null"
dialog
role="dialog"
aria-modal="true"
:title="t('modal.close_unsaved_tab')"
@close="confirmingCloseForTabID = null"
>
<template #body>
<div class="text-center">
{{ t("confirm.save_unsaved_tab") }}
</div>
</template>
<template #footer>
<span class="flex space-x-2">
<HoppButtonPrimary
v-focus
:label="t?.('action.yes')"
outline
@click="onResolveConfirmSaveTab"
/>
<HoppButtonSecondary
:label="t?.('action.no')"
filled
outline
@click="onCloseConfirmSaveTab"
/>
</span>
</template>
</HoppSmartModal>
<CollectionsSaveRequest <CollectionsSaveRequest
v-if="savingRequest" v-if="savingRequest"
mode="rest" mode="rest"

View File

@@ -8,14 +8,14 @@ import { AnalyticsPlatformDef } from "./analytics"
import { InterceptorsPlatformDef } from "./interceptors" import { InterceptorsPlatformDef } from "./interceptors"
import { HoppModule } from "~/modules" import { HoppModule } from "~/modules"
import { InspectorsPlatformDef } from "./inspectors" import { InspectorsPlatformDef } from "./inspectors"
import { Service } from "dioc" import { ServiceClassInstance } from "dioc"
import { IOPlatformDef } from "./io" import { IOPlatformDef } from "./io"
import { SpotlightPlatformDef } from "./spotlight" import { SpotlightPlatformDef } from "./spotlight"
export type PlatformDef = { export type PlatformDef = {
ui?: UIPlatformDef ui?: UIPlatformDef
addedHoppModules?: HoppModule[] addedHoppModules?: HoppModule[]
addedServices?: Array<typeof Service<unknown> & { ID: string }> addedServices?: Array<ServiceClassInstance<unknown>>
auth: AuthPlatformDef auth: AuthPlatformDef
analytics?: AnalyticsPlatformDef analytics?: AnalyticsPlatformDef
io: IOPlatformDef io: IOPlatformDef

View File

@@ -1,4 +1,4 @@
import { Service } from "dioc" import { Container, ServiceClassInstance } from "dioc"
import { Inspector } from "~/services/inspection" import { Inspector } from "~/services/inspection"
/** /**
@@ -8,8 +8,9 @@ export type PlatformInspectorsDef = {
// We are keeping this as the only mode for now // We are keeping this as the only mode for now
// So that if we choose to add other modes, we can do without breaking // So that if we choose to add other modes, we can do without breaking
type: "service" type: "service"
service: typeof Service<unknown> & { ID: string } & { // TODO: I don't think this type is effective, we have to come up with a better impl
new (): Service & Inspector service: ServiceClassInstance<unknown> & {
new (c: Container): Inspector
} }
} }

View File

@@ -1,12 +1,13 @@
import { Service } from "dioc" import { Container, ServiceClassInstance } from "dioc"
import { Interceptor } from "~/services/interceptor.service" import { Interceptor } from "~/services/interceptor.service"
export type PlatformInterceptorDef = export type PlatformInterceptorDef =
| { type: "standalone"; interceptor: Interceptor } | { type: "standalone"; interceptor: Interceptor }
| { | {
type: "service" type: "service"
service: typeof Service<unknown> & { ID: string } & { // TODO: I don't think this type is effective, we have to come up with a better impl
new (): Service & Interceptor service: ServiceClassInstance<unknown> & {
new (c: Container): Interceptor
} }
} }

View File

@@ -1,10 +1,10 @@
import { Service } from "dioc" import { Container, ServiceClassInstance } from "dioc"
import { SpotlightSearcher } from "~/services/spotlight" import { SpotlightSearcher } from "~/services/spotlight"
export type SpotlightPlatformDef = { export type SpotlightPlatformDef = {
additionalSearchers?: Array< additionalSearchers?: Array<
typeof Service<unknown> & { ID: string } & { ServiceClassInstance<unknown> & {
new (): Service & SpotlightSearcher new (c: Container): SpotlightSearcher
} }
> >
} }

View File

@@ -31,9 +31,7 @@ export class ExtensionInspectorService extends Service implements Inspector {
private readonly inspection = this.bind(InspectionService) private readonly inspection = this.bind(InspectionService)
constructor() { override onServiceInit() {
super()
this.inspection.registerInspector(this) this.inspection.registerInspector(this)
} }

View File

@@ -133,9 +133,7 @@ export class ExtensionInterceptorService
public selectable = { type: "selectable" as const } public selectable = { type: "selectable" as const }
constructor() { override onServiceInit() {
super()
this.listenForExtensionStatus() this.listenForExtensionStatus()
} }

View File

@@ -24,9 +24,7 @@ export class EnvironmentMenuService extends Service implements ContextMenu {
private readonly contextMenu = this.bind(ContextMenuService) private readonly contextMenu = this.bind(ContextMenuService)
constructor() { override onServiceInit() {
super()
this.contextMenu.registerMenu(this) this.contextMenu.registerMenu(this)
} }

View File

@@ -41,9 +41,7 @@ export class ParameterMenuService extends Service implements ContextMenu {
private readonly contextMenu = this.bind(ContextMenuService) private readonly contextMenu = this.bind(ContextMenuService)
constructor() { override onServiceInit() {
super()
this.contextMenu.registerMenu(this) this.contextMenu.registerMenu(this)
} }

View File

@@ -39,9 +39,7 @@ export class URLMenuService extends Service implements ContextMenu {
private readonly contextMenu = this.bind(ContextMenuService) private readonly contextMenu = this.bind(ContextMenuService)
private readonly restTab = this.bind(RESTTabService) private readonly restTab = this.bind(RESTTabService)
constructor() { override onServiceInit() {
super()
this.contextMenu.registerMenu(this) this.contextMenu.registerMenu(this)
} }

View File

@@ -20,10 +20,6 @@ export class CookieJarService extends Service {
*/ */
public cookieJar = ref(new Map<string, string[]>()) public cookieJar = ref(new Map<string, string[]>())
constructor() {
super()
}
public parseSetCookieString(setCookieString: string) { public parseSetCookieString(setCookieString: string) {
return setCookieParse(setCookieString) return setCookieParse(setCookieString)
} }

View File

@@ -14,9 +14,7 @@ import { Service } from "dioc"
export class DebugService extends Service { export class DebugService extends Service {
public static readonly ID = "DEBUG_SERVICE" public static readonly ID = "DEBUG_SERVICE"
constructor() { override onServiceInit() {
super()
console.log("DebugService is initialized...") console.log("DebugService is initialized...")
const container = this.getContainer() const container = this.getContainer()

View File

@@ -107,9 +107,7 @@ export class InspectionService extends Service {
private readonly restTab = this.bind(RESTTabService) private readonly restTab = this.bind(RESTTabService)
constructor() { override onServiceInit() {
super()
this.initializeListeners() this.initializeListeners()
} }

View File

@@ -53,9 +53,7 @@ export class EnvironmentInspectorService extends Service implements Inspector {
} }
)[0] )[0]
constructor() { override onServiceInit() {
super()
this.inspection.registerInspector(this) this.inspection.registerInspector(this)
} }

View File

@@ -22,9 +22,7 @@ export class HeaderInspectorService extends Service implements Inspector {
private readonly inspection = this.bind(InspectionService) private readonly inspection = this.bind(InspectionService)
private readonly interceptorService = this.bind(InterceptorService) private readonly interceptorService = this.bind(InterceptorService)
constructor() { override onServiceInit() {
super()
this.inspection.registerInspector(this) this.inspection.registerInspector(this)
} }

View File

@@ -23,9 +23,7 @@ export class ResponseInspectorService extends Service implements Inspector {
private readonly inspection = this.bind(InspectionService) private readonly inspection = this.bind(InspectionService)
constructor() { override onServiceInit() {
super()
this.inspection.registerInspector(this) this.inspection.registerInspector(this)
} }

View File

@@ -178,9 +178,7 @@ export class InterceptorService extends Service {
return this.interceptors.get(this.currentInterceptorID.value) return this.interceptors.get(this.currentInterceptorID.value)
}) })
constructor() { override onServiceInit() {
super()
// If the current interceptor is unselectable, select the first selectable one, else null // If the current interceptor is unselectable, select the first selectable one, else null
watch([() => this.interceptors, this.currentInterceptorID], () => { watch([() => this.interceptors, this.currentInterceptorID], () => {
if (!this.currentInterceptorID.value) return if (!this.currentInterceptorID.value) return

View File

@@ -109,10 +109,6 @@ export class OauthAuthService extends Service {
public static readonly ID = "OAUTH_AUTH_SERVICE" public static readonly ID = "OAUTH_AUTH_SERVICE"
static redirectURI = `${window.location.origin}/oauth` static redirectURI = `${window.location.origin}/oauth`
constructor() {
super()
}
} }
export const generateRandomString = () => { export const generateRandomString = () => {

View File

@@ -89,10 +89,6 @@ export class PersistenceService extends Service {
public hoppLocalConfigStorage: StorageLike = localStorage public hoppLocalConfigStorage: StorageLike = localStorage
constructor() {
super()
}
private showErrorToast(localStorageKey: string) { private showErrorToast(localStorageKey: string) {
const toast = useToast() const toast = useToast()
toast.error( toast.error(

View File

@@ -27,10 +27,6 @@ export class SecretEnvironmentService extends Service {
*/ */
public secretEnvironments = reactive(new Map<string, SecretVariable[]>()) public secretEnvironments = reactive(new Map<string, SecretVariable[]>())
constructor() {
super()
}
/** /**
* Add a new secret environment. * Add a new secret environment.
* @param id ID of the environment * @param id ID of the environment

View File

@@ -6,6 +6,7 @@ import {
import { nextTick, reactive, ref } from "vue" import { nextTick, reactive, ref } from "vue"
import { SpotlightSearcherResult } from "../../.." import { SpotlightSearcherResult } from "../../.."
import { TestContainer } from "dioc/testing" import { TestContainer } from "dioc/testing"
import { Container } from "dioc"
async function flushPromises() { async function flushPromises() {
return await new Promise((r) => setTimeout(r)) return await new Promise((r) => setTimeout(r))
@@ -32,12 +33,15 @@ describe("StaticSpotlightSearcherService", () => {
}, },
}) })
constructor() { // TODO: dioc > v3 does not recommend using constructors, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text"], searchFields: ["text"],
fieldWeights: {}, fieldWeights: {},
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
} }
@@ -94,12 +98,15 @@ describe("StaticSpotlightSearcherService", () => {
}, },
}) })
constructor() { // TODO: dioc > v3 does not recommend using constructors, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text"], searchFields: ["text"],
fieldWeights: {}, fieldWeights: {},
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
} }
@@ -159,12 +166,15 @@ describe("StaticSpotlightSearcherService", () => {
}, },
}) })
constructor() { // TODO: dioc > v3 does not recommend using constructors, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text"], searchFields: ["text"],
fieldWeights: {}, fieldWeights: {},
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
} }
@@ -224,12 +234,15 @@ describe("StaticSpotlightSearcherService", () => {
}, },
}) })
constructor() { // TODO: dioc > v3 does not recommend using constructors, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text"], searchFields: ["text"],
fieldWeights: {}, fieldWeights: {},
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
} }
@@ -285,12 +298,15 @@ describe("StaticSpotlightSearcherService", () => {
}, },
}) })
constructor() { // TODO: dioc > v3 does not recommend using constructors, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text"], searchFields: ["text"],
fieldWeights: {}, fieldWeights: {},
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
} }
@@ -354,12 +370,15 @@ describe("StaticSpotlightSearcherService", () => {
}, },
}) })
constructor() { // TODO: dioc > v3 does not recommend using constructors, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternate"], searchFields: ["text", "alternate"],
fieldWeights: {}, fieldWeights: {},
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
} }

View File

@@ -1,4 +1,4 @@
import { Service } from "dioc" import { Container, Service } from "dioc"
import { import {
type SpotlightSearcher, type SpotlightSearcher,
type SpotlightSearcherResult, type SpotlightSearcherResult,
@@ -67,8 +67,12 @@ export abstract class StaticSpotlightSearcherService<
private _documents: Record<string, Doc> = {} private _documents: Record<string, Doc> = {}
constructor(private opts: StaticSpotlightSearcherOptions<Doc>) { // TODO: This pattern is no longer recommended in dioc > 3, move to something else
super() constructor(
c: Container,
private opts: StaticSpotlightSearcherOptions<Doc>
) {
super(c)
this.minisearch = new MiniSearch({ this.minisearch = new MiniSearch({
fields: opts.searchFields as string[], fields: opts.searchFields as string[],

View File

@@ -50,9 +50,7 @@ export class CollectionsSpotlightSearcherService
private readonly spotlight = this.bind(SpotlightService) private readonly spotlight = this.bind(SpotlightService)
private readonly workspaceService = this.bind(WorkspaceService) private readonly workspaceService = this.bind(WorkspaceService)
constructor() { override onServiceInit() {
super()
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -26,7 +26,7 @@ import IconEdit from "~icons/lucide/edit"
import IconLayers from "~icons/lucide/layers" import IconLayers from "~icons/lucide/layers"
import IconTrash2 from "~icons/lucide/trash-2" import IconTrash2 from "~icons/lucide/trash-2"
import { Service } from "dioc" import { Container, Service } from "dioc"
import * as TE from "fp-ts/TaskEither" import * as TE from "fp-ts/TaskEither"
import { pipe } from "fp-ts/function" import { pipe } from "fp-ts/function"
import { cloneDeep } from "lodash-es" import { cloneDeep } from "lodash-es"
@@ -164,15 +164,18 @@ export class EnvironmentsSpotlightSearcherService extends StaticSpotlightSearche
}, },
}) })
constructor() { // TODO: This pattern is no longer recommended in dioc > 3, move to something else
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }
@@ -277,9 +280,7 @@ export class SwitchEnvSpotlightSearcherService
private readonly workspaceService = this.bind(WorkspaceService) private readonly workspaceService = this.bind(WorkspaceService)
private teamEnvironmentList: TeamEnvironment[] = [] private teamEnvironmentList: TeamEnvironment[] = []
constructor() { override onServiceInit() {
super()
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -15,6 +15,7 @@ import IconBook from "~icons/lucide/book"
import IconLifeBuoy from "~icons/lucide/life-buoy" import IconLifeBuoy from "~icons/lucide/life-buoy"
import IconZap from "~icons/lucide/zap" import IconZap from "~icons/lucide/zap"
import { platform } from "~/platform" import { platform } from "~/platform"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string | string[] text: string | string[]
@@ -89,15 +90,18 @@ export class GeneralSpotlightSearcherService extends StaticSpotlightSearcherServ
}, },
}) })
constructor() { // TODO: This is not recommended as of dioc > 3. Move to onServiceInit instead
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -66,9 +66,7 @@ export class HistorySpotlightSearcherService
} }
)[0] )[0]
constructor() { override onServiceInit() {
super()
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -31,9 +31,7 @@ export class InterceptorSpotlightSearcherService
private readonly spotlight = this.bind(SpotlightService) private readonly spotlight = this.bind(SpotlightService)
private interceptorService = this.bind(InterceptorService) private interceptorService = this.bind(InterceptorService)
constructor() { override onServiceInit() {
super()
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -8,6 +8,7 @@ import {
} from "./base/static.searcher" } from "./base/static.searcher"
import IconShare from "~icons/lucide/share" import IconShare from "~icons/lucide/share"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string text: string
@@ -39,15 +40,18 @@ export class MiscellaneousSpotlightSearcherService extends StaticSpotlightSearch
}, },
}) })
constructor() { // TODO: Constructors are no longer recommended as of dioc > 3, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -8,6 +8,7 @@ import {
} from "./base/static.searcher" } from "./base/static.searcher"
import IconArrowRight from "~icons/lucide/arrow-right" import IconArrowRight from "~icons/lucide/arrow-right"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string text: string
@@ -61,15 +62,18 @@ export class NavigationSpotlightSearcherService extends StaticSpotlightSearcherS
private docKeys = Object.keys(this.documents) private docKeys = Object.keys(this.documents)
constructor() { // TODO: Constructors are no longer recommended as of dioc > 3, use onServiceInit instead
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -20,6 +20,7 @@ import IconRotateCCW from "~icons/lucide/rotate-ccw"
import IconSave from "~icons/lucide/save" import IconSave from "~icons/lucide/save"
import { GQLOptionTabs } from "~/components/graphql/RequestOptions.vue" import { GQLOptionTabs } from "~/components/graphql/RequestOptions.vue"
import { RESTTabService } from "~/services/tab/rest" import { RESTTabService } from "~/services/tab/rest"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string | string[] text: string | string[]
@@ -224,15 +225,18 @@ export class RequestSpotlightSearcherService extends StaticSpotlightSearcherServ
}, },
}) })
constructor() { // TODO: Constructors are no longer recommended as of dioc > 3, use onServiceInit instead
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -9,6 +9,7 @@ import {
import IconDownload from "~icons/lucide/download" import IconDownload from "~icons/lucide/download"
import IconCopy from "~icons/lucide/copy" import IconCopy from "~icons/lucide/copy"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string text: string
@@ -56,15 +57,18 @@ export class ResponseSpotlightSearcherService extends StaticSpotlightSearcherSer
}, },
}) })
constructor() { // TODO: Constructors are no longer recommended as of dioc > 3, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -15,6 +15,7 @@ import IconMonitor from "~icons/lucide/monitor"
import IconMoon from "~icons/lucide/moon" import IconMoon from "~icons/lucide/moon"
import IconSun from "~icons/lucide/sun" import IconSun from "~icons/lucide/sun"
import IconCheckCircle from "~icons/lucide/check-circle" import IconCheckCircle from "~icons/lucide/check-circle"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string | string[] text: string | string[]
@@ -100,15 +101,18 @@ export class SettingsSpotlightSearcherService extends StaticSpotlightSearcherSer
}, },
}) })
constructor() { // TODO: Constuctors are no longer recommended as of dioc > 3, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -14,6 +14,7 @@ import IconXSquare from "~icons/lucide/x-square"
import { invokeAction } from "~/helpers/actions" import { invokeAction } from "~/helpers/actions"
import { RESTTabService } from "~/services/tab/rest" import { RESTTabService } from "~/services/tab/rest"
import { GQLTabService } from "~/services/tab/graphql" import { GQLTabService } from "~/services/tab/graphql"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string | string[] text: string | string[]
@@ -89,15 +90,18 @@ export class TabSpotlightSearcherService extends StaticSpotlightSearcherService<
}, },
}) })
constructor() { // TODO: Constructors are no longer recommended as of dioc > 3, use onServiceInit instead
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -39,9 +39,7 @@ export class TeamsSpotlightSearcherService
private readonly tabs = this.bind(RESTTabService) private readonly tabs = this.bind(RESTTabService)
constructor() { override onServiceInit() {
super()
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -9,6 +9,7 @@ import { useStreamStatic } from "~/composables/stream"
import IconLogin from "~icons/lucide/log-in" import IconLogin from "~icons/lucide/log-in"
import IconLogOut from "~icons/lucide/log-out" import IconLogOut from "~icons/lucide/log-out"
import { activeActions$, invokeAction } from "~/helpers/actions" import { activeActions$, invokeAction } from "~/helpers/actions"
import { Container } from "dioc"
type Doc = { type Doc = {
text: string text: string
@@ -59,15 +60,18 @@ export class UserSpotlightSearcherService extends StaticSpotlightSearcherService
}, },
}) })
constructor() { // TODO: Constructors are no longer recommended as of dioc > 3, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit(): void {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -21,7 +21,7 @@ import {
StaticSpotlightSearcherService, StaticSpotlightSearcherService,
} from "./base/static.searcher" } from "./base/static.searcher"
import { Service } from "dioc" import { Container, Service } from "dioc"
import * as E from "fp-ts/Either" import * as E from "fp-ts/Either"
import MiniSearch from "minisearch" import MiniSearch from "minisearch"
import IconCheckCircle from "~/components/app/spotlight/entry/IconSelected.vue" import IconCheckCircle from "~/components/app/spotlight/entry/IconSelected.vue"
@@ -102,15 +102,18 @@ export class WorkspaceSpotlightSearcherService extends StaticSpotlightSearcherSe
}, },
}) })
constructor() { // TODO: Constructors are no longer recommended as of dioc > 3, move to onServiceInit
super({ constructor(c: Container) {
super(c, {
searchFields: ["text", "alternates"], searchFields: ["text", "alternates"],
fieldWeights: { fieldWeights: {
text: 2, text: 2,
alternates: 1, alternates: 1,
}, },
}) })
}
override onServiceInit() {
this.setDocuments(this.documents) this.setDocuments(this.documents)
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }
@@ -166,9 +169,7 @@ export class SwitchWorkspaceSpotlightSearcherService
private readonly spotlight = this.bind(SpotlightService) private readonly spotlight = this.bind(SpotlightService)
private readonly workspaceService = this.bind(WorkspaceService) private readonly workspaceService = this.bind(WorkspaceService)
constructor() { override onServiceInit() {
super()
this.spotlight.registerSearcher(this) this.spotlight.registerSearcher(this)
} }

View File

@@ -6,9 +6,7 @@ import { reactive } from "vue"
class MockTabService extends TabService<{ request: string }> { class MockTabService extends TabService<{ request: string }> {
public static readonly ID = "MOCK_TAB_SERVICE" public static readonly ID = "MOCK_TAB_SERVICE"
constructor() { override onServiceInit() {
super()
this.tabMap = reactive( this.tabMap = reactive(
new Map([ new Map([
[ [

View File

@@ -3,12 +3,15 @@ import { getDefaultGQLRequest } from "~/helpers/graphql/default"
import { HoppGQLDocument, HoppGQLSaveContext } from "~/helpers/graphql/document" import { HoppGQLDocument, HoppGQLSaveContext } from "~/helpers/graphql/document"
import { TabService } from "./tab" import { TabService } from "./tab"
import { computed } from "vue" import { computed } from "vue"
import { Container } from "dioc"
export class GQLTabService extends TabService<HoppGQLDocument> { export class GQLTabService extends TabService<HoppGQLDocument> {
public static readonly ID = "GQL_TAB_SERVICE" public static readonly ID = "GQL_TAB_SERVICE"
constructor() { // TODO: Moving this to `onServiceInit` breaks `persistableTabState`
super() // Figure out how to fix this
constructor(c: Container) {
super(c)
this.tabMap.set("test", { this.tabMap.set("test", {
id: "test", id: "test",

View File

@@ -3,12 +3,15 @@ import { computed } from "vue"
import { getDefaultRESTRequest } from "~/helpers/rest/default" import { getDefaultRESTRequest } from "~/helpers/rest/default"
import { HoppRESTDocument, HoppRESTSaveContext } from "~/helpers/rest/document" import { HoppRESTDocument, HoppRESTSaveContext } from "~/helpers/rest/document"
import { TabService } from "./tab" import { TabService } from "./tab"
import { Container } from "dioc"
export class RESTTabService extends TabService<HoppRESTDocument> { export class RESTTabService extends TabService<HoppRESTDocument> {
public static readonly ID = "REST_TAB_SERVICE" public static readonly ID = "REST_TAB_SERVICE"
constructor() { // TODO: Moving this to `onServiceInit` breaks `persistableTabState`
super() // Figure out how to fix this
constructor(c: Container) {
super(c)
this.tabMap.set("test", { this.tabMap.set("test", {
id: "test", id: "test",

View File

@@ -5,13 +5,24 @@ import { useStreamStatic } from "~/composables/stream"
import TeamListAdapter from "~/helpers/teams/TeamListAdapter" import TeamListAdapter from "~/helpers/teams/TeamListAdapter"
import { platform } from "~/platform" import { platform } from "~/platform"
import { min } from "lodash-es" import { min } from "lodash-es"
import { TeamMemberRole } from "~/helpers/backend/graphql"
/** /**
* Defines a workspace and its information * Defines a workspace and its information
*/ */
export type Workspace =
| { type: "personal" } export type PersonalWorkspace = {
| { type: "team"; teamID: string; teamName: string } type: "personal"
}
export type TeamWorkspace = {
type: "team"
teamID: string
teamName: string
role: TeamMemberRole | null | undefined
}
export type Workspace = PersonalWorkspace | TeamWorkspace
export type WorkspaceServiceEvent = { export type WorkspaceServiceEvent = {
type: "managed-team-list-adapter-polled" type: "managed-team-list-adapter-polled"
@@ -48,8 +59,7 @@ export class WorkspaceService extends Service<WorkspaceServiceEvent> {
-1 -1
) )
constructor() { override onServiceInit() {
super()
// Dispose the managed team list adapter when the user logs out // Dispose the managed team list adapter when the user logs out
// and initialize it when the user logs in // and initialize it when the user logs in
watch( watch(

View File

@@ -1,7 +1,7 @@
{ {
"name": "@hoppscotch/selfhost-desktop", "name": "@hoppscotch/selfhost-desktop",
"private": true, "private": true,
"version": "2024.3.0", "version": "2024.3.3",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev:vite": "vite", "dev:vite": "vite",
@@ -23,7 +23,7 @@
"@vueuse/core": "10.5.0", "@vueuse/core": "10.5.0",
"axios": "0.21.4", "axios": "0.21.4",
"buffer": "6.0.3", "buffer": "6.0.3",
"dioc": "1.0.1", "dioc": "3.0.1",
"environments.api": "link:@platform/environments/environments.api", "environments.api": "link:@platform/environments/environments.api",
"event": "link:@tauri-apps/api/event", "event": "link:@tauri-apps/api/event",
"fp-ts": "2.16.1", "fp-ts": "2.16.1",

View File

@@ -1260,7 +1260,7 @@ dependencies = [
[[package]] [[package]]
name = "hoppscotch-desktop" name = "hoppscotch-desktop"
version = "24.3.1" version = "24.3.2"
dependencies = [ dependencies = [
"cocoa 0.25.0", "cocoa 0.25.0",
"hex_color", "hex_color",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "hoppscotch-desktop" name = "hoppscotch-desktop"
version = "24.3.0" version = "24.3.3"
description = "A Tauri App" description = "A Tauri App"
authors = ["you"] authors = ["you"]
license = "" license = ""

View File

@@ -8,7 +8,7 @@
}, },
"package": { "package": {
"productName": "Hoppscotch", "productName": "Hoppscotch",
"version": "24.3.1" "version": "24.3.3"
}, },
"tauri": { "tauri": {
"allowlist": { "allowlist": {

View File

@@ -138,10 +138,6 @@ export class NativeInterceptorService extends Service implements Interceptor {
public cookieJarService = this.bind(CookieJarService) public cookieJarService = this.bind(CookieJarService)
constructor() {
super()
}
public runRequest(req: any) { public runRequest(req: any) {
const processedReq = preProcessRequest(req) const processedReq = preProcessRequest(req)

View File

@@ -1,7 +1,7 @@
{ {
"name": "@hoppscotch/selfhost-web", "name": "@hoppscotch/selfhost-web",
"private": true, "private": true,
"version": "2024.3.1", "version": "2024.3.3",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev:vite": "vite", "dev:vite": "vite",

View File

@@ -26,7 +26,7 @@ createHoppApp("#app", {
history: historyDef, history: historyDef,
}, },
interceptors: { interceptors: {
default: "browser", default: "proxy",
interceptors: [ interceptors: [
{ type: "standalone", interceptor: browserInterceptor }, { type: "standalone", interceptor: browserInterceptor },
{ type: "standalone", interceptor: proxyInterceptor }, { type: "standalone", interceptor: proxyInterceptor },

View File

@@ -52,7 +52,8 @@
"title": "Server is restarting" "title": "Server is restarting"
}, },
"save_changes": "Save Changes", "save_changes": "Save Changes",
"title": "Configurations" "title": "Configurations",
"update_failure": "Failed to update server configurations"
}, },
"data_sharing": { "data_sharing": {
"description": "Share anonymous data usage to improve Hoppscotch", "description": "Share anonymous data usage to improve Hoppscotch",

View File

@@ -1,7 +1,7 @@
{ {
"name": "hoppscotch-sh-admin", "name": "hoppscotch-sh-admin",
"private": true, "private": true,
"version": "2024.3.1", "version": "2024.3.3",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "pnpm exec npm-run-all -p -l dev:*", "dev": "pnpm exec npm-run-all -p -l dev:*",

View File

@@ -69,18 +69,18 @@
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import { reactive } from 'vue'; import { reactive } from 'vue';
import { useI18n } from '~/composables/i18n'; import { useI18n } from '~/composables/i18n';
import { Config, SsoAuthProviders } from '~/composables/useConfigHandler'; import { ServerConfigs, SsoAuthProviders } from '~/helpers/configs';
import IconEye from '~icons/lucide/eye'; import IconEye from '~icons/lucide/eye';
import IconEyeOff from '~icons/lucide/eye-off'; import IconEyeOff from '~icons/lucide/eye-off';
const t = useI18n(); const t = useI18n();
const props = defineProps<{ const props = defineProps<{
config: Config; config: ServerConfigs;
}>(); }>();
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update:config', v: Config): void; (e: 'update:config', v: ServerConfigs): void;
}>(); }>();
const workingConfigs = useVModel(props, 'config', emit); const workingConfigs = useVModel(props, 'config', emit);
@@ -93,7 +93,7 @@ const capitalize = (text: string) =>
type ProviderFieldKeys = keyof ProviderFields; type ProviderFieldKeys = keyof ProviderFields;
type ProviderFields = { type ProviderFields = {
[Field in keyof Config['providers'][SsoAuthProviders]['fields']]: boolean; [Field in keyof ServerConfigs['providers'][SsoAuthProviders]['fields']]: boolean;
} & Partial<{ tenant: boolean }>; } & Partial<{ tenant: boolean }>;
type ProviderFieldMetadata = { type ProviderFieldMetadata = {

View File

@@ -9,14 +9,14 @@
<script setup lang="ts"> <script setup lang="ts">
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import { Config } from '~/composables/useConfigHandler'; import { ServerConfigs } from '~/helpers/configs';
const props = defineProps<{ const props = defineProps<{
config: Config; config: ServerConfigs;
}>(); }>();
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update:config', v: Config): void; (e: 'update:config', v: ServerConfigs): void;
}>(); }>();
const workingConfigs = useVModel(props, 'config', emit); const workingConfigs = useVModel(props, 'config', emit);

View File

@@ -38,17 +38,17 @@
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import { computed } from 'vue'; import { computed } from 'vue';
import { useI18n } from '~/composables/i18n'; import { useI18n } from '~/composables/i18n';
import { Config } from '~/composables/useConfigHandler'; import { ServerConfigs } from '~/helpers/configs';
import IconShieldQuestion from '~icons/lucide/shield-question'; import IconShieldQuestion from '~icons/lucide/shield-question';
const t = useI18n(); const t = useI18n();
const props = defineProps<{ const props = defineProps<{
config: Config; config: ServerConfigs;
}>(); }>();
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update:config', v: Config): void; (e: 'update:config', v: ServerConfigs): void;
}>(); }>();
const workingConfigs = useVModel(props, 'config', emit); const workingConfigs = useVModel(props, 'config', emit);

View File

@@ -17,20 +17,21 @@ import { useMutation } from '@urql/vue';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { useI18n } from '~/composables/i18n'; import { useI18n } from '~/composables/i18n';
import { useToast } from '~/composables/toast'; import { useToast } from '~/composables/toast';
import { Config, useConfigHandler } from '~/composables/useConfigHandler'; import { useConfigHandler } from '~/composables/useConfigHandler';
import { import {
EnableAndDisableSsoDocument, EnableAndDisableSsoDocument,
ResetInfraConfigsDocument, ResetInfraConfigsDocument,
UpdateInfraConfigsDocument,
ToggleAnalyticsCollectionDocument, ToggleAnalyticsCollectionDocument,
UpdateInfraConfigsDocument,
} from '~/helpers/backend/graphql'; } from '~/helpers/backend/graphql';
import { ServerConfigs } from '~/helpers/configs';
const t = useI18n(); const t = useI18n();
const toast = useToast(); const toast = useToast();
const props = withDefaults( const props = withDefaults(
defineProps<{ defineProps<{
workingConfigs?: Config; workingConfigs?: ServerConfigs;
reset?: boolean; reset?: boolean;
}>(), }>(),
{ {

View File

@@ -58,18 +58,18 @@
import { useVModel } from '@vueuse/core'; import { useVModel } from '@vueuse/core';
import { computed, reactive } from 'vue'; import { computed, reactive } from 'vue';
import { useI18n } from '~/composables/i18n'; import { useI18n } from '~/composables/i18n';
import { Config } from '~/composables/useConfigHandler'; import { ServerConfigs } from '~/helpers/configs';
import IconEye from '~icons/lucide/eye'; import IconEye from '~icons/lucide/eye';
import IconEyeOff from '~icons/lucide/eye-off'; import IconEyeOff from '~icons/lucide/eye-off';
const t = useI18n(); const t = useI18n();
const props = defineProps<{ const props = defineProps<{
config: Config; config: ServerConfigs;
}>(); }>();
const emit = defineEmits<{ const emit = defineEmits<{
(e: 'update:config', v: Config): void; (e: 'update:config', v: ServerConfigs): void;
}>(); }>();
const workingConfigs = useVModel(props, 'config', emit); const workingConfigs = useVModel(props, 'config', emit);
@@ -87,7 +87,7 @@ const smtpConfigs = computed({
// Mask sensitive fields // Mask sensitive fields
type Field = { type Field = {
name: string; name: string;
key: keyof Config['mailConfigs']['fields']; key: keyof ServerConfigs['mailConfigs']['fields'];
}; };
const smtpConfigFields = reactive<Field[]>([ const smtpConfigFields = reactive<Field[]>([
@@ -100,10 +100,10 @@ const maskState = reactive<Record<string, boolean>>({
mailer_from_address: true, mailer_from_address: true,
}); });
const toggleMask = (fieldKey: keyof Config['mailConfigs']['fields']) => { const toggleMask = (fieldKey: keyof ServerConfigs['mailConfigs']['fields']) => {
maskState[fieldKey] = !maskState[fieldKey]; maskState[fieldKey] = !maskState[fieldKey];
}; };
const isMasked = (fieldKey: keyof Config['mailConfigs']['fields']) => const isMasked = (fieldKey: keyof ServerConfigs['mailConfigs']['fields']) =>
maskState[fieldKey]; maskState[fieldKey];
</script> </script>

View File

@@ -1,83 +1,39 @@
import { AnyVariables, UseMutationResponse } from '@urql/vue'; import { AnyVariables, UseMutationResponse } from '@urql/vue';
import { cloneDeep } from 'lodash-es'; import { cloneDeep } from 'lodash-es';
import { computed, onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { useI18n } from '~/composables/i18n'; import { useI18n } from '~/composables/i18n';
import { import {
AllowedAuthProvidersDocument, AllowedAuthProvidersDocument,
AuthProvider,
EnableAndDisableSsoArgs, EnableAndDisableSsoArgs,
EnableAndDisableSsoMutation, EnableAndDisableSsoMutation,
InfraConfigArgs, InfraConfigArgs,
InfraConfigEnum, InfraConfigEnum,
InfraConfigsDocument, InfraConfigsDocument,
ResetInfraConfigsMutation, ResetInfraConfigsMutation,
ServiceStatus,
ToggleAnalyticsCollectionMutation, ToggleAnalyticsCollectionMutation,
UpdateInfraConfigsMutation, UpdateInfraConfigsMutation,
} from '~/helpers/backend/graphql'; } from '~/helpers/backend/graphql';
import {
ALL_CONFIGS,
ConfigSection,
ConfigTransform,
GITHUB_CONFIGS,
GOOGLE_CONFIGS,
MAIL_CONFIGS,
MICROSOFT_CONFIGS,
ServerConfigs,
UpdatedConfigs,
} from '~/helpers/configs';
import { useToast } from './toast'; import { useToast } from './toast';
import { useClientHandler } from './useClientHandler'; import { useClientHandler } from './useClientHandler';
// Types
export type SsoAuthProviders = 'google' | 'microsoft' | 'github';
export type Config = {
providers: {
google: {
name: SsoAuthProviders;
enabled: boolean;
fields: {
client_id: string;
client_secret: string;
callback_url: string;
scope: string;
};
};
github: {
name: SsoAuthProviders;
enabled: boolean;
fields: {
client_id: string;
client_secret: string;
callback_url: string;
scope: string;
};
};
microsoft: {
name: SsoAuthProviders;
enabled: boolean;
fields: {
client_id: string;
client_secret: string;
callback_url: string;
scope: string;
tenant: string;
};
};
};
mailConfigs: {
name: string;
enabled: boolean;
fields: {
mailer_smtp_url: string;
mailer_from_address: string;
};
};
dataSharingConfigs: {
name: string;
enabled: boolean;
};
};
type UpdatedConfigs = {
name: string;
value: string;
};
/** Composable that handles all operations related to server configurations /** Composable that handles all operations related to server configurations
* @param updatedConfigs A Config Object contatining the updated configs * @param updatedConfigs A Config Object contatining the updated configs
*/ */
export function useConfigHandler(updatedConfigs?: Config) { export function useConfigHandler(updatedConfigs?: ServerConfigs) {
const t = useI18n(); const t = useI18n();
const toast = useToast(); const toast = useToast();
@@ -90,24 +46,9 @@ export function useConfigHandler(updatedConfigs?: Config) {
} = useClientHandler( } = useClientHandler(
InfraConfigsDocument, InfraConfigsDocument,
{ {
configNames: [ configNames: ALL_CONFIGS.flat().map(
'GOOGLE_CLIENT_ID', ({ name }) => name
'GOOGLE_CLIENT_SECRET', ) as InfraConfigEnum[],
'GOOGLE_CALLBACK_URL',
'GOOGLE_SCOPE',
'MICROSOFT_CLIENT_ID',
'MICROSOFT_CLIENT_SECRET',
'MICROSOFT_CALLBACK_URL',
'MICROSOFT_SCOPE',
'MICROSOFT_TENANT',
'GITHUB_CLIENT_ID',
'GITHUB_CLIENT_SECRET',
'GITHUB_CALLBACK_URL',
'GITHUB_SCOPE',
'MAILER_SMTP_URL',
'MAILER_ADDRESS_FROM',
'ALLOW_ANALYTICS_COLLECTION',
] as InfraConfigEnum[],
}, },
(x) => x.infraConfigs (x) => x.infraConfigs
); );
@@ -125,14 +66,14 @@ export function useConfigHandler(updatedConfigs?: Config) {
); );
// Current and working configs // Current and working configs
const currentConfigs = ref<Config>(); const currentConfigs = ref<ServerConfigs>();
const workingConfigs = ref<Config>(); const workingConfigs = ref<ServerConfigs>();
onMounted(async () => { onMounted(async () => {
await fetchInfraConfigs(); await fetchInfraConfigs();
await fetchAllowedAuthProviders(); await fetchAllowedAuthProviders();
const getFieldValue = (name: string) => const getFieldValue = (name: InfraConfigEnum) =>
infraConfigs.value.find((x) => x.name === name)?.value ?? ''; infraConfigs.value.find((x) => x.name === name)?.value ?? '';
// Transforming the fetched data into a Configs object // Transforming the fetched data into a Configs object
@@ -140,42 +81,42 @@ export function useConfigHandler(updatedConfigs?: Config) {
providers: { providers: {
google: { google: {
name: 'google', name: 'google',
enabled: allowedAuthProviders.value.includes('GOOGLE'), enabled: allowedAuthProviders.value.includes(AuthProvider.Google),
fields: { fields: {
client_id: getFieldValue('GOOGLE_CLIENT_ID'), client_id: getFieldValue(InfraConfigEnum.GoogleClientId),
client_secret: getFieldValue('GOOGLE_CLIENT_SECRET'), client_secret: getFieldValue(InfraConfigEnum.GoogleClientSecret),
callback_url: getFieldValue('GOOGLE_CALLBACK_URL'), callback_url: getFieldValue(InfraConfigEnum.GoogleCallbackUrl),
scope: getFieldValue('GOOGLE_SCOPE'), scope: getFieldValue(InfraConfigEnum.GoogleScope),
}, },
}, },
github: { github: {
name: 'github', name: 'github',
enabled: allowedAuthProviders.value.includes('GITHUB'), enabled: allowedAuthProviders.value.includes(AuthProvider.Github),
fields: { fields: {
client_id: getFieldValue('GITHUB_CLIENT_ID'), client_id: getFieldValue(InfraConfigEnum.GithubClientId),
client_secret: getFieldValue('GITHUB_CLIENT_SECRET'), client_secret: getFieldValue(InfraConfigEnum.GithubClientSecret),
callback_url: getFieldValue('GITHUB_CALLBACK_URL'), callback_url: getFieldValue(InfraConfigEnum.GoogleCallbackUrl),
scope: getFieldValue('GITHUB_SCOPE'), scope: getFieldValue(InfraConfigEnum.GithubScope),
}, },
}, },
microsoft: { microsoft: {
name: 'microsoft', name: 'microsoft',
enabled: allowedAuthProviders.value.includes('MICROSOFT'), enabled: allowedAuthProviders.value.includes(AuthProvider.Microsoft),
fields: { fields: {
client_id: getFieldValue('MICROSOFT_CLIENT_ID'), client_id: getFieldValue(InfraConfigEnum.MicrosoftClientId),
client_secret: getFieldValue('MICROSOFT_CLIENT_SECRET'), client_secret: getFieldValue(InfraConfigEnum.MicrosoftClientSecret),
callback_url: getFieldValue('MICROSOFT_CALLBACK_URL'), callback_url: getFieldValue(InfraConfigEnum.MicrosoftCallbackUrl),
scope: getFieldValue('MICROSOFT_SCOPE'), scope: getFieldValue(InfraConfigEnum.MicrosoftScope),
tenant: getFieldValue('MICROSOFT_TENANT'), tenant: getFieldValue(InfraConfigEnum.MicrosoftTenant),
}, },
}, },
}, },
mailConfigs: { mailConfigs: {
name: 'email', name: 'email',
enabled: allowedAuthProviders.value.includes('EMAIL'), enabled: allowedAuthProviders.value.includes(AuthProvider.Email),
fields: { fields: {
mailer_smtp_url: getFieldValue('MAILER_SMTP_URL'), mailer_smtp_url: getFieldValue(InfraConfigEnum.MailerSmtpUrl),
mailer_from_address: getFieldValue('MAILER_ADDRESS_FROM'), mailer_from_address: getFieldValue(InfraConfigEnum.MailerAddressFrom),
}, },
}, },
dataSharingConfigs: { dataSharingConfigs: {
@@ -191,138 +132,13 @@ export function useConfigHandler(updatedConfigs?: Config) {
workingConfigs.value = cloneDeep(currentConfigs.value); workingConfigs.value = cloneDeep(currentConfigs.value);
}); });
// Transforming the working configs back into the format required by the mutations /*
const updatedInfraConfigs = computed(() => { Check if any of the config fields are empty
let config: UpdatedConfigs[] = [ */
{
name: '',
value: '',
},
];
if (updatedConfigs?.providers.google.enabled) {
config.push(
{
name: 'GOOGLE_CLIENT_ID',
value: updatedConfigs?.providers.google.fields.client_id ?? '',
},
{
name: 'GOOGLE_CLIENT_SECRET',
value: updatedConfigs?.providers.google.fields.client_secret ?? '',
},
{
name: 'GOOGLE_CALLBACK_URL',
value: updatedConfigs?.providers.google.fields.callback_url ?? '',
},
{
name: 'GOOGLE_SCOPE',
value: updatedConfigs?.providers.google.fields.scope ?? '',
}
);
} else {
config = config.filter(
(item) =>
item.name !== 'GOOGLE_CLIENT_ID' &&
item.name !== 'GOOGLE_CLIENT_SECRET' &&
item.name !== 'GOOGLE_CALLBACK_URL' &&
item.name !== 'GOOGLE_SCOPE'
);
}
if (updatedConfigs?.providers.microsoft.enabled) {
config.push(
{
name: 'MICROSOFT_CLIENT_ID',
value: updatedConfigs?.providers.microsoft.fields.client_id ?? '',
},
{
name: 'MICROSOFT_CLIENT_SECRET',
value: updatedConfigs?.providers.microsoft.fields.client_secret ?? '',
},
{
name: 'MICROSOFT_CALLBACK_URL',
value: updatedConfigs?.providers.microsoft.fields.callback_url ?? '',
},
{
name: 'MICROSOFT_SCOPE',
value: updatedConfigs?.providers.microsoft.fields.scope ?? '',
},
{
name: 'MICROSOFT_TENANT',
value: updatedConfigs?.providers.microsoft.fields.tenant ?? '',
}
);
} else {
config = config.filter(
(item) =>
item.name !== 'MICROSOFT_CLIENT_ID' &&
item.name !== 'MICROSOFT_CLIENT_SECRET' &&
item.name !== 'MICROSOFT_CALLBACK_URL' &&
item.name !== 'MICROSOFT_SCOPE' &&
item.name !== 'MICROSOFT_TENANT'
);
}
if (updatedConfigs?.providers.github.enabled) {
config.push(
{
name: 'GITHUB_CLIENT_ID',
value: updatedConfigs?.providers.github.fields.client_id ?? '',
},
{
name: 'GITHUB_CLIENT_SECRET',
value: updatedConfigs?.providers.github.fields.client_secret ?? '',
},
{
name: 'GITHUB_CALLBACK_URL',
value: updatedConfigs?.providers.github.fields.callback_url ?? '',
},
{
name: 'GITHUB_SCOPE',
value: updatedConfigs?.providers.github.fields.scope ?? '',
}
);
} else {
config = config.filter(
(item) =>
item.name !== 'GITHUB_CLIENT_ID' &&
item.name !== 'GITHUB_CLIENT_SECRET' &&
item.name !== 'GITHUB_CALLBACK_URL' &&
item.name !== 'GITHUB_SCOPE'
);
}
if (updatedConfigs?.mailConfigs.enabled) {
config.push(
{
name: 'MAILER_SMTP_URL',
value: updatedConfigs?.mailConfigs.fields.mailer_smtp_url ?? '',
},
{
name: 'MAILER_ADDRESS_FROM',
value: updatedConfigs?.mailConfigs.fields.mailer_from_address ?? '',
}
);
} else {
config = config.filter(
(item) =>
item.name !== 'MAILER_SMTP_URL' && item.name !== 'MAILER_ADDRESS_FROM'
);
}
config = config.filter((item) => item.name !== '');
return config;
});
// Checking if any of the config fields are empty
const isFieldEmpty = (field: string) => field.trim() === ''; const isFieldEmpty = (field: string) => field.trim() === '';
type ConfigSection = { const AreAnyConfigFieldsEmpty = (config: ServerConfigs): boolean => {
enabled: boolean;
fields: Record<string, string>;
};
const AreAnyConfigFieldsEmpty = (config: Config): boolean => {
const sections: Array<ConfigSection> = [ const sections: Array<ConfigSection> = [
config.providers.github, config.providers.github,
config.providers.google, config.providers.google,
@@ -337,28 +153,44 @@ export function useConfigHandler(updatedConfigs?: Config) {
}; };
// Transforming the working configs back into the format required by the mutations // Transforming the working configs back into the format required by the mutations
const updatedAllowedAuthProviders = computed(() => { const transformInfraConfigs = () => {
return [ const updatedWorkingConfigs: ConfigTransform[] = [
{ {
provider: 'GOOGLE', config: GOOGLE_CONFIGS,
status: updatedConfigs?.providers.google.enabled ? 'ENABLE' : 'DISABLE', enabled: updatedConfigs?.providers.google.enabled,
fields: updatedConfigs?.providers.google.fields,
}, },
{ {
provider: 'MICROSOFT', config: GITHUB_CONFIGS,
status: updatedConfigs?.providers.microsoft.enabled enabled: updatedConfigs?.providers.github.enabled,
? 'ENABLE' fields: updatedConfigs?.providers.github.fields,
: 'DISABLE',
}, },
{ {
provider: 'GITHUB', config: MICROSOFT_CONFIGS,
status: updatedConfigs?.providers.github.enabled ? 'ENABLE' : 'DISABLE', enabled: updatedConfigs?.providers.microsoft.enabled,
fields: updatedConfigs?.providers.microsoft.fields,
}, },
{ {
provider: 'EMAIL', config: MAIL_CONFIGS,
status: updatedConfigs?.mailConfigs.enabled ? 'ENABLE' : 'DISABLE', enabled: updatedConfigs?.mailConfigs.enabled,
fields: updatedConfigs?.mailConfigs.fields,
}, },
]; ];
const transformedConfigs: UpdatedConfigs[] = [];
updatedWorkingConfigs.forEach(({ config, enabled, fields }) => {
config.forEach(({ name, key }) => {
if (enabled && fields) {
const value =
typeof fields === 'string' ? fields : String(fields[key]);
transformedConfigs.push({ name, value });
}
}); });
});
return transformedConfigs;
};
// Generic function to handle mutation execution and error handling // Generic function to handle mutation execution and error handling
const executeMutation = async <T, V>( const executeMutation = async <T, V>(
@@ -379,27 +211,59 @@ export function useConfigHandler(updatedConfigs?: Config) {
// Updating the auth provider configurations // Updating the auth provider configurations
const updateAuthProvider = ( const updateAuthProvider = (
updateProviderStatus: UseMutationResponse<EnableAndDisableSsoMutation> updateProviderStatus: UseMutationResponse<EnableAndDisableSsoMutation>
) => ) => {
executeMutation( const updatedAllowedAuthProviders: EnableAndDisableSsoArgs[] = [
{
provider: AuthProvider.Google,
status: updatedConfigs?.providers.google.enabled
? ServiceStatus.Enable
: ServiceStatus.Disable,
},
{
provider: AuthProvider.Microsoft,
status: updatedConfigs?.providers.microsoft.enabled
? ServiceStatus.Enable
: ServiceStatus.Disable,
},
{
provider: AuthProvider.Github,
status: updatedConfigs?.providers.github.enabled
? ServiceStatus.Enable
: ServiceStatus.Disable,
},
{
provider: AuthProvider.Email,
status: updatedConfigs?.mailConfigs.enabled
? ServiceStatus.Enable
: ServiceStatus.Disable,
},
];
return executeMutation(
updateProviderStatus, updateProviderStatus,
{ {
providerInfo: providerInfo: updatedAllowedAuthProviders,
updatedAllowedAuthProviders.value as EnableAndDisableSsoArgs[],
}, },
'configs.auth_providers.update_failure' 'configs.auth_providers.update_failure'
); );
};
// Updating the infra configurations // Updating the infra configurations
const updateInfraConfigs = ( const updateInfraConfigs = (
updateInfraConfigsMutation: UseMutationResponse<UpdateInfraConfigsMutation> updateInfraConfigsMutation: UseMutationResponse<UpdateInfraConfigsMutation>
) => ) => {
executeMutation( const infraConfigs: InfraConfigArgs[] = updatedConfigs
? transformInfraConfigs()
: [];
return executeMutation(
updateInfraConfigsMutation, updateInfraConfigsMutation,
{ {
infraConfigs: updatedInfraConfigs.value as InfraConfigArgs[], infraConfigs,
}, },
'configs.mail_configs.update_failure' 'configs.update_failure'
); );
};
// Resetting the infra configurations // Resetting the infra configurations
const resetInfraConfigs = ( const resetInfraConfigs = (
@@ -411,7 +275,6 @@ export function useConfigHandler(updatedConfigs?: Config) {
'configs.reset.failure' 'configs.reset.failure'
); );
// Updating the data sharing configurations
const updateDataSharingConfigs = ( const updateDataSharingConfigs = (
toggleDataSharingMutation: UseMutationResponse<ToggleAnalyticsCollectionMutation> toggleDataSharingMutation: UseMutationResponse<ToggleAnalyticsCollectionMutation>
) => ) =>
@@ -419,8 +282,8 @@ export function useConfigHandler(updatedConfigs?: Config) {
toggleDataSharingMutation, toggleDataSharingMutation,
{ {
status: updatedConfigs?.dataSharingConfigs.enabled status: updatedConfigs?.dataSharingConfigs.enabled
? 'ENABLE' ? ServiceStatus.Enable
: 'DISABLE', : ServiceStatus.Disable,
}, },
'configs.data_sharing.update_failure' 'configs.data_sharing.update_failure'
); );
@@ -428,8 +291,6 @@ export function useConfigHandler(updatedConfigs?: Config) {
return { return {
currentConfigs, currentConfigs,
workingConfigs, workingConfigs,
updatedInfraConfigs,
updatedAllowedAuthProviders,
updateAuthProvider, updateAuthProvider,
updateDataSharingConfigs, updateDataSharingConfigs,
updateInfraConfigs, updateInfraConfigs,

View File

@@ -0,0 +1,160 @@
import { InfraConfigEnum } from './backend/graphql';
export type SsoAuthProviders = 'google' | 'microsoft' | 'github';
export type ServerConfigs = {
providers: {
google: {
name: SsoAuthProviders;
enabled: boolean;
fields: {
client_id: string;
client_secret: string;
callback_url: string;
scope: string;
};
};
github: {
name: SsoAuthProviders;
enabled: boolean;
fields: {
client_id: string;
client_secret: string;
callback_url: string;
scope: string;
};
};
microsoft: {
name: SsoAuthProviders;
enabled: boolean;
fields: {
client_id: string;
client_secret: string;
callback_url: string;
scope: string;
tenant: string;
};
};
};
mailConfigs: {
name: string;
enabled: boolean;
fields: {
mailer_smtp_url: string;
mailer_from_address: string;
};
};
dataSharingConfigs: {
name: string;
enabled: boolean;
};
};
export type UpdatedConfigs = {
name: InfraConfigEnum;
value: string;
};
export type ConfigTransform = {
config: Config[];
enabled?: boolean;
fields?: Record<string, string | boolean> | string;
};
export type ConfigSection = {
enabled: boolean;
fields: Record<string, string>;
};
export type Config = {
name: InfraConfigEnum;
key: string;
};
export const GOOGLE_CONFIGS: Config[] = [
{
name: InfraConfigEnum.GoogleClientId,
key: 'client_id',
},
{
name: InfraConfigEnum.GoogleClientSecret,
key: 'client_secret',
},
{
name: InfraConfigEnum.GoogleCallbackUrl,
key: 'callback_url',
},
{
name: InfraConfigEnum.GoogleScope,
key: 'scope',
},
];
export const MICROSOFT_CONFIGS: Config[] = [
{
name: InfraConfigEnum.MicrosoftClientId,
key: 'client_id',
},
{
name: InfraConfigEnum.MicrosoftClientSecret,
key: 'client_secret',
},
{
name: InfraConfigEnum.MicrosoftCallbackUrl,
key: 'callback_url',
},
{
name: InfraConfigEnum.MicrosoftScope,
key: 'scope',
},
{
name: InfraConfigEnum.MicrosoftTenant,
key: 'tenant',
},
];
export const GITHUB_CONFIGS: Config[] = [
{
name: InfraConfigEnum.GithubClientId,
key: 'client_id',
},
{
name: InfraConfigEnum.GithubClientSecret,
key: 'client_secret',
},
{
name: InfraConfigEnum.GithubCallbackUrl,
key: 'callback_url',
},
{
name: InfraConfigEnum.GithubScope,
key: 'scope',
},
];
export const MAIL_CONFIGS: Config[] = [
{
name: InfraConfigEnum.MailerSmtpUrl,
key: 'mailer_smtp_url',
},
{
name: InfraConfigEnum.MailerAddressFrom,
key: 'mailer_from_address',
},
];
const DATA_SHARING_CONFIGS: Omit<Config, 'key'>[] = [
{
name: InfraConfigEnum.AllowAnalyticsCollection,
},
];
export const ALL_CONFIGS = [
GOOGLE_CONFIGS,
MICROSOFT_CONFIGS,
GITHUB_CONFIGS,
MAIL_CONFIGS,
DATA_SHARING_CONFIGS,
];

View File

@@ -208,13 +208,14 @@ const deleteUserMutation = async (id: string | null) => {
if (result.error) { if (result.error) {
toast.error(t('state.delete_user_failure')); toast.error(t('state.delete_user_failure'));
} else { } else {
const deletedUsers = result.data?.removeUsersByAdmin || []; const deletedUser = result.data?.removeUsersByAdmin || [];
handleUserDeletion(deletedUser);
handleUserDeletion(deletedUsers); const { isDeleted } = deletedUser[0];
if (isDeleted) router.push('/users');
} }
confirmDeletion.value = false; confirmDeletion.value = false;
deleteUserUID.value = null; deleteUserUID.value = null;
!result.error && router.push('/users');
}; };
</script> </script>

333
pnpm-lock.yaml generated
View File

@@ -7,7 +7,7 @@ settings:
overrides: overrides:
vue: 3.3.9 vue: 3.3.9
packageExtensionsChecksum: bdb9819fb2a1070afb75d3fc2c7fd132 packageExtensionsChecksum: e7f8d2e2f491662822f685ff3c4b1274
importers: importers:
@@ -104,6 +104,9 @@ importers:
'@nestjs/schedule': '@nestjs/schedule':
specifier: 4.0.1 specifier: 4.0.1
version: 4.0.1(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0)) version: 4.0.1(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0))
'@nestjs/terminus':
specifier: 10.2.3
version: 10.2.3(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0))(@prisma/client@5.8.1(prisma@5.8.1))(reflect-metadata@0.1.13)(rxjs@7.6.0)
'@nestjs/throttler': '@nestjs/throttler':
specifier: 5.0.1 specifier: 5.0.1
version: 5.0.1(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0))(reflect-metadata@0.1.13) version: 5.0.1(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0))(reflect-metadata@0.1.13)
@@ -455,8 +458,8 @@ importers:
specifier: 1.0.0 specifier: 1.0.0
version: 1.0.0 version: 1.0.0
dioc: dioc:
specifier: 1.0.1 specifier: 3.0.1
version: 1.0.1(vue@3.3.9(typescript@5.3.2)) version: 3.0.1(vue@3.3.9(typescript@5.3.2))
esprima: esprima:
specifier: 4.0.1 specifier: 4.0.1
version: 4.0.1 version: 4.0.1
@@ -474,13 +477,13 @@ importers:
version: 16.8.1 version: 16.8.1
graphql-language-service-interface: graphql-language-service-interface:
specifier: 2.10.2 specifier: 2.10.2
version: 2.10.2(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) version: 2.10.2(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
graphql-tag: graphql-tag:
specifier: 2.12.6 specifier: 2.12.6
version: 2.12.6(graphql@16.8.1) version: 2.12.6(graphql@16.8.1)
httpsnippet: httpsnippet:
specifier: 3.0.1 specifier: 3.0.1
version: 3.0.1(ajv@8.12.0) version: 3.0.1
insomnia-importers: insomnia-importers:
specifier: 3.6.0 specifier: 3.6.0
version: 3.6.0(openapi-types@12.1.3) version: 3.6.0(openapi-types@12.1.3)
@@ -760,7 +763,7 @@ importers:
version: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0) version: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)
vite-plugin-checker: vite-plugin-checker:
specifier: 0.6.2 specifier: 0.6.2
version: 0.6.2(eslint@8.57.0)(meow@8.1.2)(optionator@0.9.3)(typescript@5.3.2)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-tsc@1.8.24(typescript@5.3.2)) version: 0.6.2(eslint@8.57.0)(optionator@0.9.3)(typescript@5.3.2)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-tsc@1.8.24(typescript@5.3.2))
vite-plugin-fonts: vite-plugin-fonts:
specifier: 0.7.0 specifier: 0.7.0
version: 0.7.0(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 0.7.0(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
@@ -879,7 +882,7 @@ importers:
version: 2.8.4 version: 2.8.4
ts-jest: ts-jest:
specifier: 27.1.5 specifier: 27.1.5
version: 27.1.5(@babel/core@7.23.9)(@types/jest@27.5.2)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@17.0.45)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@17.0.45)(typescript@4.9.5)))(typescript@4.9.5) version: 27.1.5(@babel/core@7.23.9)(@types/jest@27.5.2)(jest@29.7.0(@types/node@17.0.45)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@17.0.45)(typescript@4.9.5)))(typescript@4.9.5)
typescript: typescript:
specifier: 4.9.5 specifier: 4.9.5
version: 4.9.5 version: 4.9.5
@@ -923,8 +926,8 @@ importers:
specifier: 6.0.3 specifier: 6.0.3
version: 6.0.3 version: 6.0.3
dioc: dioc:
specifier: 1.0.1 specifier: 3.0.1
version: 1.0.1(vue@3.3.9(typescript@4.9.5)) version: 3.0.1(vue@3.3.9(typescript@4.9.5))
environments.api: environments.api:
specifier: link:@platform/environments/environments.api specifier: link:@platform/environments/environments.api
version: link:@platform/environments/environments.api version: link:@platform/environments/environments.api
@@ -1048,10 +1051,10 @@ importers:
version: 1.1.1(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 1.1.1(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
unplugin-icons: unplugin-icons:
specifier: 0.14.9 specifier: 0.14.9
version: 0.14.9(@vue/compiler-sfc@3.3.10)(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) version: 0.14.9(@vue/compiler-sfc@3.3.10)(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
unplugin-vue-components: unplugin-vue-components:
specifier: 0.21.0 specifier: 0.21.0
version: 0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue@3.3.9(typescript@4.9.5))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) version: 0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue@3.3.9(typescript@4.9.5))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
vite: vite:
specifier: 4.5.0 specifier: 4.5.0
version: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0) version: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)
@@ -1060,7 +1063,7 @@ importers:
version: 1.0.11(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 1.0.11(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
vite-plugin-inspect: vite-plugin-inspect:
specifier: 0.7.38 specifier: 0.7.38
version: 0.7.38(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 0.7.38(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
vite-plugin-pages: vite-plugin-pages:
specifier: 0.26.0 specifier: 0.26.0
version: 0.26.0(@vue/compiler-sfc@3.3.10)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 0.26.0(@vue/compiler-sfc@3.3.10)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
@@ -1217,7 +1220,7 @@ importers:
version: 0.17.4(@vue/compiler-sfc@3.3.10)(vue-template-compiler@2.7.14) version: 0.17.4(@vue/compiler-sfc@3.3.10)(vue-template-compiler@2.7.14)
unplugin-vue-components: unplugin-vue-components:
specifier: 0.25.2 specifier: 0.25.2
version: 0.25.2(@babel/parser@7.23.9)(rollup@3.29.4)(vue@3.3.9(typescript@5.3.2)) version: 0.25.2(@babel/parser@7.23.9)(rollup@2.79.1)(vue@3.3.9(typescript@5.3.2))
vite: vite:
specifier: 4.5.0 specifier: 4.5.0
version: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0) version: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)
@@ -1229,7 +1232,7 @@ importers:
version: 1.0.11(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 1.0.11(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
vite-plugin-inspect: vite-plugin-inspect:
specifier: 0.7.42 specifier: 0.7.42
version: 0.7.42(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 0.7.42(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
vite-plugin-pages: vite-plugin-pages:
specifier: 0.31.0 specifier: 0.31.0
version: 0.31.0(@vue/compiler-sfc@3.3.10)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)) version: 0.31.0(@vue/compiler-sfc@3.3.10)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))
@@ -1271,7 +1274,7 @@ importers:
version: 0.1.0(vue@3.3.9(typescript@4.9.3)) version: 0.1.0(vue@3.3.9(typescript@4.9.3))
'@intlify/unplugin-vue-i18n': '@intlify/unplugin-vue-i18n':
specifier: 1.2.0 specifier: 1.2.0
version: 1.2.0(rollup@3.29.4)(vue-i18n@9.2.2(vue@3.3.9(typescript@4.9.3))) version: 1.2.0(rollup@2.79.1)(vue-i18n@9.2.2(vue@3.3.9(typescript@4.9.3)))
'@types/cors': '@types/cors':
specifier: 2.8.13 specifier: 2.8.13
version: 2.8.13 version: 2.8.13
@@ -1334,10 +1337,10 @@ importers:
version: 2.0.0(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@4.9.3) version: 2.0.0(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@4.9.3)
unplugin-icons: unplugin-icons:
specifier: 0.14.9 specifier: 0.14.9
version: 0.14.9(@vue/compiler-sfc@3.2.45)(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) version: 0.14.9(@vue/compiler-sfc@3.2.45)(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
unplugin-vue-components: unplugin-vue-components:
specifier: 0.21.0 specifier: 0.21.0
version: 0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue@3.3.9(typescript@4.9.3))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) version: 0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue@3.3.9(typescript@4.9.3))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
vue: vue:
specifier: 3.3.9 specifier: 3.3.9
version: 3.3.9(typescript@4.9.3) version: 3.3.9(typescript@4.9.3)
@@ -3511,6 +3514,10 @@ packages:
resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==} resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
'@intlify/message-compiler@10.0.0-alpha.3':
resolution: {integrity: sha512-WjM1KAl5enpOfprfVAJ3FzwACmizZFPgyV0sn+QXoWH8BG2ahVkf7uVEqQH0mvUr2rKKaScwpzhH3wZ5F7ZdPw==}
engines: {node: '>= 16'}
'@intlify/message-compiler@9.2.2': '@intlify/message-compiler@9.2.2':
resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==} resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
@@ -3519,14 +3526,14 @@ packages:
resolution: {integrity: sha512-hwqQXyTnDzAVZ300SU31jO0+3OJbpOdfVU6iBkrmNpS7t2HRnVACo0EwcEXzJa++4EVDreqz5OeqJbt+PeSGGA==} resolution: {integrity: sha512-hwqQXyTnDzAVZ300SU31jO0+3OJbpOdfVU6iBkrmNpS7t2HRnVACo0EwcEXzJa++4EVDreqz5OeqJbt+PeSGGA==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
'@intlify/message-compiler@9.4.1':
resolution: {integrity: sha512-aN2N+dUx320108QhH51Ycd2LEpZ+NKbzyQ2kjjhqMcxhHdxtOnkgdx+MDBhOy/CObwBmhC3Nygzc6hNlfKvPNw==}
engines: {node: '>= 16'}
'@intlify/message-compiler@9.8.0': '@intlify/message-compiler@9.8.0':
resolution: {integrity: sha512-McnYWhcoYmDJvssVu6QGR0shqlkJuL1HHdi5lK7fNqvQqRYaQ4lSLjYmZxwc8tRNMdIe9/KUKfyPxU9M6yCtNQ==} resolution: {integrity: sha512-McnYWhcoYmDJvssVu6QGR0shqlkJuL1HHdi5lK7fNqvQqRYaQ4lSLjYmZxwc8tRNMdIe9/KUKfyPxU9M6yCtNQ==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
'@intlify/shared@10.0.0-alpha.3':
resolution: {integrity: sha512-fi2q48i+C6sSCAt3vOj/9LD3tkr1wcvLt+ifZEHrpPiwHCyKLDYGp5qBNUHUBBA/iqFTeWdtHUbHE9z9OeTXkw==}
engines: {node: '>= 16'}
'@intlify/shared@9.2.2': '@intlify/shared@9.2.2':
resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==} resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
@@ -3535,10 +3542,6 @@ packages:
resolution: {integrity: sha512-RucSPqh8O9FFxlYUysQTerSw0b9HIRpyoN1Zjogpm0qLiHK+lBNSa5sh1nCJ4wSsNcjphzgpLQCyR60GZlRV8g==} resolution: {integrity: sha512-RucSPqh8O9FFxlYUysQTerSw0b9HIRpyoN1Zjogpm0qLiHK+lBNSa5sh1nCJ4wSsNcjphzgpLQCyR60GZlRV8g==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
'@intlify/shared@9.4.1':
resolution: {integrity: sha512-A51elBmZWf1FS80inf/32diO9DeXoqg9GR9aUDHFcfHoNDuT46Q+fpPOdj8jiJnSHSBh8E1E+6qWRhAZXdK3Ng==}
engines: {node: '>= 16'}
'@intlify/shared@9.8.0': '@intlify/shared@9.8.0':
resolution: {integrity: sha512-TmgR0RCLjzrSo+W3wT0ALf9851iFMlVI9EYNGeWvZFUQTAJx0bvfsMlPdgVtV1tDNRiAfhkFsMKu6jtUY1ZLKQ==} resolution: {integrity: sha512-TmgR0RCLjzrSo+W3wT0ALf9851iFMlVI9EYNGeWvZFUQTAJx0bvfsMlPdgVtV1tDNRiAfhkFsMKu6jtUY1ZLKQ==}
engines: {node: '>= 16'} engines: {node: '>= 16'}
@@ -3918,6 +3921,54 @@ packages:
peerDependencies: peerDependencies:
typescript: '>=4.8.2' typescript: '>=4.8.2'
'@nestjs/terminus@10.2.3':
resolution: {integrity: sha512-iX7gXtAooePcyQqFt57aDke5MzgdkBeYgF5YsFNNFwOiAFdIQEhfv3PR0G+HlH9F6D7nBCDZt9U87Pks/qHijg==}
peerDependencies:
'@grpc/grpc-js': '*'
'@grpc/proto-loader': '*'
'@mikro-orm/core': '*'
'@mikro-orm/nestjs': '*'
'@nestjs/axios': ^1.0.0 || ^2.0.0 || ^3.0.0
'@nestjs/common': ^9.0.0 || ^10.0.0
'@nestjs/core': ^9.0.0 || ^10.0.0
'@nestjs/microservices': ^9.0.0 || ^10.0.0
'@nestjs/mongoose': ^9.0.0 || ^10.0.0
'@nestjs/sequelize': ^9.0.0 || ^10.0.0
'@nestjs/typeorm': ^9.0.0 || ^10.0.0
'@prisma/client': '*'
mongoose: '*'
reflect-metadata: 0.1.x || 0.2.x
rxjs: 7.x
sequelize: '*'
typeorm: '*'
peerDependenciesMeta:
'@grpc/grpc-js':
optional: true
'@grpc/proto-loader':
optional: true
'@mikro-orm/core':
optional: true
'@mikro-orm/nestjs':
optional: true
'@nestjs/axios':
optional: true
'@nestjs/microservices':
optional: true
'@nestjs/mongoose':
optional: true
'@nestjs/sequelize':
optional: true
'@nestjs/typeorm':
optional: true
'@prisma/client':
optional: true
mongoose:
optional: true
sequelize:
optional: true
typeorm:
optional: true
'@nestjs/testing@10.2.7': '@nestjs/testing@10.2.7':
resolution: {integrity: sha512-d2SIqiJIf/7NSILeNNWSdRvTTpHSouGgisGHwf5PVDC7z4/yXZw/wPO9eJhegnxFlqk6n2LW4QBTmMzbqjAfHA==} resolution: {integrity: sha512-d2SIqiJIf/7NSILeNNWSdRvTTpHSouGgisGHwf5PVDC7z4/yXZw/wPO9eJhegnxFlqk6n2LW4QBTmMzbqjAfHA==}
peerDependencies: peerDependencies:
@@ -5437,16 +5488,25 @@ packages:
peerDependencies: peerDependencies:
ajv: ^6.9.1 ajv: ^6.9.1
ajv@6.12.3:
resolution: {integrity: sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==}
ajv@6.12.6: ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
ajv@8.12.0: ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
ajv@8.13.0:
resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==}
alce@1.2.0: alce@1.2.0:
resolution: {integrity: sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==} resolution: {integrity: sha512-XppPf2S42nO2WhvKzlwzlfcApcXHzjlod30pKmcWjRgLOtqoe5DMuqdiYoM6AgyXksc6A6pV4v1L/WW217e57w==}
engines: {node: '>=0.8.0'} engines: {node: '>=0.8.0'}
ansi-align@3.0.1:
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
ansi-colors@4.1.1: ansi-colors@4.1.1:
resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -5713,6 +5773,10 @@ packages:
boolbase@1.0.0: boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
boxen@5.1.2:
resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==}
engines: {node: '>=10'}
bplist-parser@0.2.0: bplist-parser@0.2.0:
resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
engines: {node: '>= 5.10.0'} engines: {node: '>= 5.10.0'}
@@ -5877,6 +5941,10 @@ packages:
resolution: {integrity: sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==} resolution: {integrity: sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==}
engines: {node: '>=4.0.0'} engines: {node: '>=4.0.0'}
check-disk-space@3.4.0:
resolution: {integrity: sha512-drVkSqfwA+TvuEhFipiR1OC9boEGZL5RrWvVsOthdcvQNXyCCuKkEiTOTXZ7qxSf/GLwq4GvzfrQD/Wz325hgw==}
engines: {node: '>=16'}
check-error@1.0.3: check-error@1.0.3:
resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
@@ -5920,6 +5988,10 @@ packages:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'} engines: {node: '>=6'}
cli-boxes@2.2.1:
resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
engines: {node: '>=6'}
cli-cursor@3.1.0: cli-cursor@3.1.0:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -6457,8 +6529,8 @@ packages:
resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==}
engines: {node: '>=0.3.1'} engines: {node: '>=0.3.1'}
dioc@1.0.1: dioc@3.0.1:
resolution: {integrity: sha512-G3T8ThO2WehWJFrKp687wpXU//WLueJA6t5L7yirhWN/jn7BFNRKwskbJn0LEEd6gqI6rwiQE48f2Zqt5jvYVw==} resolution: {integrity: sha512-LawhI08/B5f5sA6zqrNdtZY9URCjIzmebKVZhmR8lH05HFlx/spAoz4kJ7x1E6pRf/kvWsePSkudv18OR5FT6Q==}
peerDependencies: peerDependencies:
vue: 3.3.9 vue: 3.3.9
peerDependenciesMeta: peerDependenciesMeta:
@@ -7824,8 +7896,6 @@ packages:
resolution: {integrity: sha512-RJbzVu9Gq97Ti76MPKAb9AknKbRluRbzOqswM2qgEW48QUShVEIuJjl43dZG5q0Upj2SZlKqzR6B6ah1q5znfg==} resolution: {integrity: sha512-RJbzVu9Gq97Ti76MPKAb9AknKbRluRbzOqswM2qgEW48QUShVEIuJjl43dZG5q0Upj2SZlKqzR6B6ah1q5znfg==}
engines: {node: ^14.19.1 || ^16.14.2 || ^18.0.0} engines: {node: ^14.19.1 || ^16.14.2 || ^18.0.0}
hasBin: true hasBin: true
peerDependencies:
ajv: 6.12.3
human-signals@1.1.1: human-signals@1.1.1:
resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
@@ -9163,8 +9233,8 @@ packages:
no-case@3.0.4: no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
node-abi@3.60.0: node-abi@3.57.0:
resolution: {integrity: sha512-zcGgwoXbzw9NczqbGzAWL/ToDYAxv1V8gL1D67ClbdkIfeeDBbY0GelZtC25ayLvVjr2q2cloHeQV1R0QAWqRQ==} resolution: {integrity: sha512-Dp+A9JWxRaKuHP35H77I4kCKesDy5HUDEmScia2FyncMTOXASMyg251F5PhFoDA5uqBrDDffiLpbqnrZmNXW+g==}
engines: {node: '>=10'} engines: {node: '>=10'}
node-abort-controller@3.1.1: node-abort-controller@3.1.1:
@@ -12090,6 +12160,10 @@ packages:
wide-align@1.1.5: wide-align@1.1.5:
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
widest-line@3.1.0:
resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==}
engines: {node: '>=8'}
windows-release@4.0.0: windows-release@4.0.0:
resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==} resolution: {integrity: sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -12132,6 +12206,7 @@ packages:
workbox-google-analytics@7.0.0: workbox-google-analytics@7.0.0:
resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==} resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==}
deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained
workbox-navigation-preload@7.0.0: workbox-navigation-preload@7.0.0:
resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==} resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==}
@@ -12467,9 +12542,9 @@ snapshots:
'@antfu/utils@0.7.6': {} '@antfu/utils@0.7.6': {}
'@apideck/better-ajv-errors@0.3.6(ajv@8.12.0)': '@apideck/better-ajv-errors@0.3.6(ajv@8.13.0)':
dependencies: dependencies:
ajv: 8.12.0 ajv: 8.13.0
json-schema: 0.4.0 json-schema: 0.4.0
jsonpointer: 5.0.1 jsonpointer: 5.0.1
leven: 3.1.0 leven: 3.1.0
@@ -12507,8 +12582,8 @@ snapshots:
'@apidevtools/openapi-schemas': 2.1.0 '@apidevtools/openapi-schemas': 2.1.0
'@apidevtools/swagger-methods': 3.0.2 '@apidevtools/swagger-methods': 3.0.2
'@jsdevtools/ono': 7.1.3 '@jsdevtools/ono': 7.1.3
ajv: 8.12.0 ajv: 8.13.0
ajv-draft-04: 1.0.0(ajv@8.12.0) ajv-draft-04: 1.0.0(ajv@8.13.0)
call-me-maybe: 1.0.2 call-me-maybe: 1.0.2
openapi-types: 12.1.3 openapi-types: 12.1.3
@@ -15444,8 +15519,8 @@ snapshots:
'@intlify/bundle-utils@3.4.0(vue-i18n@9.8.0(vue@3.3.9(typescript@5.3.2)))': '@intlify/bundle-utils@3.4.0(vue-i18n@9.8.0(vue@3.3.9(typescript@5.3.2)))':
dependencies: dependencies:
'@intlify/message-compiler': 9.4.1 '@intlify/message-compiler': 10.0.0-alpha.3
'@intlify/shared': 9.4.1 '@intlify/shared': 10.0.0-alpha.3
jsonc-eslint-parser: 1.4.1 jsonc-eslint-parser: 1.4.1
source-map: 0.6.1 source-map: 0.6.1
yaml-eslint-parser: 0.3.2 yaml-eslint-parser: 0.3.2
@@ -15498,6 +15573,11 @@ snapshots:
dependencies: dependencies:
'@intlify/shared': 9.2.2 '@intlify/shared': 9.2.2
'@intlify/message-compiler@10.0.0-alpha.3':
dependencies:
'@intlify/shared': 10.0.0-alpha.3
source-map-js: 1.0.2
'@intlify/message-compiler@9.2.2': '@intlify/message-compiler@9.2.2':
dependencies: dependencies:
'@intlify/shared': 9.2.2 '@intlify/shared': 9.2.2
@@ -15508,29 +15588,24 @@ snapshots:
'@intlify/shared': 9.3.0-beta.20 '@intlify/shared': 9.3.0-beta.20
source-map-js: 1.0.2 source-map-js: 1.0.2
'@intlify/message-compiler@9.4.1':
dependencies:
'@intlify/shared': 9.4.1
source-map-js: 1.0.2
'@intlify/message-compiler@9.8.0': '@intlify/message-compiler@9.8.0':
dependencies: dependencies:
'@intlify/shared': 9.8.0 '@intlify/shared': 9.8.0
source-map-js: 1.0.2 source-map-js: 1.0.2
'@intlify/shared@10.0.0-alpha.3': {}
'@intlify/shared@9.2.2': {} '@intlify/shared@9.2.2': {}
'@intlify/shared@9.3.0-beta.20': {} '@intlify/shared@9.3.0-beta.20': {}
'@intlify/shared@9.4.1': {}
'@intlify/shared@9.8.0': {} '@intlify/shared@9.8.0': {}
'@intlify/unplugin-vue-i18n@1.2.0(rollup@3.29.4)(vue-i18n@9.2.2(vue@3.3.9(typescript@4.9.3)))': '@intlify/unplugin-vue-i18n@1.2.0(rollup@2.79.1)(vue-i18n@9.2.2(vue@3.3.9(typescript@4.9.3)))':
dependencies: dependencies:
'@intlify/bundle-utils': 7.4.0(vue-i18n@9.2.2(vue@3.3.9(typescript@4.9.3))) '@intlify/bundle-utils': 7.4.0(vue-i18n@9.2.2(vue@3.3.9(typescript@4.9.3)))
'@intlify/shared': 9.8.0 '@intlify/shared': 9.8.0
'@rollup/pluginutils': 5.1.0(rollup@3.29.4) '@rollup/pluginutils': 5.1.0(rollup@2.79.1)
'@vue/compiler-sfc': 3.3.10 '@vue/compiler-sfc': 3.3.10
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
fast-glob: 3.3.2 fast-glob: 3.3.2
@@ -15549,7 +15624,7 @@ snapshots:
'@intlify/vite-plugin-vue-i18n@6.0.1(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-i18n@9.8.0(vue@3.3.9(typescript@4.9.5)))': '@intlify/vite-plugin-vue-i18n@6.0.1(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-i18n@9.8.0(vue@3.3.9(typescript@4.9.5)))':
dependencies: dependencies:
'@intlify/bundle-utils': 7.0.0(vue-i18n@9.8.0(vue@3.3.9(typescript@4.9.5))) '@intlify/bundle-utils': 7.0.0(vue-i18n@9.8.0(vue@3.3.9(typescript@4.9.5)))
'@intlify/shared': 9.4.1 '@intlify/shared': 10.0.0-alpha.3
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
fast-glob: 3.3.2 fast-glob: 3.3.2
@@ -15563,7 +15638,7 @@ snapshots:
'@intlify/vite-plugin-vue-i18n@7.0.0(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-i18n@9.8.0(vue@3.3.9(typescript@5.3.2)))': '@intlify/vite-plugin-vue-i18n@7.0.0(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-i18n@9.8.0(vue@3.3.9(typescript@5.3.2)))':
dependencies: dependencies:
'@intlify/bundle-utils': 3.4.0(vue-i18n@9.8.0(vue@3.3.9(typescript@5.3.2))) '@intlify/bundle-utils': 3.4.0(vue-i18n@9.8.0(vue@3.3.9(typescript@5.3.2)))
'@intlify/shared': 9.4.1 '@intlify/shared': 10.0.0-alpha.3
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
fast-glob: 3.3.2 fast-glob: 3.3.2
@@ -16147,6 +16222,17 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- chokidar - chokidar
'@nestjs/terminus@10.2.3(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0))(@prisma/client@5.8.1(prisma@5.8.1))(reflect-metadata@0.1.13)(rxjs@7.6.0)':
dependencies:
'@nestjs/common': 10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0)
'@nestjs/core': 10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0)
boxen: 5.1.2
check-disk-space: 3.4.0
reflect-metadata: 0.1.13
rxjs: 7.6.0
optionalDependencies:
'@prisma/client': 5.8.1(prisma@5.8.1)
'@nestjs/testing@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7))': '@nestjs/testing@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7)(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/platform-express@10.2.7(@nestjs/common@10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0))(@nestjs/core@10.2.7))':
dependencies: dependencies:
'@nestjs/common': 10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0) '@nestjs/common': 10.2.7(reflect-metadata@0.1.13)(rxjs@7.6.0)
@@ -16378,6 +16464,14 @@ snapshots:
estree-walker: 2.0.2 estree-walker: 2.0.2
picomatch: 2.3.1 picomatch: 2.3.1
'@rollup/pluginutils@5.1.0(rollup@2.79.1)':
dependencies:
'@types/estree': 1.0.5
estree-walker: 2.0.2
picomatch: 2.3.1
optionalDependencies:
rollup: 2.79.1
'@rollup/pluginutils@5.1.0(rollup@3.29.4)': '@rollup/pluginutils@5.1.0(rollup@3.29.4)':
dependencies: dependencies:
'@types/estree': 1.0.5 '@types/estree': 1.0.5
@@ -16673,7 +16767,7 @@ snapshots:
'@types/graceful-fs@4.1.5': '@types/graceful-fs@4.1.5':
dependencies: dependencies:
'@types/node': 18.18.8 '@types/node': 17.0.45
'@types/har-format@1.2.15': {} '@types/har-format@1.2.15': {}
@@ -18140,9 +18234,9 @@ snapshots:
clean-stack: 2.2.0 clean-stack: 2.2.0
indent-string: 4.0.0 indent-string: 4.0.0
ajv-draft-04@1.0.0(ajv@8.12.0): ajv-draft-04@1.0.0(ajv@8.13.0):
optionalDependencies: optionalDependencies:
ajv: 8.12.0 ajv: 8.13.0
ajv-formats@2.1.1(ajv@8.12.0): ajv-formats@2.1.1(ajv@8.12.0):
optionalDependencies: optionalDependencies:
@@ -18152,6 +18246,13 @@ snapshots:
dependencies: dependencies:
ajv: 6.12.6 ajv: 6.12.6
ajv@6.12.3:
dependencies:
fast-deep-equal: 3.1.3
fast-json-stable-stringify: 2.1.0
json-schema-traverse: 0.4.1
uri-js: 4.4.1
ajv@6.12.6: ajv@6.12.6:
dependencies: dependencies:
fast-deep-equal: 3.1.3 fast-deep-equal: 3.1.3
@@ -18166,11 +18267,22 @@ snapshots:
require-from-string: 2.0.2 require-from-string: 2.0.2
uri-js: 4.4.1 uri-js: 4.4.1
ajv@8.13.0:
dependencies:
fast-deep-equal: 3.1.3
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
uri-js: 4.4.1
alce@1.2.0: alce@1.2.0:
dependencies: dependencies:
esprima: 1.2.5 esprima: 1.2.5
estraverse: 1.9.3 estraverse: 1.9.3
ansi-align@3.0.1:
dependencies:
string-width: 4.2.3
ansi-colors@4.1.1: {} ansi-colors@4.1.1: {}
ansi-colors@4.1.3: {} ansi-colors@4.1.3: {}
@@ -18532,6 +18644,17 @@ snapshots:
boolbase@1.0.0: {} boolbase@1.0.0: {}
boxen@5.1.2:
dependencies:
ansi-align: 3.0.1
camelcase: 6.3.0
chalk: 4.1.2
cli-boxes: 2.2.1
string-width: 4.2.3
type-fest: 0.20.2
widest-line: 3.1.0
wrap-ansi: 7.0.0
bplist-parser@0.2.0: bplist-parser@0.2.0:
dependencies: dependencies:
big-integer: 1.6.51 big-integer: 1.6.51
@@ -18740,6 +18863,8 @@ snapshots:
charset@1.0.1: {} charset@1.0.1: {}
check-disk-space@3.4.0: {}
check-error@1.0.3: check-error@1.0.3:
dependencies: dependencies:
get-func-name: 2.0.2 get-func-name: 2.0.2
@@ -18793,6 +18918,8 @@ snapshots:
clean-stack@2.2.0: {} clean-stack@2.2.0: {}
cli-boxes@2.2.1: {}
cli-cursor@3.1.0: cli-cursor@3.1.0:
dependencies: dependencies:
restore-cursor: 3.1.0 restore-cursor: 3.1.0
@@ -19016,10 +19143,10 @@ snapshots:
ts-node: 10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@4.9.3) ts-node: 10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@4.9.3)
typescript: 4.9.3 typescript: 4.9.3
cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2): cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2):
dependencies: dependencies:
'@types/node': 18.18.8 '@types/node': 18.18.8
cosmiconfig: 8.2.0 cosmiconfig: 7.0.1
ts-node: 10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2) ts-node: 10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2)
typescript: 5.3.2 typescript: 5.3.2
optional: true optional: true
@@ -19340,13 +19467,13 @@ snapshots:
diff@5.0.0: {} diff@5.0.0: {}
dioc@1.0.1(vue@3.3.9(typescript@4.9.5)): dioc@3.0.1(vue@3.3.9(typescript@4.9.5)):
dependencies: dependencies:
rxjs: 7.8.1 rxjs: 7.8.1
optionalDependencies: optionalDependencies:
vue: 3.3.9(typescript@4.9.5) vue: 3.3.9(typescript@4.9.5)
dioc@1.0.1(vue@3.3.9(typescript@5.3.2)): dioc@3.0.1(vue@3.3.9(typescript@5.3.2)):
dependencies: dependencies:
rxjs: 7.8.1 rxjs: 7.8.1
optionalDependencies: optionalDependencies:
@@ -20035,7 +20162,7 @@ snapshots:
dependencies: dependencies:
'@eslint/eslintrc': 1.3.3 '@eslint/eslintrc': 1.3.3
'@humanwhocodes/config-array': 0.9.5 '@humanwhocodes/config-array': 0.9.5
ajv: 6.12.6 ajv: 6.12.3
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.3 cross-spawn: 7.0.3
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
@@ -20077,7 +20204,7 @@ snapshots:
'@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/config-array': 0.11.14
'@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/module-importer': 1.0.1
'@nodelib/fs.walk': 1.2.8 '@nodelib/fs.walk': 1.2.8
ajv: 6.12.6 ajv: 6.12.3
chalk: 4.1.2 chalk: 4.1.2
cross-spawn: 7.0.3 cross-spawn: 7.0.3
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
@@ -20894,7 +21021,7 @@ snapshots:
- encoding - encoding
- utf-8-validate - utf-8-validate
graphql-config@4.4.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1): graphql-config@4.4.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1):
dependencies: dependencies:
'@graphql-tools/graphql-file-loader': 7.5.16(graphql@16.8.1) '@graphql-tools/graphql-file-loader': 7.5.16(graphql@16.8.1)
'@graphql-tools/json-file-loader': 7.4.17(graphql@16.8.1) '@graphql-tools/json-file-loader': 7.4.17(graphql@16.8.1)
@@ -20908,7 +21035,7 @@ snapshots:
string-env-interpolation: 1.0.1 string-env-interpolation: 1.0.1
tslib: 2.6.2 tslib: 2.6.2
optionalDependencies: optionalDependencies:
cosmiconfig-typescript-loader: 4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2) cosmiconfig-typescript-loader: 4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- bufferutil - bufferutil
@@ -20935,13 +21062,13 @@ snapshots:
- encoding - encoding
- utf-8-validate - utf-8-validate
graphql-language-service-interface@2.10.2(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1): graphql-language-service-interface@2.10.2(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1):
dependencies: dependencies:
graphql: 16.8.1 graphql: 16.8.1
graphql-config: 4.4.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) graphql-config: 4.4.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
graphql-language-service-parser: 1.10.4(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) graphql-language-service-parser: 1.10.4(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
graphql-language-service-types: 1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) graphql-language-service-types: 1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
graphql-language-service-utils: 2.7.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) graphql-language-service-utils: 2.7.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
vscode-languageserver-types: 3.17.2 vscode-languageserver-types: 3.17.2
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
@@ -20951,10 +21078,10 @@ snapshots:
- encoding - encoding
- utf-8-validate - utf-8-validate
graphql-language-service-parser@1.10.4(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1): graphql-language-service-parser@1.10.4(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1):
dependencies: dependencies:
graphql: 16.8.1 graphql: 16.8.1
graphql-language-service-types: 1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) graphql-language-service-types: 1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- bufferutil - bufferutil
@@ -20963,10 +21090,10 @@ snapshots:
- encoding - encoding
- utf-8-validate - utf-8-validate
graphql-language-service-types@1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1): graphql-language-service-types@1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1):
dependencies: dependencies:
graphql: 16.8.1 graphql: 16.8.1
graphql-config: 4.4.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) graphql-config: 4.4.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
vscode-languageserver-types: 3.17.2 vscode-languageserver-types: 3.17.2
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
@@ -20976,11 +21103,11 @@ snapshots:
- encoding - encoding
- utf-8-validate - utf-8-validate
graphql-language-service-utils@2.7.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1): graphql-language-service-utils@2.7.1(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1):
dependencies: dependencies:
'@types/json-schema': 7.0.9 '@types/json-schema': 7.0.9
graphql: 16.8.1 graphql: 16.8.1
graphql-language-service-types: 1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@8.2.0)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1) graphql-language-service-types: 1.8.7(@types/node@18.18.8)(cosmiconfig-typescript-loader@4.3.0(@types/node@18.18.8)(cosmiconfig@7.0.1)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.18.8)(typescript@5.3.2))(typescript@5.3.2))(graphql@16.8.1)
nullthrows: 1.1.1 nullthrows: 1.1.1
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
@@ -21256,9 +21383,9 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
httpsnippet@3.0.1(ajv@8.12.0): httpsnippet@3.0.1:
dependencies: dependencies:
ajv: 8.12.0 ajv: 6.12.3
chalk: 4.1.2 chalk: 4.1.2
event-stream: 4.0.1 event-stream: 4.0.1
form-data: 4.0.0 form-data: 4.0.0
@@ -23232,7 +23359,7 @@ snapshots:
lower-case: 2.0.2 lower-case: 2.0.2
tslib: 2.6.2 tslib: 2.6.2
node-abi@3.60.0: node-abi@3.57.0:
dependencies: dependencies:
semver: 7.6.0 semver: 7.6.0
@@ -23808,7 +23935,7 @@ snapshots:
minimist: 1.2.6 minimist: 1.2.6
mkdirp-classic: 0.5.3 mkdirp-classic: 0.5.3
napi-build-utils: 1.0.2 napi-build-utils: 1.0.2
node-abi: 3.60.0 node-abi: 3.57.0
pump: 3.0.0 pump: 3.0.0
rc: 1.2.8 rc: 1.2.8
simple-get: 4.0.1 simple-get: 4.0.1
@@ -25278,7 +25405,7 @@ snapshots:
ts-interface-checker@0.1.13: {} ts-interface-checker@0.1.13: {}
ts-jest@27.1.5(@babel/core@7.23.9)(@types/jest@27.5.2)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.7.0(@types/node@17.0.45)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@17.0.45)(typescript@4.9.5)))(typescript@4.9.5): ts-jest@27.1.5(@babel/core@7.23.9)(@types/jest@27.5.2)(jest@29.7.0(@types/node@17.0.45)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@17.0.45)(typescript@4.9.5)))(typescript@4.9.5):
dependencies: dependencies:
bs-logger: 0.2.6 bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0 fast-json-stable-stringify: 2.1.0
@@ -25293,7 +25420,6 @@ snapshots:
optionalDependencies: optionalDependencies:
'@babel/core': 7.23.9 '@babel/core': 7.23.9
'@types/jest': 27.5.2 '@types/jest': 27.5.2
babel-jest: 29.7.0(@babel/core@7.23.9)
ts-jest@29.0.5(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.4.1(@types/node@18.11.10)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.11.10)(typescript@4.9.3)))(typescript@4.9.3): ts-jest@29.0.5(@babel/core@7.23.9)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.23.9))(jest@29.4.1(@types/node@18.11.10)(ts-node@10.9.1(@swc/core@1.4.2)(@types/node@18.11.10)(typescript@4.9.3)))(typescript@4.9.3):
dependencies: dependencies:
@@ -25715,7 +25841,7 @@ snapshots:
unplugin: 1.5.1 unplugin: 1.5.1
vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0) vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)
unplugin-icons@0.14.9(@vue/compiler-sfc@3.2.45)(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin-icons@0.14.9(@vue/compiler-sfc@3.2.45)(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
'@antfu/install-pkg': 0.1.1 '@antfu/install-pkg': 0.1.1
'@antfu/utils': 0.5.2 '@antfu/utils': 0.5.2
@@ -25723,7 +25849,7 @@ snapshots:
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
kolorist: 1.8.0 kolorist: 1.8.0
local-pkg: 0.4.3 local-pkg: 0.4.3
unplugin: 0.9.5(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) unplugin: 0.9.5(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
optionalDependencies: optionalDependencies:
'@vue/compiler-sfc': 3.2.45 '@vue/compiler-sfc': 3.2.45
vue-template-compiler: 2.7.14 vue-template-compiler: 2.7.14
@@ -25734,7 +25860,7 @@ snapshots:
- vite - vite
- webpack - webpack
unplugin-icons@0.14.9(@vue/compiler-sfc@3.3.10)(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin-icons@0.14.9(@vue/compiler-sfc@3.3.10)(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-template-compiler@2.7.14)(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
'@antfu/install-pkg': 0.1.1 '@antfu/install-pkg': 0.1.1
'@antfu/utils': 0.5.2 '@antfu/utils': 0.5.2
@@ -25742,7 +25868,7 @@ snapshots:
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
kolorist: 1.8.0 kolorist: 1.8.0
local-pkg: 0.4.3 local-pkg: 0.4.3
unplugin: 0.9.5(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) unplugin: 0.9.5(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
optionalDependencies: optionalDependencies:
'@vue/compiler-sfc': 3.3.10 '@vue/compiler-sfc': 3.3.10
vue-template-compiler: 2.7.14 vue-template-compiler: 2.7.14
@@ -25768,7 +25894,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
unplugin-vue-components@0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue@3.3.9(typescript@4.9.3))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin-vue-components@0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(vue@3.3.9(typescript@4.9.3))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
'@antfu/utils': 0.5.2 '@antfu/utils': 0.5.2
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
@@ -25779,7 +25905,7 @@ snapshots:
magic-string: 0.26.7 magic-string: 0.26.7
minimatch: 5.1.6 minimatch: 5.1.6
resolve: 1.22.8 resolve: 1.22.8
unplugin: 0.7.1(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) unplugin: 0.7.1(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
vue: 3.3.9(typescript@4.9.3) vue: 3.3.9(typescript@4.9.3)
optionalDependencies: optionalDependencies:
'@babel/parser': 7.23.9 '@babel/parser': 7.23.9
@@ -25790,7 +25916,7 @@ snapshots:
- vite - vite
- webpack - webpack
unplugin-vue-components@0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue@3.3.9(typescript@4.9.5))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin-vue-components@0.21.0(@babel/parser@7.23.9)(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue@3.3.9(typescript@4.9.5))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
'@antfu/utils': 0.5.2 '@antfu/utils': 0.5.2
'@rollup/pluginutils': 4.2.1 '@rollup/pluginutils': 4.2.1
@@ -25801,7 +25927,7 @@ snapshots:
magic-string: 0.26.7 magic-string: 0.26.7
minimatch: 5.1.6 minimatch: 5.1.6
resolve: 1.22.8 resolve: 1.22.8
unplugin: 0.7.1(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)) unplugin: 0.7.1(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0))
vue: 3.3.9(typescript@4.9.5) vue: 3.3.9(typescript@4.9.5)
optionalDependencies: optionalDependencies:
'@babel/parser': 7.23.9 '@babel/parser': 7.23.9
@@ -25812,10 +25938,10 @@ snapshots:
- vite - vite
- webpack - webpack
unplugin-vue-components@0.25.2(@babel/parser@7.23.9)(rollup@3.29.4)(vue@3.3.9(typescript@5.3.2)): unplugin-vue-components@0.25.2(@babel/parser@7.23.9)(rollup@2.79.1)(vue@3.3.9(typescript@5.3.2)):
dependencies: dependencies:
'@antfu/utils': 0.7.6 '@antfu/utils': 0.7.6
'@rollup/pluginutils': 5.1.0(rollup@3.29.4) '@rollup/pluginutils': 5.1.0(rollup@2.79.1)
chokidar: 3.5.3 chokidar: 3.5.3
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
fast-glob: 3.3.2 fast-glob: 3.3.2
@@ -25850,7 +25976,7 @@ snapshots:
- rollup - rollup
- supports-color - supports-color
unplugin@0.7.1(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin@0.7.1(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
acorn: 8.11.3 acorn: 8.11.3
chokidar: 3.5.3 chokidar: 3.5.3
@@ -25858,11 +25984,11 @@ snapshots:
webpack-virtual-modules: 0.4.4 webpack-virtual-modules: 0.4.4
optionalDependencies: optionalDependencies:
esbuild: 0.20.0 esbuild: 0.20.0
rollup: 3.29.4 rollup: 2.79.1
vite: 3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0) vite: 3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0)
webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0) webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)
unplugin@0.7.1(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin@0.7.1(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
acorn: 8.11.3 acorn: 8.11.3
chokidar: 3.5.3 chokidar: 3.5.3
@@ -25870,11 +25996,11 @@ snapshots:
webpack-virtual-modules: 0.4.4 webpack-virtual-modules: 0.4.4
optionalDependencies: optionalDependencies:
esbuild: 0.20.0 esbuild: 0.20.0
rollup: 3.29.4 rollup: 2.79.1
vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0) vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)
webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0) webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)
unplugin@0.9.5(esbuild@0.20.0)(rollup@3.29.4)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin@0.9.5(esbuild@0.20.0)(rollup@2.79.1)(vite@3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
acorn: 8.11.3 acorn: 8.11.3
chokidar: 3.5.3 chokidar: 3.5.3
@@ -25882,11 +26008,11 @@ snapshots:
webpack-virtual-modules: 0.4.4 webpack-virtual-modules: 0.4.4
optionalDependencies: optionalDependencies:
esbuild: 0.20.0 esbuild: 0.20.0
rollup: 3.29.4 rollup: 2.79.1
vite: 3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0) vite: 3.2.4(@types/node@18.18.8)(sass@1.58.0)(terser@5.27.0)
webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0) webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)
unplugin@0.9.5(esbuild@0.20.0)(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)): unplugin@0.9.5(esbuild@0.20.0)(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(webpack@5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)):
dependencies: dependencies:
acorn: 8.11.3 acorn: 8.11.3
chokidar: 3.5.3 chokidar: 3.5.3
@@ -25894,7 +26020,7 @@ snapshots:
webpack-virtual-modules: 0.4.4 webpack-virtual-modules: 0.4.4
optionalDependencies: optionalDependencies:
esbuild: 0.20.0 esbuild: 0.20.0
rollup: 3.29.4 rollup: 2.79.1
vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0) vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)
webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0) webpack: 5.90.0(@swc/core@1.4.2)(esbuild@0.20.0)
@@ -26028,7 +26154,7 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-plugin-checker@0.6.2(eslint@8.57.0)(meow@8.1.2)(optionator@0.9.3)(typescript@5.3.2)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-tsc@1.8.24(typescript@5.3.2)): vite-plugin-checker@0.6.2(eslint@8.57.0)(optionator@0.9.3)(typescript@5.3.2)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0))(vue-tsc@1.8.24(typescript@5.3.2)):
dependencies: dependencies:
'@babel/code-frame': 7.23.5 '@babel/code-frame': 7.23.5
ansi-escapes: 4.3.2 ansi-escapes: 4.3.2
@@ -26050,7 +26176,6 @@ snapshots:
vscode-uri: 3.0.7 vscode-uri: 3.0.7
optionalDependencies: optionalDependencies:
eslint: 8.57.0 eslint: 8.57.0
meow: 8.1.2
optionator: 0.9.3 optionator: 0.9.3
typescript: 5.3.2 typescript: 5.3.2
vue-tsc: 1.8.24(typescript@5.3.2) vue-tsc: 1.8.24(typescript@5.3.2)
@@ -26096,10 +26221,10 @@ snapshots:
dependencies: dependencies:
vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0) vite: 4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)
vite-plugin-inspect@0.7.38(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)): vite-plugin-inspect@0.7.38(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)):
dependencies: dependencies:
'@antfu/utils': 0.7.6 '@antfu/utils': 0.7.6
'@rollup/pluginutils': 5.1.0(rollup@3.29.4) '@rollup/pluginutils': 5.1.0(rollup@2.79.1)
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
error-stack-parser-es: 0.1.1 error-stack-parser-es: 0.1.1
fs-extra: 11.1.1 fs-extra: 11.1.1
@@ -26111,10 +26236,10 @@ snapshots:
- rollup - rollup
- supports-color - supports-color
vite-plugin-inspect@0.7.42(rollup@3.29.4)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)): vite-plugin-inspect@0.7.42(rollup@2.79.1)(vite@4.5.0(@types/node@18.18.8)(sass@1.69.5)(terser@5.27.0)):
dependencies: dependencies:
'@antfu/utils': 0.7.6 '@antfu/utils': 0.7.6
'@rollup/pluginutils': 5.1.0(rollup@3.29.4) '@rollup/pluginutils': 5.1.0(rollup@2.79.1)
debug: 4.3.4(supports-color@9.2.2) debug: 4.3.4(supports-color@9.2.2)
error-stack-parser-es: 0.1.1 error-stack-parser-es: 0.1.1
fs-extra: 11.1.1 fs-extra: 11.1.1
@@ -26865,6 +26990,10 @@ snapshots:
dependencies: dependencies:
string-width: 4.2.3 string-width: 4.2.3
widest-line@3.1.0:
dependencies:
string-width: 4.2.3
windows-release@4.0.0: windows-release@4.0.0:
dependencies: dependencies:
execa: 4.1.0 execa: 4.1.0
@@ -26893,7 +27022,7 @@ snapshots:
workbox-build@7.0.0(@types/babel__core@7.1.19): workbox-build@7.0.0(@types/babel__core@7.1.19):
dependencies: dependencies:
'@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0) '@apideck/better-ajv-errors': 0.3.6(ajv@8.13.0)
'@babel/core': 7.23.9 '@babel/core': 7.23.9
'@babel/preset-env': 7.23.9(@babel/core@7.23.9) '@babel/preset-env': 7.23.9(@babel/core@7.23.9)
'@babel/runtime': 7.23.9 '@babel/runtime': 7.23.9
@@ -26901,7 +27030,7 @@ snapshots:
'@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1) '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1)
'@rollup/plugin-replace': 2.4.2(rollup@2.79.1) '@rollup/plugin-replace': 2.4.2(rollup@2.79.1)
'@surma/rollup-plugin-off-main-thread': 2.2.3 '@surma/rollup-plugin-off-main-thread': 2.2.3
ajv: 8.12.0 ajv: 8.13.0
common-tags: 1.8.2 common-tags: 1.8.2
fast-json-stable-stringify: 2.1.0 fast-json-stable-stringify: 2.1.0
fs-extra: 9.1.0 fs-extra: 9.1.0

View File

@@ -1,4 +1,4 @@
FROM node:18-alpine3.19 as base_builder FROM node:20-alpine3.19 as base_builder
WORKDIR /usr/src/app WORKDIR /usr/src/app