From bc509e106c3e860ffbddc6cd59cae4bac09f66f8 Mon Sep 17 00:00:00 2001 From: naarang <93020785+naarang@users.noreply.github.com> Date: Tue, 12 Nov 2024 16:16:34 +0900 Subject: [PATCH 1/2] =?UTF-8?q?Feature=20#21=20:=20lotus=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=EC=B0=BD=20=EA=B5=AC=ED=98=84=ED=95=98=EA=B8=B0=20(#3?= =?UTF-8?q?1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(#15): eslint test * feat(#15): lotusCard 컴포넌트 구현하기 - revert로 인해 다시 구현 내용 반영함 - api 명세서를 바탕으로 interface 다시 반영함 * feat(#15): lotusCard 컴포넌트 태그 구현하기 - badge 컴포넌트 이용해서 tagList 보여주기 - Text 컴포넌트 적용해서 통일하기 * feat(#21): lotusSearchBar 컴포넌트 구현하기 - Input 컴포넌트 적용하기 - 대략적인 레이아웃 구현하기 * feat(#21): lotus 검색창에 필요한 검색하는 함수 구현하기 - 추가로 border 컬러 더 밝게 변경하기 * fix(#21): pr 피드백 반영하기 - 회색 텍스트 색상은 Muted로 통일하기 - LotusSearchBar는 CCP 대신에 Hook을 사용하기 - set 함수를 직접 전달하지 않고 감싸서 전달하ㅣ --- apps/frontend/package.json | 3 +- .../feature/LotusSearch/useLotusSearch.tsx | 27 ++++++++++++++ apps/frontend/src/page/lotus.lazy.tsx | 4 +- .../src/widget/LotusList/LotusCardList.tsx | 4 +- .../src/widget/LotusList/LotusSearchBar.tsx | 37 +++++++++++++++++++ packages/design/src/components/index.tsx | 1 + packages/design/src/components/ui/input.tsx | 22 +++++++++++ pnpm-lock.yaml | 12 ++++++ 8 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 apps/frontend/src/feature/LotusSearch/useLotusSearch.tsx create mode 100644 apps/frontend/src/widget/LotusList/LotusSearchBar.tsx create mode 100644 packages/design/src/components/ui/input.tsx diff --git a/apps/frontend/package.json b/apps/frontend/package.json index 6b805343..334c7c56 100644 --- a/apps/frontend/package.json +++ b/apps/frontend/package.json @@ -22,7 +22,8 @@ "@tanstack/react-query": "^5.59.19", "@tanstack/react-router": "^1.78.3", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "react-icons": "^5.3.0" }, "devDependencies": { "@eslint/js": "^9.13.0", diff --git a/apps/frontend/src/feature/LotusSearch/useLotusSearch.tsx b/apps/frontend/src/feature/LotusSearch/useLotusSearch.tsx new file mode 100644 index 00000000..cd32d175 --- /dev/null +++ b/apps/frontend/src/feature/LotusSearch/useLotusSearch.tsx @@ -0,0 +1,27 @@ +import { useState } from 'react'; + +export const useLotusSearch = () => { + const [search, setSearch] = useState(''); + + const onChangeSearch = (searchValue: string) => { + setSearch(searchValue); + }; + + const onClickSearchLotus = (searchValue: string) => { + if (!searchValue) return; + + // TODO: queryClient.invalidateQueries 새로운 검색어로 검색 수행 + console.log('검색!: ', searchValue); + }; + + const onSearchInputKeyDown = (event: React.KeyboardEvent, searchValue: string) => { + if (event.key === 'Enter') onClickSearchLotus(searchValue); + }; + + return { + search, + onChangeSearch, + onClickSearchLotus, + onSearchInputKeyDown + }; +}; diff --git a/apps/frontend/src/page/lotus.lazy.tsx b/apps/frontend/src/page/lotus.lazy.tsx index e7c7b29a..17fddcb4 100644 --- a/apps/frontend/src/page/lotus.lazy.tsx +++ b/apps/frontend/src/page/lotus.lazy.tsx @@ -1,6 +1,7 @@ import { Button } from '@froxy/design/components'; import { createLazyFileRoute } from '@tanstack/react-router'; import { LotusCardList } from '@/widget/LotusList/LotusCardList'; +import { LotusSearchBar } from '@/widget/LotusList/LotusSearchBar'; export const Route = createLazyFileRoute('/lotus')({ component: RouteComponent @@ -8,9 +9,10 @@ export const Route = createLazyFileRoute('/lotus')({ function RouteComponent() { return ( -
+

Lotus world

+
); diff --git a/apps/frontend/src/widget/LotusList/LotusCardList.tsx b/apps/frontend/src/widget/LotusList/LotusCardList.tsx index 5a970ca8..2cd0d0b0 100644 --- a/apps/frontend/src/widget/LotusList/LotusCardList.tsx +++ b/apps/frontend/src/widget/LotusList/LotusCardList.tsx @@ -19,7 +19,7 @@ export function LotusCardList() {
{new Array(10).fill(0).map((_, index) => ( - +
@@ -28,7 +28,7 @@ export function LotusCardList() {
{LotusDummyData?.tags?.length ? ( <> -
+
) : ( diff --git a/apps/frontend/src/widget/LotusList/LotusSearchBar.tsx b/apps/frontend/src/widget/LotusList/LotusSearchBar.tsx new file mode 100644 index 00000000..61fcc338 --- /dev/null +++ b/apps/frontend/src/widget/LotusList/LotusSearchBar.tsx @@ -0,0 +1,37 @@ +import { Button, Heading, Input, Text } from '@froxy/design/components'; +import { IoIosSearch } from 'react-icons/io'; +import { useLotusSearch } from '@/feature/LotusSearch/useLotusSearch'; + +export function LotusSearchBar() { + const { search, onChangeSearch, onClickSearchLotus, onSearchInputKeyDown } = useLotusSearch(); + + return ( +
+
+ + Lotus + + + Lotus는 gist 저장소들을 의미합니다 + +
+
+
+
+ +
+ onChangeSearch(e.target.value)} + placeholder="제목 및 태그를 검색해주세요" + onKeyDown={(e) => onSearchInputKeyDown(e, search)} + /> +
+ +
+
+ ); +} diff --git a/packages/design/src/components/index.tsx b/packages/design/src/components/index.tsx index 4179b756..86afb753 100644 --- a/packages/design/src/components/index.tsx +++ b/packages/design/src/components/index.tsx @@ -1,6 +1,7 @@ export * from './ui/badge'; export * from './ui/button'; export * from './ui/carousel'; +export * from './ui/input'; export * from './ui/typography'; export * from './ui/tabs'; export * from './Slot'; diff --git a/packages/design/src/components/ui/input.tsx b/packages/design/src/components/ui/input.tsx new file mode 100644 index 00000000..3de1e6af --- /dev/null +++ b/packages/design/src/components/ui/input.tsx @@ -0,0 +1,22 @@ +import * as React from 'react'; + +import { cn } from '@/lib/utils'; + +const Input = React.forwardRef>( + ({ className, type, ...props }, ref) => { + return ( + + ); + } +); +Input.displayName = 'Input'; + +export { Input }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46295f79..3117c376 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -132,6 +132,9 @@ importers: react-dom: specifier: ^18.3.1 version: 18.3.1(react@18.3.1) + react-icons: + specifier: ^5.3.0 + version: 5.3.0(react@18.3.1) devDependencies: '@eslint/js': specifier: ^9.13.0 @@ -4568,6 +4571,11 @@ packages: peerDependencies: react: ^18.3.1 + react-icons@5.3.0: + resolution: {integrity: sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==} + peerDependencies: + react: '*' + react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -10701,6 +10709,10 @@ snapshots: react: 18.3.1 scheduler: 0.23.2 + react-icons@5.3.0(react@18.3.1): + dependencies: + react: 18.3.1 + react-is@17.0.2: {} react-is@18.3.1: {} From 81caa267b21172c710eeac1be3e892246d176339 Mon Sep 17 00:00:00 2001 From: naarang <93020785+naarang@users.noreply.github.com> Date: Wed, 13 Nov 2024 01:31:43 +0900 Subject: [PATCH 2/2] =?UTF-8?q?feat(#36):=20=EB=A0=88=EC=9D=B4=EC=95=84?= =?UTF-8?q?=EC=9B=83=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F=20=ED=97=A4=EB=8D=94?= =?UTF-8?q?=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20(#39)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 로그인 여부에 따른 헤더 컴포넌트 구현하기 - 디렉토리 기반 라우팅으로 레이아웃 적용하기 --- apps/frontend/public/image/logoIcon.svg | 9 + apps/frontend/src/app/router/routeTree.gen.ts | 132 ++++- apps/frontend/src/page/__root.tsx | 5 +- apps/frontend/src/page/index.tsx | 9 + apps/frontend/src/page/lotus.lazy.tsx | 19 - apps/frontend/src/page/lotus/detail/index.tsx | 9 + apps/frontend/src/page/lotus/index.tsx | 16 + apps/frontend/src/page/lotus/route.tsx | 17 + apps/frontend/src/widget/Header.tsx | 25 + pnpm-lock.yaml | 461 ++++++++++++++++++ 10 files changed, 653 insertions(+), 49 deletions(-) create mode 100644 apps/frontend/public/image/logoIcon.svg create mode 100644 apps/frontend/src/page/index.tsx delete mode 100644 apps/frontend/src/page/lotus.lazy.tsx create mode 100644 apps/frontend/src/page/lotus/detail/index.tsx create mode 100644 apps/frontend/src/page/lotus/index.tsx create mode 100644 apps/frontend/src/page/lotus/route.tsx create mode 100644 apps/frontend/src/widget/Header.tsx diff --git a/apps/frontend/public/image/logoIcon.svg b/apps/frontend/public/image/logoIcon.svg new file mode 100644 index 00000000..c96cd06b --- /dev/null +++ b/apps/frontend/public/image/logoIcon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/frontend/src/app/router/routeTree.gen.ts b/apps/frontend/src/app/router/routeTree.gen.ts index 2fdd60f8..bbd9e6d6 100644 --- a/apps/frontend/src/app/router/routeTree.gen.ts +++ b/apps/frontend/src/app/router/routeTree.gen.ts @@ -13,82 +13,146 @@ import { createFileRoute } from '@tanstack/react-router'; // Import Routes import { Route as rootRoute } from './../../page/__root'; +import { Route as LotusRouteImport } from './../../page/lotus/route'; +import { Route as IndexImport } from './../../page/index'; +import { Route as LotusIndexImport } from './../../page/lotus/index'; +import { Route as LotusDetailIndexImport } from './../../page/lotus/detail/index'; // Create Virtual Routes -const LotusLazyImport = createFileRoute('/lotus')(); const AboutLazyImport = createFileRoute('/about')(); // Create/Update Routes -const LotusLazyRoute = LotusLazyImport.update({ - id: '/lotus', - path: '/lotus', - getParentRoute: () => rootRoute -} as any).lazy(() => import('./../../page/lotus.lazy').then((d) => d.Route)); - const AboutLazyRoute = AboutLazyImport.update({ id: '/about', path: '/about', getParentRoute: () => rootRoute } as any).lazy(() => import('./../../page/about.lazy').then((d) => d.Route)); +const LotusRouteRoute = LotusRouteImport.update({ + id: '/lotus', + path: '/lotus', + getParentRoute: () => rootRoute +} as any); + +const IndexRoute = IndexImport.update({ + id: '/', + path: '/', + getParentRoute: () => rootRoute +} as any); + +const LotusIndexRoute = LotusIndexImport.update({ + id: '/', + path: '/', + getParentRoute: () => LotusRouteRoute +} as any); + +const LotusDetailIndexRoute = LotusDetailIndexImport.update({ + id: '/detail/', + path: '/detail/', + getParentRoute: () => LotusRouteRoute +} as any); + // Populate the FileRoutesByPath interface declare module '@tanstack/react-router' { interface FileRoutesByPath { - '/about': { - id: '/about'; - path: '/about'; - fullPath: '/about'; - preLoaderRoute: typeof AboutLazyImport; + '/': { + id: '/'; + path: '/'; + fullPath: '/'; + preLoaderRoute: typeof IndexImport; parentRoute: typeof rootRoute; }; '/lotus': { id: '/lotus'; path: '/lotus'; fullPath: '/lotus'; - preLoaderRoute: typeof LotusLazyImport; + preLoaderRoute: typeof LotusRouteImport; + parentRoute: typeof rootRoute; + }; + '/about': { + id: '/about'; + path: '/about'; + fullPath: '/about'; + preLoaderRoute: typeof AboutLazyImport; parentRoute: typeof rootRoute; }; + '/lotus/': { + id: '/lotus/'; + path: '/'; + fullPath: '/lotus/'; + preLoaderRoute: typeof LotusIndexImport; + parentRoute: typeof LotusRouteImport; + }; + '/lotus/detail/': { + id: '/lotus/detail/'; + path: '/detail'; + fullPath: '/lotus/detail'; + preLoaderRoute: typeof LotusDetailIndexImport; + parentRoute: typeof LotusRouteImport; + }; } } // Create and export the route tree +interface LotusRouteRouteChildren { + LotusIndexRoute: typeof LotusIndexRoute; + LotusDetailIndexRoute: typeof LotusDetailIndexRoute; +} + +const LotusRouteRouteChildren: LotusRouteRouteChildren = { + LotusIndexRoute: LotusIndexRoute, + LotusDetailIndexRoute: LotusDetailIndexRoute +}; + +const LotusRouteRouteWithChildren = LotusRouteRoute._addFileChildren(LotusRouteRouteChildren); + export interface FileRoutesByFullPath { + '/': typeof IndexRoute; + '/lotus': typeof LotusRouteRouteWithChildren; '/about': typeof AboutLazyRoute; - '/lotus': typeof LotusLazyRoute; + '/lotus/': typeof LotusIndexRoute; + '/lotus/detail': typeof LotusDetailIndexRoute; } export interface FileRoutesByTo { + '/': typeof IndexRoute; '/about': typeof AboutLazyRoute; - '/lotus': typeof LotusLazyRoute; + '/lotus': typeof LotusIndexRoute; + '/lotus/detail': typeof LotusDetailIndexRoute; } export interface FileRoutesById { __root__: typeof rootRoute; + '/': typeof IndexRoute; + '/lotus': typeof LotusRouteRouteWithChildren; '/about': typeof AboutLazyRoute; - '/lotus': typeof LotusLazyRoute; + '/lotus/': typeof LotusIndexRoute; + '/lotus/detail/': typeof LotusDetailIndexRoute; } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath; - fullPaths: '/about' | '/lotus'; + fullPaths: '/' | '/lotus' | '/about' | '/lotus/' | '/lotus/detail'; fileRoutesByTo: FileRoutesByTo; - to: '/about' | '/lotus'; - id: '__root__' | '/about' | '/lotus'; + to: '/' | '/about' | '/lotus' | '/lotus/detail'; + id: '__root__' | '/' | '/lotus' | '/about' | '/lotus/' | '/lotus/detail/'; fileRoutesById: FileRoutesById; } export interface RootRouteChildren { + IndexRoute: typeof IndexRoute; + LotusRouteRoute: typeof LotusRouteRouteWithChildren; AboutLazyRoute: typeof AboutLazyRoute; - LotusLazyRoute: typeof LotusLazyRoute; } const rootRouteChildren: RootRouteChildren = { - AboutLazyRoute: AboutLazyRoute, - LotusLazyRoute: LotusLazyRoute + IndexRoute: IndexRoute, + LotusRouteRoute: LotusRouteRouteWithChildren, + AboutLazyRoute: AboutLazyRoute }; export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileTypes(); @@ -99,15 +163,31 @@ export const routeTree = rootRoute._addFileChildren(rootRouteChildren)._addFileT "__root__": { "filePath": "__root.tsx", "children": [ - "/about", - "/lotus" + "/", + "/lotus", + "/about" + ] + }, + "/": { + "filePath": "index.tsx" + }, + "/lotus": { + "filePath": "lotus/route.tsx", + "children": [ + "/lotus/", + "/lotus/detail/" ] }, "/about": { "filePath": "about.lazy.tsx" }, - "/lotus": { - "filePath": "lotus.lazy.tsx" + "/lotus/": { + "filePath": "lotus/index.tsx", + "parent": "/lotus" + }, + "/lotus/detail/": { + "filePath": "lotus/detail/index.tsx", + "parent": "/lotus" } } } diff --git a/apps/frontend/src/page/__root.tsx b/apps/frontend/src/page/__root.tsx index f6eacac1..029fb25d 100644 --- a/apps/frontend/src/page/__root.tsx +++ b/apps/frontend/src/page/__root.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { Link, Outlet, createRootRoute } from '@tanstack/react-router'; +import { Outlet, createRootRoute } from '@tanstack/react-router'; export const Route = createRootRoute({ component: RootComponent @@ -8,9 +8,6 @@ export const Route = createRootRoute({ function RootComponent() { return ( -
Hello "__root"!
- about - lotus
); diff --git a/apps/frontend/src/page/index.tsx b/apps/frontend/src/page/index.tsx new file mode 100644 index 00000000..55499da3 --- /dev/null +++ b/apps/frontend/src/page/index.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/')({ + component: RouteComponent +}); + +function RouteComponent() { + return
페이지 : 시작 페이지임!! - 아마 여기가 온보딩 페이지?
; +} diff --git a/apps/frontend/src/page/lotus.lazy.tsx b/apps/frontend/src/page/lotus.lazy.tsx deleted file mode 100644 index 17fddcb4..00000000 --- a/apps/frontend/src/page/lotus.lazy.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import { Button } from '@froxy/design/components'; -import { createLazyFileRoute } from '@tanstack/react-router'; -import { LotusCardList } from '@/widget/LotusList/LotusCardList'; -import { LotusSearchBar } from '@/widget/LotusList/LotusSearchBar'; - -export const Route = createLazyFileRoute('/lotus')({ - component: RouteComponent -}); - -function RouteComponent() { - return ( -
- -

Lotus world

- - -
- ); -} diff --git a/apps/frontend/src/page/lotus/detail/index.tsx b/apps/frontend/src/page/lotus/detail/index.tsx new file mode 100644 index 00000000..81718ed7 --- /dev/null +++ b/apps/frontend/src/page/lotus/detail/index.tsx @@ -0,0 +1,9 @@ +import { createFileRoute } from '@tanstack/react-router'; + +export const Route = createFileRoute('/lotus/detail/')({ + component: RouteComponent +}); + +function RouteComponent() { + return
Lotus 디테일 페이지
; +} diff --git a/apps/frontend/src/page/lotus/index.tsx b/apps/frontend/src/page/lotus/index.tsx new file mode 100644 index 00000000..5dcab3a2 --- /dev/null +++ b/apps/frontend/src/page/lotus/index.tsx @@ -0,0 +1,16 @@ +import { createFileRoute } from '@tanstack/react-router'; +import { LotusCardList } from '@/widget/LotusList/LotusCardList'; +import { LotusSearchBar } from '@/widget/LotusList/LotusSearchBar'; + +export const Route = createFileRoute('/lotus/')({ + component: RouteComponent +}); + +function RouteComponent() { + return ( +
+ + +
+ ); +} diff --git a/apps/frontend/src/page/lotus/route.tsx b/apps/frontend/src/page/lotus/route.tsx new file mode 100644 index 00000000..dcc0006b --- /dev/null +++ b/apps/frontend/src/page/lotus/route.tsx @@ -0,0 +1,17 @@ +import { Outlet, createFileRoute } from '@tanstack/react-router'; +import { Header } from '@/widget/Header'; + +export const Route = createFileRoute('/lotus')({ + component: RouteComponent +}); + +function RouteComponent() { + return ( +
+
+
+ +
+
+ ); +} diff --git a/apps/frontend/src/widget/Header.tsx b/apps/frontend/src/widget/Header.tsx new file mode 100644 index 00000000..cf27ab50 --- /dev/null +++ b/apps/frontend/src/widget/Header.tsx @@ -0,0 +1,25 @@ +import { Button, Heading } from '@froxy/design/components'; + +export function Header() { + // TODO: 로그인 여부 확인하는 로직 추가 필요 + const isLogin = false; + + return ( +
+
+ 로고 + Froxy +
+
+ {isLogin ? ( + <> + + 프로필 사진 + + ) : ( + + )} +
+
+ ); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3117c376..351f1f05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,16 +35,37 @@ importers: '@nestjs/platform-express': specifier: ^10.0.0 version: 10.4.6(@nestjs/common@10.4.6(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/core@10.4.6) + ansi-regex: + specifier: ^6.1.0 + version: 6.1.0 + dockerode: + specifier: ^4.0.2 + version: 4.0.2 + dotenv: + specifier: ^16.4.5 + version: 16.4.5 reflect-metadata: specifier: ^0.1.13 version: 0.1.14 rxjs: specifier: ^7.8.1 version: 7.8.1 + strip-ansi: + specifier: ^7.1.0 + version: 7.1.0 + strip-ansi-cjs: + specifier: ^8.0.0 + version: 8.0.0 + tar-stream: + specifier: ^3.1.7 + version: 3.1.7 devDependencies: '@nestjs/cli': specifier: ^10.0.0 version: 10.4.5(@swc/core@1.7.42) + '@nestjs/config': + specifier: ^3.3.0 + version: 3.3.0(@nestjs/common@10.4.6(reflect-metadata@0.1.14)(rxjs@7.8.1))(rxjs@7.8.1) '@nestjs/schematics': specifier: ^10.0.0 version: 10.2.3(chokidar@3.6.0)(typescript@5.6.3) @@ -229,6 +250,9 @@ importers: '@radix-ui/react-slot': specifier: ^1.1.0 version: 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-tabs': + specifier: ^1.1.1 + version: 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.47) @@ -600,6 +624,9 @@ packages: resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + '@balena/dockerignore@1.0.2': + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1178,6 +1205,12 @@ packages: class-validator: optional: true + '@nestjs/config@3.3.0': + resolution: {integrity: sha512-pdGTp8m9d0ZCrjTpjkUbZx6gyf2IKf+7zlkrPNMsJzYZ4bFRRTpXrnj+556/5uiI6AfL5mMrJc2u7dB6bvM+VA==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + rxjs: ^7.1.0 + '@nestjs/core@10.4.6': resolution: {integrity: sha512-zXVPxCNRfO6gAy0yvEDjUxE/8gfZICJFpsl2lZAUH31bPb6m+tXuhUq2mVCTEltyMYQ+DYtRe+fEYM2v152N1g==} peerDependencies: @@ -1240,6 +1273,22 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@radix-ui/primitive@1.1.0': + resolution: {integrity: sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==} + + '@radix-ui/react-collection@1.1.0': + resolution: {integrity: sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-compose-refs@1.1.0': resolution: {integrity: sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==} peerDependencies: @@ -1249,6 +1298,55 @@ packages: '@types/react': optional: true + '@radix-ui/react-context@1.1.0': + resolution: {integrity: sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.1': + resolution: {integrity: sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-direction@1.1.0': + resolution: {integrity: sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-id@1.1.0': + resolution: {integrity: sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-presence@1.1.1': + resolution: {integrity: sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-primitive@2.0.0': resolution: {integrity: sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==} peerDependencies: @@ -1262,6 +1360,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-roving-focus@1.1.0': + resolution: {integrity: sha512-EA6AMGeq9AEeQDeSH0aZgG198qkfHSbvWTf1HvoDmOB5bBG/qTxjYMWUKMnYiV6J/iP/J8MEFSuB2zRU2n7ODA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-separator@1.1.0': resolution: {integrity: sha512-3uBAs+egzvJBDZAzvb/n4NxxOYpnspmWxO2u5NbZ8Y6FM/NdrGSF9bop3Cf6F6C71z1rTSn8KV0Fo2ZVd79lGA==} peerDependencies: @@ -1284,6 +1395,46 @@ packages: '@types/react': optional: true + '@radix-ui/react-tabs@1.1.1': + resolution: {integrity: sha512-3GBUDmP2DvzmtYLMsHmpA1GtR46ZDZ+OreXM/N+kkQJOPIgytFWWTfDQmBQKBvaFS0Vno0FktdbVzN28KGrMdw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.0': + resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.1.0': + resolution: {integrity: sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.0': + resolution: {integrity: sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@rollup/pluginutils@5.1.3': resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} @@ -2154,6 +2305,9 @@ packages: asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -2175,6 +2329,9 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + babel-dead-code-elimination@1.0.6: resolution: {integrity: sha512-JxFi9qyRJpN0LjEbbjbN8g0ux71Qppn9R8Qe3k6QzHg2CaKsbUQtbn307LQGiDLGjV6JCtEFqfxzVig9MyDCHQ==} @@ -2209,9 +2366,15 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bare-events@2.5.0: + resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -2251,6 +2414,10 @@ packages: buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} + engines: {node: '>=10.0.0'} + busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -2332,6 +2499,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -2521,6 +2691,10 @@ packages: typescript: optional: true + cpu-features@0.0.10: + resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} + engines: {node: '>=10.0.0'} + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2676,6 +2850,14 @@ packages: dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + docker-modem@5.0.3: + resolution: {integrity: sha512-89zhop5YVhcPEt5FpUFGr3cDyceGhq/F9J+ZndQ4KfqNvfbJpPMfgeixFgUj5OjCYAboElqODxY5Z1EBsSa6sg==} + engines: {node: '>= 8.0'} + + dockerode@4.0.2: + resolution: {integrity: sha512-9wM1BVpVMFr2Pw3eJNXrYYt6DT9k0xMcsSCjtPvyQ+xa1iPg/Mo3T/gUcwI0B2cczqCeCYRPF8yFYDwtFXT0+w==} + engines: {node: '>= 8.0'} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} @@ -2694,6 +2876,14 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -2742,6 +2932,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + enhanced-resolve@5.17.1: resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} @@ -3015,6 +3208,9 @@ packages: fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -3112,6 +3308,9 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -4164,6 +4363,9 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -4194,6 +4396,9 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nan@2.22.0: + resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4541,6 +4746,9 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4555,6 +4763,9 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + queue-tick@1.0.1: + resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} + randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} @@ -4849,6 +5060,9 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -4856,6 +5070,10 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + ssh2@1.16.0: + resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} + engines: {node: '>=10.16.0'} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -4874,6 +5092,9 @@ packages: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} + streamx@2.20.1: + resolution: {integrity: sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4914,6 +5135,9 @@ packages: stringify-entities@4.0.4: resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} + strip-ansi-cjs@8.0.0: + resolution: {integrity: sha512-32gkt3BeWEaDWScWe6w75HZX3dgTwM6SCzYZOJqnQWwGIugHHj5+u/TSzZUbcEsg8v0dpVljHNHcUJ+1dmVRqw==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -4999,6 +5223,16 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tar-fs@2.0.1: + resolution: {integrity: sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + terser-webpack-plugin@5.3.10: resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} @@ -5024,6 +5258,9 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} + text-decoder@1.2.1: + resolution: {integrity: sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==} + text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} @@ -5237,6 +5474,9 @@ packages: resolution: {integrity: sha512-5lDvSqIxCYJ/BAd6rQGK/AzFRhBkbu4JHVMLmGh/hCb7U3CqSnr5Tjwfy9vc+/5wG2DJ6wttgAaA7MoCgvBKZQ==} hasBin: true + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -5910,6 +6150,8 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 + '@balena/dockerignore@1.0.2': {} + '@bcoe/v8-coverage@0.2.3': {} '@colors/colors@1.5.0': @@ -6536,6 +6778,14 @@ snapshots: tslib: 2.7.0 uid: 2.0.2 + '@nestjs/config@3.3.0(@nestjs/common@10.4.6(reflect-metadata@0.1.14)(rxjs@7.8.1))(rxjs@7.8.1)': + dependencies: + '@nestjs/common': 10.4.6(reflect-metadata@0.1.14)(rxjs@7.8.1) + dotenv: 16.4.5 + dotenv-expand: 10.0.0 + lodash: 4.17.21 + rxjs: 7.8.1 + '@nestjs/core@10.4.6(@nestjs/common@10.4.6(reflect-metadata@0.1.14)(rxjs@7.8.1))(@nestjs/platform-express@10.4.6)(reflect-metadata@0.1.14)(rxjs@7.8.1)': dependencies: '@nestjs/common': 10.4.6(reflect-metadata@0.1.14)(rxjs@7.8.1) @@ -6617,12 +6867,61 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@radix-ui/primitive@1.1.0': {} + + '@radix-ui/react-collection@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-compose-refs@1.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: react: 18.3.1 optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-context@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-context@1.1.1(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-direction@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-id@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-presence@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-primitive@2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.0(@types/react@18.3.12)(react@18.3.1) @@ -6632,6 +6931,23 @@ snapshots: '@types/react': 18.3.12 '@types/react-dom': 18.3.1 + '@radix-ui/react-roving-focus@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-collection': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-compose-refs': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-context': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + '@radix-ui/react-separator@1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -6648,6 +6964,41 @@ snapshots: optionalDependencies: '@types/react': 18.3.12 + '@radix-ui/react-tabs@1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@radix-ui/primitive': 1.1.0 + '@radix-ui/react-context': 1.1.1(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-direction': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-id': 1.1.0(@types/react@18.3.12)(react@18.3.1) + '@radix-ui/react-presence': 1.1.1(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-primitive': 2.0.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-roving-focus': 1.1.0(@types/react-dom@18.3.1)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@radix-ui/react-use-controllable-state': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.12 + '@types/react-dom': 18.3.1 + + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@18.3.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@18.3.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.12 + '@rollup/pluginutils@5.1.3(rollup@4.24.3)': dependencies: '@types/estree': 1.0.6 @@ -7650,6 +8001,10 @@ snapshots: asap@2.0.6: {} + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + assertion-error@2.0.1: {} async@3.2.6: {} @@ -7670,6 +8025,8 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 + b4a@1.6.7: {} + babel-dead-code-elimination@1.0.6: dependencies: '@babel/core': 7.26.0 @@ -7738,8 +8095,15 @@ snapshots: balanced-match@1.0.2: {} + bare-events@2.5.0: + optional: true + base64-js@1.5.1: {} + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + binary-extensions@2.3.0: {} bl@4.1.0: @@ -7800,6 +8164,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + buildcheck@0.0.6: + optional: true + busboy@1.6.0: dependencies: streamsearch: 1.1.0 @@ -7874,6 +8241,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@1.1.4: {} + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -8038,6 +8407,12 @@ snapshots: optionalDependencies: typescript: 5.6.3 + cpu-features@0.0.10: + dependencies: + buildcheck: 0.0.6 + nan: 2.22.0 + optional: true + create-jest@29.7.0(@types/node@20.17.5)(ts-node@10.9.2(@swc/core@1.7.42)(@types/node@20.17.5)(typescript@5.6.3)): dependencies: '@jest/types': 29.6.3 @@ -8171,6 +8546,23 @@ snapshots: dlv@1.1.3: {} + docker-modem@5.0.3: + dependencies: + debug: 4.3.7 + readable-stream: 3.6.2 + split-ca: 1.0.1 + ssh2: 1.16.0 + transitivePeerDependencies: + - supports-color + + dockerode@4.0.2: + dependencies: + '@balena/dockerignore': 1.0.2 + docker-modem: 5.0.3 + tar-fs: 2.0.1 + transitivePeerDependencies: + - supports-color + doctrine@2.1.0: dependencies: esutils: 2.0.3 @@ -8187,6 +8579,10 @@ snapshots: dependencies: is-obj: 2.0.0 + dotenv-expand@10.0.0: {} + + dotenv@16.4.5: {} + eastasianwidth@0.2.0: {} ee-first@1.1.1: {} @@ -8221,6 +8617,10 @@ snapshots: encodeurl@2.0.0: {} + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 @@ -8736,6 +9136,8 @@ snapshots: fast-diff@1.3.0: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -8864,6 +9266,8 @@ snapshots: fresh@0.5.2: {} + fs-constants@1.0.0: {} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -10335,6 +10739,8 @@ snapshots: minipass@7.1.2: {} + mkdirp-classic@0.5.3: {} + mkdirp@0.5.6: dependencies: minimist: 1.2.8 @@ -10372,6 +10778,9 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nan@2.22.0: + optional: true + nanoid@3.3.7: {} natural-compare-lite@1.4.0: {} @@ -10680,6 +11089,11 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + punycode@2.3.1: {} pure-rand@6.1.0: {} @@ -10690,6 +11104,8 @@ snapshots: queue-microtask@1.2.3: {} + queue-tick@1.0.1: {} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 @@ -11064,10 +11480,20 @@ snapshots: space-separated-tokens@2.0.2: {} + split-ca@1.0.1: {} + split2@4.2.0: {} sprintf-js@1.0.3: {} + ssh2@1.16.0: + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.22.0 + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -11080,6 +11506,14 @@ snapshots: streamsearch@1.1.0: {} + streamx@2.20.1: + dependencies: + fast-fifo: 1.3.2 + queue-tick: 1.0.1 + text-decoder: 1.2.1 + optionalDependencies: + bare-events: 2.5.0 + string-argv@0.3.2: {} string-length@4.0.2: @@ -11137,6 +11571,8 @@ snapshots: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 + strip-ansi-cjs@8.0.0: {} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -11244,6 +11680,27 @@ snapshots: tapable@2.2.1: {} + tar-fs@2.0.1: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.2 + tar-stream: 2.2.0 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.20.1 + terser-webpack-plugin@5.3.10(@swc/core@1.7.42)(webpack@5.94.0(@swc/core@1.7.42)): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -11280,6 +11737,8 @@ snapshots: glob: 7.2.3 minimatch: 3.1.2 + text-decoder@1.2.1: {} + text-extensions@2.4.0: {} text-table@0.2.0: {} @@ -11465,6 +11924,8 @@ snapshots: turbo-windows-64: 2.2.3 turbo-windows-arm64: 2.2.3 + tweetnacl@0.14.5: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1