From 3925cfa7bb5c41fd5ea4a3897f16d067fa792f8a Mon Sep 17 00:00:00 2001 From: Nicolas Meienberger <47644445+meienberger@users.noreply.github.com> Date: Thu, 2 Mar 2023 20:19:20 +0100 Subject: [PATCH] Release/1.0.0 (#316) * fix: create default media folder structure on install * feat: add link to open exposed app to domain * [ImgBot] Optimize images *Total -- 2,048.42kb -> 1,263.43kb (38.32%) /screenshots/darkmode.png -- 998.43kb -> 609.77kb (38.93%) /screenshots/appstore.png -- 1,006.73kb -> 620.12kb (38.4%) /packages/dashboard/public/error.png -- 42.38kb -> 32.70kb (22.84%) /packages/dashboard/public/empty.svg -- 0.87kb -> 0.85kb (2.35%) Signed-off-by: ImgBotApp * chore: bump version 0.8.1 * refactor: move all dashboard's files into a client folder * feat: setup trpc and create system router * test: split jest config for client and server * refactor: replace grapqhl queries with trpc in the frontend * refactor: remove now un-used system queries/mutations/resolvers from both client and server * chore: bump dependencies * feat: setup prisma and configure it for tests and development * feat: create trpc router for auth service * refactor: migrate client auth queries to trpc procedures * refactor: cleanup now un-used graphql resolvers and services * feat: create sql migrations by replicating typeorm ones in an idempotent manner * feat: create server-preload script to run migrations upon server start * chore: remove legacy migrations steps * feat: add redis_host as an env variable * refactor: remove prisma from context and use client directly in service * feat: create trpc router & service for apps * refactor: migrate client app queries/mutations to trpc * refactor: removal and replace usage of old graphql generated types * refactor: move from node --require to custom next server * test: fix tests and bump various dependencies * chore: cleanup system-api from now un-used files * refactor(dashboard): remove code related to apollo * refactor: serve static files through next's server instead of system-api * refactor(server): move auth and system services to class * refactor(client): remove layoutv2 abstraction * fix: return correct update info * chore: remove legacy system-api folder * refactor: remove system-api from docker files * feat: create scheduler to run cron jobs and setup periodic repo update * fix: failing build caused by remark-mdx * refactor: move migrations to server folder * feat: compile server using esbuild * refactor: ts issue mis-used file from client in server * ci: make pipeline pass by cd into dashboard before each step (temp) * chore: drop armv7 support * refactor: move dashboard files in root folder * feat(db): create migration to add operator field on user * feat(user): create routes and services for password reset * feat(auth): add reset password page, container & form * refactor(dashboard): change layout and page of auth to be url based instead of state based * feat(script): add reset-password script * fix(dashboard): only check status if restart or update has been requested * test: increase coverage for get-server-auth-session * fix(start.sh): prompt for network interface only if there is not an internal ip set * feat(script): support user docker-compose.yml and app.env * chore: bump version * fix: add missing postgres variables to start script * fix: check for 32 bits before installing/starting * fix: create default media folder structure on install * Updated demo instance link Changed demo.runtipi.com to https://demo.runtipi.com * feat: adding config for codespaces * docs: update README.md [skip ci] * docs: update .all-contributorsrc [skip ci] --------- Signed-off-by: ImgBotApp Co-authored-by: ImgBotApp Co-authored-by: Freddie Sackur Co-authored-by: Kieran Klukas <92754843+kcoderhtml@users.noreply.github.com> Co-authored-by: alwerner Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .dockerignore | 15 + .env.example | 18 + .env.test | 6 + .../dashboard/.eslintignore => .eslintignore | 0 .../dashboard/.eslintrc.js => .eslintrc.js | 8 +- .github/workflows/ci.yml | 20 +- .github/workflows/release-candidate.yml | 12 +- .github/workflows/release.yml | 15 +- .gitignore | 70 +- .../.prettierrc.js => .prettierrc.js | 0 Dockerfile | 70 +- Dockerfile.dev | 33 +- __mocks__/fs-extra.ts | 118 + __mocks__/redis.ts | 16 + app-data/.gitkeep | 0 apps/.gitkeep | 0 commitlint.config.js | 3 - docker-compose.dev.yml | 53 +- docker-compose.rc.yml | 60 +- docker-compose.test.yml | 97 +- docker-compose.yml | 73 +- esbuild.js | 40 + jest.config.js | 7 - jest.config.ts | 39 + media/.gitkeep | 0 media/data/.gitkeep | 0 media/data/books/.gitkeep | 0 media/data/books/ebooks/.gitkeep | 0 media/data/books/metadata.db | Bin 356352 -> 0 bytes media/data/books/spoken/.gitkeep | 0 media/data/images/.gitkeep | 0 media/data/movies/.gitkeep | 0 media/data/music/.gitkeep | 0 media/data/podcasts/.gitkeep | 0 media/data/tv/.gitkeep | 0 media/torrents/.gitkeep | 0 media/torrents/complete/.gitkeep | 0 media/torrents/incomplete/.gitkeep | 0 media/torrents/watch/.gitkeep | 0 .../dashboard/next-env.d.ts => next-env.d.ts | 0 next.config.mjs | 23 + package.json | 131 +- packages/dashboard/.dockerignore | 5 - packages/dashboard/.gitignore | 35 - packages/dashboard/README.md | 34 - packages/dashboard/codegen.yml | 9 - packages/dashboard/jest.config.js | 18 - packages/dashboard/next.config.js | 8 - packages/dashboard/package.json | 85 - .../hoc/StatusProvider/StatusProvider.tsx | 47 - packages/dashboard/src/core/apollo/client.ts | 11 - .../src/core/apollo/links/authLink.ts | 14 - .../src/core/apollo/links/errorLink.ts | 14 - .../src/core/apollo/links/httpLink.ts | 7 - .../dashboard/src/core/apollo/links/index.ts | 11 - packages/dashboard/src/core/constants.ts | 18 - packages/dashboard/src/core/types.ts | 4 - packages/dashboard/src/generated/graphql.tsx | 1131 --- .../src/graphql/mutations/installApp.graphql | 7 - .../src/graphql/mutations/login.graphql | 5 - .../src/graphql/mutations/logout.graphql | 3 - .../src/graphql/mutations/register.graphql | 5 - .../src/graphql/mutations/restart.graphql | 3 - .../src/graphql/mutations/startApp.graphql | 7 - .../src/graphql/mutations/stopApp.graphql | 7 - .../src/graphql/mutations/unintallApp.graphql | 7 - .../src/graphql/mutations/update.graphql | 3 - .../src/graphql/mutations/updateApp.graphql | 7 - .../graphql/mutations/updateAppConfig.graphql | 7 - .../src/graphql/queries/getApp.graphql | 42 - .../src/graphql/queries/installedApps.graphql | 21 - .../src/graphql/queries/isConfigured.graphql | 3 - .../src/graphql/queries/listApps.graphql | 18 - .../dashboard/src/graphql/queries/me.graphql | 5 - .../src/graphql/queries/refreshToken.graphql | 5 - .../src/graphql/queries/systemInfo.graphql | 17 - .../src/graphql/queries/version.graphql | 6 - .../src/hooks/useCachedRessources.ts | 32 - packages/dashboard/src/mocks/handlers.ts | 133 - .../src/mocks/handlers/appHandlers.ts | 173 - .../components/InstallModal/InstallModal.tsx | 22 - .../Apps/components/UpdateSettingsModal.tsx | 25 - .../AppDetailsContainer.test.tsx | 153 - .../AppDetailsContainer.tsx | 196 - .../LoginContainer/LoginContainer.tsx | 51 - .../RegisterContainer/RegisterContainer.tsx | 48 - .../pages/DashboardPage/DashboardPage.tsx | 14 - .../SettingsContainer.test.tsx | 122 - .../pages/SettingsPage/SettingsPage.test.tsx | 21 - packages/dashboard/src/pages/_app.tsx | 54 - .../dashboard/src/pages/app-store/[id].tsx | 1 - .../dashboard/src/pages/app-store/index.tsx | 1 - packages/dashboard/src/pages/apps/[id].tsx | 1 - packages/dashboard/src/pages/apps/index.tsx | 1 - packages/dashboard/src/pages/index.tsx | 1 - packages/dashboard/src/pages/settings.tsx | 1 - packages/dashboard/src/state/systemStore.ts | 17 - packages/dashboard/tests/test-utils.tsx | 31 - packages/dashboard/tsconfig.json | 23 - packages/system-api/.dockerignore | 4 - packages/system-api/.eslintignore | 3 - packages/system-api/.eslintrc.js | 27 - packages/system-api/.gitignore | 10 - packages/system-api/.prettierrc.js | 6 - .../system-api/__mocks__/child_process.ts | 9 - packages/system-api/__mocks__/fs-extra.ts | 121 - packages/system-api/__mocks__/node-cron.ts | 11 - packages/system-api/__mocks__/redis.ts | 18 - packages/system-api/esbuild.js | 85 - packages/system-api/jest.config.js | 21 - packages/system-api/ormconfig.ts | 13 - packages/system-api/package.json | 84 - .../src/config/constants/constants.ts | 6 - packages/system-api/src/config/datasource.ts | 26 - .../src/config/logger/apollo.logger.ts | 16 - .../migrations/1657299198975-Initial.ts | 28 - .../migrations/1659645508713-AppVersion.ts | 20 - .../1660071627328-AppStatusUpdating.ts | 11 - .../1662036689477-AppExposedDomain.ts | 22 - packages/system-api/src/config/types.ts | 7 - .../system-api/src/constants/constants.ts | 5 - .../system-api/src/core/config/TipiConfig.ts | 132 - .../config/__tests__/EventDispatcher.test.ts | 200 - .../src/core/jobs/__tests__/jobs.test.ts | 37 - packages/system-api/src/core/jobs/jobs.ts | 20 - .../__tests__/sessionMiddleware.test.ts | 76 - .../src/core/middlewares/authChecker.ts | 21 - .../src/core/updates/__tests__/v040.test.ts | 181 - .../src/core/updates/recover-migrations.ts | 48 - packages/system-api/src/core/updates/run.ts | 6 - packages/system-api/src/core/updates/v040.ts | 92 - packages/system-api/src/declarations.d.ts | 9 - packages/system-api/src/helpers/helpers.ts | 5 - .../apps/__tests__/apps.resolver.test.ts | 513 - .../system-api/src/modules/apps/app.entity.ts | 77 - .../system-api/src/modules/apps/app.types.ts | 6 - .../src/modules/apps/apps.helpers.ts | 236 - .../src/modules/apps/apps.resolver.ts | 63 - .../src/modules/apps/apps.service.ts | 328 - .../system-api/src/modules/apps/apps.types.ts | 167 - .../auth/__tests__/auth.resolver.test.ts | 234 - .../modules/auth/__tests__/user.factory.ts | 16 - .../src/modules/auth/auth.resolver.ts | 54 - .../src/modules/auth/auth.service.ts | 102 - .../system-api/src/modules/auth/auth.types.ts | 18 - .../src/modules/auth/user.entity.ts | 28 - .../modules/fs/__tests__/fs.helpers.test.ts | 142 - .../system/__tests__/system.resolver.test.ts | 239 - .../src/modules/system/system.controller.ts | 12 - .../src/modules/system/system.resolver.ts | 28 - .../src/modules/system/system.service.ts | 97 - .../src/modules/system/system.types.ts | 42 - .../src/modules/system/update.entity.ts | 24 - packages/system-api/src/schema.ts | 15 - packages/system-api/src/server.ts | 103 - packages/system-api/src/test/connection.ts | 48 - packages/system-api/src/test/dotenv-config.ts | 4 - packages/system-api/src/test/gcall.ts | 27 - packages/system-api/src/test/jest-setup.ts | 11 - .../system-api/src/test/mutations/index.ts | 25 - .../src/test/mutations/installApp.graphql | 25 - .../src/test/mutations/login.graphql | 6 - .../src/test/mutations/register.graphql | 6 - .../src/test/mutations/restart.graphql | 3 - .../src/test/mutations/startApp.graphql | 31 - .../src/test/mutations/stopApp.graphql | 30 - .../src/test/mutations/uninstallApp.graphql | 30 - .../src/test/mutations/update.graphql | 3 - .../src/test/mutations/updateApp.graphql | 30 - .../test/mutations/updateAppConfig.graphql | 30 - .../src/test/queries/getApp.graphql | 29 - packages/system-api/src/test/queries/index.ts | 21 - .../src/test/queries/installedApps.graphql | 29 - .../src/test/queries/isConfigured.graphql | 3 - .../src/test/queries/listAppInfos.graphql | 23 - .../system-api/src/test/queries/me.graphql | 6 - .../src/test/queries/refreshToken.graphql | 6 - .../src/test/queries/systemInfo.graphql | 17 - .../src/test/queries/version.graphql | 6 - packages/system-api/src/types.ts | 6 - packages/system-api/tsconfig.json | 24 - pnpm-lock.yaml | 8930 ++++------------- pnpm-workspace.yaml | 2 - prisma/schema.prisma | 69 + .../android-chrome-192x192.png | Bin .../android-chrome-512x512.png | Bin .../public => public}/apple-touch-icon.png | Bin .../public => public}/browserconfig.xml | 0 .../dashboard/public => public}/empty.svg | 0 .../dashboard/public => public}/error.png | Bin .../public => public}/favicon-16x16.png | Bin .../public => public}/favicon-32x32.png | Bin .../dashboard/public => public}/favicon.ico | Bin .../public => public}/mockServiceWorker.js | 2 +- .../public => public}/mstile-150x150.png | Bin .../public => public}/placeholder.png | Bin .../public => public}/safari-pinned-tab.svg | 0 .../public => public}/site.webmanifest | 0 .../dashboard/public => public}/tipi.png | Bin repos/.gitkeep | 0 scripts/app.sh | 14 + scripts/common.sh | 1 + scripts/install.sh | 13 + scripts/reset-password.sh | 12 + scripts/start-dev.sh | 14 +- scripts/start.sh | 83 +- sonar-project.properties | 2 +- .../components/AppLogo/AppLogo.module.scss | 0 .../client}/components/AppLogo/AppLogo.tsx | 6 +- .../client}/components/AppLogo/index.ts | 0 .../AppStatus/AppStatus.module.scss | 0 .../components/AppStatus/AppStatus.tsx | 8 +- .../client}/components/AppStatus/index.tsx | 0 .../components/AppTile/AppTile.module.scss | 0 .../client}/components/AppTile/AppTile.tsx | 2 +- .../client}/components/AppTile/index.tsx | 0 .../components/Layout/Layout.module.scss | 0 src/client/components/Layout/Layout.test.tsx | 50 + .../client}/components/Layout/Layout.tsx | 30 +- .../client}/components/Layout/index.ts | 0 .../client}/components/Markdown/Markdown.tsx | 7 +- .../components/StatusScreen/StatusScreen.tsx | 2 +- .../client}/components/StatusScreen/index.ts | 0 .../hoc/AuthProvider/AuthProvider.test.tsx | 12 +- .../hoc/AuthProvider/AuthProvider.tsx | 14 +- .../components/hoc/AuthProvider/index.ts | 0 .../StatusProvider/StatusProvider.test.tsx | 26 +- .../hoc/StatusProvider/StatusProvider.tsx | 44 + .../components/hoc/StatusProvider/index.ts | 0 .../hoc/ToastProvider/ToastProvider.test.tsx | 2 +- .../hoc/ToastProvider/ToastProvider.tsx | 0 .../components/hoc/ToastProvider/index.ts | 0 .../components/ui/Button/Button.test.tsx | 0 .../client}/components/ui/Button/Button.tsx | 0 .../client}/components/ui/Button/index.ts | 0 .../components/ui/DataGrid/DataGrid.test.tsx | 2 +- .../components/ui/DataGrid/DataGrid.tsx | 0 .../components/ui/DataGrid/DataGridItem.tsx | 0 .../client}/components/ui/DataGrid/index.ts | 0 .../ui/EmptyPage/EmptyPage.module.scss | 0 .../ui/EmptyPage/EmptyPage.test.tsx | 2 +- .../components/ui/EmptyPage/EmptyPage.tsx | 0 .../client}/components/ui/EmptyPage/index.ts | 0 .../ui/ErrorPage/ErrorPage.module.scss | 0 .../ui/ErrorPage/ErrorPage.test.tsx | 2 +- .../components/ui/ErrorPage/ErrorPage.tsx | 0 .../client}/components/ui/ErrorPage/index.ts | 0 .../components/ui/Header/Header.test.tsx | 33 +- .../client}/components/ui/Header/Header.tsx | 22 +- .../client}/components/ui/Header/index.ts | 0 .../components/ui/Input/Input.test.tsx | 2 +- .../client}/components/ui/Input/Input.tsx | 0 .../client}/components/ui/Input/index.ts | 0 .../components/ui/Modal/Modal.module.scss | 0 .../components/ui/Modal/Modal.test.tsx | 2 +- .../client}/components/ui/Modal/Modal.tsx | 0 .../client}/components/ui/Modal/ModalBody.tsx | 0 .../components/ui/Modal/ModalFooter.tsx | 0 .../components/ui/Modal/ModalHeader.tsx | 0 .../client}/components/ui/Modal/index.ts | 0 .../components/ui/NavBar/NavBar.test.tsx | 2 +- .../client}/components/ui/NavBar/NavBar.tsx | 0 .../client}/components/ui/NavBar/index.ts | 0 .../components/ui/Switch/Switch.test.tsx | 2 +- .../client}/components/ui/Switch/Switch.tsx | 0 .../client}/components/ui/Switch/index.ts | 0 .../components/ui/Toast/Toast.module.scss | 0 .../components/ui/Toast/Toast.test.tsx | 2 +- .../client}/components/ui/Toast/Toast.tsx | 0 .../client}/components/ui/Toast/index.ts | 0 src/client/core/constants.ts | 24 + .../client}/core/helpers/url-helpers.ts | 0 src/client/core/types.ts | 13 + .../src => src/client}/hooks/useDisclosure.ts | 0 .../src => src/client}/mocks/browser.ts | 0 .../client}/mocks/fixtures/app.fixtures.ts | 22 +- src/client/mocks/getTrpcMock.ts | 84 + src/client/mocks/handlers.ts | 78 + .../src => src/client}/mocks/index.ts | 0 .../src => src/client}/mocks/server.ts | 0 .../AppStoreTable/AppStoreTable.loading.tsx | 0 .../AppStoreTable/AppStoreTable.tsx | 0 .../components/AppStoreTable/index.ts | 0 .../AppStoreTile/AppStoreTile.loading.tsx | 0 .../AppStoreTile/AppStoreTile.module.scss | 0 .../components/AppStoreTile/AppStoreTile.tsx | 6 +- .../components/AppStoreTile/index.tsx | 0 .../CategorySelector/CategorySelector.tsx | 8 +- .../components/CategorySelector/index.ts | 0 .../AppStoreContainer/AppStoreContainer.tsx | 0 .../containers/AppStoreContainer/index.ts | 0 .../modules/AppStore/helpers/table.helpers.ts | 34 +- .../modules/AppStore/helpers/table.types.ts | 2 +- .../AppStorePage/AppStorePage.module.scss | 0 .../pages/AppStorePage/AppStorePage.test.tsx | 10 +- .../pages/AppStorePage/AppStorePage.tsx | 16 +- .../AppStore/pages/AppStorePage/index.ts | 0 .../modules/AppStore/state/appStoreState.ts | 6 +- .../components/AppActions/AppActions.test.tsx | 21 +- .../Apps/components/AppActions/AppActions.tsx | 29 +- .../Apps/components/AppActions/index.ts | 0 .../Apps/components/AppDetailsTabs.tsx | 12 +- .../InstallForm/InstallForm.test.tsx | 22 +- .../components/InstallForm/InstallForm.tsx | 14 +- .../Apps/components/InstallForm/index.ts | 0 .../InstallModal/InstallModal.test.tsx | 26 +- .../components/InstallModal/InstallModal.tsx | 23 + .../Apps/components/InstallModal/index.ts | 0 .../modules/Apps/components/StopModal.tsx | 10 +- .../Apps/components/UninstallModal.tsx | 9 +- .../UpdateModal/UpdateModal.test.tsx | 10 +- .../components/UpdateModal/UpdateModal.tsx | 11 +- .../Apps/components/UpdateModal/index.ts | 0 .../Apps/components/UpdateSettingsModal.tsx | 26 + .../AppDetailsContainer.test.tsx | 466 + .../AppDetailsContainer.tsx | 196 + .../modules/Apps/helpers/castAppConfig.ts | 13 + .../AppDetailsPage/AppDetailsPage.test.tsx | 36 +- .../pages/AppDetailsPage/AppDetailsPage.tsx | 11 +- .../Apps/pages/AppDetailsPage/index.ts | 0 .../Apps/pages/AppsPage/AppsPage.test.tsx | 37 +- .../modules/Apps/pages/AppsPage/AppsPage.tsx | 19 +- .../modules/Apps/pages/AppsPage/index.ts | 0 .../modules/Apps/utils/validators/index.ts | 0 .../Apps/utils/validators/validators.test.tsx | 51 +- .../Apps/utils/validators/validators.ts | 18 +- .../AuthFormLayout/AuthFormLayout.tsx | 0 .../Auth/components/AuthFormLayout/index.ts | 0 .../Auth/components/LoginForm/LoginForm.tsx | 4 + .../Auth/components/LoginForm/index.ts | 0 .../components/RegisterForm/RegisterForm.tsx | 0 .../Auth/components/RegisterForm/index.ts | 0 .../ResetPasswordForm.test.tsx | 63 + .../ResetPasswordForm/ResetPasswordForm.tsx | 61 + .../components/ResetPasswordForm/index.ts | 1 + .../LoginContainer/LoginContainer.test.tsx | 27 +- .../LoginContainer/LoginContainer.tsx | 35 + .../Auth/containers/LoginContainer/index.ts | 0 .../RegisterContainer.test.tsx | 23 +- .../RegisterContainer/RegisterContainer.tsx | 35 + .../containers/RegisterContainer/index.ts | 0 .../ResetPasswordContainer.test.tsx | 128 + .../ResetPasswordContainer.tsx | 67 + .../ResetPasswordContainer/index.ts | 1 + .../Auth/pages/LoginPage/LoginPage.test.tsx | 37 + .../Auth/pages/LoginPage/LoginPage.tsx | 20 + .../modules/Auth/pages/LoginPage/index.ts | 1 + .../pages/RegisterPage/RegisterPage.test.tsx | 13 + .../Auth/pages/RegisterPage/RegisterPage.tsx | 6 + .../modules/Auth/pages/RegisterPage/index.ts | 1 + .../ResetPasswordPage.test.tsx | 15 + .../ResetPasswordPage/ResetPasswordPage.tsx | 16 + .../Auth/pages/ResetPasswordPage/index.ts | 1 + .../Dashboard/components/SystemStat.tsx | 0 .../containers/DashboardContainer.test.tsx | 10 +- .../containers/DashboardContainer.tsx | 15 +- .../modules/Dashboard/containers/index.ts | 1 + .../DashboardPage/DashboardPage.test.tsx | 2 +- .../pages/DashboardPage/DashboardPage.tsx | 17 + .../Dashboard/pages/DashboardPage/index.ts | 0 .../components/RestartModal/RestartModal.tsx | 0 .../Settings/components/RestartModal/index.ts | 0 .../components/UpdateModal/UpdateModal.tsx | 0 .../Settings/components/UpdateModal/index.ts | 0 .../SettingsContainer.test.tsx | 131 + .../SettingsContainer/SettingsContainer.tsx | 105 +- .../containers/SettingsContainer/index.ts | 0 .../pages/SettingsPage/SettingsPage.test.tsx | 25 + .../pages/SettingsPage/SettingsPage.tsx | 11 +- .../Settings/pages/SettingsPage/index.ts | 0 src/client/state/systemStore.ts | 27 + .../src => src/client}/state/toastStore.ts | 16 +- .../src => src/client}/state/uiStore.ts | 0 .../src => src/client}/styles/global.css | 0 .../src => src/client}/styles/global.scss | 2 +- .../src => src/client}/styles/reset.css | 0 src/client/types/layout-helpers.d.ts | 4 + src/client/utils/trpc.ts | 41 + .../src => src/client}/utils/typescript.ts | 0 {packages/dashboard/src => src}/pages/404.tsx | 2 +- src/pages/_app.tsx | 53 + .../dashboard/src => src}/pages/_document.tsx | 2 +- src/pages/api/trpc/[trpc].ts | 9 + src/pages/app-store/[id].tsx | 1 + src/pages/app-store/index.tsx | 1 + src/pages/apps/[id].tsx | 1 + src/pages/apps/index.tsx | 1 + src/pages/index.tsx | 1 + src/pages/login.tsx | 1 + src/pages/register.tsx | 1 + src/pages/reset-password.tsx | 1 + src/pages/settings.tsx | 1 + .../__tests__/get-server-auth-session.test.ts | 35 + .../fs => src/server/common}/fs.helpers.ts | 2 + .../server/common/get-server-auth-session.ts | 22 +- src/server/common/typescript.helpers.ts | 1 + src/server/context.ts | 38 + .../EventDispatcher/EventDispatcher.test.ts | 200 + .../core/EventDispatcher}/EventDispatcher.ts | 101 +- src/server/core/EventDispatcher/index.ts | 3 + .../server/core/Logger/Logger.ts | 12 +- src/server/core/Logger/index.ts | 1 + .../server/core/TipiCache}/TipiCache.ts | 2 +- src/server/core/TipiCache/index.ts | 1 + .../core/TipiConfig}/TipiConfig.test.ts | 87 +- src/server/core/TipiConfig/TipiConfig.ts | 141 + src/server/core/TipiConfig/index.ts | 1 + src/server/db/client.ts | 24 + src/server/index.ts | 64 + .../00000-create-migrations-table.sql | 6 + src/server/migrations/00001-initial.sql | 69 + .../migrations/00002-add-app-version.sql | 32 + .../migrations/00003-add-status-updating.sql | 15 + .../00004-add-exposed-domain-fields.sql | 23 + .../migrations/00005-add-user-operator.sql | 18 + src/server/routers/_app.ts | 17 + src/server/routers/app/app.router.ts | 27 + src/server/routers/auth/auth.router.ts | 18 + src/server/routers/system/system.router.ts | 14 + src/server/run-migration.ts | 47 + .../services/apps}/apps.helpers.test.ts | 208 +- src/server/services/apps/apps.helpers.ts | 332 + .../services/apps}/apps.service.test.ts | 400 +- src/server/services/apps/apps.service.ts | 370 + src/server/services/apps/apps.types.ts | 45 + .../services/auth}/auth.service.test.ts | 172 +- src/server/services/auth/auth.service.ts | 216 + src/server/services/system/index.ts | 1 + .../services/system}/system.service.test.ts | 55 +- src/server/services/system/system.service.ts | 116 + .../server/tests}/apps.factory.ts | 57 +- src/server/tests/user.factory.ts | 21 + src/server/trpc.ts | 37 + state/.gitkeep | 0 templates/env-sample | 9 +- tests/TRPCTestClientProvider.tsx | 58 + .../tests => tests/client}/jest.setup.tsx | 34 +- tests/server/db-connection.ts | 30 + tests/server/jest.setup.ts | 22 + tests/test-utils.tsx | 12 + tsconfig.json | 16 +- 441 files changed, 7919 insertions(+), 15209 deletions(-) create mode 100644 .env.example create mode 100644 .env.test rename packages/dashboard/.eslintignore => .eslintignore (100%) rename packages/dashboard/.eslintrc.js => .eslintrc.js (75%) rename packages/dashboard/.prettierrc.js => .prettierrc.js (100%) create mode 100644 __mocks__/fs-extra.ts create mode 100644 __mocks__/redis.ts delete mode 100644 app-data/.gitkeep delete mode 100644 apps/.gitkeep delete mode 100644 commitlint.config.js create mode 100644 esbuild.js delete mode 100644 jest.config.js create mode 100644 jest.config.ts delete mode 100644 media/.gitkeep delete mode 100644 media/data/.gitkeep delete mode 100644 media/data/books/.gitkeep delete mode 100644 media/data/books/ebooks/.gitkeep delete mode 100644 media/data/books/metadata.db delete mode 100644 media/data/books/spoken/.gitkeep delete mode 100644 media/data/images/.gitkeep delete mode 100644 media/data/movies/.gitkeep delete mode 100644 media/data/music/.gitkeep delete mode 100644 media/data/podcasts/.gitkeep delete mode 100644 media/data/tv/.gitkeep delete mode 100644 media/torrents/.gitkeep delete mode 100644 media/torrents/complete/.gitkeep delete mode 100644 media/torrents/incomplete/.gitkeep delete mode 100644 media/torrents/watch/.gitkeep rename packages/dashboard/next-env.d.ts => next-env.d.ts (100%) create mode 100644 next.config.mjs delete mode 100644 packages/dashboard/.dockerignore delete mode 100644 packages/dashboard/.gitignore delete mode 100644 packages/dashboard/README.md delete mode 100644 packages/dashboard/codegen.yml delete mode 100644 packages/dashboard/jest.config.js delete mode 100644 packages/dashboard/next.config.js delete mode 100644 packages/dashboard/package.json delete mode 100644 packages/dashboard/src/components/hoc/StatusProvider/StatusProvider.tsx delete mode 100644 packages/dashboard/src/core/apollo/client.ts delete mode 100644 packages/dashboard/src/core/apollo/links/authLink.ts delete mode 100644 packages/dashboard/src/core/apollo/links/errorLink.ts delete mode 100644 packages/dashboard/src/core/apollo/links/httpLink.ts delete mode 100644 packages/dashboard/src/core/apollo/links/index.ts delete mode 100644 packages/dashboard/src/core/constants.ts delete mode 100644 packages/dashboard/src/core/types.ts delete mode 100644 packages/dashboard/src/generated/graphql.tsx delete mode 100644 packages/dashboard/src/graphql/mutations/installApp.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/login.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/logout.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/register.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/restart.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/startApp.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/stopApp.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/unintallApp.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/update.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/updateApp.graphql delete mode 100644 packages/dashboard/src/graphql/mutations/updateAppConfig.graphql delete mode 100644 packages/dashboard/src/graphql/queries/getApp.graphql delete mode 100644 packages/dashboard/src/graphql/queries/installedApps.graphql delete mode 100644 packages/dashboard/src/graphql/queries/isConfigured.graphql delete mode 100644 packages/dashboard/src/graphql/queries/listApps.graphql delete mode 100644 packages/dashboard/src/graphql/queries/me.graphql delete mode 100644 packages/dashboard/src/graphql/queries/refreshToken.graphql delete mode 100644 packages/dashboard/src/graphql/queries/systemInfo.graphql delete mode 100644 packages/dashboard/src/graphql/queries/version.graphql delete mode 100644 packages/dashboard/src/hooks/useCachedRessources.ts delete mode 100644 packages/dashboard/src/mocks/handlers.ts delete mode 100644 packages/dashboard/src/mocks/handlers/appHandlers.ts delete mode 100644 packages/dashboard/src/modules/Apps/components/InstallModal/InstallModal.tsx delete mode 100644 packages/dashboard/src/modules/Apps/components/UpdateSettingsModal.tsx delete mode 100644 packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.test.tsx delete mode 100644 packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.tsx delete mode 100644 packages/dashboard/src/modules/Auth/containers/LoginContainer/LoginContainer.tsx delete mode 100644 packages/dashboard/src/modules/Auth/containers/RegisterContainer/RegisterContainer.tsx delete mode 100644 packages/dashboard/src/modules/Dashboard/pages/DashboardPage/DashboardPage.tsx delete mode 100644 packages/dashboard/src/modules/Settings/containers/SettingsContainer/SettingsContainer.test.tsx delete mode 100644 packages/dashboard/src/modules/Settings/pages/SettingsPage/SettingsPage.test.tsx delete mode 100644 packages/dashboard/src/pages/_app.tsx delete mode 100644 packages/dashboard/src/pages/app-store/[id].tsx delete mode 100644 packages/dashboard/src/pages/app-store/index.tsx delete mode 100644 packages/dashboard/src/pages/apps/[id].tsx delete mode 100644 packages/dashboard/src/pages/apps/index.tsx delete mode 100644 packages/dashboard/src/pages/index.tsx delete mode 100644 packages/dashboard/src/pages/settings.tsx delete mode 100644 packages/dashboard/src/state/systemStore.ts delete mode 100644 packages/dashboard/tests/test-utils.tsx delete mode 100644 packages/dashboard/tsconfig.json delete mode 100644 packages/system-api/.dockerignore delete mode 100644 packages/system-api/.eslintignore delete mode 100644 packages/system-api/.eslintrc.js delete mode 100644 packages/system-api/.gitignore delete mode 100644 packages/system-api/.prettierrc.js delete mode 100644 packages/system-api/__mocks__/child_process.ts delete mode 100644 packages/system-api/__mocks__/fs-extra.ts delete mode 100644 packages/system-api/__mocks__/node-cron.ts delete mode 100644 packages/system-api/__mocks__/redis.ts delete mode 100644 packages/system-api/esbuild.js delete mode 100644 packages/system-api/jest.config.js delete mode 100644 packages/system-api/ormconfig.ts delete mode 100644 packages/system-api/package.json delete mode 100755 packages/system-api/src/config/constants/constants.ts delete mode 100644 packages/system-api/src/config/datasource.ts delete mode 100644 packages/system-api/src/config/logger/apollo.logger.ts delete mode 100644 packages/system-api/src/config/migrations/1657299198975-Initial.ts delete mode 100644 packages/system-api/src/config/migrations/1659645508713-AppVersion.ts delete mode 100644 packages/system-api/src/config/migrations/1660071627328-AppStatusUpdating.ts delete mode 100644 packages/system-api/src/config/migrations/1662036689477-AppExposedDomain.ts delete mode 100644 packages/system-api/src/config/types.ts delete mode 100644 packages/system-api/src/constants/constants.ts delete mode 100644 packages/system-api/src/core/config/TipiConfig.ts delete mode 100644 packages/system-api/src/core/config/__tests__/EventDispatcher.test.ts delete mode 100644 packages/system-api/src/core/jobs/__tests__/jobs.test.ts delete mode 100644 packages/system-api/src/core/jobs/jobs.ts delete mode 100644 packages/system-api/src/core/middlewares/__tests__/sessionMiddleware.test.ts delete mode 100644 packages/system-api/src/core/middlewares/authChecker.ts delete mode 100644 packages/system-api/src/core/updates/__tests__/v040.test.ts delete mode 100644 packages/system-api/src/core/updates/recover-migrations.ts delete mode 100644 packages/system-api/src/core/updates/run.ts delete mode 100644 packages/system-api/src/core/updates/v040.ts delete mode 100644 packages/system-api/src/declarations.d.ts delete mode 100644 packages/system-api/src/helpers/helpers.ts delete mode 100644 packages/system-api/src/modules/apps/__tests__/apps.resolver.test.ts delete mode 100644 packages/system-api/src/modules/apps/app.entity.ts delete mode 100644 packages/system-api/src/modules/apps/app.types.ts delete mode 100644 packages/system-api/src/modules/apps/apps.helpers.ts delete mode 100644 packages/system-api/src/modules/apps/apps.resolver.ts delete mode 100644 packages/system-api/src/modules/apps/apps.service.ts delete mode 100644 packages/system-api/src/modules/apps/apps.types.ts delete mode 100644 packages/system-api/src/modules/auth/__tests__/auth.resolver.test.ts delete mode 100644 packages/system-api/src/modules/auth/__tests__/user.factory.ts delete mode 100644 packages/system-api/src/modules/auth/auth.resolver.ts delete mode 100644 packages/system-api/src/modules/auth/auth.service.ts delete mode 100644 packages/system-api/src/modules/auth/auth.types.ts delete mode 100644 packages/system-api/src/modules/auth/user.entity.ts delete mode 100644 packages/system-api/src/modules/fs/__tests__/fs.helpers.test.ts delete mode 100644 packages/system-api/src/modules/system/__tests__/system.resolver.test.ts delete mode 100644 packages/system-api/src/modules/system/system.controller.ts delete mode 100644 packages/system-api/src/modules/system/system.resolver.ts delete mode 100644 packages/system-api/src/modules/system/system.service.ts delete mode 100644 packages/system-api/src/modules/system/system.types.ts delete mode 100644 packages/system-api/src/modules/system/update.entity.ts delete mode 100644 packages/system-api/src/schema.ts delete mode 100644 packages/system-api/src/server.ts delete mode 100755 packages/system-api/src/test/connection.ts delete mode 100644 packages/system-api/src/test/dotenv-config.ts delete mode 100644 packages/system-api/src/test/gcall.ts delete mode 100644 packages/system-api/src/test/jest-setup.ts delete mode 100644 packages/system-api/src/test/mutations/index.ts delete mode 100644 packages/system-api/src/test/mutations/installApp.graphql delete mode 100644 packages/system-api/src/test/mutations/login.graphql delete mode 100644 packages/system-api/src/test/mutations/register.graphql delete mode 100644 packages/system-api/src/test/mutations/restart.graphql delete mode 100644 packages/system-api/src/test/mutations/startApp.graphql delete mode 100644 packages/system-api/src/test/mutations/stopApp.graphql delete mode 100644 packages/system-api/src/test/mutations/uninstallApp.graphql delete mode 100644 packages/system-api/src/test/mutations/update.graphql delete mode 100644 packages/system-api/src/test/mutations/updateApp.graphql delete mode 100644 packages/system-api/src/test/mutations/updateAppConfig.graphql delete mode 100644 packages/system-api/src/test/queries/getApp.graphql delete mode 100644 packages/system-api/src/test/queries/index.ts delete mode 100644 packages/system-api/src/test/queries/installedApps.graphql delete mode 100644 packages/system-api/src/test/queries/isConfigured.graphql delete mode 100644 packages/system-api/src/test/queries/listAppInfos.graphql delete mode 100644 packages/system-api/src/test/queries/me.graphql delete mode 100644 packages/system-api/src/test/queries/refreshToken.graphql delete mode 100644 packages/system-api/src/test/queries/systemInfo.graphql delete mode 100644 packages/system-api/src/test/queries/version.graphql delete mode 100644 packages/system-api/src/types.ts delete mode 100644 packages/system-api/tsconfig.json delete mode 100644 pnpm-workspace.yaml create mode 100644 prisma/schema.prisma rename {packages/dashboard/public => public}/android-chrome-192x192.png (100%) rename {packages/dashboard/public => public}/android-chrome-512x512.png (100%) rename {packages/dashboard/public => public}/apple-touch-icon.png (100%) rename {packages/dashboard/public => public}/browserconfig.xml (100%) rename {packages/dashboard/public => public}/empty.svg (100%) rename {packages/dashboard/public => public}/error.png (100%) rename {packages/dashboard/public => public}/favicon-16x16.png (100%) rename {packages/dashboard/public => public}/favicon-32x32.png (100%) rename {packages/dashboard/public => public}/favicon.ico (100%) rename {packages/dashboard/public => public}/mockServiceWorker.js (99%) rename {packages/dashboard/public => public}/mstile-150x150.png (100%) rename {packages/dashboard/public => public}/placeholder.png (100%) rename {packages/dashboard/public => public}/safari-pinned-tab.svg (100%) rename {packages/dashboard/public => public}/site.webmanifest (100%) rename {packages/dashboard/public => public}/tipi.png (100%) delete mode 100644 repos/.gitkeep create mode 100755 scripts/reset-password.sh rename {packages/dashboard/src => src/client}/components/AppLogo/AppLogo.module.scss (100%) rename {packages/dashboard/src => src/client}/components/AppLogo/AppLogo.tsx (82%) rename {packages/dashboard/src => src/client}/components/AppLogo/index.ts (100%) rename {packages/dashboard/src => src/client}/components/AppStatus/AppStatus.module.scss (100%) rename {packages/dashboard/src => src/client}/components/AppStatus/AppStatus.tsx (64%) rename {packages/dashboard/src => src/client}/components/AppStatus/index.tsx (100%) rename {packages/dashboard/src => src/client}/components/AppTile/AppTile.module.scss (100%) rename {packages/dashboard/src => src/client}/components/AppTile/AppTile.tsx (95%) rename {packages/dashboard/src => src/client}/components/AppTile/index.tsx (100%) rename {packages/dashboard/src => src/client}/components/Layout/Layout.module.scss (100%) create mode 100644 src/client/components/Layout/Layout.test.tsx rename {packages/dashboard/src => src/client}/components/Layout/Layout.tsx (76%) rename {packages/dashboard/src => src/client}/components/Layout/index.ts (100%) rename {packages/dashboard/src => src/client}/components/Markdown/Markdown.tsx (85%) rename {packages/dashboard/src => src/client}/components/StatusScreen/StatusScreen.tsx (94%) rename {packages/dashboard/src => src/client}/components/StatusScreen/index.ts (100%) rename {packages/dashboard/src => src/client}/components/hoc/AuthProvider/AuthProvider.test.tsx (67%) rename {packages/dashboard/src => src/client}/components/hoc/AuthProvider/AuthProvider.tsx (62%) rename {packages/dashboard/src => src/client}/components/hoc/AuthProvider/index.ts (100%) rename {packages/dashboard/src => src/client}/components/hoc/StatusProvider/StatusProvider.test.tsx (70%) create mode 100644 src/client/components/hoc/StatusProvider/StatusProvider.tsx rename {packages/dashboard/src => src/client}/components/hoc/StatusProvider/index.ts (100%) rename {packages/dashboard/src => src/client}/components/hoc/ToastProvider/ToastProvider.test.tsx (98%) rename {packages/dashboard/src => src/client}/components/hoc/ToastProvider/ToastProvider.tsx (100%) rename {packages/dashboard/src => src/client}/components/hoc/ToastProvider/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/Button/Button.test.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Button/Button.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Button/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/DataGrid/DataGrid.test.tsx (93%) rename {packages/dashboard/src => src/client}/components/ui/DataGrid/DataGrid.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/DataGrid/DataGridItem.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/DataGrid/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/EmptyPage/EmptyPage.module.scss (100%) rename {packages/dashboard/src => src/client}/components/ui/EmptyPage/EmptyPage.test.tsx (93%) rename {packages/dashboard/src => src/client}/components/ui/EmptyPage/EmptyPage.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/EmptyPage/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/ErrorPage/ErrorPage.module.scss (100%) rename {packages/dashboard/src => src/client}/components/ui/ErrorPage/ErrorPage.test.tsx (92%) rename {packages/dashboard/src => src/client}/components/ui/ErrorPage/ErrorPage.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/ErrorPage/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/Header/Header.test.tsx (70%) rename {packages/dashboard/src => src/client}/components/ui/Header/Header.tsx (84%) rename {packages/dashboard/src => src/client}/components/ui/Header/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/Input/Input.test.tsx (98%) rename {packages/dashboard/src => src/client}/components/ui/Input/Input.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Input/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/Modal/Modal.module.scss (100%) rename {packages/dashboard/src => src/client}/components/ui/Modal/Modal.test.tsx (98%) rename {packages/dashboard/src => src/client}/components/ui/Modal/Modal.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Modal/ModalBody.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Modal/ModalFooter.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Modal/ModalHeader.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Modal/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/NavBar/NavBar.test.tsx (96%) rename {packages/dashboard/src => src/client}/components/ui/NavBar/NavBar.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/NavBar/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/Switch/Switch.test.tsx (96%) rename {packages/dashboard/src => src/client}/components/ui/Switch/Switch.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Switch/index.ts (100%) rename {packages/dashboard/src => src/client}/components/ui/Toast/Toast.module.scss (100%) rename {packages/dashboard/src => src/client}/components/ui/Toast/Toast.test.tsx (94%) rename {packages/dashboard/src => src/client}/components/ui/Toast/Toast.tsx (100%) rename {packages/dashboard/src => src/client}/components/ui/Toast/index.ts (100%) create mode 100644 src/client/core/constants.ts rename {packages/dashboard/src => src/client}/core/helpers/url-helpers.ts (100%) create mode 100644 src/client/core/types.ts rename {packages/dashboard/src => src/client}/hooks/useDisclosure.ts (100%) rename {packages/dashboard/src => src/client}/mocks/browser.ts (100%) rename {packages/dashboard/src => src/client}/mocks/fixtures/app.fixtures.ts (65%) create mode 100644 src/client/mocks/getTrpcMock.ts create mode 100644 src/client/mocks/handlers.ts rename {packages/dashboard/src => src/client}/mocks/index.ts (100%) rename {packages/dashboard/src => src/client}/mocks/server.ts (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/AppStoreTable/AppStoreTable.loading.tsx (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/AppStoreTable/AppStoreTable.tsx (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/AppStoreTable/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/AppStoreTile/AppStoreTile.loading.tsx (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/AppStoreTile/AppStoreTile.module.scss (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/AppStoreTile/AppStoreTile.tsx (87%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/AppStoreTile/index.tsx (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/CategorySelector/CategorySelector.tsx (90%) rename {packages/dashboard/src => src/client}/modules/AppStore/components/CategorySelector/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/containers/AppStoreContainer/AppStoreContainer.tsx (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/containers/AppStoreContainer/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/helpers/table.helpers.ts (56%) rename {packages/dashboard/src => src/client}/modules/AppStore/helpers/table.types.ts (80%) rename {packages/dashboard/src => src/client}/modules/AppStore/pages/AppStorePage/AppStorePage.module.scss (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/pages/AppStorePage/AppStorePage.test.tsx (78%) rename {packages/dashboard/src => src/client}/modules/AppStore/pages/AppStorePage/AppStorePage.tsx (67%) rename {packages/dashboard/src => src/client}/modules/AppStore/pages/AppStorePage/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/AppStore/state/appStoreState.ts (80%) rename {packages/dashboard/src => src/client}/modules/Apps/components/AppActions/AppActions.test.tsx (75%) rename {packages/dashboard/src => src/client}/modules/Apps/components/AppActions/AppActions.tsx (81%) rename {packages/dashboard/src => src/client}/modules/Apps/components/AppActions/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Apps/components/AppDetailsTabs.tsx (84%) rename {packages/dashboard/src => src/client}/modules/Apps/components/InstallForm/InstallForm.test.tsx (76%) rename {packages/dashboard/src => src/client}/modules/Apps/components/InstallForm/InstallForm.tsx (90%) rename {packages/dashboard/src => src/client}/modules/Apps/components/InstallForm/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Apps/components/InstallModal/InstallModal.test.tsx (62%) create mode 100644 src/client/modules/Apps/components/InstallModal/InstallModal.tsx rename {packages/dashboard/src => src/client}/modules/Apps/components/InstallModal/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Apps/components/StopModal.tsx (64%) rename {packages/dashboard/src => src/client}/modules/Apps/components/UninstallModal.tsx (78%) rename {packages/dashboard/src => src/client}/modules/Apps/components/UpdateModal/UpdateModal.test.tsx (68%) rename {packages/dashboard/src => src/client}/modules/Apps/components/UpdateModal/UpdateModal.tsx (67%) rename {packages/dashboard/src => src/client}/modules/Apps/components/UpdateModal/index.ts (100%) create mode 100644 src/client/modules/Apps/components/UpdateSettingsModal.tsx create mode 100644 src/client/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.test.tsx create mode 100644 src/client/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.tsx create mode 100644 src/client/modules/Apps/helpers/castAppConfig.ts rename {packages/dashboard/src => src/client}/modules/Apps/pages/AppDetailsPage/AppDetailsPage.test.tsx (64%) rename {packages/dashboard/src => src/client}/modules/Apps/pages/AppDetailsPage/AppDetailsPage.tsx (59%) rename {packages/dashboard/src => src/client}/modules/Apps/pages/AppDetailsPage/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Apps/pages/AppsPage/AppsPage.test.tsx (70%) rename {packages/dashboard/src => src/client}/modules/Apps/pages/AppsPage/AppsPage.tsx (55%) rename {packages/dashboard/src => src/client}/modules/Apps/pages/AppsPage/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Apps/utils/validators/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Apps/utils/validators/validators.test.tsx (90%) rename {packages/dashboard/src => src/client}/modules/Apps/utils/validators/validators.ts (88%) rename {packages/dashboard/src => src/client}/modules/Auth/components/AuthFormLayout/AuthFormLayout.tsx (100%) rename {packages/dashboard/src => src/client}/modules/Auth/components/AuthFormLayout/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Auth/components/LoginForm/LoginForm.tsx (90%) rename {packages/dashboard/src => src/client}/modules/Auth/components/LoginForm/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Auth/components/RegisterForm/RegisterForm.tsx (100%) rename {packages/dashboard/src => src/client}/modules/Auth/components/RegisterForm/index.ts (100%) create mode 100644 src/client/modules/Auth/components/ResetPasswordForm/ResetPasswordForm.test.tsx create mode 100644 src/client/modules/Auth/components/ResetPasswordForm/ResetPasswordForm.tsx create mode 100644 src/client/modules/Auth/components/ResetPasswordForm/index.ts rename {packages/dashboard/src => src/client}/modules/Auth/containers/LoginContainer/LoginContainer.test.tsx (76%) create mode 100644 src/client/modules/Auth/containers/LoginContainer/LoginContainer.tsx rename {packages/dashboard/src => src/client}/modules/Auth/containers/LoginContainer/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Auth/containers/RegisterContainer/RegisterContainer.test.tsx (72%) create mode 100644 src/client/modules/Auth/containers/RegisterContainer/RegisterContainer.tsx rename {packages/dashboard/src => src/client}/modules/Auth/containers/RegisterContainer/index.ts (100%) create mode 100644 src/client/modules/Auth/containers/ResetPasswordContainer/ResetPasswordContainer.test.tsx create mode 100644 src/client/modules/Auth/containers/ResetPasswordContainer/ResetPasswordContainer.tsx create mode 100644 src/client/modules/Auth/containers/ResetPasswordContainer/index.ts create mode 100644 src/client/modules/Auth/pages/LoginPage/LoginPage.test.tsx create mode 100644 src/client/modules/Auth/pages/LoginPage/LoginPage.tsx create mode 100644 src/client/modules/Auth/pages/LoginPage/index.ts create mode 100644 src/client/modules/Auth/pages/RegisterPage/RegisterPage.test.tsx create mode 100644 src/client/modules/Auth/pages/RegisterPage/RegisterPage.tsx create mode 100644 src/client/modules/Auth/pages/RegisterPage/index.ts create mode 100644 src/client/modules/Auth/pages/ResetPasswordPage/ResetPasswordPage.test.tsx create mode 100644 src/client/modules/Auth/pages/ResetPasswordPage/ResetPasswordPage.tsx create mode 100644 src/client/modules/Auth/pages/ResetPasswordPage/index.ts rename {packages/dashboard/src => src/client}/modules/Dashboard/components/SystemStat.tsx (100%) rename packages/dashboard/src/modules/Dashboard/containers/Dashboard.test.tsx => src/client/modules/Dashboard/containers/DashboardContainer.test.tsx (62%) rename packages/dashboard/src/modules/Dashboard/containers/Dashboard.tsx => src/client/modules/Dashboard/containers/DashboardContainer.tsx (74%) create mode 100644 src/client/modules/Dashboard/containers/index.ts rename {packages/dashboard/src => src/client}/modules/Dashboard/pages/DashboardPage/DashboardPage.test.tsx (80%) create mode 100644 src/client/modules/Dashboard/pages/DashboardPage/DashboardPage.tsx rename {packages/dashboard/src => src/client}/modules/Dashboard/pages/DashboardPage/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Settings/components/RestartModal/RestartModal.tsx (100%) rename {packages/dashboard/src => src/client}/modules/Settings/components/RestartModal/index.ts (100%) rename {packages/dashboard/src => src/client}/modules/Settings/components/UpdateModal/UpdateModal.tsx (100%) rename {packages/dashboard/src => src/client}/modules/Settings/components/UpdateModal/index.ts (100%) create mode 100644 src/client/modules/Settings/containers/SettingsContainer/SettingsContainer.test.tsx rename {packages/dashboard/src => src/client}/modules/Settings/containers/SettingsContainer/SettingsContainer.tsx (56%) rename {packages/dashboard/src => src/client}/modules/Settings/containers/SettingsContainer/index.ts (100%) create mode 100644 src/client/modules/Settings/pages/SettingsPage/SettingsPage.test.tsx rename {packages/dashboard/src => src/client}/modules/Settings/pages/SettingsPage/SettingsPage.tsx (57%) rename {packages/dashboard/src => src/client}/modules/Settings/pages/SettingsPage/index.ts (100%) create mode 100644 src/client/state/systemStore.ts rename {packages/dashboard/src => src/client}/state/toastStore.ts (72%) rename {packages/dashboard/src => src/client}/state/uiStore.ts (100%) rename {packages/dashboard/src => src/client}/styles/global.css (100%) rename {packages/dashboard/src => src/client}/styles/global.scss (68%) rename {packages/dashboard/src => src/client}/styles/reset.css (100%) create mode 100644 src/client/types/layout-helpers.d.ts create mode 100644 src/client/utils/trpc.ts rename {packages/dashboard/src => src/client}/utils/typescript.ts (100%) rename {packages/dashboard/src => src}/pages/404.tsx (84%) create mode 100644 src/pages/_app.tsx rename {packages/dashboard/src => src}/pages/_document.tsx (95%) create mode 100644 src/pages/api/trpc/[trpc].ts create mode 100644 src/pages/app-store/[id].tsx create mode 100644 src/pages/app-store/index.tsx create mode 100644 src/pages/apps/[id].tsx create mode 100644 src/pages/apps/index.tsx create mode 100644 src/pages/index.tsx create mode 100644 src/pages/login.tsx create mode 100644 src/pages/register.tsx create mode 100644 src/pages/reset-password.tsx create mode 100644 src/pages/settings.tsx create mode 100644 src/server/common/__tests__/get-server-auth-session.test.ts rename {packages/system-api/src/modules/fs => src/server/common}/fs.helpers.ts (92%) rename packages/system-api/src/core/middlewares/sessionMiddleware.ts => src/server/common/get-server-auth-session.ts (52%) create mode 100644 src/server/common/typescript.helpers.ts create mode 100644 src/server/context.ts create mode 100644 src/server/core/EventDispatcher/EventDispatcher.test.ts rename {packages/system-api/src/core/config => src/server/core/EventDispatcher}/EventDispatcher.ts (63%) create mode 100644 src/server/core/EventDispatcher/index.ts rename packages/system-api/src/config/logger/logger.ts => src/server/core/Logger/Logger.ts (75%) create mode 100644 src/server/core/Logger/index.ts rename {packages/system-api/src/config => src/server/core/TipiCache}/TipiCache.ts (95%) create mode 100644 src/server/core/TipiCache/index.ts rename {packages/system-api/src/core/config/__tests__ => src/server/core/TipiConfig}/TipiConfig.test.ts (77%) create mode 100644 src/server/core/TipiConfig/TipiConfig.ts create mode 100644 src/server/core/TipiConfig/index.ts create mode 100644 src/server/db/client.ts create mode 100644 src/server/index.ts create mode 100644 src/server/migrations/00000-create-migrations-table.sql create mode 100644 src/server/migrations/00001-initial.sql create mode 100644 src/server/migrations/00002-add-app-version.sql create mode 100644 src/server/migrations/00003-add-status-updating.sql create mode 100644 src/server/migrations/00004-add-exposed-domain-fields.sql create mode 100644 src/server/migrations/00005-add-user-operator.sql create mode 100644 src/server/routers/_app.ts create mode 100644 src/server/routers/app/app.router.ts create mode 100644 src/server/routers/auth/auth.router.ts create mode 100644 src/server/routers/system/system.router.ts create mode 100644 src/server/run-migration.ts rename {packages/system-api/src/modules/apps/__tests__ => src/server/services/apps}/apps.helpers.test.ts (73%) create mode 100644 src/server/services/apps/apps.helpers.ts rename {packages/system-api/src/modules/apps/__tests__ => src/server/services/apps}/apps.service.test.ts (62%) create mode 100644 src/server/services/apps/apps.service.ts create mode 100644 src/server/services/apps/apps.types.ts rename {packages/system-api/src/modules/auth/__tests__ => src/server/services/auth}/auth.service.test.ts (53%) create mode 100644 src/server/services/auth/auth.service.ts create mode 100644 src/server/services/system/index.ts rename {packages/system-api/src/modules/system/__tests__ => src/server/services/system}/system.service.test.ts (73%) create mode 100644 src/server/services/system/system.service.ts rename {packages/system-api/src/modules/apps/__tests__ => src/server/tests}/apps.factory.ts (64%) create mode 100644 src/server/tests/user.factory.ts create mode 100644 src/server/trpc.ts delete mode 100644 state/.gitkeep create mode 100644 tests/TRPCTestClientProvider.tsx rename {packages/dashboard/tests => tests/client}/jest.setup.tsx (54%) create mode 100644 tests/server/db-connection.ts create mode 100644 tests/server/jest.setup.ts create mode 100644 tests/test-utils.tsx diff --git a/.dockerignore b/.dockerignore index cf95c225..266b8ed2 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,3 +10,18 @@ dist/ docker-compose*.yml Dockerfile* .dockerignore + +# Tipi folder +logs/ +tests/ +state/ +templates/ +scripts/ +screenshots/ +repos/ +media/ +data/ +apps/ +app-data/ +.github/ +__mocks__/ \ No newline at end of file diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..f61e820d --- /dev/null +++ b/.env.example @@ -0,0 +1,18 @@ +# Only edit this file if you know what you are doing! +# It will be overwritten on update. + +APPS_REPO_ID=7a92c8307e0a8074763c80be1fcfa4f87da6641daea9211aea6743b0116aba3b +APPS_REPO_URL=https://github.com/meienberger/runtipi-appstore +TZ=UTC +INTERNAL_IP=localhost +DNS_IP=9.9.9.9 +ARCHITECTURE=arm64 +TIPI_VERSION=0.8.0 +JWT_SECRET=secret +ROOT_FOLDER_HOST=/Users/nicolas/Projects/runtipi +NGINX_PORT=3000 +NGINX_PORT_SSL=443 +POSTGRES_PASSWORD=postgres +DOMAIN=tipi.localhost +STORAGE_PATH=/Users/nicolas/Projects/runtipi +REDIS_HOST=tipi-redis \ No newline at end of file diff --git a/.env.test b/.env.test new file mode 100644 index 00000000..3b593f65 --- /dev/null +++ b/.env.test @@ -0,0 +1,6 @@ +POSTGRES_HOST=localhost +POSTGRES_DBNAME=postgres +POSTGRES_USERNAME=postgres +POSTGRES_PASSWORD=postgres +POSTGRES_PORT=5433 +APPS_REPO_ID=repo-id diff --git a/packages/dashboard/.eslintignore b/.eslintignore similarity index 100% rename from packages/dashboard/.eslintignore rename to .eslintignore diff --git a/packages/dashboard/.eslintrc.js b/.eslintrc.js similarity index 75% rename from packages/dashboard/.eslintrc.js rename to .eslintrc.js index b8fe9dc7..c67497fc 100644 --- a/packages/dashboard/.eslintrc.js +++ b/.eslintrc.js @@ -1,5 +1,5 @@ module.exports = { - plugins: ['@typescript-eslint', 'import', 'react', 'jest'], + plugins: ['@typescript-eslint', 'import', 'react', 'jest', 'jsdoc'], extends: [ 'plugin:@typescript-eslint/recommended', 'next/core-web-vitals', @@ -10,6 +10,7 @@ module.exports = { 'plugin:import/typescript', 'prettier', 'plugin:react/recommended', + 'plugin:jsdoc/recommended', ], parser: '@typescript-eslint/parser', parserOptions: { @@ -28,10 +29,13 @@ module.exports = { 'react/jsx-props-no-spreading': 0, 'react/no-unused-prop-types': 0, 'react/button-has-type': 0, - 'import/no-extraneous-dependencies': ['error', { devDependencies: ['**/*.test.{ts,tsx}', '**/*.spec.{ts,tsx}', '**/mocks/**', 'tests/**'] }], + 'import/no-extraneous-dependencies': ['error', { devDependencies: ['esbuild.js', '**/*.test.{ts,tsx}', '**/*.spec.{ts,tsx}', '**/*.factory.{ts,tsx}', '**/mocks/**', 'tests/**'] }], + 'no-underscore-dangle': 0, + 'arrow-body-style': 0, }, globals: { JSX: true, + NodeJS: true, }, env: { 'jest/globals': true, diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f4663c12..f0d28fe4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,8 +7,12 @@ env: JWT_SECRET: "secret" ROOT_FOLDER_HOST: /tipi APPS_REPO_ID: repo-id - INTERNAL_IP: 192.168.1.10 - + INTERNAL_IP: localhost + REDIS_HOST: redis + APPS_REPO_URL: https://repo.github.com/ + DOMAIN: localhost + TIPI_VERSION: 0.0.1 + jobs: ci: runs-on: ubuntu-latest @@ -57,15 +61,15 @@ jobs: - name: Install dependencies run: pnpm install - - name: Build packages - run: pnpm -r build + - name: Build client + run: pnpm build:next - name: Run linter - run: pnpm -r lint - + run: pnpm lint + - name: Run tests - run: pnpm -r test + run: pnpm test - uses: codecov/codecov-action@v3 with: - token: ${{ secrets.CODECOV_TOKEN }} \ No newline at end of file + token: ${{ secrets.CODECOV_TOKEN }} diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml index 928773a4..4323778b 100644 --- a/.github/workflows/release-candidate.yml +++ b/.github/workflows/release-candidate.yml @@ -15,29 +15,29 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v2 - + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - + - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Get tag from VERSION file id: meta run: | VERSION=$(npm run version --silent) TAG=${VERSION} echo "::set-output name=tag::${TAG}" - + - name: Build and push images uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64,linux/arm64,linux/arm/v7 + platforms: linux/amd64,linux/arm64 push: true tags: meienberger/runtipi:rc-${{ steps.meta.outputs.TAG }} cache-from: type=registry,ref=meienberger/runtipi:buildcache - cache-to: type=registry,ref=meienberger/runtipi:buildcache,mode=max \ No newline at end of file + cache-to: type=registry,ref=meienberger/runtipi:buildcache,mode=max diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6f31b875..5d53bb69 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,10 +1,9 @@ - name: Publish release on: push: - branches: + branches: - master - + jobs: release: if: github.repository == 'meienberger/runtipi' @@ -18,25 +17,25 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - + - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - + - name: Get tag from VERSION file id: meta run: | VERSION=$(npm run version --silent) TAG=${VERSION} echo "::set-output name=tag::${TAG}" - + - name: Build and push images uses: docker/build-push-action@v3 with: context: . - platforms: linux/amd64,linux/arm64,linux/arm/v7 + platforms: linux/amd64,linux/arm64 push: true tags: meienberger/runtipi:latest,meienberger/runtipi:${{ steps.meta.outputs.TAG }} cache-from: type=registry,ref=meienberger/runtipi:buildcache @@ -48,7 +47,7 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} package-path: ./package.json - + - name: Create Release id: create_release uses: actions/create-release@latest diff --git a/.gitignore b/.gitignore index 960959a0..9d5a90cf 100644 --- a/.gitignore +++ b/.gitignore @@ -4,38 +4,58 @@ .DS_Store .vscode +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build +/dist +server-preload.js + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo + logs .pnpm-debug.log .env* +!.env.example +!.env.test github.secrets node_modules/ -app-data/* -data/postgres -data/redis -!app-data/.gitkeep -repos/* -!repos/.gitkeep -apps/* -!apps/.gitkeep +/app-data/ +/data/ +/repos/ +/apps/ traefik/shared # media folder media -!media/.gitkeep -!media/data/.gitkeep -!media/data/books/.gitkeep -!media/data/books/ebooks/.gitkeep -!media/data/books/spoken/.gitkeep -!media/data/movies/.gitkeep -!media/data/music/.gitkeep -!media/data/podcasts/.gitkeep -!media/data/tv/.gitkeep -!media/data/images/.gitkeep -!media/torrents/.gitkeep -!media/torrents/complete/.gitkeep -!media/torrents/incomplete/.gitkeep -!media/torrents/watch/.gitkeep -# state folder -state/* -!state/.gitkeep +/state/ diff --git a/packages/dashboard/.prettierrc.js b/.prettierrc.js similarity index 100% rename from packages/dashboard/.prettierrc.js rename to .prettierrc.js diff --git a/Dockerfile b/Dockerfile index 9434291f..7b096efa 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,43 +1,49 @@ -FROM node:18-alpine3.16 AS builder +ARG NODE_VERSION="18.12.1" +ARG ALPINE_VERSION="3.16" -# Required for argon2 -RUN apk --no-cache add g++ -RUN apk --no-cache add make -RUN apk --no-cache add python3 +FROM node:${NODE_VERSION}-buster-slim AS node_base +RUN apt update +RUN apt install -y openssl + +FROM node_base AS builder_base -# Required for sharp -RUN apk --no-cache add vips-dev=8.12.2-r5 RUN npm install node-gyp -g +RUN npm install pnpm -g -WORKDIR /api -COPY ./packages/system-api/package.json /api/package.json -RUN npm i -# --- -WORKDIR /dashboard -COPY ./packages/dashboard/package.json /dashboard/package.json -RUN npm i +# BUILDER +FROM builder_base AS builder + +WORKDIR /app + +COPY ./pnpm-lock.yaml ./ +RUN pnpm fetch + +COPY ./package*.json ./ +COPY ./prisma/schema.prisma ./prisma/ + +RUN pnpm install -r --prefer-offline +COPY ./src ./src +COPY ./esbuild.js ./esbuild.js +COPY ./tsconfig.json ./tsconfig.json +COPY ./next.config.mjs ./next.config.mjs +COPY ./public ./public -WORKDIR /api -COPY ./packages/system-api /api -RUN npm run build -# --- -WORKDIR /dashboard -COPY ./packages/dashboard /dashboard RUN npm run build -FROM node:18-alpine3.16 as app +# APP +FROM node_base AS app -WORKDIR / +# USER node -WORKDIR /api -COPY ./packages/system-api/package.json /api/ -COPY --from=builder /api/dist /api/dist +WORKDIR /app -WORKDIR /dashboard -COPY --from=builder /dashboard/next.config.js ./ -COPY --from=builder /dashboard/public ./public -COPY --from=builder /dashboard/package.json ./package.json -COPY --from=builder --chown=node:node /dashboard/.next/standalone ./ -COPY --from=builder --chown=node:node /dashboard/.next/static ./.next/static +COPY --from=builder /app/dist ./ +COPY --from=builder /app/next.config.mjs ./ +COPY --from=builder /app/public ./public +COPY --from=builder /app/package.json ./package.json +COPY --from=builder --chown=node:node /app/.next/standalone ./ +COPY --from=builder --chown=node:node /app/.next/static ./.next/static -WORKDIR / \ No newline at end of file +EXPOSE 3000 + +CMD ["npm", "run", "start"] diff --git a/Dockerfile.dev b/Dockerfile.dev index 80945c13..dd68f3e5 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,19 +1,28 @@ -FROM node:18-alpine3.16 +ARG NODE_VERSION="18.12.1" +ARG ALPINE_VERSION="3.16" -WORKDIR / +FROM node:${NODE_VERSION}-buster-slim -RUN apk --no-cache add g++ make +RUN apt update +RUN apt install -y openssl + +RUN npm install pnpm -g RUN npm install node-gyp -g -WORKDIR /api -COPY ./packages/system-api/package*.json /api/ -RUN npm install +WORKDIR /app -WORKDIR /dashboard -COPY ./packages/dashboard/package*.json /dashboard/ -RUN npm install +COPY ./pnpm-lock.yaml ./ +RUN pnpm fetch -COPY ./packages/system-api /api -COPY ./packages/dashboard /dashboard +COPY ./package*.json ./ +COPY ./prisma/schema.prisma ./prisma/ -WORKDIR / +RUN pnpm install -r --prefer-offline + +COPY ./src ./src +COPY ./esbuild.js ./esbuild.js +COPY ./tsconfig.json ./tsconfig.json +COPY ./next.config.mjs ./next.config.mjs +COPY ./public ./public + +CMD ["npm", "run", "dev"] diff --git a/__mocks__/fs-extra.ts b/__mocks__/fs-extra.ts new file mode 100644 index 00000000..4b1d6654 --- /dev/null +++ b/__mocks__/fs-extra.ts @@ -0,0 +1,118 @@ +import path from 'path'; + +class FsMock { + private static instance: FsMock; + + private mockFiles = Object.create(null); + + // private constructor() {} + + static getInstance(): FsMock { + if (!FsMock.instance) { + FsMock.instance = new FsMock(); + } + return FsMock.instance; + } + + __createMockFiles = (newMockFiles: Record) => { + this.mockFiles = Object.create(null); + + // Create folder tree + Object.keys(newMockFiles).forEach((file) => { + const dir = path.dirname(file); + + if (!this.mockFiles[dir]) { + this.mockFiles[dir] = []; + } + + this.mockFiles[dir].push(path.basename(file)); + this.mockFiles[file] = newMockFiles[file]; + }); + }; + + __resetAllMocks = () => { + this.mockFiles = Object.create(null); + }; + + readFileSync = (p: string) => this.mockFiles[p]; + + existsSync = (p: string) => this.mockFiles[p] !== undefined; + + writeFileSync = (p: string, data: string | string[]) => { + this.mockFiles[p] = data; + }; + + mkdirSync = (p: string) => { + this.mockFiles[p] = Object.create(null); + }; + + rmSync = (p: string) => { + if (this.mockFiles[p] instanceof Array) { + this.mockFiles[p].forEach((file: string) => { + delete this.mockFiles[path.join(p, file)]; + }); + } + + delete this.mockFiles[p]; + }; + + readdirSync = (p: string) => { + const files: string[] = []; + + const depth = p.split('/').length; + + Object.keys(this.mockFiles).forEach((file) => { + if (file.startsWith(p)) { + const fileDepth = file.split('/').length; + + if (fileDepth === depth + 1) { + files.push(file.split('/').pop() || ''); + } + } + }); + + return files; + }; + + copyFileSync = (source: string, destination: string) => { + this.mockFiles[destination] = this.mockFiles[source]; + }; + + copySync = (source: string, destination: string) => { + this.mockFiles[destination] = this.mockFiles[source]; + + if (this.mockFiles[source] instanceof Array) { + this.mockFiles[source].forEach((file: string) => { + this.mockFiles[`${destination}/${file}`] = this.mockFiles[`${source}/${file}`]; + }); + } + }; + + createFileSync = (p: string) => { + this.mockFiles[p] = ''; + }; + + unlinkSync = (p: string) => { + if (this.mockFiles[p] instanceof Array) { + this.mockFiles[p].forEach((file: string) => { + delete this.mockFiles[path.join(p, file)]; + }); + } + delete this.mockFiles[p]; + }; + + getMockFiles = () => this.mockFiles; + + promises = { + unlink: (p: string) => { + if (this.mockFiles[p] instanceof Array) { + this.mockFiles[p].forEach((file: string) => { + delete this.mockFiles[path.join(p, file)]; + }); + } + delete this.mockFiles[p]; + }, + }; +} + +export default FsMock.getInstance(); diff --git a/__mocks__/redis.ts b/__mocks__/redis.ts new file mode 100644 index 00000000..e1855981 --- /dev/null +++ b/__mocks__/redis.ts @@ -0,0 +1,16 @@ +export const createClient = jest.fn(() => { + const values = new Map(); + const expirations = new Map(); + return { + isOpen: true, + connect: jest.fn(), + set: (key: string, value: string, exp: number) => { + values.set(key, value); + expirations.set(key, exp); + }, + get: (key: string) => values.get(key), + quit: jest.fn(), + del: (key: string) => values.delete(key), + ttl: (key: string) => expirations.get(key), + }; +}); diff --git a/app-data/.gitkeep b/app-data/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/.gitkeep b/apps/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/commitlint.config.js b/commitlint.config.js deleted file mode 100644 index 69b4242c..00000000 --- a/commitlint.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ["@commitlint/config-conventional"], -}; diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml index 41767db9..50e2532a 100644 --- a/docker-compose.dev.yml +++ b/docker-compose.dev.yml @@ -50,65 +50,40 @@ services: networks: - tipi_main_network - api: + dashboard: build: context: . dockerfile: Dockerfile.dev - command: /bin/sh -c "cd /api && npm run build && npm run dev" + container_name: dashboard depends_on: tipi-db: condition: service_healthy - container_name: api - volumes: - - ${PWD}/repos:/runtipi/repos:ro - - ${PWD}/apps:/runtipi/apps - - ${PWD}/state:/runtipi/state - - ${PWD}/packages/system-api/src:/api/src - - ${STORAGE_PATH}:/app/storage - - ${PWD}/logs:/app/logs - - ${PWD}/.env.dev:/runtipi/.env - # - /api/node_modules environment: + NODE_ENV: development INTERNAL_IP: ${INTERNAL_IP} TIPI_VERSION: ${TIPI_VERSION} JWT_SECRET: ${JWT_SECRET} NGINX_PORT: ${NGINX_PORT} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_USERNAME: tipi - POSTGRES_DBNAME: tipi - POSTGRES_HOST: tipi-db + POSTGRES_USERNAME: ${POSTGRES_USERNAME} + POSTGRES_DBNAME: ${POSTGRES_DBNAME} + POSTGRES_HOST: ${POSTGRES_HOST} APPS_REPO_ID: ${APPS_REPO_ID} APPS_REPO_URL: ${APPS_REPO_URL} DOMAIN: ${DOMAIN} ARCHITECTURE: ${ARCHITECTURE} - networks: - - tipi_main_network - labels: - traefik.enable: true - # Web - traefik.http.routers.api.rule: PathPrefix(`/api`) - traefik.http.routers.api.service: api - traefik.http.routers.api.entrypoints: web - traefik.http.routers.api.middlewares: api-stripprefix - traefik.http.services.api.loadbalancer.server.port: 3001 - # Middlewares - traefik.http.middlewares.api-stripprefix.stripprefix.prefixes: /api - - dashboard: - build: - context: . - dockerfile: Dockerfile.dev - command: /bin/sh -c "cd /dashboard && npm run dev" - container_name: dashboard - depends_on: - api: - condition: service_started + REDIS_HOST: ${REDIS_HOST} networks: - tipi_main_network volumes: - - ${PWD}/packages/dashboard/src:/dashboard/src + - ${PWD}/src:/app/src # - /dashboard/node_modules # - /dashboard/.next + - ${PWD}/state:/runtipi/state + - ${PWD}/repos:/runtipi/repos:ro + - ${PWD}/apps:/runtipi/apps + - ${PWD}/logs:/app/logs + - ${STORAGE_PATH}:/app/storage labels: traefik.enable: true # Web @@ -126,4 +101,4 @@ networks: - subnet: 10.21.21.0/24 volumes: - pgdata: \ No newline at end of file + pgdata: diff --git a/docker-compose.rc.yml b/docker-compose.rc.yml index a430c3a3..19e99606 100644 --- a/docker-compose.rc.yml +++ b/docker-compose.rc.yml @@ -45,65 +45,35 @@ services: networks: - tipi_main_network - api: + dashboard: image: meienberger/runtipi:rc-${TIPI_VERSION} - command: /bin/sh -c "cd /api && npm run start" - container_name: api + container_name: dashboard + networks: + - tipi_main_network depends_on: tipi-db: condition: service_healthy - volumes: - - ${PWD}/repos:/runtipi/repos:ro - - ${PWD}/apps:/runtipi/apps - - ${PWD}/state:/runtipi/state - - ${PWD}/logs:/app/logs - - ${STORAGE_PATH}:/app/storage - - ${PWD}/.env:/runtipi/.env:ro environment: + NODE_ENV: production INTERNAL_IP: ${INTERNAL_IP} TIPI_VERSION: ${TIPI_VERSION} JWT_SECRET: ${JWT_SECRET} NGINX_PORT: ${NGINX_PORT} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_USERNAME: tipi - POSTGRES_DBNAME: tipi - POSTGRES_HOST: tipi-db - NODE_ENV: production + POSTGRES_USERNAME: ${POSTGRES_USERNAME} + POSTGRES_DBNAME: ${POSTGRES_DBNAME} + POSTGRES_HOST: ${POSTGRES_HOST} APPS_REPO_ID: ${APPS_REPO_ID} APPS_REPO_URL: ${APPS_REPO_URL} DOMAIN: ${DOMAIN} ARCHITECTURE: ${ARCHITECTURE} - networks: - - tipi_main_network - labels: - traefik.enable: true - # Web - traefik.http.routers.api.rule: PathPrefix(`/api`) - traefik.http.routers.api.service: api - traefik.http.routers.api.entrypoints: web - traefik.http.routers.api.middlewares: api-stripprefix - traefik.http.services.api.loadbalancer.server.port: 3001 - # Websecure - traefik.http.routers.api-secure.rule: (Host(`${DOMAIN}`) && PathPrefix(`/api`)) - traefik.http.routers.api-secure.entrypoints: websecure - traefik.http.routers.api-secure.service: api-secure - traefik.http.routers.api-secure.tls.certresolver: myresolver - traefik.http.routers.api-secure.middlewares: api-stripprefix - traefik.http.services.api-secure.loadbalancer.server.port: 3001 - # Middlewares - traefik.http.middlewares.api-stripprefix.stripprefix.prefixes: /api - - dashboard: - image: meienberger/runtipi:rc-${TIPI_VERSION} - command: /bin/sh -c "cd /dashboard && node server.js" - container_name: dashboard - networks: - - tipi_main_network - depends_on: - api: - condition: service_started - environment: - NODE_ENV: production + REDIS_HOST: ${REDIS_HOST} + volumes: + - ${PWD}/state:/runtipi/state + - ${PWD}/repos:/runtipi/repos:ro + - ${PWD}/apps:/runtipi/apps + - ${PWD}/logs:/app/logs + - ${STORAGE_PATH}:/app/storage labels: traefik.enable: true # Web diff --git a/docker-compose.test.yml b/docker-compose.test.yml index bf0d61ca..44c57111 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -44,100 +44,51 @@ services: networks: - tipi_main_network - api: - build: - context: . - dockerfile: Dockerfile - command: /bin/sh -c "cd /api && npm run start" - restart: unless-stopped - container_name: api - depends_on: - tipi-db: - condition: service_healthy - volumes: - - ${PWD}/repos:/runtipi/repos:ro - - ${PWD}/apps:/runtipi/apps - - ${PWD}/state:/runtipi/state - - ${PWD}/logs:/app/logs - - ${STORAGE_PATH}:/app/storage - - ${PWD}/.env:/runtipi/.env:ro - environment: - INTERNAL_IP: ${INTERNAL_IP} - TIPI_VERSION: ${TIPI_VERSION} - JWT_SECRET: ${JWT_SECRET} - NGINX_PORT: ${NGINX_PORT} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_USERNAME: tipi - POSTGRES_DBNAME: tipi - POSTGRES_HOST: tipi-db - NODE_ENV: production - APPS_REPO_ID: ${APPS_REPO_ID} - APPS_REPO_URL: ${APPS_REPO_URL} - DOMAIN: ${DOMAIN} - ARCHITECTURE: ${ARCHITECTURE} - networks: - - tipi_main_network - labels: - traefik.enable: true - # Web - traefik.http.routers.api.rule: PathPrefix(`/api`) - traefik.http.routers.api.service: api - traefik.http.routers.api.entrypoints: web - traefik.http.routers.api.middlewares: api-stripprefix - traefik.http.services.api.loadbalancer.server.port: 3001 - # Websecure - traefik.http.routers.api-secure.rule: (Host(`${DOMAIN}`) && PathPrefix(`/api`)) - traefik.http.routers.api-secure.entrypoints: websecure - traefik.http.routers.api-secure.service: api-secure - traefik.http.routers.api-secure.tls.certresolver: myresolver - traefik.http.routers.api-secure.middlewares: api-stripprefix - traefik.http.services.api-secure.loadbalancer.server.port: 3001 - # Middlewares - traefik.http.middlewares.api-stripprefix.stripprefix.prefixes: /api - dashboard: build: context: . dockerfile: Dockerfile - command: /bin/sh -c "cd /dashboard && node server.js" restart: unless-stopped container_name: dashboard networks: - tipi_main_network depends_on: - api: - condition: service_started + tipi-db: + condition: service_healthy environment: NODE_ENV: production + INTERNAL_IP: ${INTERNAL_IP} + TIPI_VERSION: ${TIPI_VERSION} + JWT_SECRET: ${JWT_SECRET} + NGINX_PORT: ${NGINX_PORT} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USERNAME: ${POSTGRES_USERNAME} + POSTGRES_DBNAME: ${POSTGRES_DBNAME} + POSTGRES_HOST: ${POSTGRES_HOST} + APPS_REPO_ID: ${APPS_REPO_ID} + APPS_REPO_URL: ${APPS_REPO_URL} + DOMAIN: ${DOMAIN} + ARCHITECTURE: ${ARCHITECTURE} + REDIS_HOST: ${REDIS_HOST} + volumes: + - ${PWD}/state:/runtipi/state + - ${PWD}/repos:/runtipi/repos:ro + - ${PWD}/apps:/runtipi/apps + - ${PWD}/logs:/app/logs + - ${STORAGE_PATH}:/app/storage labels: traefik.enable: true - traefik.http.routers.dashboard-redirect.rule: PathPrefix("/") - traefik.http.routers.dashboard-redirect.entrypoints: web - traefik.http.routers.dashboard-redirect.middlewares: redirect-middleware - traefik.http.routers.dashboard-redirect.service: dashboard - traefik.http.services.dashboard-redirect.loadbalancer.server.port: 3000 - - traefik.http.routers.dashboard-redirect-secure.rule: Host(`${DOMAIN}`) && PathPrefix(`/`) - traefik.http.routers.dashboard-redirect-secure.entrypoints: websecure - traefik.http.routers.dashboard-redirect-secure.middlewares: redirect-middleware - traefik.http.routers.dashboard-redirect-secure.service: dashboard - traefik.http.routers.dashboard-redirect-secure.tls.certresolver: myresolver - traefik.http.services.dashboard-redirect-secure.loadbalancer.server.port: 3000 - # Web - traefik.http.routers.dashboard.rule: PathPrefix("/dashboard") + traefik.http.routers.dashboard.rule: PathPrefix("/") traefik.http.routers.dashboard.service: dashboard traefik.http.routers.dashboard.entrypoints: web traefik.http.services.dashboard.loadbalancer.server.port: 3000 # Websecure - traefik.http.routers.dashboard-secure.rule: Host(`${DOMAIN}`) && PathPrefix(`/dashboard`) + traefik.http.routers.dashboard-secure.rule: Host(`${DOMAIN}`) && PathPrefix(`/`) traefik.http.routers.dashboard-secure.service: dashboard-secure traefik.http.routers.dashboard-secure.entrypoints: websecure traefik.http.routers.dashboard-secure.tls.certresolver: myresolver traefik.http.services.dashboard-secure.loadbalancer.server.port: 3000 - # Middlewares - traefik.http.middlewares.redirect-middleware.redirectregex.regex: .* - traefik.http.middlewares.redirect-middleware.redirectregex.replacement: /dashboard networks: tipi_main_network: @@ -148,4 +99,4 @@ networks: - subnet: 10.21.21.0/24 volumes: - pgdata: \ No newline at end of file + pgdata: diff --git a/docker-compose.yml b/docker-compose.yml index 7a88dd99..cc17af3f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -44,67 +44,36 @@ services: networks: - tipi_main_network - api: - image: meienberger/runtipi:${TIPI_VERSION} - command: /bin/sh -c "cd /api && npm run start" - restart: unless-stopped - container_name: api - depends_on: - tipi-db: - condition: service_healthy - volumes: - - ${PWD}/repos:/runtipi/repos:ro - - ${PWD}/apps:/runtipi/apps - - ${PWD}/state:/runtipi/state - - ${PWD}/logs:/app/logs - - ${STORAGE_PATH}:/app/storage - - ${PWD}/.env:/runtipi/.env:ro - environment: - INTERNAL_IP: ${INTERNAL_IP} - TIPI_VERSION: ${TIPI_VERSION} - JWT_SECRET: ${JWT_SECRET} - NGINX_PORT: ${NGINX_PORT} - POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} - POSTGRES_USERNAME: tipi - POSTGRES_DBNAME: tipi - POSTGRES_HOST: tipi-db - NODE_ENV: production - APPS_REPO_ID: ${APPS_REPO_ID} - APPS_REPO_URL: ${APPS_REPO_URL} - DOMAIN: ${DOMAIN} - ARCHITECTURE: ${ARCHITECTURE} - networks: - - tipi_main_network - labels: - traefik.enable: true - # Web - traefik.http.routers.api.rule: PathPrefix(`/api`) - traefik.http.routers.api.service: api - traefik.http.routers.api.entrypoints: web - traefik.http.routers.api.middlewares: api-stripprefix - traefik.http.services.api.loadbalancer.server.port: 3001 - # Websecure - traefik.http.routers.api-secure.rule: (Host(`${DOMAIN}`) && PathPrefix(`/api`)) - traefik.http.routers.api-secure.entrypoints: websecure - traefik.http.routers.api-secure.service: api-secure - traefik.http.routers.api-secure.tls.certresolver: myresolver - traefik.http.routers.api-secure.middlewares: api-stripprefix - traefik.http.services.api-secure.loadbalancer.server.port: 3001 - # Middlewares - traefik.http.middlewares.api-stripprefix.stripprefix.prefixes: /api - dashboard: image: meienberger/runtipi:${TIPI_VERSION} - command: /bin/sh -c "cd /dashboard && node server.js" restart: unless-stopped container_name: dashboard networks: - tipi_main_network depends_on: - api: - condition: service_started + tipi-db: + condition: service_healthy environment: NODE_ENV: production + INTERNAL_IP: ${INTERNAL_IP} + TIPI_VERSION: ${TIPI_VERSION} + JWT_SECRET: ${JWT_SECRET} + NGINX_PORT: ${NGINX_PORT} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USERNAME: ${POSTGRES_USERNAME} + POSTGRES_DBNAME: ${POSTGRES_DBNAME} + POSTGRES_HOST: ${POSTGRES_HOST} + APPS_REPO_ID: ${APPS_REPO_ID} + APPS_REPO_URL: ${APPS_REPO_URL} + DOMAIN: ${DOMAIN} + ARCHITECTURE: ${ARCHITECTURE} + REDIS_HOST: ${REDIS_HOST} + volumes: + - ${PWD}/state:/runtipi/state + - ${PWD}/repos:/runtipi/repos:ro + - ${PWD}/apps:/runtipi/apps + - ${PWD}/logs:/app/logs + - ${STORAGE_PATH}:/app/storage labels: traefik.enable: true # Web diff --git a/esbuild.js b/esbuild.js new file mode 100644 index 00000000..999f306c --- /dev/null +++ b/esbuild.js @@ -0,0 +1,40 @@ +#!/usr/bin/env node +/* eslint-disable @typescript-eslint/no-var-requires */ +const esbuild = require('esbuild'); +const { spawn } = require('child_process'); +const pkg = require('./package.json'); + +const isDev = process.argv[2] !== 'build'; + +process.env.NODE_ENV = isDev ? 'development' : 'production'; + +let server; +const onRebuild = () => { + if (isDev) { + if (server) server.kill('SIGINT'); + server = spawn('node', ['dist/index.js'], { stdio: [0, 1, 2] }); + } else { + spawn('pnpm', ['next', 'build'], { stdio: [0, 1, 2] }); + } +}; + +const included = ['express', 'pg', '@runtipi/postgres-migrations']; +const excluded = ['pg-native', '*required-server-files.json']; +const external = Object.keys(pkg.dependencies || {}).filter((dep) => !included.includes(dep)); +external.push(...excluded); + +esbuild + .build({ + entryPoints: ['src/server/index.ts'], + external, + define: { 'process.env.NODE_ENV': `"${process.env.NODE_ENV}"` }, + platform: 'node', + target: 'node14', + outfile: 'dist/index.js', + tsconfig: 'tsconfig.json', + bundle: true, + minify: isDev, + sourcemap: isDev, + watch: isDev, + }) + .finally(onRebuild); diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index be5267d2..00000000 --- a/jest.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { - preset: "ts-jest", - testEnvironment: "node", - testMatch: ["**/__tests__/**/*.test.ts"], - testPathIgnorePatterns: ["/node_modules/", "/packages/"], -}; diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 00000000..5471650a --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,39 @@ +import nextJest from 'next/jest'; + +const createJestConfig = nextJest({ + // Provide the path to your Next.js app to load next.config.js and .env files in your test environment + dir: './', +}); + +const customClientConfig = { + testEnvironment: 'jest-environment-jsdom', + setupFilesAfterEnv: ['/tests/client/jest.setup.tsx'], + testMatch: ['/src/client/**/*.{spec,test}.{ts,tsx}', '!/src/server/**/*.{spec,test}.{ts,tsx}'], +}; + +const customServerConfig = { + testEnvironment: 'node', + testMatch: ['/src/server/**/*.test.ts'], + setupFilesAfterEnv: ['/tests/server/jest.setup.ts'], +}; + +export default async () => { + const clientConfig = await createJestConfig(customClientConfig)(); + const serverConfig = await createJestConfig(customServerConfig)(); + + return { + verbose: true, + collectCoverage: true, + collectCoverageFrom: ['src/server/**/*.{ts,tsx}', 'src/client/**/*.{ts,tsx}', '!src/**/mocks/**/*.{ts,tsx}', '!**/*.{spec,test}.{ts,tsx}', '!**/index.{ts,tsx}'], + projects: [ + { + displayName: 'client', + ...clientConfig, + }, + { + displayName: 'server', + ...serverConfig, + }, + ], + }; +}; diff --git a/media/.gitkeep b/media/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/.gitkeep b/media/data/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/books/.gitkeep b/media/data/books/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/books/ebooks/.gitkeep b/media/data/books/ebooks/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/books/metadata.db b/media/data/books/metadata.db deleted file mode 100644 index c32a5867d017c11ffa0dae52f6d60634439c7c2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 356352 zcmeI5du$v>p5JFgYGz1@9(!%xte2~GiCV8XD^lW!qGZdaWr`ZnwD^$tu4#2vLEoeFzm#$v_OUN={@PEE)0{-|CoF#<`HSSw zlYf=`i{$@I{`cgc^2D%;NCN>7009sH0T2KI5C8!X009sH0T5`5zF@wqgUvkuV18pdQa0oUr6@QztQA>i_m{~fdB}A00@8p2!H?xfB*=900@8p2pmWP zBzin@Hr?}PWwlHe@~cKEXH@0;AYsYfRIh0A|3v6Nyg&d1KmY_l00ck)1V8`;KmY_l z00a&Pfu}ppcKLP#`1Aj-M3P@Q9121U5C8!X009sH0T2KI5C8!X009u#K7kD_nv7hy zFmtUd-P5zswbV6pr)K8Y$bzj`Z8BLi3r1bS#o>#?L&KMbE?y?XBUdjDUmbn<{L2?# z8qHifH#~fGcz8H7oEdWd5$BpF@eKcidEYAiLR~9lAd}85k6tbmM)E_Mi;J!rB>!eV_ZNKw0T2KI5C8!X009sH0T2KI5C8!X z*cpM&XlJCWi+}(B7m?&Ib|wY2KmY_l00ck)1V8`;KmY_l00ck)1okz7&d#o`F8=)g z(@65uece}d4g^2|1V8`;KmY_l00ck)1V8`;Kwu{Xj?@2ZfUd3tp8xLz9_oMq2!H?x zfB*=900@8p2!H?xfWUzv;6DG4JbhsLjE;f;2!H?xfB*=900@8p2!H?xfB*>WfB<{` zkM;i!z@Z8VfB*=900@8p2!H?xfB*=900(gQ2@1 z00JNY0w4eaAOHd&00JNY0wAyh0(kzv18ArM0w4eaAOHd&00JNY0w4eaAOHdfj6hHF zlSnf1!^l$~B>#Q)54-imA9Q~?_Q#0_$AA6!n;n1A@ehwp9y=EKVf5cbGW37!m3R>Q zr%zVL&FN%3b>TvEYtq(pMI%?KtXZ06R87Ouie`DOF5&5k`Rw>&mMo56pU#rHY%)O1 z0-2g!%uZ(K$?f^6neq8|$gS)gr?22=(aavW~Hp?pD#OK#rniKjA|=+--m zP1IWTb)E{bidtiTn1%Ofugo$?xV&wcXX<1u_1=}{=2@@hil(({RQ(nTB=>B-dm^5? zawWR8q!=ksh}$WUcrwIPfg=0ET5hNI%3#|t)OdF+wRE9{p^CK?v#b?#TbILV-Ag*L z`DPcN*(Ov2c?E=VyoByB!+6;PyPDTnYdhsw)=LIi%)U+M!R^h3_w?e9>M3*IAZt9G ze)#2hJT*ERee|vZv#6I>YWj-rPT@~Wgdp{o*b`SL&V6X7c*Sjr^-IfF3dSzw&? zRjLJ}S|^Cy$le@ZnqDNs+qsz$qS}MF{q%-YdNL79y*t``xcIrt5#vwo+Pr(b{?1Y}f;F0mA#kr|jT5TpfyVwG(ZQ4b{k>s1#+yQcSsk~OM+%KOc6LZtkEZ&@*n;2in zwh(Josy4TTBX(PLZL?%pwq9B%i&Hb%g~joi+irIzmgeWFQkt97q963uNpDL`LAS<^ zWr<+ii69A$y{Fx~fGaX{zSV@ny-0KTY#)tj<;wgs9vklTR)@LqTH%((HqD;I`Lnho11pUx3W!9w`{FcDVWQq zLECYiPu}cZLH!qphlhuTGxQ%B9=_`QJLmlEPjB9e##4QL(XEm*j>W7Y-j4akvPhJp zIb1c<8r@F?KrJIabg-2?TgK!3 z|C8O!KP~Q~$L`>lrxt`pKRX zlPA8=J=^_RceFd&s?X7%Mb5Pk*kLU&cT1CEQ*_9GK98|28%9j7?OFrZH z^T0PH0oP_(rn>!Ly{*H_CB3?)QLtLUC>qXD zIsc(4_mo?Bw~PWmu;@Q(m1$9{U|Q=%{ee*2JW2!o?6^iKg-PV zi_~8Wyk7I+BD~JAPyN}_^ebPCrRLI&+|TbiTE>6f_b}D#9PNF?Pmks+WqMN0GAm`R zvToBit3Kt6e%Gw4u_s4+cRe-mp&ACAIJi%W}UJ1i-T?Sbn z>dhz12H(>Yztrq#aJ^ZmY3oe!{N{;gyMcI(<62dB+K!ie|2=S089* z!Ta=8-_Y^WWn3E)7`1aVa8G)-J*P336;947d;XoykXS1FLZg|)``%5){di`>cp;v8 z;f3hK=egqY`&DjpLN3d-Yxq;Upv&Ec;7AZM~2%x-OW4U#xmk-RSKHXuf$SQ zXBwd~3-rdt4#U&09A%V?)0+=Y#Zza_L?6BE;8C)akHm*a&F~QIn2$4`dVIGxBRY|B zAm;YY_OtI;Z1YPMoHJqH@}n#bt4^p|6)u~Z|IEgMFG8q0ZmVdH+E z^Od59Gme>@MCZ>}e5P@dq)m2U5&jh-pVqC0xRtM(>wyrYRUP5RPHP?yf!_a?X6OH- z$)82&KfFKy1V8`;KmY_l00ck)1V8`;KmY^|DuGkc&Pdm_Jbj>-s~Y4^&CIWn1zV>- zIxbaZv$_x}!|VWAQT zfB*=900@8p2!H?xfB*=900;yK;P?LmKyV2HAOHd&00JNY0w4eaAOHd&00M`Q0G|IJ zLZd<@5C8!X009sH0T2KI5C8!X009sP5Ww^Q01#Y)00@8p2!H?xfB*=900@8p2!OyL zB*1_F|BoWcKRSfUK_w6X0T2KI5C8!X009sH0T2KI5ICd+&PQXBuHKHh?CquNk)Qrf z-S7RAA@XKrwM-WBt41kjRQd1!|8*q!*M}4c)B*tz009sH0T2KI5C8!X009sHfulztS>&Eiv<>d^2{{NFm@+SvVQS=%FKmY_l00ck)1V8`;KmY_l00fRQfwLV; zUG1#@Pjz{G0|0h2?%z8pM5C8!X z009sH0T2KI5C8!X009s<(gZq>Q}v_#;s0Hn0XWjW0Odgd1V8`;KmY_l00ck)1V8`; z4lRMV;_Uf)hrZ@vX-ZLE0wBgSjWHEF&bT|R%+`;L9-0K znqSpyqgt{$S${13o||k~9nW^0i`JMJul}*#j!YMAwrFX3)zIv!>2$3p@vkG#M1~{X zpLUOS{aNCZ#P7$ynb?Yr$1fZ|9(%4c+4(2OKIr&&C(cKPX+iqhdgEfecVr~-(JM?3 zwa0qRUaeHAP)`YwG%=qYU(AxXrm}ZQNH!T?APd>)?8IU>33-`?!O--wUNXXS2Dmgb zF}F0kIA9ji$ zo#*fA(0(>-oT_aX2SvApB;GBWlcPBzEnF(^x?Mb9*LyNPdxO?L&-5Lm1=u@F3zs8R zFbiai)#BHV44Ea8UVV)Wr-^=VMdJzKc!*W0+RUWvy{<{e5CZh(n-}7#k&)=uE4H31 z8b#f*wW^^PwDpQ*+GeF}g(Qs#XIdP;KAj~Y1;_xQs!Yu;W+$`rnx3ZV%av+Lx5;AmZJH#KsrO7zGq;_cn;2in(o$?d`ODD6f^pBx z8+FO~WwS2LSg+()2^|a5ZX;9xRaRTB>Un<#xskm&zBIi^hG~(d*{M5A*#Xx6AmI&i zw;3e7=jrZrb~u)LXCxXi%LU_o>sxgGF_^1YoNFzFla>idytMJ=P(0P!8{MQso7#kq zRyLrmjE_1?;h2d_(+4_a6uU`m*!t1bk#@_5eBdm|029+-yvbVWv*%-}S9%*UVOnSz z_V?oE$#e14^Up^gQe~;ulrx=h`QHmZ&3W36bthz(+7mvy97hfMr&K%qeLLLF4aQQ} zo^QmBGte^peRyLn9Z&W3MIR11?8KZQ-iCbiMB*;+i7CP*ARRb$zx8s)q}$NIW=k=`(0jHk|=i9URuTgJ;$N)7mJXgwQ_fP%Pczo?wK0Aso*Ej8 zZjL(eg5`tPU-MxM=I)GTgIl@7xX~ZMgjG$aNBWyNoeb7Zio^T-;;+qR;=R4SiNAZC zMZZiF_McGCiEr68jegv~M}(p@h$XgZ7waQd8LYCgmamj)z&?=Ei!=xwbjEPw*p&r| z)G^+io0=67tVQN#2Y7HrV>uCJIpHi179D0Z$fNpOPO>Oc=Yq0N&LrZ5Y~H{VF|(II zCDE}!WF0qyELSTf5#73pmKt}nj*PjzNfWnJ!w&Izl}FTKjuripGp@fgqP)@*QLb4x zc#*n3*k;L~@j+?5E=Q_9Gye8Kt(>ov=oCW32f9o%zikKuvSp&^s$Xrw3N;idJi>`~ zxY|zeC4zq%y9DUdT$Q^M<0vZ~f75BU8nYU>K9UFgZa-gc)W|@lP@9FS%L;Fc_*~LN80U^dw zje*S39FZ0-($SI%IA5nw@jN3kMzh#EQ!-qF>^TK7M%xn_I8bC3e9;rx9B zdD9f4es4wNLc&QBW__lwRjJx_-E^=qV?D}Wj`vPXBtE{=(0{2jn?|??^Q@LW%!_?4 zUd)>c^MG^m9>ehmPKCG>1*tqP0+8SMyppJ1;sWYCI`#_jP!W+`WNj z2g={M4$XaBuzU2~OYz=Yw-O&eXz1kYwH&>htQytu>DFQq59eVrrf)lT~Ph)?~3zz3b$3%@MHOc!ryhoFK1I-SUkF#i|`4lh6^>qJoFBk{jF z{#zY)qF+t^qvXI-|Kh1{_WZc#t&{)pWcI{=IB}=@kGqY?zlz*yu^Oh5e%hkQ!OY(J z`YZ9?p`pY_CxVjzTkojx9lLHc*je6V9^lQF+3Io{OJ;8$z*#cy+46U5_G-L0lSzD3 zw=m!f2i0A8N+XBixu37g@HTniaF^}P5T4?#Tpyd~s7>$DOdjkz-$Z&m6L}jBw6m4w z*7VEq-jR{SM|B~Hh|*P$5=o6*N@VZQr+Dq~%_0ACGB6Q|W>vT1Ny-}WvH6v+@jY^^ zy52uw&*J@Qe!~|Www7Ot_rCmc;-j_T&CH8>Rgdyg8#$F%Vuya!?!qnLRbIQQW4WpR zb;@INFSk95_hOGc%oXcb;|crOc9u>w);l5MJ!>+adig?hJ+3Xt0uo5(y*HERP$O^vxL46Zt#YmRrFPhX`aGr^0ihC`&Cw}67fJKz0oldPmN!R zZuBW_yB^F3hN5>M=e3X?1d0T-59A5}8;R?@7cVyHg$E%ZWUP%|_)!D|kO4O#{oV0+ z>e^^@Bc=4DsFzo2`ifD9!=LeLNI(1~0xr5PBRzL5mUG3^;4piMi=%_BeBPZen~Po4)^A{peEn02D7% zlV1*LOwA7Rwtx5*?Rr=jm;I!?b7%|#AOHd&00JNY0w4eaAOHd&aP$aZ{eSdq z4vj$o1V8`;KmY_l00ck)1V8`;jvfK5|Bs%{p)m-600@8p2!H?xfB*=900@A<(IbHM z|IxEKGzI|>009sH0T2KI5C8!X009sOLPRb&aGCw}GkR2GmJ~zKONY37@R1I^bOxBDC zb6-aU*%mcS8QUIc{69zK55z68?U$t^kQu)o*F$D-RLmO1>=3z3rn;06-z6c zkey#VWZ{Z71Zo48uv4K*$ihZkCZYFE5?qy@xGx{;^B<&NDMYuzV%1XM>I?N;`7tq`ye4O4S~-O}l7l?Bf8N z$em07oXgsCU%pwN-VnxTZ;-j^8@wKQ^)=!O@#bk(naE$u={0+`Qss9*p#)-}6-Dp;o4!>KAvDB&F zsO7|Aj+JRB#ollG0xp@u#uNKY2FiNLAQN-b(=0-sons+ydSM}!I{kd~14o$fIVz5S zn)3kG5Qk4NkC3{!1KIvY%CL%*GCA<~mPCRw?h3LjJPAi_j z((3NTjIRwhSvKJ&kOB5l%U23@gl^o9rOxz5>HVI@*vpk_NvE+CZG*Y^v`@T}DFaP1 zz!TGN&&5)GBhhd1zE;lt&| zv@sJ)Wzx~_I<@mP%dV6tg<`E#c9is|O!*}G^CVJ#D&v|nis=W_@zhvG+NyrIvD#X$ zKK%`Ui*>`4*JC=>*A;v=x^MBeN4SpRGW7cTlkK#vH)@;PJviK^-;AYRJQX!WS43n^ zm6tPDHqfY7f;Yskg=#qe|9H12ARPoi00ck)1V8`;KmY_l00ck)1oi^~tpE3e70?F| z009sH0T2KI5C8!X009sH0T6h+1hD>pynG=Y1V8`;KmY_l00ck)1V8`;KmY{x0|EU0 z-+r(H`TznT00JNY0w4eaAOHd&00JNY0*{XX`~5#W|9^aZAsGZf00ck)1V8`;KmY_l z00ck)1ojI7{`~)wNb-~Y(j)W(1V8`;KmY_l00ck)1V8`;KmY_lV6OQ$J!i!GX09Z@f5EPrD=S8Ic`dJ*Wy`4ATCP%Av$XYEu4r1TM%B`aW_c|%abi9@ zzL+J8^HY)D%g^I0-AyO5nkp zH@`SY&fct44RfVT){F<_o>?jCwpl4(bp(@g#U^H%H*z)|kQLe=kF38_Zu;(f=8BTt za}z9IAG5PJUU9ojFCKoU5bvAJB))&5kz43Bd$r>82{omaL#Solb{lv@gR+Op6@-p{ zKj4YGcLFX)dVpxEsrff&^6|b*Z(>VR%wI5yhHYq-vS#Zm7W*&6%Kkz@)83#1md+D& zptI^quHTr=Ms{FqPs}aNE)JN5G`TrHHzVc`Cfu2<1W$TBHaC6aJS+AZ8Ft&1(@^^( zok=F9MJ(Ga7D?4uHmXKBZxnnq2?-9T&2Qx5eWTAOwrZg~>1=Bn7XRCnDKFyoUkn(J zYF+-`a^>PxvOHyv;BsL*!Fyki_l=!SJn9R@>&2;_VvSLUmf2g}UK1*EH+7Gw zyYhD8*jtHTiT7nk6W>1_O1`L9nyO={$wLNnfG$vjQ3sXOKg1@id@|3#amO{qKrb)3Cum%^#%48wUDoZ=1F@* zS;*fBsB%(ixBz`mYTb)1Zcs=@~r#?LSKTdq(#I=yczmnAb8_|c#B|d)s z1Rfsy)p*~nOybeA%4pz|jM$1%CrK^G_e#{XkkQekzA^%w;o{9iT&A}lqqd>c+V!{* za{ZAEPiz#%Y-c(WYKV;)(O9b~>3!2N!q#`&GJ?KKBj^gwfDxR@)ZG#jy?5@9N}XMs z!0Er=04!-Q@H+}L*%b>0kPi#1@xJkMiSMl_=zUv}?z-OTwX+T3015H?@Olclz#SqW zQ7Pz0e85)^&i;jO2b88XGIsknekw%X_gM?RF;-{hdnrqjz(rywi&otl!R8M zR*EV%3^jIm(L-f!uA+Z<^R(UDT*wv!oL@CJ{CAdH>?v32etKDK-EqsSDXmPemThJG z24xSG@r90l>+{6jTc693gI+Y%)ciD{`h(9usM^aGA9j}FeRr-T9;pvSd;ylXm*(7; zG!Y&Il0zK1xs;$cdyyI&C0?8sXh*5$ckFHKi|oTycqKzsn@mI~i? zl##MOwUrV4rL~*_GZ3h;lFo*ZX9#~~rRuKj;7axnYqt-LM)r2%W>=UT-fpA50bakJ ze;8TgmWj7%88JRw`HiBvX4Y*xg!Z?xmqu~!Repo8q`k0(Gr+eIME9KdMx-n9Vx;T$ z663MoJD%Nt?r&FDctT)|)Rl4>j^A9Q zkNv$3d0x`ZzMl2_y_mmvDf$$Dkyw?gJ!YGB(a_k(0rqUZte5C+wl7#U3%;k+n=3XA zCC??c%trpkqES8-i{-ML5YUYsS@3z8Td>*Cr-i&h@78Fj_YUS=Ce+V>rtF1dv91fh zVr{e-*_%a+leSuu7K55eZEHNc1+}(^vRh>@QSYNsy!oAKyl?74lSo61MRp=b-rtm@ zR?e*yZRXx$fV!IyO0~TNFPiaRG$2RS6Irz6eXyok*2^r)mN!!8S zw$Cf__Y(d-^7@Cz)>~|Vigku>Mpx5Xfmh2mb9`RTo7&ZSdkJ62^-u6TaW7n7s3BZm zG}daSf4|aV160W2Mi7&|nzk(?wC(!hi`87<606^b1boAt^LcDYDu@P{y`$z6e<1A<$EHz-_~O*jh=kb?FZ|uX1`gsWh?y!(^@a;4_Iw3 ziuS~`v^+g1vr?(D^kuzh8Bz?(vev^=YnELpg=827Q+C;|)>J{ITG2Mw9c8?>*UU0g zrGMEpiUqfqMLlN}Su)jAc7^RW&?Lq|CRGjgRfvM|K20B%iI$;P^Q)R|R7)03e^=6_ zqS_;Clx>rCr^;%#i`X{a-wxvd8ICxZxI4m9?Yy2}H8i_Iqe0828ubrKqSW#%jpfx$ zCx>Rb&R8@3l^l7l%d|9`2T|HZ*sp)8P@kt7@?sm7tdqdJ*p;hjVOqIzTV{9n9u=dD zG2v`@F+Qw}vyUtr@P=MUo;m{e!aeH7bLNsv4RWq? zWdCGLH+0x7ZW~Z{aMwI|w@iseQgsa=zToYxg?v^RmF0t0klrrkw&m>d%jAl2b~%an zZ}V3AM5gfu>rZ#<(H#JRK()R=&}vn;s$(^_9V3>kEyEm7c)02M-2!T4$~WSh*iRIY zZsXmC0~yMVxIdWHavNbkSuxQ0fC&S+(th*KSx3L|gyC9_I3cou)p)LIGQRiJ#AE}? z(F@kWblUBhXFjLr(yFTQgm^dWKp8L4`GD~PxzczG&KI^_M(TX|lElzxx)dTC7|+Y) zQD{F;aQC6wjmwsc6@5EfM*Au-^XV*k3ifKuu5!<`+}H6*4ae_~BSZyuAW0cJt+qqA zc{|#V;2n(v-1`?CpLb4bg*yJlhT)pSn(l+BJlo=LetSDX+`)EvrfVH?HBoi;)~H#{ zwiq8F=Vqz~5ihbchmD;&({jVlyK}b1o1I)!CX+)L`^wS&M4k*dc%_X4_i~z7Z+>PD zSzaAsmt|t3+ql{io!gl3@bSj7)L@M5&eC7cDY3_1?cU9Ius%JIySg45iC;!sH`sz+ zCaQ*Nxx2{NH873;cJGYjZ5ZVs-{`rnlBb01OopM9+nWa4!d$Cu>*?}ArtGL1fZQ;C zZ8_sO(!%E$>B!w5vfuxUcl~K3`De-hl>FV~Zzk`ZB=iz55C8!X009sH0T2LzgGgZO z_4x6~#78syI}7(r<36FsElr!O>t(u$L62k_Y(*)~jd?#v<}GT(&&bdO_aU}Coy4{! zyzLJE`5KzzZm+rzx0OSY^g)rc%(_b4hfeOZBP!P26BiFIt`g-D2m9$$TIPz3lP$jM z=WcO1%jc`a4UfGw;#J}<{^Z&%L)8}>=lsEi#>6Q*E*^kP#;xr~pd_oufEXP&%Tw5& z$bTu@A?cQNl~#)Ktx$hCp}0~?sII0cn+LvRx{Jl7c>q?;0zI=xPZYBAy9~j*?{$Cp zy@lBE$mHLu6wO>!uRhQmCsO?>=tO#v{@`_qo`|FZ#CC6h8&xot~u6$bQwx+s-jO z_wg{zRs@9?VUIhsReDyLpHP3-=>h-CcJ^FlL@x+G!|s%NkM*Pb!!yS_Ba_ci4qC2S zxlfr=s{45(s6u((1^HyDn0L0VhzG62iZ2z~f^1#UT-uy9c!th5DIs<@faVqq%q# z*bZ3s|2D%lmTcrxt8wT5iKfXje0T8>#4Mdf<;lZ3*+w(|%BoVH(w8Rb_nn||Ez|FG zS<2ppZQSsdl6zd=p_FjiA4&b>YmL9+_ci`-aC-*#p3MiI<#UUyqcJF!8bTzs^?W&B zxkq;-+|3Gi@HLti5AfHQxvCPfN1p+ZsVe$R8|+!#aEBLnL$Pp|-!E?;^fvE5`*e;Q jY&^vcZf}Z{1f`{<{cifdx!>=zpu2?=GJ0r`xA^}7LVg8j diff --git a/media/data/books/spoken/.gitkeep b/media/data/books/spoken/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/images/.gitkeep b/media/data/images/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/movies/.gitkeep b/media/data/movies/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/music/.gitkeep b/media/data/music/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/podcasts/.gitkeep b/media/data/podcasts/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/data/tv/.gitkeep b/media/data/tv/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/torrents/.gitkeep b/media/torrents/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/torrents/complete/.gitkeep b/media/torrents/complete/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/torrents/incomplete/.gitkeep b/media/torrents/incomplete/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/media/torrents/watch/.gitkeep b/media/torrents/watch/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/dashboard/next-env.d.ts b/next-env.d.ts similarity index 100% rename from packages/dashboard/next-env.d.ts rename to next-env.d.ts diff --git a/next.config.mjs b/next.config.mjs new file mode 100644 index 00000000..87ee2fde --- /dev/null +++ b/next.config.mjs @@ -0,0 +1,23 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + swcMinify: true, + output: 'standalone', + reactStrictMode: true, + serverRuntimeConfig: { + INTERNAL_IP: process.env.INTERNAL_IP, + TIPI_VERSION: process.env.TIPI_VERSION, + JWT_SECRET: process.env.JWT_SECRET, + POSTGRES_PASSWORD: process.env.POSTGRES_PASSWORD, + POSTGRES_USERNAME: process.env.POSTGRES_USERNAME, + POSTGRES_DBNAME: process.env.POSTGRES_DBNAME, + POSTGRES_HOST: process.env.POSTGRES_HOST, + APPS_REPO_ID: process.env.APPS_REPO_ID, + APPS_REPO_URL: process.env.APPS_REPO_URL, + DOMAIN: process.env.DOMAIN, + ARCHITECTURE: process.env.ARCHITECTURE, + NODE_ENV: process.env.NODE_ENV, + REDIS_HOST: process.env.REDIS_HOST, + }, +}; + +export default nextConfig; diff --git a/package.json b/package.json index 56ac301a..2f7c3fbe 100644 --- a/package.json +++ b/package.json @@ -1,26 +1,126 @@ { "name": "runtipi", - "version": "0.8.1", + "version": "1.0.0", "description": "A homeserver for everyone", "scripts": { - "commit": "git-cz", - "act:test-install": "act --container-architecture linux/amd64 -j test-install", - "act:docker": "act --container-architecture linux/amd64 --secret-file github.secrets -j build-images", + "copy:migrations": "mkdir -p dist/migrations && cp -r ./src/server/migrations dist", + "prisma:pull": "prisma db pull", + "test": "dotenv -e .env.test -- jest --colors", + "test:client": "jest --colors --selectProjects client --", + "test:server": "jest --colors --selectProjects server --", + "postinstall": "prisma generate", + "dev": "npm run copy:migrations && node ./esbuild.js dev", + "start": "NODE_ENV=production node index.js", + "lint": "next lint", + "lint:fix": "next lint --fix", + "build": "npm run copy:migrations && node ./esbuild.js build", + "build:server": "node ./esbuild.js build", + "build:next": "next build", "start:dev": "./scripts/start-dev.sh", "start:dev-container": "./.devcontainer/filewatcher.sh && npm run start:dev", "start:rc": "docker-compose -f docker-compose.rc.yml --env-file .env up --build", "start:prod": "docker-compose -f docker-compose.test.yml --env-file .env up --build", - "start:pg": "docker run --name test-db -p 5433:5432 -d --rm -e POSTGRES_PASSWORD=postgres postgres", + "start:pg": "docker run --name test-db -p 5433:5432 -d --rm -e POSTGRES_PASSWORD=postgres postgres:14", "version": "echo $npm_package_version", "release:rc": "./scripts/deploy/release-rc.sh", - "test:build": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t meienberger/runtipi:test ." + "test:build": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t meienberger/runtipi:test .", + "test:build:arm64": "docker buildx build --platform linux/arm64 -t meienberger/runtipi:test .", + "test:build:arm7": "docker buildx build --platform linux/arm/v7 -t meienberger/runtipi:test .", + "test:build:amd64": "docker buildx build --platform linux/amd64 -t meienberger/runtipi:test ." + }, + "dependencies": { + "@hookform/resolvers": "^2.9.10", + "@prisma/client": "^4.8.0", + "@runtipi/postgres-migrations": "^5.3.0", + "@tabler/core": "1.0.0-beta16", + "@tabler/icons": "^1.109.0", + "@tanstack/react-query": "^4.24.4", + "@trpc/client": "^10.11.1", + "@trpc/next": "^10.11.1", + "@trpc/react-query": "^10.11.1", + "@trpc/server": "^10.11.1", + "argon2": "^0.29.1", + "clsx": "^1.1.1", + "express": "^4.17.3", + "fs-extra": "^10.1.0", + "graphql": "^15.8.0", + "graphql-tag": "^2.12.6", + "isomorphic-fetch": "^3.0.0", + "jsonwebtoken": "^9.0.0", + "next": "13.1.6", + "node-cron": "^3.0.1", + "node-fetch-commonjs": "^3.2.4", + "pg": "^8.7.3", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-hook-form": "^7.38.0", + "react-markdown": "^8.0.3", + "react-select": "^5.6.1", + "react-tooltip": "^4.4.3", + "redis": "^4.3.1", + "remark-breaks": "^3.0.2", + "remark-gfm": "^3.0.1", + "sass": "^1.55.0", + "semver": "^7.3.7", + "sharp": "0.30.7", + "superjson": "^1.12.0", + "tslib": "^2.4.0", + "uuid": "^9.0.0", + "validator": "^13.7.0", + "winston": "^3.7.2", + "zod": "^3.19.1", + "zustand": "^3.7.2" }, "devDependencies": { - "@commitlint/cli": "^17.0.3", - "@commitlint/config-conventional": "^17.0.3", - "@commitlint/cz-commitlint": "^17.0.3", - "commitizen": "^4.2.4", - "inquirer": "8.2.4" + "@babel/core": "^7.0.0", + "@faker-js/faker": "^7.6.0", + "@testing-library/dom": "^8.19.0", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^14.4.3", + "@types/express": "^4.17.13", + "@types/fs-extra": "^9.0.13", + "@types/isomorphic-fetch": "^0.0.36", + "@types/jest": "^29.2.4", + "@types/jsonwebtoken": "^9.0.0", + "@types/node": "18.11.18", + "@types/node-cron": "^3.0.2", + "@types/pg": "^8.6.5", + "@types/react": "18.0.8", + "@types/react-dom": "18.0.3", + "@types/semver": "^7.3.12", + "@types/testing-library__jest-dom": "^5.14.5", + "@types/uuid": "^8.3.4", + "@types/validator": "^13.7.2", + "@typescript-eslint/eslint-plugin": "^5.47.1", + "@typescript-eslint/parser": "^5.47.1", + "dotenv-cli": "^6.0.0", + "esbuild": "^0.16.17", + "eslint": "8.30.0", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-next": "13.1.1", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jest": "^27.1.7", + "eslint-plugin-jsdoc": "^39.6.9", + "eslint-plugin-jsx-a11y": "^6.6.1", + "eslint-plugin-react": "^7.31.10", + "eslint-plugin-react-hooks": "^4.6.0", + "jest": "^29.3.1", + "jest-environment-jsdom": "^29.3.1", + "msw": "^1.0.0", + "next-router-mock": "^0.8.0", + "prettier": "^2.8.4", + "prisma": "^4.10.1", + "ts-jest": "^29.0.3", + "ts-node": "^10.9.1", + "typescript": "4.9.4", + "wait-for-expect": "^3.0.2", + "whatwg-fetch": "^3.6.2" + }, + "msw": { + "workerDirectory": "public" }, "repository": { "type": "git", @@ -31,10 +131,5 @@ "bugs": { "url": "https://github.com/meienberger/runtipi/issues" }, - "homepage": "https://github.com/meienberger/runtipi#readme", - "config": { - "commitizen": { - "path": "@commitlint/cz-commitlint" - } - } -} \ No newline at end of file + "homepage": "https://github.com/meienberger/runtipi#readme" +} diff --git a/packages/dashboard/.dockerignore b/packages/dashboard/.dockerignore deleted file mode 100644 index 4db071ba..00000000 --- a/packages/dashboard/.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules/ -.next/ -dist/ -sessions/ -logs/ diff --git a/packages/dashboard/.gitignore b/packages/dashboard/.gitignore deleted file mode 100644 index 87606880..00000000 --- a/packages/dashboard/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* -.pnpm-debug.log* - -# local env files -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo \ No newline at end of file diff --git a/packages/dashboard/README.md b/packages/dashboard/README.md deleted file mode 100644 index c87e0421..00000000 --- a/packages/dashboard/README.md +++ /dev/null @@ -1,34 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. - -[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. - -The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/packages/dashboard/codegen.yml b/packages/dashboard/codegen.yml deleted file mode 100644 index bbc3c298..00000000 --- a/packages/dashboard/codegen.yml +++ /dev/null @@ -1,9 +0,0 @@ -overwrite: true -schema: "http://localhost:3000/api/graphql" -documents: "src/graphql/**/*.graphql" -generates: - src/generated/graphql.tsx: - plugins: - - "typescript" - - "typescript-operations" - - "typescript-react-apollo" diff --git a/packages/dashboard/jest.config.js b/packages/dashboard/jest.config.js deleted file mode 100644 index becd8503..00000000 --- a/packages/dashboard/jest.config.js +++ /dev/null @@ -1,18 +0,0 @@ -const nextJest = require('next/jest'); - -const createJestConfig = nextJest({ - // Provide the path to your Next.js app to load next.config.js and .env files in your test environment - dir: './', -}); - -// Add any custom config to be passed to Jest -const customJestConfig = { - setupFilesAfterEnv: ['/tests/jest.setup.tsx'], - testEnvironment: 'jest-environment-jsdom', - collectCoverage: true, - collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/index.ts', '!**/src/pages/**/*.{ts,tsx}', '!**/src/mocks/**', '!**/src/core/apollo/**'], - testMatch: ['/src/**/*.{spec,test}.{ts,tsx}'], -}; - -// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async -module.exports = createJestConfig(customJestConfig); diff --git a/packages/dashboard/next.config.js b/packages/dashboard/next.config.js deleted file mode 100644 index 67c91996..00000000 --- a/packages/dashboard/next.config.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('next').NextConfig} */ -const nextConfig = { - output: 'standalone', - reactStrictMode: true, - swcMinify: true, -}; - -module.exports = nextConfig; diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json deleted file mode 100644 index 700443c9..00000000 --- a/packages/dashboard/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "name": "dashboard", - "version": "0.8.1", - "private": true, - "scripts": { - "test": "jest --colors", - "dev": "next dev", - "dev:msw": "NEXT_PUBLIC_API_MOCKING=enabled next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "lint:fix": "next lint --fix", - "gen": "graphql-codegen --config codegen.yml" - }, - "dependencies": { - "@apollo/client": "^3.6.8", - "@hookform/resolvers": "^2.9.10", - "@tabler/core": "1.0.0-beta16", - "@tabler/icons": "^1.109.0", - "clsx": "^1.1.1", - "graphql": "^15.8.0", - "graphql-tag": "^2.12.6", - "isomorphic-fetch": "^3.0.0", - "next": "13.0.3", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-hook-form": "^7.38.0", - "react-markdown": "^8.0.3", - "react-select": "^5.6.1", - "react-tooltip": "^4.4.3", - "remark-breaks": "^3.0.2", - "remark-gfm": "^3.0.1", - "remark-mdx": "^2.1.1", - "sass": "^1.55.0", - "semver": "^7.3.7", - "sharp": "0.30.7", - "swr": "^1.3.0", - "tslib": "^2.4.0", - "validator": "^13.7.0", - "zod": "^3.19.1", - "zustand": "^3.7.2" - }, - "devDependencies": { - "@babel/core": "^7.0.0", - "@faker-js/faker": "^7.3.0", - "@graphql-codegen/cli": "^2.6.2", - "@graphql-codegen/typescript": "^2.5.1", - "@graphql-codegen/typescript-operations": "^2.4.2", - "@graphql-codegen/typescript-react-apollo": "^3.2.16", - "@testing-library/dom": "^8.19.0", - "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", - "@testing-library/user-event": "^14.4.3", - "@types/isomorphic-fetch": "^0.0.36", - "@types/jest": "^27.5.0", - "@types/node": "17.0.31", - "@types/react": "18.0.8", - "@types/react-dom": "18.0.3", - "@types/semver": "^7.3.12", - "@types/testing-library__jest-dom": "^5.14.5", - "@types/validator": "^13.7.2", - "@typescript-eslint/eslint-plugin": "^5.18.0", - "@typescript-eslint/parser": "^5.0.0", - "concurrently": "^7.1.0", - "eslint": "8.12.0", - "eslint-config-airbnb": "^19.0.4", - "eslint-config-airbnb-typescript": "^17.0.0", - "eslint-config-next": "12.1.4", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^27.1.6", - "eslint-plugin-jsx-a11y": "^6.6.1", - "eslint-plugin-react": "^7.31.10", - "eslint-plugin-react-hooks": "^4.6.0", - "jest": "^28.1.0", - "jest-environment-jsdom": "^29.3.1", - "msw": "^0.49.1", - "next-router-mock": "^0.8.0", - "ts-jest": "^28.0.2", - "typescript": "4.6.4", - "whatwg-fetch": "^3.6.2" - }, - "msw": { - "workerDirectory": "public" - } -} diff --git a/packages/dashboard/src/components/hoc/StatusProvider/StatusProvider.tsx b/packages/dashboard/src/components/hoc/StatusProvider/StatusProvider.tsx deleted file mode 100644 index 12a826e9..00000000 --- a/packages/dashboard/src/components/hoc/StatusProvider/StatusProvider.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React, { ReactElement, useEffect, useState } from 'react'; -import useSWR from 'swr'; -import router from 'next/router'; -import { SystemStatus } from '../../../state/systemStore'; -import { StatusScreen } from '../../StatusScreen'; - -interface IProps { - children: ReactElement; -} - -const fetcher = (url: string) => fetch(url).then((res) => res.json()); - -export const StatusProvider: React.FC = ({ children }) => { - const [s, setS] = useState(SystemStatus.RUNNING); - const { data, isValidating } = useSWR<{ status: SystemStatus }>('/api/status', fetcher, { refreshInterval: 1000 }); - - useEffect(() => { - // If previous was not running and current is running, we need to refresh the page - if (data?.status === SystemStatus.RUNNING && s !== SystemStatus.RUNNING) { - router.reload(); - } - - if (data?.status === SystemStatus.RUNNING) { - setS(SystemStatus.RUNNING); - } - if (data?.status === SystemStatus.RESTARTING) { - setS(SystemStatus.RESTARTING); - } - if (data?.status === SystemStatus.UPDATING) { - setS(SystemStatus.UPDATING); - } - }, [data?.status, s]); - - if (isValidating && !data?.status) { - return ; - } - - if (s === SystemStatus.RESTARTING) { - return ; - } - - if (s === SystemStatus.UPDATING) { - return ; - } - - return children; -}; diff --git a/packages/dashboard/src/core/apollo/client.ts b/packages/dashboard/src/core/apollo/client.ts deleted file mode 100644 index 980c6453..00000000 --- a/packages/dashboard/src/core/apollo/client.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { ApolloClient, from, InMemoryCache } from '@apollo/client'; -import links from './links'; - -export const createApolloClient = (): ApolloClient => { - const additiveLink = from([links.errorLink, links.authLink, links.httpLink]); - - return new ApolloClient({ - link: additiveLink, - cache: new InMemoryCache(), - }); -}; diff --git a/packages/dashboard/src/core/apollo/links/authLink.ts b/packages/dashboard/src/core/apollo/links/authLink.ts deleted file mode 100644 index 893defd2..00000000 --- a/packages/dashboard/src/core/apollo/links/authLink.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { setContext } from '@apollo/client/link/context'; - -const authLink = setContext((_, { headers }) => { - const token = localStorage.getItem('token'); - - return { - headers: { - ...headers, - authorization: token ? `Bearer ${token}` : '', - }, - }; -}); - -export default authLink; diff --git a/packages/dashboard/src/core/apollo/links/errorLink.ts b/packages/dashboard/src/core/apollo/links/errorLink.ts deleted file mode 100644 index 29ae6d2f..00000000 --- a/packages/dashboard/src/core/apollo/links/errorLink.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { onError } from '@apollo/client/link/error'; - -const errorLink = onError(({ graphQLErrors, networkError }) => { - if (graphQLErrors) - graphQLErrors.forEach(({ message, locations, path }) => { - console.warn(`Error link [GraphQL error]: Message: ${message}, Location: ${locations}, Path: ${path}`); - }); - - if (networkError) { - console.warn(`Error link [Network error]: ${networkError}`); - } -}); - -export default errorLink; diff --git a/packages/dashboard/src/core/apollo/links/httpLink.ts b/packages/dashboard/src/core/apollo/links/httpLink.ts deleted file mode 100644 index d165e612..00000000 --- a/packages/dashboard/src/core/apollo/links/httpLink.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { HttpLink } from '@apollo/client'; - -const httpLink = new HttpLink({ - uri: '/api/graphql', -}); - -export default httpLink; diff --git a/packages/dashboard/src/core/apollo/links/index.ts b/packages/dashboard/src/core/apollo/links/index.ts deleted file mode 100644 index 4c22132a..00000000 --- a/packages/dashboard/src/core/apollo/links/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -import errorLink from './errorLink'; -import httpLink from './httpLink'; -import authLink from './authLink'; - -const links = { - errorLink, - httpLink, - authLink, -}; - -export default links; diff --git a/packages/dashboard/src/core/constants.ts b/packages/dashboard/src/core/constants.ts deleted file mode 100644 index a8e7780a..00000000 --- a/packages/dashboard/src/core/constants.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { AppCategoriesEnum } from '../generated/graphql'; - -export const APP_CATEGORIES = [ - { name: 'Network', id: AppCategoriesEnum.Network, icon: 'FaNetworkWired' }, - { name: 'Media', id: AppCategoriesEnum.Media, icon: 'FaVideo' }, - { name: 'Development', id: AppCategoriesEnum.Development, icon: 'FaCode' }, - { name: 'Automation', id: AppCategoriesEnum.Automation, icon: 'FaRobot' }, - { name: 'Social', id: AppCategoriesEnum.Social, icon: 'FaUserFriends' }, - { name: 'Utilities', id: AppCategoriesEnum.Utilities, icon: 'FaWrench' }, - { name: 'Photography', id: AppCategoriesEnum.Photography, icon: 'FaCamera' }, - { name: 'Security', id: AppCategoriesEnum.Security, icon: 'FaShieldAlt' }, - { name: 'Featured', id: AppCategoriesEnum.Featured, icon: 'FaStar' }, - { name: 'Books', id: AppCategoriesEnum.Books, icon: 'FaBook' }, - { name: 'Data', id: AppCategoriesEnum.Data, icon: 'FaDatabase' }, - { name: 'Music', id: AppCategoriesEnum.Music, icon: 'FaMusic' }, - { name: 'Finance', id: AppCategoriesEnum.Finance, icon: 'FaMoneyBillAlt' }, - { name: 'Gaming', id: AppCategoriesEnum.Gaming, icon: 'FaGamepad' }, -]; diff --git a/packages/dashboard/src/core/types.ts b/packages/dashboard/src/core/types.ts deleted file mode 100644 index f5f6ca5e..00000000 --- a/packages/dashboard/src/core/types.ts +++ /dev/null @@ -1,4 +0,0 @@ -export interface IUser { - name: string; - email: string; -} diff --git a/packages/dashboard/src/generated/graphql.tsx b/packages/dashboard/src/generated/graphql.tsx deleted file mode 100644 index 0d8b2d8b..00000000 --- a/packages/dashboard/src/generated/graphql.tsx +++ /dev/null @@ -1,1131 +0,0 @@ -import { gql } from '@apollo/client'; -import * as Apollo from '@apollo/client'; - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -const defaultOptions = {} as const; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - /** The javascript `Date` as string. Type represents date and time as the ISO Date string. */ - DateTime: any; - /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */ - JSONObject: any; -}; - -export type App = { - __typename?: 'App'; - config: Scalars['JSONObject']; - createdAt: Scalars['DateTime']; - domain?: Maybe; - exposed: Scalars['Boolean']; - id: Scalars['String']; - info?: Maybe; - lastOpened: Scalars['DateTime']; - numOpened: Scalars['Float']; - status: AppStatusEnum; - updateInfo?: Maybe; - updatedAt: Scalars['DateTime']; - version?: Maybe; -}; - -export enum AppCategoriesEnum { - Automation = 'AUTOMATION', - Books = 'BOOKS', - Data = 'DATA', - Development = 'DEVELOPMENT', - Featured = 'FEATURED', - Finance = 'FINANCE', - Gaming = 'GAMING', - Media = 'MEDIA', - Music = 'MUSIC', - Network = 'NETWORK', - Photography = 'PHOTOGRAPHY', - Security = 'SECURITY', - Social = 'SOCIAL', - Utilities = 'UTILITIES', -} - -export type AppInfo = { - __typename?: 'AppInfo'; - author: Scalars['String']; - available: Scalars['Boolean']; - categories: Array; - description: Scalars['String']; - exposable?: Maybe; - form_fields: Array; - https?: Maybe; - id: Scalars['String']; - name: Scalars['String']; - no_gui?: Maybe; - port: Scalars['Float']; - short_desc: Scalars['String']; - source: Scalars['String']; - supported_architectures?: Maybe>; - tipi_version: Scalars['Float']; - url_suffix?: Maybe; - version?: Maybe; -}; - -export type AppInputType = { - domain: Scalars['String']; - exposed: Scalars['Boolean']; - form: Scalars['JSONObject']; - id: Scalars['String']; -}; - -export enum AppStatusEnum { - Installing = 'INSTALLING', - Missing = 'MISSING', - Running = 'RUNNING', - Starting = 'STARTING', - Stopped = 'STOPPED', - Stopping = 'STOPPING', - Uninstalling = 'UNINSTALLING', - Updating = 'UPDATING', -} - -export enum AppSupportedArchitecturesEnum { - Amd64 = 'AMD64', - Arm = 'ARM', - Arm64 = 'ARM64', -} - -export type Cpu = { - __typename?: 'Cpu'; - load: Scalars['Float']; -}; - -export type DiskMemory = { - __typename?: 'DiskMemory'; - available: Scalars['Float']; - total: Scalars['Float']; - used: Scalars['Float']; -}; - -export enum FieldTypesEnum { - Email = 'email', - Fqdn = 'fqdn', - Fqdnip = 'fqdnip', - Ip = 'ip', - Number = 'number', - Password = 'password', - Random = 'random', - Text = 'text', - Url = 'url', -} - -export type FormField = { - __typename?: 'FormField'; - env_variable: Scalars['String']; - hint?: Maybe; - label: Scalars['String']; - max?: Maybe; - min?: Maybe; - placeholder?: Maybe; - required?: Maybe; - type: FieldTypesEnum; -}; - -export type ListAppsResonse = { - __typename?: 'ListAppsResonse'; - apps: Array; - total: Scalars['Float']; -}; - -export type Mutation = { - __typename?: 'Mutation'; - installApp: App; - login: TokenResponse; - logout: Scalars['Boolean']; - register: TokenResponse; - restart: Scalars['Boolean']; - startApp: App; - stopApp: App; - uninstallApp: App; - update: Scalars['Boolean']; - updateApp: App; - updateAppConfig: App; -}; - -export type MutationInstallAppArgs = { - input: AppInputType; -}; - -export type MutationLoginArgs = { - input: UsernamePasswordInput; -}; - -export type MutationRegisterArgs = { - input: UsernamePasswordInput; -}; - -export type MutationStartAppArgs = { - id: Scalars['String']; -}; - -export type MutationStopAppArgs = { - id: Scalars['String']; -}; - -export type MutationUninstallAppArgs = { - id: Scalars['String']; -}; - -export type MutationUpdateAppArgs = { - id: Scalars['String']; -}; - -export type MutationUpdateAppConfigArgs = { - input: AppInputType; -}; - -export type Query = { - __typename?: 'Query'; - getApp: App; - installedApps: Array; - isConfigured: Scalars['Boolean']; - listAppsInfo: ListAppsResonse; - me?: Maybe; - refreshToken?: Maybe; - systemInfo?: Maybe; - version: VersionResponse; -}; - -export type QueryGetAppArgs = { - id: Scalars['String']; -}; - -export type SystemInfoResponse = { - __typename?: 'SystemInfoResponse'; - cpu: Cpu; - disk: DiskMemory; - memory: DiskMemory; -}; - -export type TokenResponse = { - __typename?: 'TokenResponse'; - token: Scalars['String']; -}; - -export type UpdateInfo = { - __typename?: 'UpdateInfo'; - current: Scalars['Float']; - dockerVersion?: Maybe; - latest: Scalars['Float']; -}; - -export type User = { - __typename?: 'User'; - createdAt: Scalars['DateTime']; - id: Scalars['ID']; - updatedAt: Scalars['DateTime']; - username: Scalars['String']; -}; - -export type UsernamePasswordInput = { - password: Scalars['String']; - username: Scalars['String']; -}; - -export type VersionResponse = { - __typename?: 'VersionResponse'; - current: Scalars['String']; - latest?: Maybe; -}; - -export type InstallAppMutationVariables = Exact<{ - input: AppInputType; -}>; - -export type InstallAppMutation = { __typename?: 'Mutation'; installApp: { __typename: 'App'; id: string; status: AppStatusEnum } }; - -export type LoginMutationVariables = Exact<{ - input: UsernamePasswordInput; -}>; - -export type LoginMutation = { __typename?: 'Mutation'; login: { __typename?: 'TokenResponse'; token: string } }; - -export type LogoutMutationVariables = Exact<{ [key: string]: never }>; - -export type LogoutMutation = { __typename?: 'Mutation'; logout: boolean }; - -export type RegisterMutationVariables = Exact<{ - input: UsernamePasswordInput; -}>; - -export type RegisterMutation = { __typename?: 'Mutation'; register: { __typename?: 'TokenResponse'; token: string } }; - -export type RestartMutationVariables = Exact<{ [key: string]: never }>; - -export type RestartMutation = { __typename?: 'Mutation'; restart: boolean }; - -export type StartAppMutationVariables = Exact<{ - id: Scalars['String']; -}>; - -export type StartAppMutation = { __typename?: 'Mutation'; startApp: { __typename: 'App'; id: string; status: AppStatusEnum } }; - -export type StopAppMutationVariables = Exact<{ - id: Scalars['String']; -}>; - -export type StopAppMutation = { __typename?: 'Mutation'; stopApp: { __typename: 'App'; id: string; status: AppStatusEnum } }; - -export type UninstallAppMutationVariables = Exact<{ - id: Scalars['String']; -}>; - -export type UninstallAppMutation = { __typename?: 'Mutation'; uninstallApp: { __typename: 'App'; id: string; status: AppStatusEnum } }; - -export type UpdateMutationVariables = Exact<{ [key: string]: never }>; - -export type UpdateMutation = { __typename?: 'Mutation'; update: boolean }; - -export type UpdateAppMutationVariables = Exact<{ - id: Scalars['String']; -}>; - -export type UpdateAppMutation = { __typename?: 'Mutation'; updateApp: { __typename: 'App'; id: string; status: AppStatusEnum } }; - -export type UpdateAppConfigMutationVariables = Exact<{ - input: AppInputType; -}>; - -export type UpdateAppConfigMutation = { __typename?: 'Mutation'; updateAppConfig: { __typename: 'App'; id: string; status: AppStatusEnum } }; - -export type GetAppQueryVariables = Exact<{ - appId: Scalars['String']; -}>; - -export type GetAppQuery = { - __typename?: 'Query'; - getApp: { - __typename?: 'App'; - id: string; - status: AppStatusEnum; - config: any; - version?: number | null; - exposed: boolean; - domain?: string | null; - updateInfo?: { __typename?: 'UpdateInfo'; current: number; latest: number; dockerVersion?: string | null } | null; - info?: { - __typename?: 'AppInfo'; - id: string; - port: number; - name: string; - description: string; - available: boolean; - version?: string | null; - tipi_version: number; - short_desc: string; - author: string; - source: string; - categories: Array; - url_suffix?: string | null; - https?: boolean | null; - exposable?: boolean | null; - no_gui?: boolean | null; - form_fields: Array<{ - __typename?: 'FormField'; - type: FieldTypesEnum; - label: string; - max?: number | null; - min?: number | null; - hint?: string | null; - placeholder?: string | null; - required?: boolean | null; - env_variable: string; - }>; - } | null; - }; -}; - -export type InstalledAppsQueryVariables = Exact<{ [key: string]: never }>; - -export type InstalledAppsQuery = { - __typename?: 'Query'; - installedApps: Array<{ - __typename?: 'App'; - id: string; - status: AppStatusEnum; - config: any; - version?: number | null; - updateInfo?: { __typename?: 'UpdateInfo'; current: number; latest: number; dockerVersion?: string | null } | null; - info?: { __typename?: 'AppInfo'; id: string; name: string; description: string; tipi_version: number; short_desc: string; https?: boolean | null } | null; - }>; -}; - -export type ConfiguredQueryVariables = Exact<{ [key: string]: never }>; - -export type ConfiguredQuery = { __typename?: 'Query'; isConfigured: boolean }; - -export type ListAppsQueryVariables = Exact<{ [key: string]: never }>; - -export type ListAppsQuery = { - __typename?: 'Query'; - listAppsInfo: { - __typename?: 'ListAppsResonse'; - total: number; - apps: Array<{ - __typename?: 'AppInfo'; - id: string; - available: boolean; - tipi_version: number; - port: number; - name: string; - version?: string | null; - short_desc: string; - author: string; - categories: Array; - https?: boolean | null; - }>; - }; -}; - -export type MeQueryVariables = Exact<{ [key: string]: never }>; - -export type MeQuery = { __typename?: 'Query'; me?: { __typename?: 'User'; id: string } | null }; - -export type RefreshTokenQueryVariables = Exact<{ [key: string]: never }>; - -export type RefreshTokenQuery = { __typename?: 'Query'; refreshToken?: { __typename?: 'TokenResponse'; token: string } | null }; - -export type SystemInfoQueryVariables = Exact<{ [key: string]: never }>; - -export type SystemInfoQuery = { - __typename?: 'Query'; - systemInfo?: { - __typename?: 'SystemInfoResponse'; - cpu: { __typename?: 'Cpu'; load: number }; - disk: { __typename?: 'DiskMemory'; available: number; used: number; total: number }; - memory: { __typename?: 'DiskMemory'; available: number; used: number; total: number }; - } | null; -}; - -export type VersionQueryVariables = Exact<{ [key: string]: never }>; - -export type VersionQuery = { __typename?: 'Query'; version: { __typename?: 'VersionResponse'; current: string; latest?: string | null } }; - -export const InstallAppDocument = gql` - mutation InstallApp($input: AppInputType!) { - installApp(input: $input) { - id - status - __typename - } - } -`; -export type InstallAppMutationFn = Apollo.MutationFunction; - -/** - * __useInstallAppMutation__ - * - * To run a mutation, you first call `useInstallAppMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useInstallAppMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [installAppMutation, { data, loading, error }] = useInstallAppMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useInstallAppMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(InstallAppDocument, options); -} -export type InstallAppMutationHookResult = ReturnType; -export type InstallAppMutationResult = Apollo.MutationResult; -export type InstallAppMutationOptions = Apollo.BaseMutationOptions; -export const LoginDocument = gql` - mutation Login($input: UsernamePasswordInput!) { - login(input: $input) { - token - } - } -`; -export type LoginMutationFn = Apollo.MutationFunction; - -/** - * __useLoginMutation__ - * - * To run a mutation, you first call `useLoginMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useLoginMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [loginMutation, { data, loading, error }] = useLoginMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useLoginMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(LoginDocument, options); -} -export type LoginMutationHookResult = ReturnType; -export type LoginMutationResult = Apollo.MutationResult; -export type LoginMutationOptions = Apollo.BaseMutationOptions; -export const LogoutDocument = gql` - mutation Logout { - logout - } -`; -export type LogoutMutationFn = Apollo.MutationFunction; - -/** - * __useLogoutMutation__ - * - * To run a mutation, you first call `useLogoutMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useLogoutMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [logoutMutation, { data, loading, error }] = useLogoutMutation({ - * variables: { - * }, - * }); - */ -export function useLogoutMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(LogoutDocument, options); -} -export type LogoutMutationHookResult = ReturnType; -export type LogoutMutationResult = Apollo.MutationResult; -export type LogoutMutationOptions = Apollo.BaseMutationOptions; -export const RegisterDocument = gql` - mutation Register($input: UsernamePasswordInput!) { - register(input: $input) { - token - } - } -`; -export type RegisterMutationFn = Apollo.MutationFunction; - -/** - * __useRegisterMutation__ - * - * To run a mutation, you first call `useRegisterMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useRegisterMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [registerMutation, { data, loading, error }] = useRegisterMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useRegisterMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(RegisterDocument, options); -} -export type RegisterMutationHookResult = ReturnType; -export type RegisterMutationResult = Apollo.MutationResult; -export type RegisterMutationOptions = Apollo.BaseMutationOptions; -export const RestartDocument = gql` - mutation Restart { - restart - } -`; -export type RestartMutationFn = Apollo.MutationFunction; - -/** - * __useRestartMutation__ - * - * To run a mutation, you first call `useRestartMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useRestartMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [restartMutation, { data, loading, error }] = useRestartMutation({ - * variables: { - * }, - * }); - */ -export function useRestartMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(RestartDocument, options); -} -export type RestartMutationHookResult = ReturnType; -export type RestartMutationResult = Apollo.MutationResult; -export type RestartMutationOptions = Apollo.BaseMutationOptions; -export const StartAppDocument = gql` - mutation StartApp($id: String!) { - startApp(id: $id) { - id - status - __typename - } - } -`; -export type StartAppMutationFn = Apollo.MutationFunction; - -/** - * __useStartAppMutation__ - * - * To run a mutation, you first call `useStartAppMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useStartAppMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [startAppMutation, { data, loading, error }] = useStartAppMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useStartAppMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(StartAppDocument, options); -} -export type StartAppMutationHookResult = ReturnType; -export type StartAppMutationResult = Apollo.MutationResult; -export type StartAppMutationOptions = Apollo.BaseMutationOptions; -export const StopAppDocument = gql` - mutation StopApp($id: String!) { - stopApp(id: $id) { - id - status - __typename - } - } -`; -export type StopAppMutationFn = Apollo.MutationFunction; - -/** - * __useStopAppMutation__ - * - * To run a mutation, you first call `useStopAppMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useStopAppMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [stopAppMutation, { data, loading, error }] = useStopAppMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useStopAppMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(StopAppDocument, options); -} -export type StopAppMutationHookResult = ReturnType; -export type StopAppMutationResult = Apollo.MutationResult; -export type StopAppMutationOptions = Apollo.BaseMutationOptions; -export const UninstallAppDocument = gql` - mutation UninstallApp($id: String!) { - uninstallApp(id: $id) { - id - status - __typename - } - } -`; -export type UninstallAppMutationFn = Apollo.MutationFunction; - -/** - * __useUninstallAppMutation__ - * - * To run a mutation, you first call `useUninstallAppMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUninstallAppMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [uninstallAppMutation, { data, loading, error }] = useUninstallAppMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useUninstallAppMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(UninstallAppDocument, options); -} -export type UninstallAppMutationHookResult = ReturnType; -export type UninstallAppMutationResult = Apollo.MutationResult; -export type UninstallAppMutationOptions = Apollo.BaseMutationOptions; -export const UpdateDocument = gql` - mutation Update { - update - } -`; -export type UpdateMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateMutation__ - * - * To run a mutation, you first call `useUpdateMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateMutation, { data, loading, error }] = useUpdateMutation({ - * variables: { - * }, - * }); - */ -export function useUpdateMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(UpdateDocument, options); -} -export type UpdateMutationHookResult = ReturnType; -export type UpdateMutationResult = Apollo.MutationResult; -export type UpdateMutationOptions = Apollo.BaseMutationOptions; -export const UpdateAppDocument = gql` - mutation UpdateApp($id: String!) { - updateApp(id: $id) { - id - status - __typename - } - } -`; -export type UpdateAppMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateAppMutation__ - * - * To run a mutation, you first call `useUpdateAppMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateAppMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateAppMutation, { data, loading, error }] = useUpdateAppMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useUpdateAppMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(UpdateAppDocument, options); -} -export type UpdateAppMutationHookResult = ReturnType; -export type UpdateAppMutationResult = Apollo.MutationResult; -export type UpdateAppMutationOptions = Apollo.BaseMutationOptions; -export const UpdateAppConfigDocument = gql` - mutation UpdateAppConfig($input: AppInputType!) { - updateAppConfig(input: $input) { - id - status - __typename - } - } -`; -export type UpdateAppConfigMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateAppConfigMutation__ - * - * To run a mutation, you first call `useUpdateAppConfigMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateAppConfigMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateAppConfigMutation, { data, loading, error }] = useUpdateAppConfigMutation({ - * variables: { - * input: // value for 'input' - * }, - * }); - */ -export function useUpdateAppConfigMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useMutation(UpdateAppConfigDocument, options); -} -export type UpdateAppConfigMutationHookResult = ReturnType; -export type UpdateAppConfigMutationResult = Apollo.MutationResult; -export type UpdateAppConfigMutationOptions = Apollo.BaseMutationOptions; -export const GetAppDocument = gql` - query GetApp($appId: String!) { - getApp(id: $appId) { - id - status - config - version - exposed - domain - updateInfo { - current - latest - dockerVersion - } - info { - id - port - name - description - available - version - tipi_version - short_desc - author - source - categories - url_suffix - https - exposable - no_gui - form_fields { - type - label - max - min - hint - placeholder - required - env_variable - } - } - } - } -`; - -/** - * __useGetAppQuery__ - * - * To run a query within a React component, call `useGetAppQuery` and pass it any options that fit your needs. - * When your component renders, `useGetAppQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetAppQuery({ - * variables: { - * appId: // value for 'appId' - * }, - * }); - */ -export function useGetAppQuery(baseOptions: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(GetAppDocument, options); -} -export function useGetAppLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(GetAppDocument, options); -} -export type GetAppQueryHookResult = ReturnType; -export type GetAppLazyQueryHookResult = ReturnType; -export type GetAppQueryResult = Apollo.QueryResult; -export const InstalledAppsDocument = gql` - query InstalledApps { - installedApps { - id - status - config - version - updateInfo { - current - latest - dockerVersion - } - info { - id - name - description - tipi_version - short_desc - https - } - } - } -`; - -/** - * __useInstalledAppsQuery__ - * - * To run a query within a React component, call `useInstalledAppsQuery` and pass it any options that fit your needs. - * When your component renders, `useInstalledAppsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useInstalledAppsQuery({ - * variables: { - * }, - * }); - */ -export function useInstalledAppsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(InstalledAppsDocument, options); -} -export function useInstalledAppsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(InstalledAppsDocument, options); -} -export type InstalledAppsQueryHookResult = ReturnType; -export type InstalledAppsLazyQueryHookResult = ReturnType; -export type InstalledAppsQueryResult = Apollo.QueryResult; -export const ConfiguredDocument = gql` - query Configured { - isConfigured - } -`; - -/** - * __useConfiguredQuery__ - * - * To run a query within a React component, call `useConfiguredQuery` and pass it any options that fit your needs. - * When your component renders, `useConfiguredQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useConfiguredQuery({ - * variables: { - * }, - * }); - */ -export function useConfiguredQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(ConfiguredDocument, options); -} -export function useConfiguredLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(ConfiguredDocument, options); -} -export type ConfiguredQueryHookResult = ReturnType; -export type ConfiguredLazyQueryHookResult = ReturnType; -export type ConfiguredQueryResult = Apollo.QueryResult; -export const ListAppsDocument = gql` - query ListApps { - listAppsInfo { - apps { - id - available - tipi_version - port - name - version - short_desc - author - categories - https - } - total - } - } -`; - -/** - * __useListAppsQuery__ - * - * To run a query within a React component, call `useListAppsQuery` and pass it any options that fit your needs. - * When your component renders, `useListAppsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useListAppsQuery({ - * variables: { - * }, - * }); - */ -export function useListAppsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(ListAppsDocument, options); -} -export function useListAppsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(ListAppsDocument, options); -} -export type ListAppsQueryHookResult = ReturnType; -export type ListAppsLazyQueryHookResult = ReturnType; -export type ListAppsQueryResult = Apollo.QueryResult; -export const MeDocument = gql` - query Me { - me { - id - } - } -`; - -/** - * __useMeQuery__ - * - * To run a query within a React component, call `useMeQuery` and pass it any options that fit your needs. - * When your component renders, `useMeQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useMeQuery({ - * variables: { - * }, - * }); - */ -export function useMeQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(MeDocument, options); -} -export function useMeLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(MeDocument, options); -} -export type MeQueryHookResult = ReturnType; -export type MeLazyQueryHookResult = ReturnType; -export type MeQueryResult = Apollo.QueryResult; -export const RefreshTokenDocument = gql` - query RefreshToken { - refreshToken { - token - } - } -`; - -/** - * __useRefreshTokenQuery__ - * - * To run a query within a React component, call `useRefreshTokenQuery` and pass it any options that fit your needs. - * When your component renders, `useRefreshTokenQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useRefreshTokenQuery({ - * variables: { - * }, - * }); - */ -export function useRefreshTokenQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(RefreshTokenDocument, options); -} -export function useRefreshTokenLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(RefreshTokenDocument, options); -} -export type RefreshTokenQueryHookResult = ReturnType; -export type RefreshTokenLazyQueryHookResult = ReturnType; -export type RefreshTokenQueryResult = Apollo.QueryResult; -export const SystemInfoDocument = gql` - query SystemInfo { - systemInfo { - cpu { - load - } - disk { - available - used - total - } - memory { - available - used - total - } - } - } -`; - -/** - * __useSystemInfoQuery__ - * - * To run a query within a React component, call `useSystemInfoQuery` and pass it any options that fit your needs. - * When your component renders, `useSystemInfoQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useSystemInfoQuery({ - * variables: { - * }, - * }); - */ -export function useSystemInfoQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(SystemInfoDocument, options); -} -export function useSystemInfoLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(SystemInfoDocument, options); -} -export type SystemInfoQueryHookResult = ReturnType; -export type SystemInfoLazyQueryHookResult = ReturnType; -export type SystemInfoQueryResult = Apollo.QueryResult; -export const VersionDocument = gql` - query Version { - version { - current - latest - } - } -`; - -/** - * __useVersionQuery__ - * - * To run a query within a React component, call `useVersionQuery` and pass it any options that fit your needs. - * When your component renders, `useVersionQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useVersionQuery({ - * variables: { - * }, - * }); - */ -export function useVersionQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useQuery(VersionDocument, options); -} -export function useVersionLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = { ...defaultOptions, ...baseOptions }; - return Apollo.useLazyQuery(VersionDocument, options); -} -export type VersionQueryHookResult = ReturnType; -export type VersionLazyQueryHookResult = ReturnType; -export type VersionQueryResult = Apollo.QueryResult; diff --git a/packages/dashboard/src/graphql/mutations/installApp.graphql b/packages/dashboard/src/graphql/mutations/installApp.graphql deleted file mode 100644 index 79716361..00000000 --- a/packages/dashboard/src/graphql/mutations/installApp.graphql +++ /dev/null @@ -1,7 +0,0 @@ -mutation InstallApp($input: AppInputType!) { - installApp(input: $input) { - id - status - __typename - } -} diff --git a/packages/dashboard/src/graphql/mutations/login.graphql b/packages/dashboard/src/graphql/mutations/login.graphql deleted file mode 100644 index f82f52af..00000000 --- a/packages/dashboard/src/graphql/mutations/login.graphql +++ /dev/null @@ -1,5 +0,0 @@ -mutation Login($input: UsernamePasswordInput!) { - login(input: $input) { - token - } -} diff --git a/packages/dashboard/src/graphql/mutations/logout.graphql b/packages/dashboard/src/graphql/mutations/logout.graphql deleted file mode 100644 index 0ab86dec..00000000 --- a/packages/dashboard/src/graphql/mutations/logout.graphql +++ /dev/null @@ -1,3 +0,0 @@ -mutation Logout { - logout -} \ No newline at end of file diff --git a/packages/dashboard/src/graphql/mutations/register.graphql b/packages/dashboard/src/graphql/mutations/register.graphql deleted file mode 100644 index b8f829e3..00000000 --- a/packages/dashboard/src/graphql/mutations/register.graphql +++ /dev/null @@ -1,5 +0,0 @@ -mutation Register($input: UsernamePasswordInput!) { - register(input: $input) { - token - } -} diff --git a/packages/dashboard/src/graphql/mutations/restart.graphql b/packages/dashboard/src/graphql/mutations/restart.graphql deleted file mode 100644 index 0a1c92c4..00000000 --- a/packages/dashboard/src/graphql/mutations/restart.graphql +++ /dev/null @@ -1,3 +0,0 @@ -mutation Restart { - restart -} diff --git a/packages/dashboard/src/graphql/mutations/startApp.graphql b/packages/dashboard/src/graphql/mutations/startApp.graphql deleted file mode 100644 index a5d601e1..00000000 --- a/packages/dashboard/src/graphql/mutations/startApp.graphql +++ /dev/null @@ -1,7 +0,0 @@ -mutation StartApp($id: String!) { - startApp(id: $id) { - id - status - __typename - } -} diff --git a/packages/dashboard/src/graphql/mutations/stopApp.graphql b/packages/dashboard/src/graphql/mutations/stopApp.graphql deleted file mode 100644 index 879e3ad1..00000000 --- a/packages/dashboard/src/graphql/mutations/stopApp.graphql +++ /dev/null @@ -1,7 +0,0 @@ -mutation StopApp($id: String!) { - stopApp(id: $id) { - id - status - __typename - } -} diff --git a/packages/dashboard/src/graphql/mutations/unintallApp.graphql b/packages/dashboard/src/graphql/mutations/unintallApp.graphql deleted file mode 100644 index 17eafc3a..00000000 --- a/packages/dashboard/src/graphql/mutations/unintallApp.graphql +++ /dev/null @@ -1,7 +0,0 @@ -mutation UninstallApp($id: String!) { - uninstallApp(id: $id) { - id - status - __typename - } -} diff --git a/packages/dashboard/src/graphql/mutations/update.graphql b/packages/dashboard/src/graphql/mutations/update.graphql deleted file mode 100644 index f2b4d339..00000000 --- a/packages/dashboard/src/graphql/mutations/update.graphql +++ /dev/null @@ -1,3 +0,0 @@ -mutation Update { - update -} diff --git a/packages/dashboard/src/graphql/mutations/updateApp.graphql b/packages/dashboard/src/graphql/mutations/updateApp.graphql deleted file mode 100644 index 2658f48f..00000000 --- a/packages/dashboard/src/graphql/mutations/updateApp.graphql +++ /dev/null @@ -1,7 +0,0 @@ -mutation UpdateApp($id: String!) { - updateApp(id: $id) { - id - status - __typename - } -} diff --git a/packages/dashboard/src/graphql/mutations/updateAppConfig.graphql b/packages/dashboard/src/graphql/mutations/updateAppConfig.graphql deleted file mode 100644 index d6fd633d..00000000 --- a/packages/dashboard/src/graphql/mutations/updateAppConfig.graphql +++ /dev/null @@ -1,7 +0,0 @@ -mutation UpdateAppConfig($input: AppInputType!) { - updateAppConfig(input: $input) { - id - status - __typename - } -} diff --git a/packages/dashboard/src/graphql/queries/getApp.graphql b/packages/dashboard/src/graphql/queries/getApp.graphql deleted file mode 100644 index bb8bf697..00000000 --- a/packages/dashboard/src/graphql/queries/getApp.graphql +++ /dev/null @@ -1,42 +0,0 @@ -query GetApp($appId: String!) { - getApp(id: $appId) { - id - status - config - version - exposed - domain - updateInfo { - current - latest - dockerVersion - } - info { - id - port - name - description - available - version - tipi_version - short_desc - author - source - categories - url_suffix - https - exposable - no_gui - form_fields { - type - label - max - min - hint - placeholder - required - env_variable - } - } - } -} diff --git a/packages/dashboard/src/graphql/queries/installedApps.graphql b/packages/dashboard/src/graphql/queries/installedApps.graphql deleted file mode 100644 index 399840c7..00000000 --- a/packages/dashboard/src/graphql/queries/installedApps.graphql +++ /dev/null @@ -1,21 +0,0 @@ -query InstalledApps { - installedApps { - id - status - config - version - updateInfo { - current - latest - dockerVersion - } - info { - id - name - description - tipi_version - short_desc - https - } - } -} diff --git a/packages/dashboard/src/graphql/queries/isConfigured.graphql b/packages/dashboard/src/graphql/queries/isConfigured.graphql deleted file mode 100644 index e9eee026..00000000 --- a/packages/dashboard/src/graphql/queries/isConfigured.graphql +++ /dev/null @@ -1,3 +0,0 @@ -query Configured { - isConfigured -} \ No newline at end of file diff --git a/packages/dashboard/src/graphql/queries/listApps.graphql b/packages/dashboard/src/graphql/queries/listApps.graphql deleted file mode 100644 index 51909676..00000000 --- a/packages/dashboard/src/graphql/queries/listApps.graphql +++ /dev/null @@ -1,18 +0,0 @@ -# Write your query or mutation here -query ListApps { - listAppsInfo { - apps { - id - available - tipi_version - port - name - version - short_desc - author - categories - https - } - total - } -} diff --git a/packages/dashboard/src/graphql/queries/me.graphql b/packages/dashboard/src/graphql/queries/me.graphql deleted file mode 100644 index 964ad908..00000000 --- a/packages/dashboard/src/graphql/queries/me.graphql +++ /dev/null @@ -1,5 +0,0 @@ -query Me { - me { - id - } -} diff --git a/packages/dashboard/src/graphql/queries/refreshToken.graphql b/packages/dashboard/src/graphql/queries/refreshToken.graphql deleted file mode 100644 index e8e0f204..00000000 --- a/packages/dashboard/src/graphql/queries/refreshToken.graphql +++ /dev/null @@ -1,5 +0,0 @@ -query RefreshToken { - refreshToken { - token - } -} diff --git a/packages/dashboard/src/graphql/queries/systemInfo.graphql b/packages/dashboard/src/graphql/queries/systemInfo.graphql deleted file mode 100644 index 75a3e844..00000000 --- a/packages/dashboard/src/graphql/queries/systemInfo.graphql +++ /dev/null @@ -1,17 +0,0 @@ -query SystemInfo { - systemInfo { - cpu { - load - } - disk { - available - used - total - } - memory { - available - used - total - } - } -} \ No newline at end of file diff --git a/packages/dashboard/src/graphql/queries/version.graphql b/packages/dashboard/src/graphql/queries/version.graphql deleted file mode 100644 index 5ea50355..00000000 --- a/packages/dashboard/src/graphql/queries/version.graphql +++ /dev/null @@ -1,6 +0,0 @@ -query Version { - version { - current - latest - } -} diff --git a/packages/dashboard/src/hooks/useCachedRessources.ts b/packages/dashboard/src/hooks/useCachedRessources.ts deleted file mode 100644 index 0033344d..00000000 --- a/packages/dashboard/src/hooks/useCachedRessources.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { useEffect, useState } from 'react'; -import { ApolloClient } from '@apollo/client'; -import { createApolloClient } from '../core/apollo/client'; - -interface IReturnProps { - client?: ApolloClient; - isLoadingComplete?: boolean; -} - -export default function useCachedResources(): IReturnProps { - const [isLoadingComplete, setLoadingComplete] = useState(false); - const [client, setClient] = useState>(); - - async function loadResourcesAndDataAsync() { - try { - const restoredClient = createApolloClient(); - - setClient(restoredClient); - } catch (error) { - // We might want to provide this error information to an error reporting service - console.error(error); - } finally { - setLoadingComplete(true); - } - } - - useEffect(() => { - loadResourcesAndDataAsync(); - }, []); - - return { client, isLoadingComplete }; -} diff --git a/packages/dashboard/src/mocks/handlers.ts b/packages/dashboard/src/mocks/handlers.ts deleted file mode 100644 index cb687e40..00000000 --- a/packages/dashboard/src/mocks/handlers.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { graphql, rest } from 'msw'; -import { - ConfiguredQuery, - LoginMutation, - LogoutMutationResult, - MeQuery, - RefreshTokenQuery, - RegisterMutation, - RegisterMutationVariables, - UsernamePasswordInput, - VersionQuery, - SystemInfoQuery, -} from '../generated/graphql'; -import appHandlers from './handlers/appHandlers'; - -const restHandlers = [ - rest.get('/api/status', (req, res, ctx) => - res( - ctx.delay(200), - ctx.status(200), - ctx.json({ - status: 'RUNNING', - }), - ), - ), -]; -const graphqlHandlers = [ - // Handles a "Login" mutation - graphql.mutation('Login', (req, res, ctx) => { - const { username } = req.variables as UsernamePasswordInput; - sessionStorage.setItem('is-authenticated', username); - - const result: LoginMutation = { - login: { token: 'token' }, - }; - - return res(ctx.delay(), ctx.data(result)); - }), - - // Handles a "Logout" mutation - graphql.mutation('Logout', (req, res, ctx) => { - sessionStorage.removeItem('is-authenticated'); - - const result: LogoutMutationResult['data'] = { - logout: true, - }; - - return res(ctx.delay(), ctx.data(result)); - }), - - // Handles me query - graphql.query('Me', (req, res, ctx) => { - const isAuthenticated = sessionStorage.getItem('is-authenticated'); - if (!isAuthenticated) { - return res(ctx.errors([{ message: 'Not authenticated' }])); - } - const result: MeQuery = { - me: { id: '1' }, - }; - - return res(ctx.delay(), ctx.data(result)); - }), - - graphql.query('RefreshToken', (req, res, ctx) => { - const result: RefreshTokenQuery = { - refreshToken: { token: 'token' }, - }; - - return res(ctx.delay(), ctx.data(result)); - }), - - graphql.mutation('Register', (req, res, ctx) => { - const { - input: { username }, - } = req.variables as RegisterMutationVariables; - - const result: RegisterMutation = { - register: { token: 'token' }, - }; - - if (username === 'error@error.com') { - return res(ctx.errors([{ message: 'Username is already taken' }])); - } - - return res(ctx.data(result)); - }), - appHandlers.listApps, - appHandlers.getApp, - appHandlers.installedApps, - appHandlers.installApp, - graphql.query('Version', (req, res, ctx) => { - const result: VersionQuery = { - version: { - current: '1.0.0', - latest: '1.0.0', - }, - }; - - return res(ctx.data(result)); - }), - - graphql.query('Configured', (req, res, ctx) => { - const result: ConfiguredQuery = { - isConfigured: true, - }; - - return res(ctx.data(result)); - }), - - graphql.query('SystemInfo', (req, res, ctx) => { - const result: SystemInfoQuery = { - systemInfo: { - cpu: { - load: 50, - }, - disk: { - available: 1000000000, - total: 2000000000, - used: 1000000000, - }, - memory: { - available: 1000000000, - total: 2000000000, - used: 1000000000, - }, - }, - }; - - return res(ctx.data(result)); - }), -]; - -export const handlers = [...graphqlHandlers, ...restHandlers]; diff --git a/packages/dashboard/src/mocks/handlers/appHandlers.ts b/packages/dashboard/src/mocks/handlers/appHandlers.ts deleted file mode 100644 index 1a607059..00000000 --- a/packages/dashboard/src/mocks/handlers/appHandlers.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { graphql } from 'msw'; -import { faker } from '@faker-js/faker'; -import { createAppsRandomly } from '../fixtures/app.fixtures'; -import { AppInputType, AppStatusEnum, GetAppQuery, InstallAppMutation, InstalledAppsQuery, ListAppsQuery } from '../../generated/graphql'; - -// eslint-disable-next-line no-promise-executor-return -const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); -export const notEmpty = (value: TValue | null | undefined): value is TValue => value !== null && value !== undefined; - -const removeDuplicates = (array: T[]) => - array.filter((a, i) => { - const index = array.findIndex((_a) => _a.id === a.id); - return index === i; - }); - -export const mockedApps = removeDuplicates(createAppsRandomly(faker.datatype.number({ min: 20, max: 30 }))); - -export const mockInstalledAppIds = mockedApps.slice(0, faker.datatype.number({ min: 5, max: 8 })).map((a) => a.id); -const stoppedAppsIds = mockInstalledAppIds.slice(0, faker.datatype.number({ min: 1, max: 3 })); - -/** - * GetApp handler - */ -const getApp = graphql.query('GetApp', (req, res, ctx) => { - const { appId } = req.variables as { appId: string }; - - const app = mockedApps.find((a) => a.id === appId); - - if (!app) { - return res(ctx.errors([{ message: 'App not found' }])); - } - - const isInstalled = mockInstalledAppIds.includes(appId); - - let status = AppStatusEnum.Missing; - if (isInstalled) { - status = AppStatusEnum.Running; - } - if (isInstalled && stoppedAppsIds.includes(appId)) { - status = AppStatusEnum.Stopped; - } - - const result: GetAppQuery = { - getApp: { - id: app.id, - status, - info: app, - __typename: 'App', - config: {}, - exposed: false, - updateInfo: null, - domain: null, - version: 1, - }, - }; - - return res(ctx.data(result)); -}); - -const getAppError = graphql.query('GetApp', (req, res, ctx) => res(ctx.errors([{ message: 'test-error' }]))); - -/** - * ListApps handler - */ -const listApps = graphql.query('ListApps', async (req, res, ctx) => { - const result: ListAppsQuery = { - listAppsInfo: { - apps: mockedApps, - total: mockedApps.length, - }, - }; - - await wait(100); - - return res(ctx.data(result)); -}); - -const listAppsEmpty = graphql.query('ListApps', (req, res, ctx) => { - const result: ListAppsQuery = { - listAppsInfo: { - apps: [], - total: 0, - }, - }; - return res(ctx.data(result)); -}); - -const listAppsError = graphql.query('ListApps', (req, res, ctx) => res(ctx.errors([{ message: 'test-error' }]))); - -/** - * InstalledApps handler - */ -const installedApps = graphql.query('InstalledApps', (req, res, ctx) => { - const apps: InstalledAppsQuery['installedApps'] = mockInstalledAppIds - .map((id) => { - const app = mockedApps.find((a) => a.id === id); - if (!app) return null; - - let status = AppStatusEnum.Running; - if (stoppedAppsIds.includes(id)) { - status = AppStatusEnum.Stopped; - } - - return { - __typename: 'App' as const, - id: app.id, - status, - config: {}, - info: app, - version: 1, - updateInfo: null, - }; - }) - .filter(notEmpty); - - const result: InstalledAppsQuery = { - installedApps: apps, - }; - - return res(ctx.data(result)); -}); - -const installedAppsEmpty = graphql.query('InstalledApps', (req, res, ctx) => { - const result: InstalledAppsQuery = { - installedApps: [], - }; - - return res(ctx.data(result)); -}); - -const installedAppsError = graphql.query('InstalledApps', (req, res, ctx) => res(ctx.errors([{ message: 'test-error' }]))); - -const installedAppsNoInfo = graphql.query('InstalledApps', (req, res, ctx) => { - const result: InstalledAppsQuery = { - installedApps: [ - { - __typename: 'App' as const, - id: 'app-id', - status: AppStatusEnum.Running, - config: {}, - info: null, - version: 1, - updateInfo: null, - }, - ], - }; - return res(ctx.data(result)); -}); - -/** - * Install app handler - */ -const installApp = graphql.mutation('InstallApp', (req, res, ctx) => { - const { input } = req.variables as { input: AppInputType }; - - const app = mockedApps.find((a) => a.id === input.id); - - if (!app) { - return res(ctx.errors([{ message: 'App not found' }])); - } - - const result: InstallAppMutation = { - installApp: { - __typename: 'App' as const, - id: app.id, - status: AppStatusEnum.Running, - }, - }; - - return res(ctx.data(result)); -}); - -export default { getApp, getAppError, listApps, listAppsEmpty, listAppsError, installedApps, installedAppsEmpty, installedAppsError, installedAppsNoInfo, installApp }; diff --git a/packages/dashboard/src/modules/Apps/components/InstallModal/InstallModal.tsx b/packages/dashboard/src/modules/Apps/components/InstallModal/InstallModal.tsx deleted file mode 100644 index 3205ae8e..00000000 --- a/packages/dashboard/src/modules/Apps/components/InstallModal/InstallModal.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import React from 'react'; -import { InstallForm } from '../InstallForm'; -import { AppInfo } from '../../../../generated/graphql'; -import { Modal, ModalBody, ModalHeader } from '../../../../components/ui/Modal'; - -interface IProps { - app: Pick; - isOpen: boolean; - onClose: () => void; - onSubmit: (values: Record) => void; -} - -export const InstallModal: React.FC = ({ app, isOpen, onClose, onSubmit }) => ( - - -
Install {app.name}
-
- - - -
-); diff --git a/packages/dashboard/src/modules/Apps/components/UpdateSettingsModal.tsx b/packages/dashboard/src/modules/Apps/components/UpdateSettingsModal.tsx deleted file mode 100644 index 4edbd25d..00000000 --- a/packages/dashboard/src/modules/Apps/components/UpdateSettingsModal.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from 'react'; -import { InstallForm } from './InstallForm'; -import { App, AppInfo } from '../../../generated/graphql'; -import { Modal, ModalBody, ModalHeader } from '../../../components/ui/Modal'; - -interface IProps { - app: AppInfo; - config: App['config']; - isOpen: boolean; - exposed?: boolean; - domain?: string; - onClose: () => void; - onSubmit: (values: Record) => void; -} - -export const UpdateSettingsModal: React.FC = ({ app, config, isOpen, onClose, onSubmit, exposed, domain }) => ( - - -
Update {app.name} config
-
- - - -
-); diff --git a/packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.test.tsx b/packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.test.tsx deleted file mode 100644 index 614300ad..00000000 --- a/packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.test.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import { graphql } from 'msw'; -import React from 'react'; -import { fireEvent, render, renderHook, screen, waitFor } from '../../../../../tests/test-utils'; -import { AppStatusEnum } from '../../../../generated/graphql'; -import { createAppEntity } from '../../../../mocks/fixtures/app.fixtures'; -import { server } from '../../../../mocks/server'; -import { useToastStore } from '../../../../state/toastStore'; -import { AppDetailsContainer } from './AppDetailsContainer'; - -describe('Test: AppDetailsContainer', () => { - describe('Test: UI', () => { - it('should render', async () => { - // Arrange - const app = createAppEntity({}); - render(); - - // Assert - expect(screen.getByText(app.info.short_desc)).toBeInTheDocument(); - }); - - it('should display update button when update is available', async () => { - // Arrange - const app = createAppEntity({ overrides: { updateInfo: { current: 2, latest: 3 } } }); - render(); - - // Assert - expect(screen.getByTestId('action-button-update')).toBeInTheDocument(); - }); - - it('should display install button when app is not installed', async () => { - // Arrange - const app = createAppEntity({ overrides: { status: AppStatusEnum.Missing } }); - - render(); - - // Assert - expect(screen.getByTestId('action-button-install')).toBeInTheDocument(); - }); - - it('should display uninstall and start button when app is stopped', async () => { - // Arrange - const app = createAppEntity({ overrides: { status: AppStatusEnum.Stopped } }); - - render(); - - // Assert - expect(screen.getByTestId('action-button-remove')).toBeInTheDocument(); - expect(screen.getByTestId('action-button-start')).toBeInTheDocument(); - }); - - it('should display stop, open and settings buttons when app is running', async () => { - // Arrange - const app = createAppEntity({ overrides: { status: AppStatusEnum.Running } }); - render(); - - // Assert - expect(screen.getByTestId('action-button-stop')).toBeInTheDocument(); - expect(screen.getByTestId('action-button-open')).toBeInTheDocument(); - expect(screen.getByTestId('action-button-settings')).toBeInTheDocument(); - }); - - it('should not display update button when update is not available', async () => { - // Arrange - const app = createAppEntity({ overrides: { updateInfo: { current: 3, latest: 3 } } }); - render(); - - // Assert - expect(screen.queryByTestId('action-button-update')).not.toBeInTheDocument(); - }); - - it('should not display open button when app has no_gui set to true', async () => { - // Arrange - const app = createAppEntity({ overridesInfo: { no_gui: true } }); - render(); - - // Assert - expect(screen.queryByTestId('action-button-open')).not.toBeInTheDocument(); - }); - }); - - describe('Test: Open app', () => { - it('should call window.open with the correct url when open button is clicked', async () => { - // Arrange - const app = createAppEntity({}); - const spy = jest.spyOn(window, 'open').mockImplementation(() => null); - render(); - - // Act - const openButton = screen.getByTestId('action-button-open'); - openButton.click(); - - // Assert - expect(spy).toHaveBeenCalledWith(`http://localhost:${app.info.port}`, '_blank', 'noreferrer'); - }); - - it('should open with https when app info has https set to true', async () => { - // Arrange - const app = createAppEntity({ overridesInfo: { https: true } }); - const spy = jest.spyOn(window, 'open').mockImplementation(() => null); - render(); - - // Act - const openButton = screen.getByTestId('action-button-open'); - openButton.click(); - - // Assert - expect(spy).toHaveBeenCalledWith(`https://localhost:${app.info.port}`, '_blank', 'noreferrer'); - }); - }); - - describe('Test: Install app', () => { - const installFn = jest.fn(); - const fakeInstallHandler = graphql.mutation('InstallApp', (req, res, ctx) => { - installFn(req.variables); - return res(ctx.data({ installApp: { id: 'id', status: '', __typename: '' } })); - }); - - it('should call install mutation when install form is submitted', async () => { - // Arrange - server.use(fakeInstallHandler); - const app = createAppEntity({ overrides: { status: AppStatusEnum.Missing } }); - render(); - - // Act - const installForm = screen.getByTestId('install-form'); - fireEvent.submit(installForm); - - await waitFor(() => { - expect(installFn).toHaveBeenCalledWith({ - input: { id: app.id, form: {}, exposed: false, domain: '' }, - }); - }); - }); - - it('should display a toast error when install mutation fails', async () => { - // Arrange - const { result } = renderHook(() => useToastStore()); - server.use(graphql.mutation('InstallApp', (req, res, ctx) => res(ctx.errors([{ message: 'my big error' }])))); - const app = createAppEntity({ overrides: { status: AppStatusEnum.Missing } }); - render(); - - // Act - const installForm = screen.getByTestId('install-form'); - fireEvent.submit(installForm); - - await waitFor(() => { - expect(result.current.toasts).toHaveLength(1); - expect(result.current.toasts[0].description).toEqual('my big error'); - expect(result.current.toasts[0].status).toEqual('error'); - }); - }); - }); -}); diff --git a/packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.tsx b/packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.tsx deleted file mode 100644 index 58e0ba8f..00000000 --- a/packages/dashboard/src/modules/Apps/containers/AppDetailsContainer/AppDetailsContainer.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import React from 'react'; -import { useDisclosure } from '../../../../hooks/useDisclosure'; -import { useToastStore } from '../../../../state/toastStore'; -import { AppLogo } from '../../../../components/AppLogo/AppLogo'; -import { AppStatus } from '../../../../components/AppStatus'; -import { - App, - AppInfo, - AppStatusEnum, - GetAppDocument, - InstalledAppsDocument, - useInstallAppMutation, - useStartAppMutation, - useStopAppMutation, - useUninstallAppMutation, - useUpdateAppConfigMutation, - useUpdateAppMutation, -} from '../../../../generated/graphql'; -import { AppActions } from '../../components/AppActions'; -import { AppDetailsTabs } from '../../components/AppDetailsTabs'; -import { InstallModal } from '../../components/InstallModal'; -import { StopModal } from '../../components/StopModal'; -import { UninstallModal } from '../../components/UninstallModal'; -import { UpdateModal } from '../../components/UpdateModal'; -import { UpdateSettingsModal } from '../../components/UpdateSettingsModal'; -import { FormValues } from '../../components/InstallForm/InstallForm'; - -interface IProps { - app: Pick; - info: AppInfo; -} - -export const AppDetailsContainer: React.FC = ({ app, info }) => { - const { addToast } = useToastStore(); - const installDisclosure = useDisclosure(); - const uninstallDisclosure = useDisclosure(); - const stopDisclosure = useDisclosure(); - const updateDisclosure = useDisclosure(); - const updateSettingsDisclosure = useDisclosure(); - - // Mutations - const [install] = useInstallAppMutation({ refetchQueries: [{ query: GetAppDocument, variables: { appId: info.id } }, { query: InstalledAppsDocument }] }); - const [update] = useUpdateAppMutation({ refetchQueries: [{ query: GetAppDocument, variables: { appId: info.id } }] }); - const [uninstall] = useUninstallAppMutation({ refetchQueries: [{ query: GetAppDocument, variables: { appId: info.id } }, { query: InstalledAppsDocument }] }); - const [stop] = useStopAppMutation({ refetchQueries: [{ query: GetAppDocument, variables: { appId: info.id } }] }); - const [start] = useStartAppMutation({ refetchQueries: [{ query: GetAppDocument, variables: { appId: info.id } }] }); - const [updateConfig] = useUpdateAppConfigMutation({ refetchQueries: [{ query: GetAppDocument, variables: { appId: info.id } }] }); - - const updateAvailable = Number(app?.updateInfo?.current || 0) < Number(app?.updateInfo?.latest); - - const handleError = (error: unknown) => { - if (error instanceof Error) { - addToast({ - title: 'Error', - description: error.message, - status: 'error', - position: 'top', - isClosable: true, - }); - } - }; - - const handleInstallSubmit = async (values: FormValues) => { - installDisclosure.close(); - const { exposed, domain, ...form } = values; - - try { - await install({ - variables: { input: { form, id: info.id, exposed: exposed || false, domain: domain || '' } }, - optimisticResponse: { installApp: { id: info.id, status: AppStatusEnum.Installing, __typename: 'App' } }, - }); - } catch (error) { - handleError(error); - } - }; - - const handleUnistallSubmit = async () => { - uninstallDisclosure.close(); - try { - await uninstall({ variables: { id: info.id }, optimisticResponse: { uninstallApp: { id: info.id, status: AppStatusEnum.Uninstalling, __typename: 'App' } } }); - } catch (error) { - handleError(error); - } - }; - - const handleStopSubmit = async () => { - stopDisclosure.close(); - try { - await stop({ variables: { id: info.id }, optimisticResponse: { stopApp: { id: info.id, status: AppStatusEnum.Stopping, __typename: 'App' } } }); - } catch (error) { - handleError(error); - } - }; - - const handleStartSubmit = async () => { - try { - await start({ variables: { id: info.id }, optimisticResponse: { startApp: { id: info.id, status: AppStatusEnum.Starting, __typename: 'App' } } }); - } catch (e: unknown) { - handleError(e); - } - }; - - const handleUpdateSettingsSubmit = async (values: FormValues) => { - try { - const { exposed, domain, ...form } = values; - await updateConfig({ variables: { input: { form, id: info.id, exposed: exposed || false, domain: domain || '' } } }); - addToast({ - title: 'Success', - description: 'App config updated successfully. Restart the app to apply the changes.', - position: 'top', - status: 'success', - isClosable: true, - }); - updateSettingsDisclosure.close(); - } catch (error) { - handleError(error); - } - }; - - const handleUpdateSubmit = async () => { - updateDisclosure.close(); - try { - await update({ variables: { id: info.id }, optimisticResponse: { updateApp: { id: info.id, status: AppStatusEnum.Updating, __typename: 'App' } } }); - addToast({ - title: 'Success', - description: 'App updated successfully', - position: 'top', - status: 'success', - isClosable: true, - }); - } catch (error) { - handleError(error); - } - }; - - const handleOpen = () => { - const { https } = info; - const protocol = https ? 'https' : 'http'; - - if (typeof window !== 'undefined') { - // Current domain - const domain = window.location.hostname; - window.open(`${protocol}://${domain}:${info.port}${info.url_suffix || ''}`, '_blank', 'noreferrer'); - } - }; - - const newVersion = [app?.updateInfo?.dockerVersion ? `${app?.updateInfo?.dockerVersion}` : '', `(${String(app?.updateInfo?.latest)})`].join(' '); - - return ( -
- - - - - -
- -
-
- Version: - {info?.version} -
- {app.domain && ( - - https://{app.domain} - - )} - {info.short_desc} -
{app && app?.status !== AppStatusEnum.Missing && }
- -
-
- -
- ); -}; diff --git a/packages/dashboard/src/modules/Auth/containers/LoginContainer/LoginContainer.tsx b/packages/dashboard/src/modules/Auth/containers/LoginContainer/LoginContainer.tsx deleted file mode 100644 index 4ff6b4f4..00000000 --- a/packages/dashboard/src/modules/Auth/containers/LoginContainer/LoginContainer.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useApolloClient } from '@apollo/client'; -import React, { useState } from 'react'; -import { useLoginMutation } from '../../../../generated/graphql'; -import { useToastStore } from '../../../../state/toastStore'; -import { AuthFormLayout } from '../../components/AuthFormLayout'; -import { LoginForm } from '../../components/LoginForm'; - -type FormValues = { email: string; password: string }; - -export const LoginContainer: React.FC = () => { - const client = useApolloClient(); - const [login] = useLoginMutation({}); - const [loading, setLoading] = useState(false); - const { addToast } = useToastStore(); - - const handleError = (error: unknown) => { - localStorage.removeItem('token'); - if (error instanceof Error) { - addToast({ - title: 'Error', - description: error.message, - status: 'error', - position: 'top', - isClosable: true, - }); - } - }; - - const handleLogin = async (values: FormValues) => { - try { - setLoading(true); - const { data } = await login({ variables: { input: { username: values.email, password: values.password } } }); - - if (data?.login?.token) { - localStorage.setItem('token', data.login.token); - } - - await client.refetchQueries({ include: ['Me'] }); - } catch (error) { - handleError(error); - } finally { - setLoading(false); - } - }; - - return ( - - - - ); -}; diff --git a/packages/dashboard/src/modules/Auth/containers/RegisterContainer/RegisterContainer.tsx b/packages/dashboard/src/modules/Auth/containers/RegisterContainer/RegisterContainer.tsx deleted file mode 100644 index 8c78393f..00000000 --- a/packages/dashboard/src/modules/Auth/containers/RegisterContainer/RegisterContainer.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import router from 'next/router'; -import React, { useState } from 'react'; -import { useRegisterMutation } from '../../../../generated/graphql'; -import { useToastStore } from '../../../../state/toastStore'; -import { AuthFormLayout } from '../../components/AuthFormLayout'; -import { RegisterForm } from '../../components/RegisterForm'; - -export const RegisterContainer: React.FC = () => { - const { addToast } = useToastStore(); - const [register] = useRegisterMutation({ refetchQueries: ['Me'] }); - const [loading, setLoading] = useState(false); - - const handleError = (error: unknown) => { - if (error instanceof Error) { - addToast({ - title: 'Error', - description: error.message, - status: 'error', - position: 'top', - isClosable: true, - }); - } - }; - - const handleRegister = async (values: { email: string; password: string }) => { - try { - setLoading(true); - const { data } = await register({ variables: { input: { username: values.email, password: values.password } } }); - - if (data?.register?.token) { - localStorage.setItem('token', data.register.token); - router.reload(); - } else { - setLoading(false); - handleError(new Error('Something went wrong')); - } - } catch (error) { - setLoading(false); - handleError(error); - } - }; - - return ( - - - - ); -}; diff --git a/packages/dashboard/src/modules/Dashboard/pages/DashboardPage/DashboardPage.tsx b/packages/dashboard/src/modules/Dashboard/pages/DashboardPage/DashboardPage.tsx deleted file mode 100644 index e33e95ae..00000000 --- a/packages/dashboard/src/modules/Dashboard/pages/DashboardPage/DashboardPage.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react'; -import type { NextPage } from 'next'; -import { Layout } from '../../../../components/Layout'; -import Dashboard from '../../containers/Dashboard'; -import { useSystemInfoQuery } from '../../../../generated/graphql'; - -export const DashboardPage: NextPage = () => { - const { data, loading } = useSystemInfoQuery({ pollInterval: 10000 }); - return ( - - {data?.systemInfo && } - - ); -}; diff --git a/packages/dashboard/src/modules/Settings/containers/SettingsContainer/SettingsContainer.test.tsx b/packages/dashboard/src/modules/Settings/containers/SettingsContainer/SettingsContainer.test.tsx deleted file mode 100644 index 68fc1f67..00000000 --- a/packages/dashboard/src/modules/Settings/containers/SettingsContainer/SettingsContainer.test.tsx +++ /dev/null @@ -1,122 +0,0 @@ -import { faker } from '@faker-js/faker'; -import { graphql } from 'msw'; -import React from 'react'; -import { act, fireEvent, render, renderHook, screen, waitFor } from '../../../../../tests/test-utils'; -import { server } from '../../../../mocks/server'; -import { useToastStore } from '../../../../state/toastStore'; -import { SettingsContainer } from './SettingsContainer'; - -describe('Test: SettingsContainer', () => { - it('renders without crashing', () => { - const currentVersion = faker.system.semver(); - render(); - - expect(screen.getByText('Tipi settings')).toBeInTheDocument(); - expect(screen.getByText('Already up to date')).toBeInTheDocument(); - }); - - it('should make update button disable if current version is equal to latest version', () => { - const currentVersion = faker.system.semver(); - render(); - - expect(screen.getByText('Already up to date')).toBeDisabled(); - }); - - it('should make update button disabled if current version is greater than latest version', () => { - const currentVersion = '1.0.0'; - const latestVersion = '0.0.1'; - render(); - - expect(screen.getByText('Already up to date')).toBeDisabled(); - }); - - it('should display update button if current version is less than latest version', () => { - const currentVersion = '0.0.1'; - const latestVersion = '1.0.0'; - - render(); - expect(screen.getByText(`Update to ${latestVersion}`)).toBeInTheDocument(); - expect(screen.getByText(`Update to ${latestVersion}`)).not.toBeDisabled(); - }); - - it('should call update mutation when update button is clicked', async () => { - // Arrange - - localStorage.setItem('token', 'token'); - const currentVersion = '0.0.1'; - const latestVersion = '1.0.0'; - const updateFn = jest.fn(); - server.use( - graphql.mutation('Update', async (req, res, ctx) => { - updateFn(); - return res(ctx.data({ update: true })); - }), - ); - render(); - - // Act - act(() => screen.getByText(`Update to ${latestVersion}`).click()); - - fireEvent.click(screen.getByText('Update')); - waitFor(() => expect(updateFn).toHaveBeenCalled()); - // eslint-disable-next-line no-promise-executor-return - await act(() => new Promise((resolve) => setTimeout(resolve, 1500))); - - // Assert - const token = localStorage.getItem('token'); - expect(token).toBe(null); - }); - - it('should display error toast if update mutation fails', async () => { - // Arrange - const { result, unmount } = renderHook(() => useToastStore()); - const currentVersion = '0.0.1'; - const latestVersion = '1.0.0'; - const errorMessage = 'My error'; - server.use(graphql.mutation('Update', async (req, res, ctx) => res(ctx.errors([{ message: errorMessage }])))); - render(); - - // Act - act(() => screen.getByText(`Update to ${latestVersion}`).click()); - fireEvent.click(screen.getByText('Update')); - - // Assert - await waitFor(() => expect(result.current.toasts[0].description).toBe(errorMessage)); - unmount(); - }); - - it('should call restart mutation when restart button is clicked', async () => { - // Arrange - const restartFn = jest.fn(); - server.use( - graphql.mutation('Restart', async (req, res, ctx) => { - restartFn(); - return res(ctx.data({ restart: true })); - }), - ); - render(); - - // Act - fireEvent.click(screen.getByTestId('settings-modal-restart-button')); - waitFor(() => expect(restartFn).toHaveBeenCalled()); - // eslint-disable-next-line no-promise-executor-return - await new Promise((resolve) => setTimeout(resolve, 1500)); - - // Assert - const token = localStorage.getItem('token'); - expect(token).toBe(null); - }); - - it('should display error toast if restart mutation fails', async () => { - // Arrange - const { result } = renderHook(() => useToastStore()); - const errorMessage = 'Update error'; - server.use(graphql.mutation('Restart', async (req, res, ctx) => res(ctx.errors([{ message: errorMessage }])))); - render(); - // Act - fireEvent.click(screen.getByTestId('settings-modal-restart-button')); - - // Assert - await waitFor(() => expect(result.current.toasts[0].description).toBe(errorMessage)); - }); -}); diff --git a/packages/dashboard/src/modules/Settings/pages/SettingsPage/SettingsPage.test.tsx b/packages/dashboard/src/modules/Settings/pages/SettingsPage/SettingsPage.test.tsx deleted file mode 100644 index 5ec6712d..00000000 --- a/packages/dashboard/src/modules/Settings/pages/SettingsPage/SettingsPage.test.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { graphql } from 'msw'; -import React from 'react'; -import { render, screen, waitFor } from '../../../../../tests/test-utils'; -import { server } from '../../../../mocks/server'; -import { SettingsPage } from './SettingsPage'; - -describe('Test: SettingsPage', () => { - it('should render', async () => { - render(); - - await waitFor(() => expect(screen.getByText('Tipi settings')).toBeInTheDocument()); - }); - - it('should render error page if version query fails', async () => { - server.use(graphql.query('Version', (req, res, ctx) => res(ctx.errors([{ message: 'My error' }])))); - - render(); - - await waitFor(() => expect(screen.getByText('My error')).toBeInTheDocument()); - }); -}); diff --git a/packages/dashboard/src/pages/_app.tsx b/packages/dashboard/src/pages/_app.tsx deleted file mode 100644 index 183bd2ca..00000000 --- a/packages/dashboard/src/pages/_app.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React, { useEffect } from 'react'; -import type { AppProps } from 'next/app'; -import { ApolloProvider } from '@apollo/client'; -import Head from 'next/head'; -import useCachedResources from '../hooks/useCachedRessources'; -import '../styles/global.css'; -import '../styles/global.scss'; -import { useUIStore } from '../state/uiStore'; -import { ToastProvider } from '../components/hoc/ToastProvider'; -import { StatusProvider } from '../components/hoc/StatusProvider'; -import { AuthProvider } from '../components/hoc/AuthProvider'; -import { StatusScreen } from '../components/StatusScreen'; - -function MyApp({ Component, pageProps }: AppProps) { - const { setDarkMode } = useUIStore(); - - // check theme on component mount - useEffect(() => { - const themeCheck = () => { - if (localStorage.darkMode === 'true' || (!('darkMode' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) { - document.body.classList.add('theme-dark'); - setDarkMode(true); - } else { - document.body.classList.remove('theme-light'); - setDarkMode(false); - } - }; - themeCheck(); - }, [setDarkMode]); - - const { client } = useCachedResources(); - if (!client) { - return ; - } - - return ( -
- - - Tipi - - - - - - - - - -
- ); -} - -export default MyApp; diff --git a/packages/dashboard/src/pages/app-store/[id].tsx b/packages/dashboard/src/pages/app-store/[id].tsx deleted file mode 100644 index a600cb06..00000000 --- a/packages/dashboard/src/pages/app-store/[id].tsx +++ /dev/null @@ -1 +0,0 @@ -export { AppDetailsPage as default } from '../../modules/Apps/pages/AppDetailsPage'; diff --git a/packages/dashboard/src/pages/app-store/index.tsx b/packages/dashboard/src/pages/app-store/index.tsx deleted file mode 100644 index 59a659a7..00000000 --- a/packages/dashboard/src/pages/app-store/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { AppStorePage as default } from '../../modules/AppStore/pages/AppStorePage'; diff --git a/packages/dashboard/src/pages/apps/[id].tsx b/packages/dashboard/src/pages/apps/[id].tsx deleted file mode 100644 index a600cb06..00000000 --- a/packages/dashboard/src/pages/apps/[id].tsx +++ /dev/null @@ -1 +0,0 @@ -export { AppDetailsPage as default } from '../../modules/Apps/pages/AppDetailsPage'; diff --git a/packages/dashboard/src/pages/apps/index.tsx b/packages/dashboard/src/pages/apps/index.tsx deleted file mode 100644 index 7ed808e7..00000000 --- a/packages/dashboard/src/pages/apps/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { AppsPage as default } from '../../modules/Apps/pages/AppsPage'; diff --git a/packages/dashboard/src/pages/index.tsx b/packages/dashboard/src/pages/index.tsx deleted file mode 100644 index 7ed6ea00..00000000 --- a/packages/dashboard/src/pages/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { DashboardPage as default } from '../modules/Dashboard/pages/DashboardPage'; diff --git a/packages/dashboard/src/pages/settings.tsx b/packages/dashboard/src/pages/settings.tsx deleted file mode 100644 index 70b578c2..00000000 --- a/packages/dashboard/src/pages/settings.tsx +++ /dev/null @@ -1 +0,0 @@ -export { SettingsPage as default } from '../modules/Settings/pages/SettingsPage'; diff --git a/packages/dashboard/src/state/systemStore.ts b/packages/dashboard/src/state/systemStore.ts deleted file mode 100644 index 779ef057..00000000 --- a/packages/dashboard/src/state/systemStore.ts +++ /dev/null @@ -1,17 +0,0 @@ -import create from 'zustand'; - -export enum SystemStatus { - RUNNING = 'RUNNING', - RESTARTING = 'RESTARTING', - UPDATING = 'UPDATING', -} - -type Store = { - status: SystemStatus; - setStatus: (status: SystemStatus) => void; -}; - -export const useSystemStore = create((set) => ({ - status: SystemStatus.RUNNING, - setStatus: (status: SystemStatus) => set((state) => ({ ...state, status })), -})); diff --git a/packages/dashboard/tests/test-utils.tsx b/packages/dashboard/tests/test-utils.tsx deleted file mode 100644 index cab68e64..00000000 --- a/packages/dashboard/tests/test-utils.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import React, { FC, ReactElement } from 'react'; -import { render, RenderOptions, renderHook } from '@testing-library/react'; -import { ApolloClient, ApolloProvider, HttpLink, InMemoryCache } from '@apollo/client'; -import fetch from 'isomorphic-fetch'; -import { SWRConfig } from 'swr'; - -const link = new HttpLink({ - uri: 'http://localhost:3000/graphql', - // Use explicit `window.fetch` so tha outgoing requests - // are captured and deferred until the Service Worker is ready. - fetch: (...args) => fetch(...args), -}); - -// create a mock of Apollo Client -export const mockApolloClient = new ApolloClient({ - cache: new InMemoryCache({}), - link, -}); - -const AllTheProviders: FC<{ children: React.ReactNode }> = ({ children }) => ( - new Map() }}> - {children} - -); - -const customRender = (ui: ReactElement, options?: Omit) => render(ui, { wrapper: AllTheProviders, ...options }); -const customRenderHook = (callback: () => any, options?: Omit) => renderHook(callback, { wrapper: AllTheProviders, ...options }); - -export * from '@testing-library/react'; -export { customRender as render }; -export { customRenderHook as renderHook }; diff --git a/packages/dashboard/tsconfig.json b/packages/dashboard/tsconfig.json deleted file mode 100644 index 6f7e3d32..00000000 --- a/packages/dashboard/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": true, - "jsx": "preserve", - "incremental": true, - "strictNullChecks": true, - "allowSyntheticDefaultImports": true, - "types": ["jest", "@testing-library/jest-dom"] - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], - "exclude": ["node_modules"] -} diff --git a/packages/system-api/.dockerignore b/packages/system-api/.dockerignore deleted file mode 100644 index 84086b2a..00000000 --- a/packages/system-api/.dockerignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules/ -dist/ -sessions/ -logs/ diff --git a/packages/system-api/.eslintignore b/packages/system-api/.eslintignore deleted file mode 100644 index 5e069b01..00000000 --- a/packages/system-api/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules/ -dist/ -*.cjs diff --git a/packages/system-api/.eslintrc.js b/packages/system-api/.eslintrc.js deleted file mode 100644 index 0f7925c1..00000000 --- a/packages/system-api/.eslintrc.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - plugins: ['@typescript-eslint', 'import', 'react'], - extends: ['airbnb-base', 'airbnb-typescript/base', 'eslint:recommended', 'plugin:import/typescript', 'plugin:@typescript-eslint/recommended', 'prettier'], - parser: '@typescript-eslint/parser', - parserOptions: { - project: './tsconfig.json', - tsconfigRootDir: __dirname, - ecmaVersion: 'latest', - sourceType: 'module', - }, - rules: { - 'max-len': [1, { code: 200 }], - 'import/extensions': ['error', 'ignorePackages', { js: 'never', jsx: 'never', ts: 'never', tsx: 'never' }], - 'no-unused-vars': [1, { argsIgnorePattern: '^_' }], - '@typescript-eslint/no-unused-vars': [1, { argsIgnorePattern: '^_' }], - 'max-classes-per-file': 0, - 'class-methods-use-this': 0, - 'import/prefer-default-export': 0, - 'no-underscore-dangle': 0, - '@typescript-eslint/ban-ts-comment': 0, - 'import/no-extraneous-dependencies': ['error', { devDependencies: ['**/*.test.ts', '**/*.spec.ts', '**/*.factory.ts', 'esbuild.js'] }], - }, - globals: { - NodeJS: true, - }, - env: { node: true, jest: true }, -}; diff --git a/packages/system-api/.gitignore b/packages/system-api/.gitignore deleted file mode 100644 index ae2ba72e..00000000 --- a/packages/system-api/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -node_modules/ -dist/ - -.DS_Store - -# testing -coverage/ -logs/ -sessions/ -.vscode diff --git a/packages/system-api/.prettierrc.js b/packages/system-api/.prettierrc.js deleted file mode 100644 index 18502e8f..00000000 --- a/packages/system-api/.prettierrc.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - singleQuote: true, - semi: true, - trailingComma: 'all', - printWidth: 200, -}; diff --git a/packages/system-api/__mocks__/child_process.ts b/packages/system-api/__mocks__/child_process.ts deleted file mode 100644 index 949adc12..00000000 --- a/packages/system-api/__mocks__/child_process.ts +++ /dev/null @@ -1,9 +0,0 @@ -const childProcess: { execFile: typeof execFile } = jest.genMockFromModule('child_process'); - -const execFile = (_path: string, _args: string[], _thing: unknown, callback: () => void) => { - callback(); -}; - -childProcess.execFile = execFile; - -module.exports = childProcess; diff --git a/packages/system-api/__mocks__/fs-extra.ts b/packages/system-api/__mocks__/fs-extra.ts deleted file mode 100644 index b182ea84..00000000 --- a/packages/system-api/__mocks__/fs-extra.ts +++ /dev/null @@ -1,121 +0,0 @@ -import path from 'path'; - -const fs: { - __createMockFiles: typeof createMockFiles; - __resetAllMocks: typeof resetAllMocks; - readFileSync: typeof readFileSync; - existsSync: typeof existsSync; - writeFileSync: typeof writeFileSync; - mkdirSync: typeof mkdirSync; - rmSync: typeof rmSync; - readdirSync: typeof readdirSync; - copyFileSync: typeof copyFileSync; - copySync: typeof copyFileSync; - createFileSync: typeof createFileSync; - unlinkSync: typeof unlinkSync; -} = jest.genMockFromModule('fs-extra'); - -let mockFiles = Object.create(null); - -const createMockFiles = (newMockFiles: Record) => { - mockFiles = Object.create(null); - - // Create folder tree - Object.keys(newMockFiles).forEach((file) => { - const dir = path.dirname(file); - - if (!mockFiles[dir]) { - mockFiles[dir] = []; - } - - mockFiles[dir].push(path.basename(file)); - mockFiles[file] = newMockFiles[file]; - }); -}; - -const readFileSync = (p: string) => mockFiles[p]; - -const existsSync = (p: string) => mockFiles[p] !== undefined; - -const writeFileSync = (p: string, data: string | string[]) => { - mockFiles[p] = data; -}; - -const mkdirSync = (p: string) => { - mockFiles[p] = Object.create(null); -}; - -const rmSync = (p: string) => { - if (mockFiles[p] instanceof Array) { - mockFiles[p].forEach((file: string) => { - delete mockFiles[path.join(p, file)]; - }); - } - - delete mockFiles[p]; -}; - -const readdirSync = (p: string) => { - const files: string[] = []; - - const depth = p.split('/').length; - - Object.keys(mockFiles).forEach((file) => { - if (file.startsWith(p)) { - const fileDepth = file.split('/').length; - - if (fileDepth === depth + 1) { - files.push(file.split('/').pop() || ''); - } - } - }); - - return files; -}; - -const copyFileSync = (source: string, destination: string) => { - mockFiles[destination] = mockFiles[source]; -}; - -const copySync = (source: string, destination: string) => { - mockFiles[destination] = mockFiles[source]; - - if (mockFiles[source] instanceof Array) { - mockFiles[source].forEach((file: string) => { - mockFiles[`${destination}/${file}`] = mockFiles[`${source}/${file}`]; - }); - } -}; - -const createFileSync = (p: string) => { - mockFiles[p] = ''; -}; - -const resetAllMocks = () => { - mockFiles = Object.create(null); -}; - -const unlinkSync = (p: string) => { - if (mockFiles[p] instanceof Array) { - mockFiles[p].forEach((file: string) => { - delete mockFiles[path.join(p, file)]; - }); - } - delete mockFiles[p]; -}; - -fs.unlinkSync = unlinkSync; -fs.readdirSync = readdirSync; -fs.existsSync = existsSync; -fs.readFileSync = readFileSync; -fs.writeFileSync = writeFileSync; -fs.mkdirSync = mkdirSync; -fs.rmSync = rmSync; -fs.copyFileSync = copyFileSync; -fs.copySync = copySync; -fs.createFileSync = createFileSync; -fs.__createMockFiles = createMockFiles; -fs.__resetAllMocks = resetAllMocks; - -export default fs; -// module.exports = fs; diff --git a/packages/system-api/__mocks__/node-cron.ts b/packages/system-api/__mocks__/node-cron.ts deleted file mode 100644 index bc1fe4cf..00000000 --- a/packages/system-api/__mocks__/node-cron.ts +++ /dev/null @@ -1,11 +0,0 @@ -const cron: { - schedule: typeof schedule; -} = jest.genMockFromModule('node-cron'); - -const schedule = (scd: string, cb: () => void) => { - cb(); -}; - -cron.schedule = schedule; - -module.exports = cron; diff --git a/packages/system-api/__mocks__/redis.ts b/packages/system-api/__mocks__/redis.ts deleted file mode 100644 index 8faced36..00000000 --- a/packages/system-api/__mocks__/redis.ts +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - createClient: jest.fn(() => { - const values = new Map(); - const expirations = new Map(); - return { - isOpen: true, - connect: jest.fn(), - set: (key: string, value: string, exp: number) => { - values.set(key, value); - expirations.set(key, exp); - }, - get: (key: string) => values.get(key), - quit: jest.fn(), - del: (key: string) => values.delete(key), - ttl: (key: string) => expirations.get(key), - }; - }), -}; diff --git a/packages/system-api/esbuild.js b/packages/system-api/esbuild.js deleted file mode 100644 index cf08519d..00000000 --- a/packages/system-api/esbuild.js +++ /dev/null @@ -1,85 +0,0 @@ -/* eslint-disable @typescript-eslint/no-var-requires */ -const esbuild = require('esbuild'); -const path = require('path'); - -const commandArgs = process.argv.slice(2); - -const nativeNodeModulesPlugin = () => ({ - name: 'native-node-modules', - setup(build) { - // If a ".node" file is imported within a module in the "file" namespace, resolve - // it to an absolute path and put it into the "node-file" virtual namespace. - build.onResolve({ filter: /\.node$/, namespace: 'file' }, (args) => { - const resolvedId = require.resolve(args.path, { - paths: [args.resolveDir], - }); - if (resolvedId.endsWith('.node')) { - return { - path: resolvedId, - namespace: 'node-file', - }; - } - return { - path: resolvedId, - }; - }); - - // Files in the "node-file" virtual namespace call "require()" on the - // path from esbuild of the ".node" file in the output directory. - build.onLoad({ filter: /.*/, namespace: 'node-file' }, (args) => ({ - contents: ` - import path from ${JSON.stringify(args.path)} - try { module.exports = require(path) } - catch {} - `, - resolveDir: path.dirname(args.path), - })); - - // If a ".node" file is imported within a module in the "node-file" namespace, put - // it in the "file" namespace where esbuild's default loading behavior will handle - // it. It is already an absolute path since we resolved it to one above. - build.onResolve({ filter: /\.node$/, namespace: 'node-file' }, (args) => ({ - path: args.path, - namespace: 'file', - })); - - // Tell esbuild's default loading behavior to use the "file" loader for - // these ".node" files. - const opts = build.initialOptions; - opts.loader = opts.loader || {}; - opts.loader['.node'] = 'file'; - }, -}); - -/* Bundle server */ -esbuild.build({ - entryPoints: ['./src/server.ts'], - bundle: true, - platform: 'node', - target: 'node18', - external: ['pg-native'], - sourcemap: commandArgs.includes('--sourcemap'), - watch: commandArgs.includes('--watch'), - outfile: 'dist/server.bundle.js', - plugins: [nativeNodeModulesPlugin()], - logLevel: 'info', - minifySyntax: true, - minifyWhitespace: true, -}); - -const glob = require('glob'); - -/* Migrations */ -const migrationFiles = glob.sync('./src/config/migrations/*.ts'); - -esbuild.buildSync({ - entryPoints: migrationFiles, - platform: 'node', - target: 'node18', - minify: false, - outdir: 'dist/config/migrations', - logLevel: 'info', - format: 'cjs', - minifySyntax: true, - minifyWhitespace: true, -}); diff --git a/packages/system-api/jest.config.js b/packages/system-api/jest.config.js deleted file mode 100644 index f5825e3f..00000000 --- a/packages/system-api/jest.config.js +++ /dev/null @@ -1,21 +0,0 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { - preset: 'ts-jest', - verbose: true, - testEnvironment: 'node', - testMatch: ['**/__tests__/**/*.test.ts'], - setupFiles: ['/src/test/dotenv-config.ts'], - setupFilesAfterEnv: ['/src/test/jest-setup.ts'], - collectCoverage: true, - collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/migrations/**/*.{ts,tsx}', '!**/src/config/**/*.{ts,tsx}', '!**/__tests__/**'], - passWithNoTests: true, - transform: { - '^.+\\.graphql$': 'graphql-import-node/jest', - }, - globals: { - // NODE_ENV: 'test', - 'ts-jest': { - isolatedModules: true, - }, - }, -}; diff --git a/packages/system-api/ormconfig.ts b/packages/system-api/ormconfig.ts deleted file mode 100644 index 57808289..00000000 --- a/packages/system-api/ormconfig.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { DataSource } from 'typeorm'; - -export const connectionSource = new DataSource({ - type: 'postgres', - host: 'localhost', - port: 5432, - username: 'tipi', - password: 'postgres', - database: 'tipi', - logging: true, - synchronize: false, - entities: ['src/modules/**/*.entity.ts'], -}); diff --git a/packages/system-api/package.json b/packages/system-api/package.json deleted file mode 100644 index 868b9c52..00000000 --- a/packages/system-api/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "system-api", - "version": "0.8.1", - "description": "", - "exports": "./dist/server.bundle.js", - "engines": { - "node": ">=14.16" - }, - "scripts": { - "clean": "rimraf dist", - "lint": "eslint . --ext .ts", - "lint:fix": "eslint . --ext .ts --fix", - "test": "jest --colors", - "test:watch": "jest --watch", - "build": "rm -rf dist && node esbuild.js", - "build:watch": "node esbuild.js --sourcemap --watch", - "start:dev": "NODE_ENV=development && nodemon --watch dist dist/server.bundle.js", - "dev": "concurrently \"npm run build:watch\" \"npm run start:dev\"", - "start": "NODE_ENV=production && node dist/server.bundle.js", - "start:test": "NODE_ENV=test && node dist/server.bundle.js", - "typeorm": "typeorm-ts-node-commonjs -d ./ormconfig.ts", - "migration:generate": "npm run typeorm migration:generate" - }, - "author": "", - "license": "ISC", - "dependencies": { - "apollo-server-core": "^3.10.0", - "apollo-server-express": "^3.9.0", - "argon2": "^0.29.1", - "axios": "^0.26.1", - "class-validator": "^0.13.2", - "cors": "^2.8.5", - "dotenv": "^16.0.0", - "express": "^4.17.3", - "fs-extra": "^10.1.0", - "graphql": "^15.3.0", - "graphql-type-json": "^0.3.2", - "http": "0.0.1-security", - "jsonwebtoken": "^8.5.1", - "node-cron": "^3.0.1", - "pg": "^8.7.3", - "redis": "^4.3.1", - "reflect-metadata": "^0.1.13", - "semver": "^7.3.7", - "type-graphql": "^1.1.1", - "typeorm": "^0.3.11", - "uuid": "^9.0.0", - "validator": "^13.7.0", - "winston": "^3.7.2", - "zod": "^3.19.1" - }, - "devDependencies": { - "@faker-js/faker": "^7.3.0", - "@types/cors": "^2.8.12", - "@types/express": "^4.17.13", - "@types/fs-extra": "^9.0.13", - "@types/jest": "^27.5.0", - "@types/jsonwebtoken": "^8.5.9", - "@types/node": "17.0.31", - "@types/node-cron": "^3.0.2", - "@types/pg": "^8.6.5", - "@types/semver": "^7.3.12", - "@types/uuid": "^8.3.4", - "@types/validator": "^13.7.2", - "@typescript-eslint/eslint-plugin": "^5.18.0", - "@typescript-eslint/parser": "^5.22.0", - "concurrently": "^7.1.0", - "esbuild": "^0.16.6", - "eslint": "^8.13.0", - "eslint-config-airbnb-typescript": "^17.0.0", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-prettier": "^4.0.0", - "glob": "^8.0.3", - "graphql-import-node": "^0.0.5", - "jest": "^28.1.0", - "nodemon": "^2.0.15", - "prettier": "2.6.2", - "rimraf": "^3.0.2", - "ts-jest": "^28.0.2", - "ts-node": "^10.9.1", - "typescript": "4.6.4" - } -} diff --git a/packages/system-api/src/config/constants/constants.ts b/packages/system-api/src/config/constants/constants.ts deleted file mode 100755 index accc6de8..00000000 --- a/packages/system-api/src/config/constants/constants.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* eslint-disable @typescript-eslint/naming-convention */ -const __prod__ = process.env.NODE_ENV === 'production'; - -const COOKIE_MAX_AGE = 1000 * 60 * 60 * 24 * 365 * 10; - -export { __prod__, COOKIE_MAX_AGE }; diff --git a/packages/system-api/src/config/datasource.ts b/packages/system-api/src/config/datasource.ts deleted file mode 100644 index 0e2f1418..00000000 --- a/packages/system-api/src/config/datasource.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as dotenv from 'dotenv'; -import { DataSource } from 'typeorm'; -import App from '../modules/apps/app.entity'; -import User from '../modules/auth/user.entity'; -import Update from '../modules/system/update.entity'; -import { __prod__ } from './constants/constants'; - -if (process.env.NODE_ENV !== 'production') { - dotenv.config({ path: '.env.dev' }); -} else { - dotenv.config({ path: '.env' }); -} -const { POSTGRES_DBNAME = '', POSTGRES_HOST = '', POSTGRES_USERNAME = '', POSTGRES_PASSWORD = '' } = process.env; - -export default new DataSource({ - type: 'postgres', - host: POSTGRES_HOST, - database: POSTGRES_DBNAME, - username: POSTGRES_USERNAME, - password: POSTGRES_PASSWORD, - port: 5432, - logging: !__prod__, - synchronize: false, - entities: [App, User, Update], - migrations: [`${process.cwd()}/dist/config/migrations/*.js`], -}); diff --git a/packages/system-api/src/config/logger/apollo.logger.ts b/packages/system-api/src/config/logger/apollo.logger.ts deleted file mode 100644 index 670d95ab..00000000 --- a/packages/system-api/src/config/logger/apollo.logger.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* eslint-disable require-await */ -import { PluginDefinition } from 'apollo-server-core'; -import { __prod__ } from '../constants/constants'; -import logger from './logger'; - -const ApolloLogs: PluginDefinition = { - requestDidStart: async () => ({ - async didEncounterErrors(errors) { - if (!__prod__) { - logger.error(JSON.stringify(errors.errors)); - } - }, - }), -}; - -export { ApolloLogs }; diff --git a/packages/system-api/src/config/migrations/1657299198975-Initial.ts b/packages/system-api/src/config/migrations/1657299198975-Initial.ts deleted file mode 100644 index 1a9317a0..00000000 --- a/packages/system-api/src/config/migrations/1657299198975-Initial.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* eslint-disable max-len */ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class Initial1657299198975 implements MigrationInterface { - name = 'Initial1657299198975'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query('CREATE TYPE "public"."update_status_enum" AS ENUM(\'FAILED\', \'SUCCESS\')'); - await queryRunner.query( - 'CREATE TABLE "update" ("id" SERIAL NOT NULL, "name" character varying NOT NULL, "status" "public"."update_status_enum" NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "UQ_6e7d7ecccdc972caa0ad33cb014" UNIQUE ("name"), CONSTRAINT "PK_575f77a0576d6293bc1cb752847" PRIMARY KEY ("id"))', - ); - await queryRunner.query( - 'CREATE TABLE "user" ("id" SERIAL NOT NULL, "username" character varying NOT NULL, "password" character varying NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "UQ_78a916df40e02a9deb1c4b75edb" UNIQUE ("username"), CONSTRAINT "PK_cace4a159ff9f2512dd42373760" PRIMARY KEY ("id"))', - ); - await queryRunner.query("CREATE TYPE \"public\".\"app_status_enum\" AS ENUM('running', 'stopped', 'installing', 'uninstalling', 'stopping', 'starting', 'missing')"); - await queryRunner.query( - 'CREATE TABLE "app" ("id" character varying NOT NULL, "status" "public"."app_status_enum" NOT NULL DEFAULT \'stopped\', "lastOpened" TIMESTAMP WITH TIME ZONE DEFAULT now(), "numOpened" integer NOT NULL DEFAULT \'0\', "config" jsonb NOT NULL, "createdAt" TIMESTAMP NOT NULL DEFAULT now(), "updatedAt" TIMESTAMP NOT NULL DEFAULT now(), CONSTRAINT "UQ_9478629fc093d229df09e560aea" UNIQUE ("id"), CONSTRAINT "PK_9478629fc093d229df09e560aea" PRIMARY KEY ("id"))', - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query('DROP TABLE "app"'); - await queryRunner.query('DROP TYPE "public"."app_status_enum"'); - await queryRunner.query('DROP TABLE "user"'); - await queryRunner.query('DROP TABLE "update"'); - await queryRunner.query('DROP TYPE "public"."update_status_enum"'); - } -} diff --git a/packages/system-api/src/config/migrations/1659645508713-AppVersion.ts b/packages/system-api/src/config/migrations/1659645508713-AppVersion.ts deleted file mode 100644 index 91ccdc40..00000000 --- a/packages/system-api/src/config/migrations/1659645508713-AppVersion.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class AppVersion1659645508713 implements MigrationInterface { - name = 'AppVersion1659645508713'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query('ALTER TABLE "app" ADD "version" integer DEFAULT \'0\''); - // populate all apps with a version - await queryRunner.query('UPDATE "app" SET "version" = \'1\''); - // add NOT NULL constraint - await queryRunner.query('ALTER TABLE "app" ALTER COLUMN "version" SET NOT NULL'); - - await queryRunner.query('ALTER TABLE "app" ADD CONSTRAINT "UQ_9478629fc093d229df09e560aea" UNIQUE ("id")'); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query('ALTER TABLE "app" DROP CONSTRAINT "UQ_9478629fc093d229df09e560aea"'); - await queryRunner.query('ALTER TABLE "app" DROP COLUMN "version"'); - } -} diff --git a/packages/system-api/src/config/migrations/1660071627328-AppStatusUpdating.ts b/packages/system-api/src/config/migrations/1660071627328-AppStatusUpdating.ts deleted file mode 100644 index 0cf3ff3d..00000000 --- a/packages/system-api/src/config/migrations/1660071627328-AppStatusUpdating.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class AppStatusUpdating1660071627328 implements MigrationInterface { - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query('ALTER TYPE "public"."app_status_enum" ADD VALUE \'updating\''); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query('ALTER TYPE "public"."app_status_enum" DROP VALUE \'updating\''); - } -} diff --git a/packages/system-api/src/config/migrations/1662036689477-AppExposedDomain.ts b/packages/system-api/src/config/migrations/1662036689477-AppExposedDomain.ts deleted file mode 100644 index 9d7e9729..00000000 --- a/packages/system-api/src/config/migrations/1662036689477-AppExposedDomain.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class AppExposedDomain1662036689477 implements MigrationInterface { - name = 'AppExposedDomain1662036689477'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query('ALTER TABLE "app" ADD "exposed" boolean DEFAULT false'); - // populate all apps with exposed to false - await queryRunner.query('UPDATE "app" SET "exposed" = false'); - // add NOT NULL constraint - await queryRunner.query('ALTER TABLE "app" ALTER COLUMN "exposed" SET NOT NULL'); - - await queryRunner.query('ALTER TABLE "app" ADD "domain" character varying'); - await queryRunner.query('ALTER TABLE "app" ALTER COLUMN "version" SET DEFAULT \'1\''); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query('ALTER TABLE "app" ALTER COLUMN "version" SET DEFAULT \'0\''); - await queryRunner.query('ALTER TABLE "app" DROP COLUMN "domain"'); - await queryRunner.query('ALTER TABLE "app" DROP COLUMN "exposed"'); - } -} diff --git a/packages/system-api/src/config/types.ts b/packages/system-api/src/config/types.ts deleted file mode 100644 index 9072bfb7..00000000 --- a/packages/system-api/src/config/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export type Maybe = T | null | undefined; - -export interface IUser { - email: string; - name: string; - password: string; -} diff --git a/packages/system-api/src/constants/constants.ts b/packages/system-api/src/constants/constants.ts deleted file mode 100644 index 931dcd2a..00000000 --- a/packages/system-api/src/constants/constants.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { getConfig } from '../core/config/TipiConfig'; - -export const APP_DATA_FOLDER = 'app-data'; -export const APPS_FOLDER = 'apps'; -export const isProd = getConfig().NODE_ENV === 'production'; diff --git a/packages/system-api/src/core/config/TipiConfig.ts b/packages/system-api/src/core/config/TipiConfig.ts deleted file mode 100644 index 790e2e79..00000000 --- a/packages/system-api/src/core/config/TipiConfig.ts +++ /dev/null @@ -1,132 +0,0 @@ -import { z } from 'zod'; -import * as dotenv from 'dotenv'; -import fs from 'fs-extra'; -import { readJsonFile } from '../../modules/fs/fs.helpers'; -import { AppSupportedArchitecturesEnum } from '../../modules/apps/apps.types'; - -if (process.env.NODE_ENV !== 'production') { - dotenv.config({ path: '.env.dev' }); -} else { - dotenv.config({ path: '.env' }); -} -const { - LOGS_FOLDER = '/app/logs', - LOGS_APP = 'app.log', - LOGS_ERROR = 'error.log', - NODE_ENV = 'development', - JWT_SECRET = '', - INTERNAL_IP = '', - TIPI_VERSION = '', - NGINX_PORT = '80', - APPS_REPO_ID = '', - APPS_REPO_URL = '', - DOMAIN = '', - STORAGE_PATH = '/runtipi', - REDIS_HOST = 'tipi-redis', - ARCHITECTURE = 'amd64', -} = process.env; - -const configSchema = z.object({ - NODE_ENV: z.union([z.literal('development'), z.literal('production'), z.literal('test')]), - REDIS_HOST: z.string(), - status: z.union([z.literal('RUNNING'), z.literal('UPDATING'), z.literal('RESTARTING')]), - architecture: z.nativeEnum(AppSupportedArchitecturesEnum), - logs: z.object({ - LOGS_FOLDER: z.string(), - LOGS_APP: z.string(), - LOGS_ERROR: z.string(), - }), - dnsIp: z.string(), - rootFolder: z.string(), - internalIp: z.string(), - version: z.string(), - jwtSecret: z.string(), - clientUrls: z.array(z.string()), - appsRepoId: z.string(), - appsRepoUrl: z.string(), - domain: z.string(), - storagePath: z.string(), -}); - -class Config { - private static instance: Config; - - private config: z.infer; - - constructor() { - const envConfig: z.infer = { - logs: { - LOGS_FOLDER, - LOGS_APP, - LOGS_ERROR, - }, - REDIS_HOST, - NODE_ENV: NODE_ENV as z.infer['NODE_ENV'], - architecture: ARCHITECTURE as z.infer['architecture'], - rootFolder: '/runtipi', - internalIp: INTERNAL_IP, - version: TIPI_VERSION, - jwtSecret: JWT_SECRET, - clientUrls: ['http://localhost:3000', `http://${INTERNAL_IP}`, `http://${INTERNAL_IP}:${NGINX_PORT}`, `http://${INTERNAL_IP}:3000`, DOMAIN && `https://${DOMAIN}`].filter(Boolean), - appsRepoId: APPS_REPO_ID, - appsRepoUrl: APPS_REPO_URL, - domain: DOMAIN, - dnsIp: '9.9.9.9', - status: 'RUNNING', - storagePath: STORAGE_PATH, - }; - - const parsed = configSchema.parse({ - ...envConfig, - }); - - this.config = parsed; - } - - public static getInstance(): Config { - if (!Config.instance) { - Config.instance = new Config(); - } - return Config.instance; - } - - public getConfig() { - return this.config; - } - - public applyJsonConfig() { - const fileConfig = readJsonFile('/runtipi/state/settings.json') || {}; - - const parsed = configSchema.parse({ - ...this.config, - ...(fileConfig as object), - }); - - this.config = parsed; - } - - public setConfig(key: T, value: z.infer[T], writeFile = false) { - const newConf: z.infer = { ...this.getConfig() }; - newConf[key] = value; - - this.config = configSchema.parse(newConf); - - if (writeFile) { - const currentJsonConf = readJsonFile('/runtipi/state/settings.json') || {}; - const parsedConf = configSchema.partial().parse(currentJsonConf); - - parsedConf[key] = value; - const parsed = configSchema.partial().parse(parsedConf); - - fs.writeFileSync('/runtipi/state/settings.json', JSON.stringify(parsed)); - } - } -} - -export const setConfig = (key: T, value: z.infer[T], writeFile = false) => { - Config.getInstance().setConfig(key, value, writeFile); -}; - -export const getConfig = () => Config.getInstance().getConfig(); - -export const applyJsonConfig = () => Config.getInstance().applyJsonConfig(); diff --git a/packages/system-api/src/core/config/__tests__/EventDispatcher.test.ts b/packages/system-api/src/core/config/__tests__/EventDispatcher.test.ts deleted file mode 100644 index a6fcd572..00000000 --- a/packages/system-api/src/core/config/__tests__/EventDispatcher.test.ts +++ /dev/null @@ -1,200 +0,0 @@ -import fs from 'fs-extra'; -import { eventDispatcher, EventTypes } from '../EventDispatcher'; - -const WATCH_FILE = '/runtipi/state/events'; - -jest.mock('fs-extra'); - -// eslint-disable-next-line no-promise-executor-return -const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); - -beforeEach(() => { - eventDispatcher.clear(); - fs.writeFileSync(WATCH_FILE, ''); - fs.writeFileSync('/app/logs/123.log', 'test'); -}); - -describe('EventDispatcher - dispatchEvent', () => { - it('should dispatch an event', () => { - const event = eventDispatcher.dispatchEvent(EventTypes.APP); - expect(event.id).toBeDefined(); - }); - - it('should dispatch an event with args', () => { - const event = eventDispatcher.dispatchEvent(EventTypes.APP, ['--help']); - expect(event.id).toBeDefined(); - }); - - it('Should put events into queue', async () => { - eventDispatcher.dispatchEvent(EventTypes.APP, ['--help']); - eventDispatcher.dispatchEvent(EventTypes.APP, ['--help']); - - // @ts-ignore - const { queue } = eventDispatcher; - - expect(queue.length).toBe(2); - }); - - it('Should put first event into lock after 1 sec', async () => { - eventDispatcher.dispatchEvent(EventTypes.APP, ['--help']); - eventDispatcher.dispatchEvent(EventTypes.UPDATE, ['--help']); - - // @ts-ignore - const { queue } = eventDispatcher; - - await wait(1050); - - // @ts-ignore - const { lock } = eventDispatcher; - - expect(queue.length).toBe(2); - expect(lock).toBeDefined(); - expect(lock?.type).toBe(EventTypes.APP); - }); - - it('Should clear event once its status is success', async () => { - // @ts-ignore - jest.spyOn(eventDispatcher, 'getEventStatus').mockReturnValueOnce('success'); - eventDispatcher.dispatchEvent(EventTypes.APP, ['--help']); - - await wait(1050); - - // @ts-ignore - const { queue } = eventDispatcher; - - expect(queue.length).toBe(0); - }); - - it('Should clear event once its status is error', async () => { - // @ts-ignore - jest.spyOn(eventDispatcher, 'getEventStatus').mockReturnValueOnce('error'); - eventDispatcher.dispatchEvent(EventTypes.APP, ['--help']); - - await wait(1050); - - // @ts-ignore - const { queue } = eventDispatcher; - - expect(queue.length).toBe(0); - }); -}); - -describe('EventDispatcher - dispatchEventAsync', () => { - it('Should dispatch an event and wait for it to finish', async () => { - // @ts-ignore - jest.spyOn(eventDispatcher, 'getEventStatus').mockReturnValueOnce('success'); - const { success } = await eventDispatcher.dispatchEventAsync(EventTypes.APP, ['--help']); - - expect(success).toBe(true); - }); - - it('Should dispatch an event and wait for it to finish with error', async () => { - // @ts-ignore - jest.spyOn(eventDispatcher, 'getEventStatus').mockReturnValueOnce('error'); - - const { success } = await eventDispatcher.dispatchEventAsync(EventTypes.APP, ['--help']); - - expect(success).toBe(false); - }); -}); - -describe('EventDispatcher - runEvent', () => { - it('Should do nothing if there is a lock', async () => { - // @ts-ignore - eventDispatcher.lock = { id: '123', type: EventTypes.APP, args: [] }; - - // @ts-ignore - await eventDispatcher.runEvent(); - - // @ts-ignore - const file = fs.readFileSync(WATCH_FILE, 'utf8'); - - expect(file).toBe(''); - }); - - it('Should do nothing if there is no event in queue', async () => { - // @ts-ignore - await eventDispatcher.runEvent(); - - // @ts-ignore - const file = fs.readFileSync(WATCH_FILE, 'utf8'); - - expect(file).toBe(''); - }); -}); - -describe('EventDispatcher - getEventStatus', () => { - it('Should return success if event is not in the queue', async () => { - // @ts-ignore - eventDispatcher.queue = []; - // @ts-ignore - const status = eventDispatcher.getEventStatus('123'); - - expect(status).toBe('success'); - }); - - it('Should return error if event is expired', async () => { - const dateFiveMinutesAgo = new Date(new Date().getTime() - 5 * 60 * 10000); - // @ts-ignore - eventDispatcher.queue = [{ id: '123', type: EventTypes.APP, args: [], creationDate: dateFiveMinutesAgo }]; - // @ts-ignore - const status = eventDispatcher.getEventStatus('123'); - - expect(status).toBe('error'); - }); - - it('Should be waiting if line is not found in the file', async () => { - // @ts-ignore - eventDispatcher.queue = [{ id: '123', type: EventTypes.APP, args: [], creationDate: new Date() }]; - // @ts-ignore - const status = eventDispatcher.getEventStatus('123'); - - expect(status).toBe('waiting'); - }); -}); - -describe('EventDispatcher - clearEvent', () => { - it('Should clear event', async () => { - const event = { id: '123', type: EventTypes.APP, args: [], creationDate: new Date() }; - // @ts-ignore - eventDispatcher.queue = [event]; - // @ts-ignore - eventDispatcher.clearEvent(event); - - // @ts-ignore - const { queue } = eventDispatcher; - - expect(queue.length).toBe(0); - }); -}); - -describe('EventDispatcher - pollQueue', () => { - it('Should not create a new interval if one already exists', async () => { - // @ts-ignore - eventDispatcher.interval = 123; - // @ts-ignore - const id = eventDispatcher.pollQueue(); - // @ts-ignore - const { interval } = eventDispatcher; - - expect(interval).toBe(123); - expect(id).toBe(123); - - clearInterval(interval); - clearInterval(id); - }); -}); - -describe('EventDispatcher - collectLockStatusAndClean', () => { - it('Should do nothing if there is no lock', async () => { - // @ts-ignore - eventDispatcher.lock = null; - // @ts-ignore - eventDispatcher.collectLockStatusAndClean(); - - // @ts-ignore - const { lock } = eventDispatcher; - - expect(lock).toBeNull(); - }); -}); diff --git a/packages/system-api/src/core/jobs/__tests__/jobs.test.ts b/packages/system-api/src/core/jobs/__tests__/jobs.test.ts deleted file mode 100644 index e5510416..00000000 --- a/packages/system-api/src/core/jobs/__tests__/jobs.test.ts +++ /dev/null @@ -1,37 +0,0 @@ -import cron from 'node-cron'; -import { getConfig } from '../../config/TipiConfig'; -import startJobs from '../jobs'; -import { eventDispatcher, EventTypes } from '../../config/EventDispatcher'; - -jest.mock('node-cron'); -jest.mock('child_process'); - -beforeEach(async () => { - jest.resetModules(); - jest.resetAllMocks(); -}); - -describe('Test: startJobs', () => { - it('Should start cron jobs', () => { - const spy = jest.spyOn(cron, 'schedule'); - - startJobs(); - expect(spy).toHaveBeenCalled(); - expect(spy).toHaveBeenCalledWith('*/30 * * * *', expect.any(Function)); - spy.mockRestore(); - }); - - it('Should update apps repo on cron trigger', () => { - const spy = jest.spyOn(eventDispatcher, 'dispatchEvent'); - - // Act - startJobs(); - - // Assert - expect(spy.mock.calls.length).toBe(2); - expect(spy.mock.calls[0]).toEqual([EventTypes.UPDATE_REPO, [getConfig().appsRepoUrl]]); - expect(spy.mock.calls[1]).toEqual([EventTypes.SYSTEM_INFO, []]); - - spy.mockRestore(); - }); -}); diff --git a/packages/system-api/src/core/jobs/jobs.ts b/packages/system-api/src/core/jobs/jobs.ts deleted file mode 100644 index c4cc8520..00000000 --- a/packages/system-api/src/core/jobs/jobs.ts +++ /dev/null @@ -1,20 +0,0 @@ -import cron from 'node-cron'; -import logger from '../../config/logger/logger'; -import { getConfig } from '../config/TipiConfig'; -import { eventDispatcher, EventTypes } from '../config/EventDispatcher'; - -const startJobs = () => { - logger.info('Starting cron jobs...'); - - // Every 30 minutes - cron.schedule('*/30 * * * *', async () => { - eventDispatcher.dispatchEvent(EventTypes.UPDATE_REPO, [getConfig().appsRepoUrl]); - }); - - // every minute - cron.schedule('* * * * *', () => { - eventDispatcher.dispatchEvent(EventTypes.SYSTEM_INFO, []); - }); -}; - -export default startJobs; diff --git a/packages/system-api/src/core/middlewares/__tests__/sessionMiddleware.test.ts b/packages/system-api/src/core/middlewares/__tests__/sessionMiddleware.test.ts deleted file mode 100644 index ebafc265..00000000 --- a/packages/system-api/src/core/middlewares/__tests__/sessionMiddleware.test.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { faker } from '@faker-js/faker'; -import jwt from 'jsonwebtoken'; -import { Request, Response } from 'express'; -import TipiCache from '../../../config/TipiCache'; -import { getConfig } from '../../config/TipiConfig'; -import getSessionMiddleware from '../sessionMiddleware'; - -describe('SessionMiddleware', () => { - it('Should append session to request object if a valid token is present', async () => { - // Arrange - const session = faker.random.alphaNumeric(32); - const userId = faker.datatype.number(); - await TipiCache.set(session, userId.toString()); - const token = jwt.sign({ id: userId, session }, getConfig().jwtSecret); - const req = { - headers: { - authorization: `Bearer ${token}`, - }, - } as Request; - const next = jest.fn(); - const res = {} as Response; - - // Act - await getSessionMiddleware(req, res, next); - - // Assert - expect(req).toHaveProperty('session'); - expect(req.session).toHaveProperty('id'); - expect(req.session).toHaveProperty('userId'); - expect(req.session.id).toBe(session); - expect(req.session.userId).toBe(userId); - expect(next).toHaveBeenCalled(); - }); - - it('Should not append session to request object if a invalid token is present', async () => { - // Arrange - const session = faker.random.alphaNumeric(32); - const userId = faker.datatype.number(); - await TipiCache.set(session, userId.toString()); - const token = jwt.sign({ id: userId, session }, 'invalidSecret'); - const req = { - headers: { - authorization: `Bearer ${token}`, - }, - } as Request; - const next = jest.fn(); - const res = {} as Response; - - // Act - await getSessionMiddleware(req, res, next); - - // Assert - expect(req).toHaveProperty('session'); - expect(req.session).not.toHaveProperty('id'); - expect(req.session).not.toHaveProperty('userId'); - expect(next).toHaveBeenCalled(); - }); - - it('Should not append session to request object if a token is not present', async () => { - // Arrange - const req = { - headers: {}, - } as Request; - const next = jest.fn(); - const res = {} as Response; - - // Act - await getSessionMiddleware(req, res, next); - - // Assert - expect(req).toHaveProperty('session'); - expect(req.session).not.toHaveProperty('id'); - expect(req.session).not.toHaveProperty('userId'); - expect(next).toHaveBeenCalled(); - }); -}); diff --git a/packages/system-api/src/core/middlewares/authChecker.ts b/packages/system-api/src/core/middlewares/authChecker.ts deleted file mode 100644 index f48c4c33..00000000 --- a/packages/system-api/src/core/middlewares/authChecker.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { AuthChecker } from 'type-graphql'; -import User from '../../modules/auth/user.entity'; -import { MyContext } from '../../types'; - -export const customAuthChecker: AuthChecker = async ({ context }) => { - // here we can read the user from context - // and check his permission in the db against the `roles` argument - // that comes from the `@Authorized` decorator, eg. ["ADMIN", "MODERATOR"] - if (!context.req?.session?.userId) { - return false; - } - - const { userId } = context.req.session; - const user = await User.findOne({ where: { id: userId } }); - - if (!user) { - return false; - } - - return true; -}; diff --git a/packages/system-api/src/core/updates/__tests__/v040.test.ts b/packages/system-api/src/core/updates/__tests__/v040.test.ts deleted file mode 100644 index a9e19f20..00000000 --- a/packages/system-api/src/core/updates/__tests__/v040.test.ts +++ /dev/null @@ -1,181 +0,0 @@ -import { faker } from '@faker-js/faker'; -import fs from 'fs-extra'; -import { DataSource } from 'typeorm'; -import logger from '../../../config/logger/logger'; -import App from '../../../modules/apps/app.entity'; -import { AppInfo, AppStatusEnum } from '../../../modules/apps/apps.types'; -import { createApp } from '../../../modules/apps/__tests__/apps.factory'; -import User from '../../../modules/auth/user.entity'; -import Update, { UpdateStatusEnum } from '../../../modules/system/update.entity'; -import { setupConnection, teardownConnection } from '../../../test/connection'; -import { getConfig } from '../../config/TipiConfig'; -import { updateV040 } from '../v040'; - -jest.mock('fs'); - -let db: DataSource | null = null; -const TEST_SUITE = 'updatev040'; - -beforeAll(async () => { - db = await setupConnection(TEST_SUITE); -}); - -beforeEach(async () => { - jest.resetModules(); - jest.resetAllMocks(); - await App.clear(); - await Update.clear(); -}); - -afterAll(async () => { - await db?.destroy(); - await teardownConnection(TEST_SUITE); -}); - -const createAppState = (apps: string[]) => JSON.stringify({ installed: apps.join(' ') }); -const createUserState = (users: { email: string; password: string }[]) => JSON.stringify(users); - -describe('No state/apps.json', () => { - it('Should do nothing and create the update with status SUCCES', async () => { - await updateV040(); - - const update = await Update.findOne({ where: { name: 'v040' } }); - - expect(update).toBeDefined(); - expect(update?.status).toBe(UpdateStatusEnum.SUCCESS); - - const apps = await App.find(); - - expect(apps).toHaveLength(0); - }); - - it('Should not run the update if already done', async () => { - const spy = jest.spyOn(logger, 'info'); - - await updateV040(); - await updateV040(); - - expect(spy).toHaveBeenCalledTimes(1); - expect(spy).toHaveBeenCalledWith('Update v040 already applied'); - }); -}); - -describe('State/apps.json exists with no installed app', () => { - beforeEach(async () => { - const { MockFiles } = await createApp({}); - MockFiles[`${getConfig().rootFolder}/state/apps.json`] = createAppState([]); - // @ts-ignore - fs.__createMockFiles(MockFiles); - }); - - it('Should do nothing and create the update with status SUCCES', async () => { - await updateV040(); - const update = await Update.findOne({ where: { name: 'v040' } }); - - expect(update).toBeDefined(); - expect(update?.status).toBe(UpdateStatusEnum.SUCCESS); - - const apps = await App.find(); - expect(apps).toHaveLength(0); - }); - - it('Should delete state file after update', async () => { - await updateV040(); - expect(fs.existsSync('/runtipi/state/apps.json')).toBe(false); - }); -}); - -describe('State/apps.json exists with one installed app', () => { - let app1: AppInfo | null = null; - beforeEach(async () => { - const { MockFiles, appInfo } = await createApp({}); - app1 = appInfo; - MockFiles['/runtipi/state/apps.json'] = createAppState([appInfo.id]); - MockFiles[`/app/storage/app-data/${appInfo.id}`] = ''; - MockFiles[`/app/storage/app-data/${appInfo.id}/app.env`] = 'TEST=test\nAPP_PORT=3000\nTEST_FIELD=test'; - // @ts-ignore - fs.__createMockFiles(MockFiles); - }); - - it('Should create a new app and update', async () => { - await updateV040(); - - const app = await App.findOne({ where: { id: app1?.id } }); - const update = await Update.findOne({ where: { name: 'v040' } }); - - expect(app).toBeDefined(); - expect(app?.status).toBe(AppStatusEnum.STOPPED); - expect(update).toBeDefined(); - expect(update?.status).toBe('SUCCESS'); - }); - - it("Should correctly pick up app's variables from existing .env file", async () => { - await updateV040(); - const app = await App.findOne({ where: { id: app1?.id } }); - - expect(app?.config).toStrictEqual({ TEST_FIELD: 'test' }); - }); - - it('Should not try to migrate app if it already exists', async () => { - const { MockFiles, appInfo } = await createApp({ installed: true }); - app1 = appInfo; - MockFiles['/runtipi/state/apps.json'] = createAppState([appInfo.id]); - MockFiles[`/app/storage/app-data/${appInfo.id}`] = ''; - MockFiles[`/app/storage/app-data/${appInfo.id}/app.env`] = 'TEST=test\nAPP_PORT=3000\nTEST_FIELD=test'; - // @ts-ignore - fs.__createMockFiles(MockFiles); - - await updateV040(); - const spy = jest.spyOn(logger, 'info'); - - expect(spy).toHaveBeenCalledTimes(1); - expect(spy).toHaveBeenCalledWith('App already migrated'); - }); -}); - -describe('State/users.json exists with no user', () => { - beforeEach(async () => { - const { MockFiles } = await createApp({}); - MockFiles[`${getConfig().rootFolder}/state/users.json`] = createUserState([]); - // @ts-ignore - fs.__createMockFiles(MockFiles); - }); - - it('Should do nothing and create the update with status SUCCES', async () => { - await updateV040(); - const update = await Update.findOne({ where: { name: 'v040' } }); - - expect(update).toBeDefined(); - expect(update?.status).toBe(UpdateStatusEnum.SUCCESS); - - const apps = await App.find(); - expect(apps).toHaveLength(0); - }); - - it('Should delete state file after update', async () => { - await updateV040(); - expect(fs.existsSync('/runtipi/state/apps.json')).toBe(false); - }); -}); - -describe('State/users.json exists with one user', () => { - const email = faker.internet.email(); - - beforeEach(async () => { - const MockFiles: Record = {}; - MockFiles[`/runtipi/state/users.json`] = createUserState([{ email, password: faker.internet.password() }]); - // @ts-ignore - fs.__createMockFiles(MockFiles); - }); - - it('Should create a new user and update', async () => { - await updateV040(); - - const user = await User.findOne({ where: { username: email } }); - const update = await Update.findOne({ where: { name: 'v040' } }); - - expect(user).toBeDefined(); - expect(update).toBeDefined(); - expect(update?.status).toBe('SUCCESS'); - }); -}); diff --git a/packages/system-api/src/core/updates/recover-migrations.ts b/packages/system-api/src/core/updates/recover-migrations.ts deleted file mode 100644 index b59adf7e..00000000 --- a/packages/system-api/src/core/updates/recover-migrations.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { BaseEntity, DataSource, DeepPartial } from 'typeorm'; -import logger from '../../config/logger/logger'; -import App from '../../modules/apps/app.entity'; -import User from '../../modules/auth/user.entity'; -import Update from '../../modules/system/update.entity'; - -const createUser = async (user: DeepPartial): Promise => { - await User.create(user).save(); -}; - -const createApp = async (app: DeepPartial): Promise => { - await App.create(app).save(); -}; - -const createUpdate = async (update: DeepPartial): Promise => { - await Update.create(update).save(); -}; - -const recover = async (datasource: DataSource) => { - logger.info('Recovering broken database'); - - const queryRunner = datasource.createQueryRunner(); - const apps = await queryRunner.query('SELECT * FROM app'); - const users = await queryRunner.query('SELECT * FROM "user"'); - const updates = await queryRunner.query('SELECT * FROM update'); - - // drop database - await datasource.dropDatabase(); - - logger.info('running migrations'); - await datasource.runMigrations(); - - // recreate users - await Promise.all(users.map(createUser)); - - // create apps - await Promise.all(apps.map(createApp)); - - // create updates - await Promise.all(updates.map(createUpdate)); - - logger.info(`Users recovered ${users.length}`); - logger.info(`Apps recovered ${apps.length}`); - logger.info(`Updates recovered ${updates.length}`); - logger.info('Database fully recovered'); -}; - -export default recover; diff --git a/packages/system-api/src/core/updates/run.ts b/packages/system-api/src/core/updates/run.ts deleted file mode 100644 index 4742d19d..00000000 --- a/packages/system-api/src/core/updates/run.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { updateV040 } from './v040'; - -export const runUpdates = async (): Promise => { - // v040: Update to 0.4.0 - await updateV040(); -}; diff --git a/packages/system-api/src/core/updates/v040.ts b/packages/system-api/src/core/updates/v040.ts deleted file mode 100644 index c79192e4..00000000 --- a/packages/system-api/src/core/updates/v040.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { z } from 'zod'; -import logger from '../../config/logger/logger'; -import App from '../../modules/apps/app.entity'; -import { appInfoSchema } from '../../modules/apps/apps.helpers'; -import { AppStatusEnum } from '../../modules/apps/apps.types'; -import User from '../../modules/auth/user.entity'; -import { deleteFolder, fileExists, readFile, readJsonFile } from '../../modules/fs/fs.helpers'; -import Update, { UpdateStatusEnum } from '../../modules/system/update.entity'; -import { getConfig } from '../config/TipiConfig'; - -const appStateSchema = z.object({ installed: z.string().optional().default('') }); -const userStateSchema = z.object({ email: z.string(), password: z.string() }).array(); - -const UPDATE_NAME = 'v040'; - -const migrateApp = async (appId: string): Promise => { - const app = await App.findOne({ where: { id: appId } }); - - if (!app) { - const envFile = readFile(`/app/storage/app-data/${appId}/app.env`).toString(); - const envVars = envFile.split('\n'); - const envVarsMap = new Map(); - - envVars.forEach((envVar) => { - const [key, value] = envVar.split('='); - envVarsMap.set(key, value); - }); - - const form: Record = {}; - - const configFile = readJsonFile(`/runtipi/repos/${getConfig().appsRepoId}/apps/${appId}/config.json`); - const parsedConfig = appInfoSchema.safeParse(configFile); - - if (parsedConfig.success) { - parsedConfig.data.form_fields.forEach((field) => { - const envVar = field.env_variable; - const envVarValue = envVarsMap.get(envVar); - - if (envVarValue) { - form[field.env_variable] = envVarValue; - } - }); - - await App.create({ id: appId, status: AppStatusEnum.STOPPED, config: form }).save(); - } - } else { - logger.info('App already migrated'); - } -}; - -const migrateUser = async (user: { email: string; password: string }): Promise => { - await User.create({ username: user.email.trim().toLowerCase(), password: user.password }).save(); -}; - -export const updateV040 = async (): Promise => { - try { - const update = await Update.findOne({ where: { name: UPDATE_NAME } }); - - if (update) { - logger.info(`Update ${UPDATE_NAME} already applied`); - return; - } - - // Migrate apps - if (fileExists('/runtipi/state/apps.json')) { - const state = readJsonFile('/runtipi/state/apps.json'); - const parsedState = appStateSchema.safeParse(state); - - if (parsedState.success) { - const installed: string[] = parsedState.data.installed.split(' ').filter(Boolean); - await Promise.all(installed.map((appId) => migrateApp(appId))); - deleteFolder('/runtipi/state/apps.json'); - } - } - - // Migrate users - if (fileExists('/runtipi/state/users.json')) { - const state = readJsonFile('/runtipi/state/users.json'); - const parsedState = userStateSchema.safeParse(state); - - if (parsedState.success) { - await Promise.all(parsedState.data.map((user) => migrateUser(user))); - deleteFolder('/runtipi/state/users.json'); - } - } - - await Update.create({ name: UPDATE_NAME, status: UpdateStatusEnum.SUCCESS }).save(); - } catch (error) { - logger.error(error); - await Update.create({ name: UPDATE_NAME, status: UpdateStatusEnum.FAILED }).save(); - } -}; diff --git a/packages/system-api/src/declarations.d.ts b/packages/system-api/src/declarations.d.ts deleted file mode 100644 index 990c4609..00000000 --- a/packages/system-api/src/declarations.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -declare namespace Express { - interface Request { - session: { - userId?: number; - id?: string; - }; - [key: string]: unknown; - } -} diff --git a/packages/system-api/src/helpers/helpers.ts b/packages/system-api/src/helpers/helpers.ts deleted file mode 100644 index df3bc909..00000000 --- a/packages/system-api/src/helpers/helpers.ts +++ /dev/null @@ -1,5 +0,0 @@ -const objectKeys = (obj: T): (keyof T)[] => Object.keys(obj) as (keyof T)[]; - -export const notEmpty = (value: TValue | null | undefined): value is TValue => value !== null && value !== undefined; - -export default { objectKeys }; diff --git a/packages/system-api/src/modules/apps/__tests__/apps.resolver.test.ts b/packages/system-api/src/modules/apps/__tests__/apps.resolver.test.ts deleted file mode 100644 index fec9bee3..00000000 --- a/packages/system-api/src/modules/apps/__tests__/apps.resolver.test.ts +++ /dev/null @@ -1,513 +0,0 @@ -import { DataSource } from 'typeorm'; -import fs from 'fs-extra'; -import { faker } from '@faker-js/faker'; -import { setupConnection, teardownConnection } from '../../../test/connection'; -import { gcall } from '../../../test/gcall'; -import App from '../app.entity'; -import { getAppQuery, InstalledAppsQuery, listAppInfosQuery } from '../../../test/queries'; -import { createApp } from './apps.factory'; -import { AppInfo, AppStatusEnum, ListAppsResonse } from '../apps.types'; -import { createUser } from '../../auth/__tests__/user.factory'; -import User from '../../auth/user.entity'; -import { installAppMutation, startAppMutation, stopAppMutation, uninstallAppMutation, updateAppConfigMutation, updateAppMutation } from '../../../test/mutations'; -import EventDispatcher from '../../../core/config/EventDispatcher'; - -jest.mock('fs'); -jest.mock('child_process'); - -type TApp = App & { - info: AppInfo; -}; - -let db: DataSource | null = null; -const TEST_SUITE = 'appsresolver'; - -beforeAll(async () => { - db = await setupConnection(TEST_SUITE); -}); - -afterAll(async () => { - await db?.destroy(); - await teardownConnection(TEST_SUITE); -}); - -beforeEach(async () => { - jest.resetModules(); - jest.resetAllMocks(); - jest.restoreAllMocks(); - EventDispatcher.prototype.dispatchEventAsync = jest.fn().mockResolvedValue({ success: true }); - await App.clear(); - await User.clear(); -}); - -describe('ListAppsInfos', () => { - let app1: AppInfo; - - beforeEach(async () => { - const { MockFiles, appInfo } = await createApp({}); - app1 = appInfo; - // @ts-ignore - fs.__createMockFiles(MockFiles); - }); - - it('Can list apps', async () => { - const { data } = await gcall<{ listAppsInfo: ListAppsResonse }>({ source: listAppInfosQuery }); - - expect(data?.listAppsInfo.apps.length).toBe(1); - expect(data?.listAppsInfo.total).toBe(1); - - const app = data?.listAppsInfo.apps[0]; - - expect(app?.id).toBe(app1.id); - expect(app?.author).toBe(app1.author); - expect(app?.name).toBe(app1.name); - expect(app?.available).toBe(app1.available); - }); -}); - -describe('GetApp', () => { - let app1: AppInfo; - let app2: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({}); - const app2create = await createApp({ installed: true }); - app1 = app1create.appInfo; - app2 = app2create.appInfo; - // @ts-ignore - fs.__createMockFiles(Object.assign(app1create.MockFiles, app2create.MockFiles)); - }); - - it('Can get app', async () => { - const { data } = await gcall<{ getApp: TApp }>({ - source: getAppQuery, - variableValues: { id: app1.id }, - }); - - expect(data?.getApp.info.id).toBe(app1.id); - expect(data?.getApp.status).toBe(AppStatusEnum.MISSING.toUpperCase()); - - const { data: data2 } = await gcall<{ getApp: TApp }>({ - source: getAppQuery, - variableValues: { id: app2.id }, - }); - - expect(data2?.getApp.info.id).toBe(app2.id); - }); - - it("Should return null info if app doesn't exist", async () => { - const { data } = await gcall<{ getApp: TApp }>({ - source: getAppQuery, - variableValues: { id: 'not-existing' }, - }); - - expect(data?.getApp.info).toBeNull(); - expect(data?.getApp.status).toBe(AppStatusEnum.MISSING.toUpperCase()); - }); -}); - -describe('InstalledApps', () => { - let app1: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({ installed: true }); - app1 = app1create.appInfo; - // @ts-ignore - fs.__createMockFiles(app1create.MockFiles); - }); - - it('Can list installed apps', async () => { - const user = await createUser(); - - const { data } = await gcall<{ installedApps: TApp[] }>({ source: InstalledAppsQuery, userId: user.id }); - - expect(data?.installedApps.length).toBe(1); - - const app = data?.installedApps[0]; - - expect(app?.id).toBe(app1.id); - expect(app?.info.author).toBe(app1.author); - expect(app?.info.name).toBe(app1.name); - }); - - it("Should return an error if user doesn't exist", async () => { - const { data, errors } = await gcall<{ installedApps: TApp[] }>({ - source: InstalledAppsQuery, - userId: 1, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.installedApps).toBeUndefined(); - }); - - it('Should throw an error if no userId is provided', async () => { - const { data, errors } = await gcall<{ installedApps: TApp[] }>({ - source: InstalledAppsQuery, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.installedApps).toBeUndefined(); - }); -}); - -describe('InstallApp', () => { - let app1: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({}); - app1 = app1create.appInfo; - // @ts-ignore - fs.__createMockFiles(app1create.MockFiles); - }); - - it('Can install app', async () => { - const user = await createUser(); - - const { data } = await gcall<{ installApp: TApp }>({ - source: installAppMutation, - userId: user.id, - variableValues: { input: { id: app1.id, form: { TEST_FIELD: 'hello' }, exposed: false, domain: '' } }, - }); - - expect(data?.installApp.info.id).toBe(app1.id); - expect(data?.installApp.status).toBe(AppStatusEnum.RUNNING.toUpperCase()); - }); - - it("Should return an error if app doesn't exist", async () => { - const user = await createUser(); - - const { data, errors } = await gcall<{ installApp: TApp }>({ - source: installAppMutation, - userId: user.id, - variableValues: { input: { id: 'not-existing', form: { TEST_FIELD: 'hello' }, exposed: false, domain: '' } }, - }); - - expect(errors?.[0].message).toBe('App not-existing has invalid config.json file'); - expect(data?.installApp).toBeUndefined(); - }); - - it("Should throw an error if user doesn't exist", async () => { - const { data, errors } = await gcall<{ installApp: TApp }>({ - source: installAppMutation, - variableValues: { input: { id: app1.id, form: { TEST_FIELD: 'hello' }, exposed: false, domain: '' } }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.installApp).toBeUndefined(); - }); - - it('Should throw an error if no userId is provided', async () => { - const { data, errors } = await gcall<{ installApp: TApp }>({ - source: installAppMutation, - variableValues: { input: { id: app1.id, form: { TEST_FIELD: 'hello' }, exposed: false, domain: '' } }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.installApp).toBeUndefined(); - }); - - it('Should throw an error if a required field is missing in form', async () => { - const user = await createUser(); - - const { data, errors } = await gcall<{ installApp: TApp }>({ - source: installAppMutation, - userId: user.id, - variableValues: { input: { id: app1.id, form: {}, exposed: false, domain: '' } }, - }); - - expect(errors?.[0].message).toBe(`Variable ${app1.form_fields?.[0].env_variable} is required`); - expect(data?.installApp).toBeUndefined(); - }); -}); - -describe('StartApp', () => { - let app1: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({ status: AppStatusEnum.STOPPED, installed: true }); - app1 = app1create.appInfo; - // @ts-ignore - fs.__createMockFiles(app1create.MockFiles); - }); - - it('Can start app', async () => { - const user = await createUser(); - - const { data } = await gcall<{ startApp: TApp }>({ - source: startAppMutation, - userId: user.id, - variableValues: { id: app1.id }, - }); - - expect(data?.startApp.info.id).toBe(app1.id); - expect(data?.startApp.status).toBe(AppStatusEnum.RUNNING.toUpperCase()); - }); - - it("Should return an error if app doesn't exist", async () => { - const user = await createUser(); - - const { data, errors } = await gcall<{ startApp: TApp }>({ - source: startAppMutation, - userId: user.id, - variableValues: { id: 'not-existing' }, - }); - - expect(errors?.[0].message).toBe('App not-existing not found'); - expect(data?.startApp).toBeUndefined(); - }); - - it("Should throw an error if user doesn't exist", async () => { - const { data, errors } = await gcall<{ startApp: TApp }>({ - source: startAppMutation, - userId: 0, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.startApp).toBeUndefined(); - }); - - it('Should throw an error if no userId is provided', async () => { - const { data, errors } = await gcall<{ startApp: TApp }>({ - source: startAppMutation, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.startApp).toBeUndefined(); - }); -}); - -describe('StopApp', () => { - let app1: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({ status: AppStatusEnum.RUNNING, installed: true }); - app1 = app1create.appInfo; - // @ts-ignore - fs.__createMockFiles(app1create.MockFiles); - }); - - it('Can stop app', async () => { - const user = await createUser(); - - const { data } = await gcall<{ stopApp: TApp }>({ - source: stopAppMutation, - userId: user.id, - variableValues: { id: app1.id }, - }); - - expect(data?.stopApp.info.id).toBe(app1.id); - expect(data?.stopApp.status).toBe(AppStatusEnum.STOPPED.toUpperCase()); - }); - - it("Should return an error if app doesn't exist", async () => { - const user = await createUser(); - - const { data, errors } = await gcall<{ stopApp: TApp }>({ - source: stopAppMutation, - userId: user.id, - variableValues: { id: 'not-existing' }, - }); - - expect(errors?.[0].message).toBe('App not-existing not found'); - expect(data?.stopApp).toBeUndefined(); - }); - - it("Should throw an error if user doesn't exist", async () => { - const { data, errors } = await gcall<{ stopApp: TApp }>({ - source: stopAppMutation, - userId: 0, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.stopApp).toBeUndefined(); - }); - - it('Should throw an error if no userId is provided', async () => { - const { data, errors } = await gcall<{ stopApp: TApp }>({ - source: stopAppMutation, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.stopApp).toBeUndefined(); - }); -}); - -describe('UninstallApp', () => { - let app1: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({ status: AppStatusEnum.STOPPED, installed: true }); - app1 = app1create.appInfo; - // @ts-ignore - fs.__createMockFiles(app1create.MockFiles); - }); - - it('Should uninstall app', async () => { - const user = await createUser(); - - const { data } = await gcall<{ uninstallApp: TApp }>({ - source: uninstallAppMutation, - userId: user.id, - variableValues: { id: app1.id }, - }); - - expect(data?.uninstallApp.info.id).toBe(app1.id); - expect(data?.uninstallApp.status).toBe(AppStatusEnum.MISSING.toUpperCase()); - }); - - it("Should return an error if app doesn't exist", async () => { - const user = await createUser(); - - const { data, errors } = await gcall<{ uninstallApp: TApp }>({ - source: uninstallAppMutation, - userId: user.id, - variableValues: { id: 'not-existing' }, - }); - - expect(errors?.[0].message).toBe('App not-existing not found'); - expect(data?.uninstallApp).toBeUndefined(); - }); - - it("Should throw an error if user doesn't exist", async () => { - const { data, errors } = await gcall<{ uninstallApp: TApp }>({ - source: uninstallAppMutation, - userId: 0, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.uninstallApp).toBeUndefined(); - }); - - it('Should throw an error if no userId is provided', async () => { - const { data, errors } = await gcall<{ uninstallApp: TApp }>({ - source: uninstallAppMutation, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.uninstallApp).toBeUndefined(); - }); -}); - -describe('UpdateAppConfig', () => { - let app1: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({ status: AppStatusEnum.STOPPED, installed: true }); - app1 = app1create.appInfo; - // @ts-ignore - fs.__createMockFiles(app1create.MockFiles); - }); - - it('Should update app config', async () => { - const user = await createUser(); - - const word = faker.random.word(); - - const { data } = await gcall<{ updateAppConfig: TApp }>({ - source: updateAppConfigMutation, - userId: user.id, - variableValues: { input: { id: app1.id, form: { TEST_FIELD: word }, exposed: false, domain: '' } }, - }); - - expect(data?.updateAppConfig.info.id).toBe(app1.id); - expect(data?.updateAppConfig.config.TEST_FIELD).toBe(word); - }); - - it("Should return an error if app doesn't exist", async () => { - const user = await createUser(); - - const { data, errors } = await gcall<{ updateAppConfig: TApp }>({ - source: updateAppConfigMutation, - userId: user.id, - variableValues: { input: { id: 'not-existing', form: { TEST_FIELD: faker.random.word() }, exposed: false, domain: '' } }, - }); - - expect(errors?.[0].message).toBe('App not-existing not found'); - expect(data?.updateAppConfig).toBeUndefined(); - }); - - it("Should throw an error if user doesn't exist", async () => { - const { data, errors } = await gcall<{ updateAppConfig: TApp }>({ - source: updateAppConfigMutation, - userId: 0, - variableValues: { input: { id: app1.id, form: { TEST_FIELD: faker.random.word() }, exposed: false, domain: '' } }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.updateAppConfig).toBeUndefined(); - }); - - it('Should throw an error if no userId is provided', async () => { - const { data, errors } = await gcall<{ updateAppConfig: TApp }>({ - source: updateAppConfigMutation, - variableValues: { input: { id: app1.id, form: { TEST_FIELD: faker.random.word() }, exposed: false, domain: '' } }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.updateAppConfig).toBeUndefined(); - }); -}); - -describe('UpdateApp', () => { - let app1: AppInfo; - - beforeEach(async () => { - const app1create = await createApp({ status: AppStatusEnum.STOPPED, installed: true }); - app1 = app1create.appInfo; - // @ts-ignore - fs.__createMockFiles(app1create.MockFiles); - }); - - it('Should update app', async () => { - const user = await createUser(); - - const { data } = await gcall<{ updateApp: TApp }>({ - source: updateAppMutation, - userId: user.id, - variableValues: { id: app1.id }, - }); - - expect(data?.updateApp.info.id).toBe(app1.id); - expect(data?.updateApp.info.name).toBe(data?.updateApp.info.name); - }); - - it("Should return an error if app doesn't exist", async () => { - const user = await createUser(); - - const { data, errors } = await gcall<{ updateApp: TApp }>({ - source: updateAppMutation, - userId: user.id, - variableValues: { id: 'not-existing' }, - }); - - expect(errors?.[0].message).toBe('App not-existing not found'); - expect(data?.updateApp).toBeUndefined(); - }); - - it("Should throw an error if user doesn't exist", async () => { - const { data, errors } = await gcall<{ updateApp: TApp }>({ - source: updateAppMutation, - userId: 0, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.updateApp).toBeUndefined(); - }); - - it('Should throw an error if no userId is provided', async () => { - const { data, errors } = await gcall<{ updateApp: TApp }>({ - source: updateAppMutation, - variableValues: { id: app1.id }, - }); - - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.updateApp).toBeUndefined(); - }); -}); diff --git a/packages/system-api/src/modules/apps/app.entity.ts b/packages/system-api/src/modules/apps/app.entity.ts deleted file mode 100644 index 9f954cfc..00000000 --- a/packages/system-api/src/modules/apps/app.entity.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { GraphQLJSONObject } from 'graphql-type-json'; -import { Field, ObjectType, registerEnumType } from 'type-graphql'; -import { BaseEntity, Column, CreateDateColumn, Entity, UpdateDateColumn } from 'typeorm'; -import { getAppInfo, getUpdateInfo } from './apps.helpers'; -import { AppInfo, AppStatusEnum } from './apps.types'; - -registerEnumType(AppStatusEnum, { - name: 'AppStatusEnum', -}); - -@ObjectType() -class UpdateInfo { - @Field(() => Number) - current!: number; - - @Field(() => Number) - latest!: number; - - @Field(() => String, { nullable: true }) - dockerVersion?: string; -} - -@ObjectType() -@Entity() -class App extends BaseEntity { - @Field(() => String) - @Column({ type: 'varchar', primary: true, unique: true }) - id!: string; - - @Field(() => AppStatusEnum) - @Column({ type: 'enum', enum: AppStatusEnum, default: AppStatusEnum.STOPPED, nullable: false }) - status!: AppStatusEnum; - - @Field(() => Date) - @Column({ type: 'timestamptz', nullable: true, default: () => 'CURRENT_TIMESTAMP' }) - lastOpened!: Date; - - @Field(() => Number) - @Column({ type: 'integer', default: 0, nullable: false }) - numOpened!: number; - - @Field(() => GraphQLJSONObject) - @Column({ type: 'jsonb', nullable: false }) - config!: Record; - - @Field(() => Number, { nullable: true }) - @Column({ type: 'integer', default: 1, nullable: false }) - version!: number; - - @Field(() => Date) - @CreateDateColumn() - createdAt!: Date; - - @Field(() => Date) - @UpdateDateColumn() - updatedAt!: Date; - - @Field(() => Boolean) - @Column({ type: 'boolean', default: false }) - exposed!: boolean; - - @Field(() => String, { nullable: true }) - @Column({ type: 'varchar', nullable: true }) - domain?: string; - - @Field(() => AppInfo, { nullable: true }) - info(): AppInfo | null { - return getAppInfo(this.id, this.status); - } - - @Field(() => UpdateInfo, { nullable: true }) - updateInfo(): Promise { - return getUpdateInfo(this.id, this.version); - } -} - -export default App; diff --git a/packages/system-api/src/modules/apps/app.types.ts b/packages/system-api/src/modules/apps/app.types.ts deleted file mode 100644 index 5dc0f2a0..00000000 --- a/packages/system-api/src/modules/apps/app.types.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface AppEntityType { - id: string; - config: Record; - exposed: boolean; - domain?: string; -} diff --git a/packages/system-api/src/modules/apps/apps.helpers.ts b/packages/system-api/src/modules/apps/apps.helpers.ts deleted file mode 100644 index 37b8dcec..00000000 --- a/packages/system-api/src/modules/apps/apps.helpers.ts +++ /dev/null @@ -1,236 +0,0 @@ -import crypto from 'crypto'; -import fs from 'fs-extra'; -import { z } from 'zod'; -import { deleteFolder, fileExists, getSeed, readdirSync, readFile, readJsonFile, writeFile } from '../fs/fs.helpers'; -import { AppCategoriesEnum, AppInfo, AppStatusEnum, AppSupportedArchitecturesEnum, FieldTypes } from './apps.types'; -import logger from '../../config/logger/logger'; -import { getConfig } from '../../core/config/TipiConfig'; -import { AppEntityType } from './app.types'; -import { notEmpty } from '../../helpers/helpers'; - -const formFieldSchema = z.object({ - type: z.nativeEnum(FieldTypes), - label: z.string(), - placeholder: z.string().optional(), - max: z.number().optional(), - min: z.number().optional(), - hint: z.string().optional(), - required: z.boolean().optional().default(false), - env_variable: z.string(), -}); - -export const appInfoSchema = z.object({ - id: z.string(), - available: z.boolean(), - port: z.number().min(1).max(65535), - name: z.string(), - description: z.string().optional().default(''), - version: z.string().optional().default('latest'), - tipi_version: z.number(), - short_desc: z.string(), - author: z.string(), - source: z.string(), - website: z.string().optional(), - categories: z.nativeEnum(AppCategoriesEnum).array(), - url_suffix: z.string().optional(), - form_fields: z.array(formFieldSchema).optional().default([]), - https: z.boolean().optional().default(false), - exposable: z.boolean().optional().default(false), - no_gui: z.boolean().optional().default(false), - supported_architectures: z.nativeEnum(AppSupportedArchitecturesEnum).array().optional(), -}); - -export const checkAppRequirements = (appName: string) => { - const configFile = readJsonFile(`/runtipi/repos/${getConfig().appsRepoId}/apps/${appName}/config.json`); - const parsedConfig = appInfoSchema.safeParse(configFile); - - if (!parsedConfig.success) { - throw new Error(`App ${appName} has invalid config.json file`); - } - - if (parsedConfig.data.supported_architectures && !parsedConfig.data.supported_architectures.includes(getConfig().architecture)) { - throw new Error(`App ${appName} is not supported on this architecture`); - } - - return parsedConfig.data; -}; - -export const getEnvMap = (appName: string): Map => { - const envFile = readFile(`/app/storage/app-data/${appName}/app.env`).toString(); - const envVars = envFile.split('\n'); - const envVarsMap = new Map(); - - envVars.forEach((envVar) => { - const [key, value] = envVar.split('='); - envVarsMap.set(key, value); - }); - - return envVarsMap; -}; - -export const checkEnvFile = (appName: string) => { - const configFile = readJsonFile(`/runtipi/apps/${appName}/config.json`); - const parsedConfig = appInfoSchema.safeParse(configFile); - - if (!parsedConfig.success) { - throw new Error(`App ${appName} has invalid config.json file`); - } - - const envMap = getEnvMap(appName); - - parsedConfig.data.form_fields.forEach((field) => { - const envVar = field.env_variable; - const envVarValue = envMap.get(envVar); - - if (!envVarValue && field.required) { - throw new Error('New info needed. App config needs to be updated'); - } - }); -}; - -const getEntropy = (name: string, length: number) => { - const hash = crypto.createHash('sha256'); - hash.update(name + getSeed()); - return hash.digest('hex').substring(0, length); -}; - -export const generateEnvFile = (app: AppEntityType) => { - const configFile = readJsonFile(`/runtipi/apps/${app.id}/config.json`); - const parsedConfig = appInfoSchema.safeParse(configFile); - - if (!parsedConfig.success) { - throw new Error(`App ${app.id} has invalid config.json file`); - } - - const baseEnvFile = readFile('/runtipi/.env').toString(); - let envFile = `${baseEnvFile}\nAPP_PORT=${parsedConfig.data.port}\n`; - const envMap = getEnvMap(app.id); - - parsedConfig.data.form_fields.forEach((field) => { - const formValue = app.config[field.env_variable]; - const envVar = field.env_variable; - - if (formValue) { - envFile += `${envVar}=${formValue}\n`; - } else if (field.type === 'random') { - if (envMap.has(envVar)) { - envFile += `${envVar}=${envMap.get(envVar)}\n`; - } else { - const length = field.min || 32; - const randomString = getEntropy(field.env_variable, length); - - envFile += `${envVar}=${randomString}\n`; - } - } else if (field.required) { - throw new Error(`Variable ${field.env_variable} is required`); - } - }); - - if (app.exposed && app.domain) { - envFile += 'APP_EXPOSED=true\n'; - envFile += `APP_DOMAIN=${app.domain}\n`; - envFile += 'APP_PROTOCOL=https\n'; - } else { - envFile += `APP_DOMAIN=${getConfig().internalIp}:${parsedConfig.data.port}\n`; - } - - // Create app-data folder if it doesn't exist - if (!fs.existsSync(`/app/storage/app-data/${app.id}`)) { - fs.mkdirSync(`/app/storage/app-data/${app.id}`, { recursive: true }); - } - - writeFile(`/app/storage/app-data/${app.id}/app.env`, envFile); -}; - -export const getAvailableApps = async (): Promise => { - const appsDir = readdirSync(`/runtipi/repos/${getConfig().appsRepoId}/apps`); - - const skippedFiles = ['__tests__', 'docker-compose.common.yml', 'schema.json']; - - const apps = appsDir - .map((app) => { - if (skippedFiles.includes(app)) return null; - - const configFile = readJsonFile(`/runtipi/repos/${getConfig().appsRepoId}/apps/${app}/config.json`); - const parsedConfig = appInfoSchema.safeParse(configFile); - - if (!parsedConfig.success) { - logger.error(`App ${JSON.stringify(app)} has invalid config.json`); - } else if (parsedConfig.data.available) { - const description = readFile(`/runtipi/repos/${getConfig().appsRepoId}/apps/${parsedConfig.data.id}/metadata/description.md`); - return { ...parsedConfig.data, description }; - } - - return null; - }) - .filter(notEmpty); - - return apps; -}; - -export const getAppInfo = (id: string, status?: AppStatusEnum): AppInfo | null => { - try { - // Check if app is installed - const installed = typeof status !== 'undefined' && status !== AppStatusEnum.MISSING; - - if (installed && fileExists(`/runtipi/apps/${id}/config.json`)) { - const configFile = readJsonFile(`/runtipi/apps/${id}/config.json`); - const parsedConfig = appInfoSchema.safeParse(configFile); - - if (parsedConfig.success && parsedConfig.data.available) { - const description = readFile(`/runtipi/apps/${id}/metadata/description.md`); - return { ...parsedConfig.data, description }; - } - } - - if (fileExists(`/runtipi/repos/${getConfig().appsRepoId}/apps/${id}/config.json`)) { - const configFile = readJsonFile(`/runtipi/repos/${getConfig().appsRepoId}/apps/${id}/config.json`); - const parsedConfig = appInfoSchema.safeParse(configFile); - - if (parsedConfig.success && parsedConfig.data.available) { - const description = readFile(`/runtipi/repos/${getConfig().appsRepoId}/apps/${id}/metadata/description.md`); - return { ...parsedConfig.data, description }; - } - } - - return null; - } catch (e) { - logger.error(`Error loading app: ${id}`); - throw new Error(`Error loading app: ${id}`); - } -}; - -export const getUpdateInfo = async (id: string, version?: number) => { - const doesFileExist = fileExists(`/runtipi/repos/${getConfig().appsRepoId}/apps/${id}`); - - if (!doesFileExist || !version) { - return null; - } - - const repoConfig = readJsonFile(`/runtipi/repos/${getConfig().appsRepoId}/apps/${id}/config.json`); - const parsedConfig = appInfoSchema.safeParse(repoConfig); - - if (parsedConfig.success) { - return { - current: version || 0, - latest: parsedConfig.data.tipi_version, - dockerVersion: parsedConfig.data.version, - }; - } - - return null; -}; - -export const ensureAppFolder = (appName: string, cleanup = false) => { - if (cleanup && fileExists(`/runtipi/apps/${appName}`)) { - deleteFolder(`/runtipi/apps/${appName}`); - } - - if (!fileExists(`/runtipi/apps/${appName}/docker-compose.yml`)) { - if (fileExists(`/runtipi/apps/${appName}`)) { - deleteFolder(`/runtipi/apps/${appName}`); - } - // Copy from apps repo - fs.copySync(`/runtipi/repos/${getConfig().appsRepoId}/apps/${appName}`, `/runtipi/apps/${appName}`); - } -}; diff --git a/packages/system-api/src/modules/apps/apps.resolver.ts b/packages/system-api/src/modules/apps/apps.resolver.ts deleted file mode 100644 index c02a7b5e..00000000 --- a/packages/system-api/src/modules/apps/apps.resolver.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { Arg, Authorized, Mutation, Query, Resolver } from 'type-graphql'; -import AppsService from './apps.service'; -import { AppInputType, ListAppsResonse } from './apps.types'; -import App from './app.entity'; - -@Resolver() -export default class AppsResolver { - @Query(() => ListAppsResonse) - listAppsInfo(): Promise { - return AppsService.listApps(); - } - - @Query(() => App) - getApp(@Arg('id', () => String) id: string): Promise { - return AppsService.getApp(id); - } - - @Authorized() - @Query(() => [App]) - async installedApps(): Promise { - return App.find(); - } - - @Authorized() - @Mutation(() => App) - async installApp(@Arg('input', () => AppInputType) input: AppInputType): Promise { - const { id, form, exposed, domain } = input; - - return AppsService.installApp(id, form, exposed, domain); - } - - @Authorized() - @Mutation(() => App) - async startApp(@Arg('id', () => String) id: string): Promise { - return AppsService.startApp(id); - } - - @Authorized() - @Mutation(() => App) - async stopApp(@Arg('id', () => String) id: string): Promise { - return AppsService.stopApp(id); - } - - @Authorized() - @Mutation(() => App) - async uninstallApp(@Arg('id', () => String) id: string): Promise { - return AppsService.uninstallApp(id); - } - - @Authorized() - @Mutation(() => App) - async updateAppConfig(@Arg('input', () => AppInputType) input: AppInputType): Promise { - const { id, form, exposed, domain } = input; - - return AppsService.updateAppConfig(id, form, exposed, domain); - } - - @Authorized() - @Mutation(() => App) - async updateApp(@Arg('id', () => String) id: string): Promise { - return AppsService.updateApp(id); - } -} diff --git a/packages/system-api/src/modules/apps/apps.service.ts b/packages/system-api/src/modules/apps/apps.service.ts deleted file mode 100644 index 30ebc516..00000000 --- a/packages/system-api/src/modules/apps/apps.service.ts +++ /dev/null @@ -1,328 +0,0 @@ -import validator from 'validator'; -import { Not } from 'typeorm'; -import { createFolder, readJsonFile } from '../fs/fs.helpers'; -import { checkAppRequirements, checkEnvFile, generateEnvFile, getAvailableApps, ensureAppFolder, appInfoSchema } from './apps.helpers'; -import { AppInfo, AppStatusEnum, ListAppsResonse } from './apps.types'; -import App from './app.entity'; -import logger from '../../config/logger/logger'; -import { getConfig } from '../../core/config/TipiConfig'; -import { eventDispatcher, EventTypes } from '../../core/config/EventDispatcher'; - -const sortApps = (a: AppInfo, b: AppInfo) => a.name.localeCompare(b.name); -const filterApp = (app: AppInfo): boolean => { - if (!app.supported_architectures) { - return true; - } - - const arch = getConfig().architecture; - return app.supported_architectures.includes(arch); -}; - -const filterApps = (apps: AppInfo[]): AppInfo[] => apps.sort(sortApps).filter(filterApp); - -/** - * Start all apps which had the status RUNNING in the database - */ -const startAllApps = async (): Promise => { - const apps = await App.find({ where: { status: AppStatusEnum.RUNNING } }); - - await Promise.all( - apps.map(async (app) => { - // Regenerate env file - try { - ensureAppFolder(app.id); - generateEnvFile(app); - checkEnvFile(app.id); - - await App.update({ id: app.id }, { status: AppStatusEnum.STARTING }); - - eventDispatcher.dispatchEventAsync(EventTypes.APP, ['start', app.id]).then(({ success }) => { - if (success) { - App.update({ id: app.id }, { status: AppStatusEnum.RUNNING }); - } else { - App.update({ id: app.id }, { status: AppStatusEnum.STOPPED }); - } - }); - } catch (e) { - await App.update({ id: app.id }, { status: AppStatusEnum.STOPPED }); - logger.error(e); - } - }), - ); -}; - -/** - * Start an app - * @param appName - id of the app to start - * @returns - the app entity - */ -const startApp = async (appName: string): Promise => { - let app = await App.findOne({ where: { id: appName } }); - - if (!app) { - throw new Error(`App ${appName} not found`); - } - - ensureAppFolder(appName); - // Regenerate env file - generateEnvFile(app); - checkEnvFile(appName); - - await App.update({ id: appName }, { status: AppStatusEnum.STARTING }); - const { success, stdout } = await eventDispatcher.dispatchEventAsync(EventTypes.APP, ['start', app.id]); - - if (success) { - await App.update({ id: appName }, { status: AppStatusEnum.RUNNING }); - } else { - await App.update({ id: appName }, { status: AppStatusEnum.STOPPED }); - throw new Error(`App ${appName} failed to start\nstdout: ${stdout}`); - } - - app = (await App.findOne({ where: { id: appName } })) as App; - - return app; -}; - -/** - * Given parameters, create a new app and start it - * @param id - id of the app to stop - * @param form - form data - * @param exposed - if the app should be exposed - * @param domain - domain to expose the app on - * @returns - the app entity - */ -const installApp = async (id: string, form: Record, exposed?: boolean, domain?: string): Promise => { - let app = await App.findOne({ where: { id } }); - - if (app) { - await startApp(id); - } else { - if (exposed && !domain) { - throw new Error('Domain is required if app is exposed'); - } - - if (domain && !validator.isFQDN(domain)) { - throw new Error(`Domain ${domain} is not valid`); - } - - ensureAppFolder(id, true); - checkAppRequirements(id); - - // Create app folder - createFolder(`/app/storage/app-data/${id}`); - - const appInfo = readJsonFile(`/runtipi/apps/${id}/config.json`); - const parsedAppInfo = appInfoSchema.safeParse(appInfo); - - if (!parsedAppInfo.success) { - throw new Error(`App ${id} has invalid config.json file`); - } - - if (!parsedAppInfo.data.exposable && exposed) { - throw new Error(`App ${id} is not exposable`); - } - - if (exposed) { - const appsWithSameDomain = await App.find({ where: { domain, exposed: true } }); - if (appsWithSameDomain.length > 0) { - throw new Error(`Domain ${domain} already in use by app ${appsWithSameDomain[0].id}`); - } - } - - app = await App.create({ id, status: AppStatusEnum.INSTALLING, config: form, version: parsedAppInfo.data.tipi_version, exposed: exposed || false, domain }).save(); - - // Create env file - generateEnvFile(app); - - // Run script - const { success, stdout } = await eventDispatcher.dispatchEventAsync(EventTypes.APP, ['install', id]); - - if (!success) { - await App.delete({ id }); - throw new Error(`App ${id} failed to install\nstdout: ${stdout}`); - } - } - - await App.update({ id }, { status: AppStatusEnum.RUNNING }); - app = (await App.findOne({ where: { id } })) as App; - - return app; -}; - -/** - * List all apps available for installation - * @returns - list of all apps available - */ -const listApps = async (): Promise => { - const apps = await getAvailableApps(); - - const filteredApps = filterApps(apps); - - return { apps: filteredApps, total: apps.length }; -}; - -/** - * Given parameters, updates an app config and regenerates the env file - * @param id - id of the app to stop - * @param form - form data - * @param exposed - if the app should be exposed - * @param domain - domain to expose the app on - * @returns - the app entity - */ -const updateAppConfig = async (id: string, form: Record, exposed?: boolean, domain?: string): Promise => { - if (exposed && !domain) { - throw new Error('Domain is required if app is exposed'); - } - - if (domain && !validator.isFQDN(domain)) { - throw new Error(`Domain ${domain} is not valid`); - } - - let app = await App.findOne({ where: { id } }); - - if (!app) { - throw new Error(`App ${id} not found`); - } - - const appInfo = readJsonFile(`/runtipi/apps/${id}/config.json`); - const parsedAppInfo = appInfoSchema.safeParse(appInfo); - - if (!parsedAppInfo.success) { - throw new Error(`App ${id} has invalid config.json`); - } - - if (!parsedAppInfo.data.exposable && exposed) { - throw new Error(`App ${id} is not exposable`); - } - - if (exposed) { - const appsWithSameDomain = await App.find({ where: { domain, exposed: true, id: Not(id) } }); - if (appsWithSameDomain.length > 0) { - throw new Error(`Domain ${domain} already in use by app ${appsWithSameDomain[0].id}`); - } - } - - await App.update({ id }, { config: form, exposed: exposed || false, domain }); - app = (await App.findOne({ where: { id } })) as App; - - generateEnvFile(app); - app = (await App.findOne({ where: { id } })) as App; - - return app; -}; - -/** - * Stops an app - * @param id - id of the app to stop - * @returns - the app entity - */ -const stopApp = async (id: string): Promise => { - let app = await App.findOne({ where: { id } }); - - if (!app) { - throw new Error(`App ${id} not found`); - } - - ensureAppFolder(id); - generateEnvFile(app); - - // Run script - await App.update({ id }, { status: AppStatusEnum.STOPPING }); - - const { success, stdout } = await eventDispatcher.dispatchEventAsync(EventTypes.APP, ['stop', id]); - - if (success) { - await App.update({ id }, { status: AppStatusEnum.STOPPED }); - } else { - await App.update({ id }, { status: AppStatusEnum.RUNNING }); - throw new Error(`App ${id} failed to stop\nstdout: ${stdout}`); - } - - app = (await App.findOne({ where: { id } })) as App; - - return app; -}; - -/** - * Uninstalls an app - * @param id - id of the app to uninstall - * @returns - the app entity - */ -const uninstallApp = async (id: string): Promise => { - const app = await App.findOne({ where: { id } }); - - if (!app) { - throw new Error(`App ${id} not found`); - } - if (app.status === AppStatusEnum.RUNNING) { - await stopApp(id); - } - - ensureAppFolder(id); - generateEnvFile(app); - - await App.update({ id }, { status: AppStatusEnum.UNINSTALLING }); - - const { success, stdout } = await eventDispatcher.dispatchEventAsync(EventTypes.APP, ['uninstall', id]); - - if (!success) { - await App.update({ id }, { status: AppStatusEnum.STOPPED }); - throw new Error(`App ${id} failed to uninstall\nstdout: ${stdout}`); - } - - await App.delete({ id }); - - return { id, status: AppStatusEnum.MISSING, config: {} } as App; -}; - -/** - * Get an app entity - * @param id - id of the app - * @returns - the app entity - */ -const getApp = async (id: string): Promise => { - let app = await App.findOne({ where: { id } }); - - if (!app) { - app = { id, status: AppStatusEnum.MISSING, config: {}, exposed: false, domain: '' } as App; - } - - return app; -}; - -/** - * Updates an app to the latest version from repository - * @param id - id of the app - * @returns - the app entity - */ -const updateApp = async (id: string) => { - let app = await App.findOne({ where: { id } }); - - if (!app) { - throw new Error(`App ${id} not found`); - } - - ensureAppFolder(id); - generateEnvFile(app); - - await App.update({ id }, { status: AppStatusEnum.UPDATING }); - - const { success, stdout } = await eventDispatcher.dispatchEventAsync(EventTypes.APP, ['update', id]); - - if (success) { - const appInfo = readJsonFile(`/runtipi/apps/${id}/config.json`); - const parsedAppInfo = appInfoSchema.parse(appInfo); - - await App.update({ id }, { status: AppStatusEnum.RUNNING, version: parsedAppInfo.tipi_version }); - } else { - await App.update({ id }, { status: AppStatusEnum.STOPPED }); - throw new Error(`App ${id} failed to update\nstdout: ${stdout}`); - } - - await App.update({ id }, { status: AppStatusEnum.STOPPED }); - app = (await App.findOne({ where: { id } })) as App; - - return app; -}; - -export default { installApp, startApp, updateApp, listApps, getApp, updateAppConfig, stopApp, uninstallApp, startAllApps }; diff --git a/packages/system-api/src/modules/apps/apps.types.ts b/packages/system-api/src/modules/apps/apps.types.ts deleted file mode 100644 index c4e59b77..00000000 --- a/packages/system-api/src/modules/apps/apps.types.ts +++ /dev/null @@ -1,167 +0,0 @@ -import { Field, InputType, ObjectType, registerEnumType } from 'type-graphql'; -import { GraphQLJSONObject } from 'graphql-type-json'; - -export enum AppCategoriesEnum { - NETWORK = 'network', - MEDIA = 'media', - DEVELOPMENT = 'development', - AUTOMATION = 'automation', - SOCIAL = 'social', - UTILITIES = 'utilities', - PHOTOGRAPHY = 'photography', - SECURITY = 'security', - FEATURED = 'featured', - BOOKS = 'books', - DATA = 'data', - MUSIC = 'music', - FINANCE = 'finance', - GAMING = 'gaming', -} - -export enum FieldTypes { - text = 'text', - password = 'password', - email = 'email', - number = 'number', - fqdn = 'fqdn', - ip = 'ip', - fqdnip = 'fqdnip', - url = 'url', - random = 'random', -} - -export enum AppStatusEnum { - RUNNING = 'running', - STOPPED = 'stopped', - INSTALLING = 'installing', - UNINSTALLING = 'uninstalling', - STOPPING = 'stopping', - STARTING = 'starting', - MISSING = 'missing', - UPDATING = 'updating', -} - -export enum AppSupportedArchitecturesEnum { - ARM = 'arm', - ARM64 = 'arm64', - AMD64 = 'amd64', -} - -registerEnumType(AppCategoriesEnum, { - name: 'AppCategoriesEnum', -}); - -registerEnumType(FieldTypes, { - name: 'FieldTypesEnum', -}); - -registerEnumType(AppSupportedArchitecturesEnum, { - name: 'AppSupportedArchitecturesEnum', -}); - -@ObjectType() -class FormField { - @Field(() => FieldTypes) - type!: FieldTypes; - - @Field(() => String) - label!: string; - - @Field(() => Number, { nullable: true }) - max?: number; - - @Field(() => Number, { nullable: true }) - min?: number; - - @Field(() => String, { nullable: true }) - hint?: string; - - @Field(() => String, { nullable: true }) - placeholder?: string; - - @Field(() => Boolean, { nullable: true }) - required?: boolean; - - @Field(() => String) - env_variable!: string; -} - -@ObjectType() -class AppInfo { - @Field(() => String) - id!: string; - - @Field(() => Boolean) - available!: boolean; - - @Field(() => Number) - port!: number; - - @Field(() => String) - name!: string; - - @Field(() => String) - description!: string; - - @Field(() => String, { nullable: true }) - version?: string; - - @Field(() => Number, { nullable: false }) - tipi_version!: number; - - @Field(() => String) - short_desc!: string; - - @Field(() => String) - author!: string; - - @Field(() => String) - source!: string; - - @Field(() => [AppCategoriesEnum]) - categories!: AppCategoriesEnum[]; - - @Field(() => String, { nullable: true }) - url_suffix?: string; - - @Field(() => [FormField]) - form_fields?: FormField[]; - - @Field(() => Boolean, { nullable: true }) - https?: boolean; - - @Field(() => Boolean, { nullable: true }) - exposable?: boolean; - - @Field(() => Boolean, { nullable: true }) - no_gui?: boolean; - - @Field(() => [AppSupportedArchitecturesEnum], { nullable: true }) - supported_architectures?: AppSupportedArchitecturesEnum[]; -} - -@ObjectType() -class ListAppsResonse { - @Field(() => [AppInfo]) - apps!: AppInfo[]; - - @Field(() => Number) - total!: number; -} - -@InputType() -class AppInputType { - @Field(() => String) - id!: string; - - @Field(() => GraphQLJSONObject) - form!: Record; - - @Field(() => Boolean) - exposed!: boolean; - - @Field(() => String) - domain!: string; -} - -export { ListAppsResonse, AppInfo, AppInputType }; diff --git a/packages/system-api/src/modules/auth/__tests__/auth.resolver.test.ts b/packages/system-api/src/modules/auth/__tests__/auth.resolver.test.ts deleted file mode 100644 index e5953e63..00000000 --- a/packages/system-api/src/modules/auth/__tests__/auth.resolver.test.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { faker } from '@faker-js/faker'; -import jwt from 'jsonwebtoken'; -import { DataSource } from 'typeorm'; -import TipiCache from '../../../config/TipiCache'; -import { getConfig } from '../../../core/config/TipiConfig'; -import { setupConnection, teardownConnection } from '../../../test/connection'; -import { gcall } from '../../../test/gcall'; -import { loginMutation, registerMutation } from '../../../test/mutations'; -import { isConfiguredQuery, MeQuery, refreshTokenQuery } from '../../../test/queries'; -import { TokenResponse } from '../auth.types'; -import User from '../user.entity'; -import { createUser } from './user.factory'; - -jest.mock('redis'); - -let db: DataSource | null = null; -const TEST_SUITE = 'authresolver'; - -beforeAll(async () => { - db = await setupConnection(TEST_SUITE); -}); - -afterAll(async () => { - await db?.destroy(); - await teardownConnection(TEST_SUITE); -}); - -beforeEach(async () => { - jest.resetModules(); - jest.resetAllMocks(); - jest.restoreAllMocks(); - await User.clear(); -}); - -describe('Test: me', () => { - const email = faker.internet.email(); - let user1: User; - - beforeEach(async () => { - user1 = await createUser(email); - }); - - it('should return null if no user is logged in', async () => { - const { data } = await gcall<{ me: User }>({ - source: MeQuery, - }); - - expect(data?.me).toBeNull(); - }); - - it('should return the user if a user is logged in', async () => { - const { data } = await gcall<{ me: User | null }>({ - source: MeQuery, - userId: user1.id, - }); - - expect(data?.me?.username).toEqual(user1.username); - }); -}); - -describe('Test: register', () => { - const email = faker.internet.email(); - const password = faker.internet.password(); - - it('should register a user', async () => { - const { data } = await gcall<{ register: TokenResponse }>({ - source: registerMutation, - variableValues: { - input: { username: email, password }, - }, - }); - - expect(data?.register).toBeDefined(); - expect(data?.register?.token).toBeDefined(); - - const decoded = jwt.verify(data?.register?.token || '', getConfig().jwtSecret) as jwt.JwtPayload; - - expect(decoded).toBeDefined(); - expect(decoded).not.toBeNull(); - expect(decoded).toHaveProperty('id'); - expect(decoded).toHaveProperty('iat'); - expect(decoded).toHaveProperty('exp'); - expect(decoded).toHaveProperty('session'); - }); - - it('should not register a user with an existing username', async () => { - await createUser(email); - - const { errors } = await gcall<{ register: TokenResponse }>({ - source: registerMutation, - variableValues: { - input: { username: email, password }, - }, - }); - - expect(errors?.[0].message).toEqual('User already exists'); - }); - - it('should not register a user with a malformed email', async () => { - const { errors } = await gcall<{ register: TokenResponse }>({ - source: registerMutation, - variableValues: { - input: { username: 'not an email', password }, - }, - }); - - expect(errors?.[0].message).toEqual('Invalid username'); - }); -}); - -describe('Test: login', () => { - const email = faker.internet.email(); - - beforeEach(async () => { - await createUser(email); - }); - - it('should login a user', async () => { - const { data } = await gcall<{ login: TokenResponse }>({ - source: loginMutation, - variableValues: { - input: { username: email, password: 'password' }, - }, - }); - - const token = data?.login.token as string; - - expect(token).toBeDefined(); - - const decoded = jwt.verify(token, getConfig().jwtSecret) as { id: string; session: string }; - - const user = await User.findOne({ where: { username: email.toLowerCase().trim() } }); - - expect(decoded.id).toBeDefined(); - expect(user?.id).toEqual(decoded.id); - }); - - it('should not login a user with an incorrect password', async () => { - const { errors } = await gcall<{ login: TokenResponse }>({ - source: loginMutation, - variableValues: { - input: { username: email, password: 'wrong password' }, - }, - }); - - expect(errors?.[0].message).toEqual('Wrong password'); - }); - - it('should not login a user with a malformed email', async () => { - const { errors } = await gcall<{ login: TokenResponse }>({ - source: loginMutation, - variableValues: { - input: { username: 'not an email', password: 'password' }, - }, - }); - - expect(errors?.[0].message).toEqual('User not found'); - }); -}); - -describe('Test: logout', () => { - const email = faker.internet.email(); - let user1: User; - - beforeEach(async () => { - user1 = await createUser(email); - }); - - it('should logout a user', async () => { - const { data } = await gcall<{ logout: boolean }>({ - source: 'mutation { logout }', - userId: user1.id, - session: 'session', - }); - - expect(data?.logout).toBeTruthy(); - }); -}); - -describe('Test: isConfigured', () => { - it('should return false if no users exist', async () => { - const { data } = await gcall<{ isConfigured: boolean }>({ - source: isConfiguredQuery, - }); - - expect(data?.isConfigured).toBeFalsy(); - }); - - it('should return true if a user exists', async () => { - await createUser(faker.internet.email()); - - const { data } = await gcall<{ isConfigured: boolean }>({ - source: isConfiguredQuery, - }); - - expect(data?.isConfigured).toBeTruthy(); - }); -}); - -describe('Test: refreshToken', () => { - const email = faker.internet.email(); - let user1: User; - - beforeEach(async () => { - user1 = await createUser(email); - }); - - it('should return a new token', async () => { - // Arrange - const session = faker.datatype.uuid(); - await TipiCache.set(session, user1.id.toString()); - - // Act - const { data } = await gcall<{ refreshToken: TokenResponse }>({ - source: refreshTokenQuery, - userId: user1.id, - session, - }); - const decoded = jwt.verify(data?.refreshToken?.token || '', getConfig().jwtSecret) as jwt.JwtPayload; - - // Assert - expect(data?.refreshToken).toBeDefined(); - expect(data?.refreshToken?.token).toBeDefined(); - expect(decoded).toBeDefined(); - expect(decoded).not.toBeNull(); - expect(decoded).toHaveProperty('id'); - expect(decoded).toHaveProperty('iat'); - expect(decoded).toHaveProperty('exp'); - expect(decoded).toHaveProperty('session'); - - expect(decoded.id).toEqual(user1.id.toString()); - expect(decoded.session).not.toEqual(session); - }); -}); diff --git a/packages/system-api/src/modules/auth/__tests__/user.factory.ts b/packages/system-api/src/modules/auth/__tests__/user.factory.ts deleted file mode 100644 index 8da7a717..00000000 --- a/packages/system-api/src/modules/auth/__tests__/user.factory.ts +++ /dev/null @@ -1,16 +0,0 @@ -import * as argon2 from 'argon2'; -import { faker } from '@faker-js/faker'; -import User from '../user.entity'; - -const createUser = async (email?: string) => { - const hash = await argon2.hash('password'); - - const user = await User.create({ - username: email?.toLowerCase().trim() || faker.internet.email().toLowerCase().trim(), - password: hash, - }).save(); - - return user; -}; - -export { createUser }; diff --git a/packages/system-api/src/modules/auth/auth.resolver.ts b/packages/system-api/src/modules/auth/auth.resolver.ts deleted file mode 100644 index 47c49ff7..00000000 --- a/packages/system-api/src/modules/auth/auth.resolver.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { Arg, Ctx, Mutation, Query, Resolver } from 'type-graphql'; -import { MyContext } from '../../types'; -import { TokenResponse, UsernamePasswordInput } from './auth.types'; - -import AuthService from './auth.service'; -import User from './user.entity'; - -@Resolver() -export default class AuthResolver { - @Query(() => User, { nullable: true }) - async me(@Ctx() ctx: MyContext): Promise { - return AuthService.me(ctx.req?.session?.userId); - } - - @Mutation(() => TokenResponse) - async register(@Arg('input', () => UsernamePasswordInput) input: UsernamePasswordInput): Promise { - const { token } = await AuthService.register(input); - - return { token }; - } - - @Mutation(() => TokenResponse) - async login(@Arg('input', () => UsernamePasswordInput) input: UsernamePasswordInput): Promise { - const { token } = await AuthService.login(input); - - return { token }; - } - - @Mutation(() => Boolean) - async logout(@Ctx() { req }: MyContext): Promise { - if (req.session.id) { - await AuthService.logout(req.session?.id); - } - - req.session.userId = undefined; - req.session.id = undefined; - - return true; - } - - @Query(() => Boolean) - async isConfigured(): Promise { - const users = await User.find(); - - return users.length > 0; - } - - @Query(() => TokenResponse, { nullable: true }) - async refreshToken(@Ctx() { req }: MyContext): Promise { - const res = await AuthService.refreshToken(req.session?.id); - - return res; - } -} diff --git a/packages/system-api/src/modules/auth/auth.service.ts b/packages/system-api/src/modules/auth/auth.service.ts deleted file mode 100644 index 208f89e2..00000000 --- a/packages/system-api/src/modules/auth/auth.service.ts +++ /dev/null @@ -1,102 +0,0 @@ -import * as argon2 from 'argon2'; -import { v4 } from 'uuid'; -import jwt from 'jsonwebtoken'; -import validator from 'validator'; -import { getConfig } from '../../core/config/TipiConfig'; -import { TokenResponse, UsernamePasswordInput } from './auth.types'; -import User from './user.entity'; -import TipiCache from '../../config/TipiCache'; - -const login = async (input: UsernamePasswordInput): Promise => { - const { password, username } = input; - - const user = await User.findOne({ where: { username: username.trim().toLowerCase() } }); - - if (!user) { - throw new Error('User not found'); - } - - const isPasswordValid = await argon2.verify(user.password, password); - - if (!isPasswordValid) { - throw new Error('Wrong password'); - } - - const session = v4(); - const token = jwt.sign({ id: user.id, session }, getConfig().jwtSecret, { expiresIn: '7d' }); - - await TipiCache.set(session, user.id.toString()); - - return { token }; -}; - -const register = async (input: UsernamePasswordInput): Promise => { - const { password, username } = input; - const email = username.trim().toLowerCase(); - - if (!username || !password) { - throw new Error('Missing email or password'); - } - - if (username.length < 3 || !validator.isEmail(email)) { - throw new Error('Invalid username'); - } - - const user = await User.findOne({ where: { username: email } }); - - if (user) { - throw new Error('User already exists'); - } - - const hash = await argon2.hash(password); - const newUser = await User.create({ username: email, password: hash }).save(); - - const session = v4(); - const token = jwt.sign({ id: newUser.id, session }, getConfig().jwtSecret, { expiresIn: '1d' }); - - await TipiCache.set(session, newUser.id.toString()); - - return { token }; -}; - -const me = async (userId?: number): Promise => { - if (!userId) return null; - - const user = await User.findOne({ where: { id: userId } }); - - if (!user) return null; - - return user; -}; - -const logout = async (session: string): Promise => { - await TipiCache.del(session); - - return true; -}; - -const refreshToken = async (session?: string): Promise => { - if (!session) return null; - - const userId = await TipiCache.get(session); - if (!userId) return null; - - // Expire token in 6 seconds - await TipiCache.set(session, userId, 6); - - const newSession = v4(); - const token = jwt.sign({ id: userId, session: newSession }, getConfig().jwtSecret, { expiresIn: '1d' }); - await TipiCache.set(newSession, userId); - - return { token }; -}; - -const AuthService = { - login, - register, - me, - logout, - refreshToken, -}; - -export default AuthService; diff --git a/packages/system-api/src/modules/auth/auth.types.ts b/packages/system-api/src/modules/auth/auth.types.ts deleted file mode 100644 index fe46d355..00000000 --- a/packages/system-api/src/modules/auth/auth.types.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Field, InputType, ObjectType } from 'type-graphql'; - -@InputType() -class UsernamePasswordInput { - @Field(() => String) - username!: string; - - @Field(() => String) - password!: string; -} - -@ObjectType() -class TokenResponse { - @Field(() => String, { nullable: false }) - token!: string; -} - -export { UsernamePasswordInput, TokenResponse }; diff --git a/packages/system-api/src/modules/auth/user.entity.ts b/packages/system-api/src/modules/auth/user.entity.ts deleted file mode 100644 index 638c8a21..00000000 --- a/packages/system-api/src/modules/auth/user.entity.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* eslint-disable import/no-cycle */ -import { Field, ID, ObjectType } from 'type-graphql'; -import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'; -import { IsEmail } from 'class-validator'; - -@ObjectType() -@Entity() -export default class User extends BaseEntity { - @Field(() => ID) - @PrimaryGeneratedColumn() - id!: number; - - @Field(() => String) - @IsEmail() - @Column({ type: 'varchar', unique: true }) - username!: string; - - @Column({ type: 'varchar', nullable: false }) - password!: string; - - @Field(() => Date) - @CreateDateColumn() - createdAt!: Date; - - @Field(() => Date) - @UpdateDateColumn() - updatedAt!: Date; -} diff --git a/packages/system-api/src/modules/fs/__tests__/fs.helpers.test.ts b/packages/system-api/src/modules/fs/__tests__/fs.helpers.test.ts deleted file mode 100644 index 83ca17d1..00000000 --- a/packages/system-api/src/modules/fs/__tests__/fs.helpers.test.ts +++ /dev/null @@ -1,142 +0,0 @@ -import fs from 'fs-extra'; -import { readJsonFile, readFile, readdirSync, fileExists, writeFile, createFolder, deleteFolder, getSeed } from '../fs.helpers'; - -jest.mock('fs-extra'); - -beforeEach(() => { - // @ts-ignore - fs.__resetAllMocks(); -}); - -describe('Test: readJsonFile', () => { - it('should return the json file', () => { - // Arrange - const rawFile = '{"test": "test"}'; - const mockFiles = { - '/runtipi/test-file.json': rawFile, - }; - // @ts-ignore - fs.__createMockFiles(mockFiles); - - // Act - const file = readJsonFile('/runtipi/test-file.json'); - - // Assert - expect(file).toEqual({ test: 'test' }); - }); - - it('should return null if the file does not exist', () => { - expect(readJsonFile('/test')).toBeNull(); - }); - - it('Should return null if fs.readFile throws an error', () => { - // Arrange - // @ts-ignore - const spy = jest.spyOn(fs, 'readFileSync'); - spy.mockImplementation(() => { - throw new Error('Error'); - }); - - // Act - const file = readJsonFile('/test'); - - // Assert - expect(file).toBeNull(); - spy.mockRestore(); - }); -}); - -describe('Test: readFile', () => { - it('should return the file', () => { - const rawFile = 'test'; - const mockFiles = { - '/runtipi/test-file.txt': rawFile, - }; - - // @ts-ignore - fs.__createMockFiles(mockFiles); - - expect(readFile('/runtipi/test-file.txt')).toEqual('test'); - }); - - it('should return empty string if the file does not exist', () => { - expect(readFile('/test')).toEqual(''); - }); -}); - -describe('Test: readdirSync', () => { - it('should return the files', () => { - const mockFiles = { - '/runtipi/test/test-file.txt': 'test', - }; - - // @ts-ignore - fs.__createMockFiles(mockFiles); - - expect(readdirSync('/runtipi/test')).toEqual(['test-file.txt']); - }); - - it('should return empty array if the directory does not exist', () => { - expect(readdirSync('/test')).toEqual([]); - }); -}); - -describe('Test: fileExists', () => { - it('should return true if the file exists', () => { - const mockFiles = { - '/runtipi/test-file.txt': 'test', - }; - - // @ts-ignore - fs.__createMockFiles(mockFiles); - - expect(fileExists('/runtipi/test-file.txt')).toBeTruthy(); - }); - - it('should return false if the file does not exist', () => { - expect(fileExists('/test-file.txt')).toBeFalsy(); - }); -}); - -describe('Test: writeFile', () => { - it('should write the file', () => { - const spy = jest.spyOn(fs, 'writeFileSync'); - - writeFile('/runtipi/test-file.txt', 'test'); - - expect(spy).toHaveBeenCalledWith('/runtipi/test-file.txt', 'test'); - }); -}); - -describe('Test: createFolder', () => { - it('should create the folder', () => { - const spy = jest.spyOn(fs, 'mkdirSync'); - - createFolder('/test'); - - expect(spy).toHaveBeenCalledWith('/test', { recursive: true }); - }); -}); - -describe('Test: deleteFolder', () => { - it('should delete the folder', () => { - const spy = jest.spyOn(fs, 'rmSync'); - - deleteFolder('/test'); - - expect(spy).toHaveBeenCalledWith('/test', { recursive: true }); - }); -}); - -describe('Test: getSeed', () => { - it('should return the seed', () => { - const mockFiles = { - '/runtipi/state/seed': 'test', - }; - - // @ts-ignore - fs.__createMockFiles(mockFiles); - - expect(getSeed()).toEqual('test'); - }); -}); diff --git a/packages/system-api/src/modules/system/__tests__/system.resolver.test.ts b/packages/system-api/src/modules/system/__tests__/system.resolver.test.ts deleted file mode 100644 index 78458b3f..00000000 --- a/packages/system-api/src/modules/system/__tests__/system.resolver.test.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { faker } from '@faker-js/faker'; -import axios from 'axios'; -import fs from 'fs-extra'; -import { DataSource } from 'typeorm'; -import TipiCache from '../../../config/TipiCache'; -import * as TipiConfig from '../../../core/config/TipiConfig'; -import { setConfig } from '../../../core/config/TipiConfig'; -import { setupConnection, teardownConnection } from '../../../test/connection'; -import { gcall } from '../../../test/gcall'; -import { restartMutation, updateMutation } from '../../../test/mutations'; -import { systemInfoQuery, versionQuery } from '../../../test/queries'; -import User from '../../auth/user.entity'; -import { createUser } from '../../auth/__tests__/user.factory'; -import { SystemInfoResponse } from '../system.types'; -import EventDispatcher from '../../../core/config/EventDispatcher'; - -jest.mock('fs-extra'); -jest.mock('axios'); -jest.mock('redis'); - -beforeEach(async () => { - jest.resetModules(); - jest.resetAllMocks(); - jest.restoreAllMocks(); -}); - -let db: DataSource | null = null; -const TEST_SUITE = 'systemresolver'; -beforeAll(async () => { - db = await setupConnection(TEST_SUITE); -}); - -afterAll(async () => { - await db?.destroy(); - await teardownConnection(TEST_SUITE); -}); - -beforeEach(async () => { - jest.resetModules(); - jest.resetAllMocks(); - jest.restoreAllMocks(); - await User.clear(); -}); - -describe('Test: systemInfo', () => { - it('Should return correct system info from file', async () => { - const systemInfo = { - cpu: { load: 10 }, - memory: { available: 100, total: 1000, used: 900 }, - disk: { available: 100, total: 1000, used: 900 }, - }; - - const MockFiles = { - '/runtipi/state/system-info.json': JSON.stringify(systemInfo), - }; - - // @ts-ignore - fs.__createMockFiles(MockFiles); - - const { data } = await gcall<{ systemInfo: SystemInfoResponse }>({ source: systemInfoQuery }); - - expect(data?.systemInfo).toBeDefined(); - expect(data?.systemInfo.cpu).toBeDefined(); - expect(data?.systemInfo.cpu.load).toBe(systemInfo.cpu.load); - expect(data?.systemInfo.memory).toBeDefined(); - expect(data?.systemInfo.memory.available).toBe(systemInfo.memory.available); - expect(data?.systemInfo.memory.total).toBe(systemInfo.memory.total); - expect(data?.systemInfo.memory.used).toBe(systemInfo.memory.used); - expect(data?.systemInfo.disk).toBeDefined(); - expect(data?.systemInfo.disk.available).toBe(systemInfo.disk.available); - expect(data?.systemInfo.disk.total).toBe(systemInfo.disk.total); - expect(data?.systemInfo.disk.used).toBe(systemInfo.disk.used); - }); - - it('Should return 0 for missing values', async () => { - const systemInfo = { - cpu: {}, - memory: {}, - disk: {}, - }; - - const MockFiles = { - '/runtipi/state/system-info.json': JSON.stringify(systemInfo), - }; - - // @ts-ignore - fs.__createMockFiles(MockFiles); - - const { data } = await gcall<{ systemInfo: SystemInfoResponse }>({ source: systemInfoQuery }); - - expect(data?.systemInfo).toBeDefined(); - expect(data?.systemInfo.cpu).toBeDefined(); - expect(data?.systemInfo.cpu.load).toBe(0); - expect(data?.systemInfo.memory).toBeDefined(); - expect(data?.systemInfo.memory.available).toBe(0); - expect(data?.systemInfo.memory.total).toBe(0); - expect(data?.systemInfo.memory.used).toBe(0); - expect(data?.systemInfo.disk).toBeDefined(); - expect(data?.systemInfo.disk.available).toBe(0); - expect(data?.systemInfo.disk.total).toBe(0); - expect(data?.systemInfo.disk.used).toBe(0); - }); -}); - -describe('Test: getVersion', () => { - const current = `${faker.random.numeric(1)}.${faker.random.numeric(1)}.${faker.random.numeric()}`; - const latest = `${faker.random.numeric(1)}.${faker.random.numeric(1)}.${faker.random.numeric()}`; - beforeEach(async () => { - jest.spyOn(axios, 'get').mockResolvedValue({ - data: { name: `v${latest}` }, - }); - setConfig('version', current); - }); - - it('Should return correct version', async () => { - const { data } = await gcall<{ version: { current: string; latest?: string } }>({ - source: versionQuery, - }); - - expect(data?.version).toBeDefined(); - expect(data?.version.current).toBeDefined(); - expect(data?.version.latest).toBeDefined(); - expect(data?.version.current).toBe(current); - expect(data?.version.latest).toBe(latest); - }); -}); - -describe('Test: restart', () => { - beforeEach(async () => { - setConfig('status', 'RUNNING'); - setConfig('version', '1.0.0'); - TipiCache.set('latestVersion', '1.0.1'); - }); - - it('Should return true', async () => { - // Arrange - EventDispatcher.prototype.dispatchEventAsync = jest.fn().mockResolvedValueOnce({ success: true }); - - // Act - const user = await createUser(); - const { data } = await gcall<{ restart: boolean }>({ source: restartMutation, userId: user.id }); - - // Assert - expect(data?.restart).toBeDefined(); - expect(data?.restart).toBe(true); - }); - - it("Should return an error if user doesn't exist", async () => { - // Arrange - const { data, errors } = await gcall<{ restart: boolean }>({ - source: restartMutation, - userId: 1, - }); - - // Assert - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.restart).toBeUndefined(); - }); - - it('Should throw an error if no userId is not provided', async () => { - // Arrange - const { data, errors } = await gcall<{ restart: boolean }>({ source: restartMutation }); - - // Assert - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.restart).toBeUndefined(); - }); - - it('Should set app status to restarting', async () => { - // Arrange - EventDispatcher.prototype.dispatchEventAsync = jest.fn().mockResolvedValueOnce({ success: true }); - const spy = jest.spyOn(TipiConfig, 'setConfig'); - const user = await createUser(); - - // Act - await gcall<{ restart: boolean }>({ source: restartMutation, userId: user.id }); - - // Assert - expect(spy).toHaveBeenCalledTimes(1); - expect(spy).toHaveBeenNthCalledWith(1, 'status', 'RESTARTING'); - - spy.mockRestore(); - }); -}); - -describe('Test: update', () => { - beforeEach(async () => { - setConfig('status', 'RUNNING'); - setConfig('version', '1.0.0'); - TipiCache.set('latestVersion', '1.0.1'); - }); - - it('Should return true', async () => { - // Arrange - EventDispatcher.prototype.dispatchEventAsync = jest.fn().mockResolvedValueOnce({ success: true }); - const user = await createUser(); - - // Act - const { data } = await gcall<{ update: boolean }>({ source: updateMutation, userId: user.id }); - - // Assert - expect(data?.update).toBeDefined(); - expect(data?.update).toBe(true); - }); - - it("Should return an error if user doesn't exist", async () => { - // Act - const { data, errors } = await gcall<{ update: boolean }>({ source: updateMutation, userId: 1 }); - - // Assert - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.update).toBeUndefined(); - }); - - it('Should throw an error if no userId is not provided', async () => { - // Act - const { data, errors } = await gcall<{ update: boolean }>({ source: updateMutation }); - - // Assert - expect(errors?.[0].message).toBe('Access denied! You need to be authorized to perform this action!'); - expect(data?.update).toBeUndefined(); - }); - - it('Should set app status to updating', async () => { - // Arrange - EventDispatcher.prototype.dispatchEventAsync = jest.fn().mockResolvedValueOnce({ success: true }); - const spy = jest.spyOn(TipiConfig, 'setConfig'); - const user = await createUser(); - - // Act - await gcall<{ update: boolean }>({ source: updateMutation, userId: user.id }); - - // Assert - expect(spy).toHaveBeenCalledTimes(1); - expect(spy).toHaveBeenNthCalledWith(1, 'status', 'UPDATING'); - - spy.mockRestore(); - }); -}); diff --git a/packages/system-api/src/modules/system/system.controller.ts b/packages/system-api/src/modules/system/system.controller.ts deleted file mode 100644 index 2a727cbe..00000000 --- a/packages/system-api/src/modules/system/system.controller.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { Request, Response } from 'express'; -import { getConfig } from '../../core/config/TipiConfig'; - -const status = async (req: Request, res: Response) => { - res.status(200).json({ - status: getConfig().status, - }); -}; - -export default { - status, -}; diff --git a/packages/system-api/src/modules/system/system.resolver.ts b/packages/system-api/src/modules/system/system.resolver.ts deleted file mode 100644 index d4f0f09f..00000000 --- a/packages/system-api/src/modules/system/system.resolver.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { Authorized, Mutation, Query, Resolver } from 'type-graphql'; -import SystemService from './system.service'; -import { SystemInfoResponse, VersionResponse } from './system.types'; - -@Resolver() -export default class AuthResolver { - @Query(() => SystemInfoResponse, { nullable: true }) - async systemInfo(): Promise { - return SystemService.systemInfo(); - } - - @Query(() => VersionResponse) - async version(): Promise { - return SystemService.getVersion(); - } - - @Authorized() - @Mutation(() => Boolean) - async restart(): Promise { - return SystemService.restart(); - } - - @Authorized() - @Mutation(() => Boolean) - async update(): Promise { - return SystemService.update(); - } -} diff --git a/packages/system-api/src/modules/system/system.service.ts b/packages/system-api/src/modules/system/system.service.ts deleted file mode 100644 index 78fd9f7b..00000000 --- a/packages/system-api/src/modules/system/system.service.ts +++ /dev/null @@ -1,97 +0,0 @@ -import axios from 'axios'; -import z from 'zod'; -import semver from 'semver'; -import logger from '../../config/logger/logger'; -import TipiCache from '../../config/TipiCache'; -import { getConfig, setConfig } from '../../core/config/TipiConfig'; -import { readJsonFile } from '../fs/fs.helpers'; -import { eventDispatcher, EventTypes } from '../../core/config/EventDispatcher'; - -const systemInfoSchema = z.object({ - cpu: z.object({ - load: z.number().default(0), - }), - disk: z.object({ - total: z.number().default(0), - used: z.number().default(0), - available: z.number().default(0), - }), - memory: z.object({ - total: z.number().default(0), - available: z.number().default(0), - used: z.number().default(0), - }), -}); - -const systemInfo = (): z.infer => { - const info = systemInfoSchema.safeParse(readJsonFile('/runtipi/state/system-info.json')); - - if (!info.success) { - logger.error('Error parsing system info'); - logger.error(info.error); - throw new Error('Error parsing system info'); - } else { - return info.data; - } -}; - -const getVersion = async (): Promise<{ current: string; latest?: string }> => { - try { - let version = await TipiCache.get('latestVersion'); - - if (!version) { - const { data } = await axios.get('https://api.github.com/repos/meienberger/runtipi/releases/latest'); - - version = data.name.replace('v', ''); - await TipiCache.set('latestVersion', version?.replace('v', '') || '', 60 * 60); - } - - return { current: getConfig().version, latest: version?.replace('v', '') }; - } catch (e) { - logger.error(e); - return { current: getConfig().version, latest: undefined }; - } -}; - -const restart = async (): Promise => { - setConfig('status', 'RESTARTING'); - - eventDispatcher.dispatchEventAsync(EventTypes.RESTART); - - return true; -}; - -const update = async (): Promise => { - const { current, latest } = await getVersion(); - - if (!latest) { - throw new Error('Could not get latest version'); - } - - if (semver.gt(current, latest)) { - throw new Error('Current version is newer than latest version'); - } - - if (semver.eq(current, latest)) { - throw new Error('Current version is already up to date'); - } - - if (semver.major(current) !== semver.major(latest)) { - throw new Error('The major version has changed. Please update manually'); - } - - setConfig('status', 'UPDATING'); - - eventDispatcher.dispatchEventAsync(EventTypes.UPDATE); - - return true; -}; - -const SystemService = { - systemInfo, - getVersion, - restart, - update, -}; - -export default SystemService; diff --git a/packages/system-api/src/modules/system/system.types.ts b/packages/system-api/src/modules/system/system.types.ts deleted file mode 100644 index 4af99001..00000000 --- a/packages/system-api/src/modules/system/system.types.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { Field, ObjectType } from 'type-graphql'; - -@ObjectType() -class Cpu { - @Field(() => Number, { nullable: false }) - load!: number; -} - -@ObjectType() -class DiskMemory { - @Field(() => Number, { nullable: false }) - total!: number; - - @Field(() => Number, { nullable: false }) - used!: number; - - @Field(() => Number, { nullable: false }) - available!: number; -} - -@ObjectType() -class SystemInfoResponse { - @Field(() => Cpu, { nullable: false }) - cpu!: Cpu; - - @Field(() => DiskMemory, { nullable: false }) - disk!: DiskMemory; - - @Field(() => DiskMemory, { nullable: false }) - memory!: DiskMemory; -} - -@ObjectType() -class VersionResponse { - @Field(() => String, { nullable: false }) - current!: string; - - @Field(() => String, { nullable: true }) - latest?: string; -} - -export { SystemInfoResponse, VersionResponse }; diff --git a/packages/system-api/src/modules/system/update.entity.ts b/packages/system-api/src/modules/system/update.entity.ts deleted file mode 100644 index 3bf1e865..00000000 --- a/packages/system-api/src/modules/system/update.entity.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { BaseEntity, Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'; - -export enum UpdateStatusEnum { - FAILED = 'FAILED', - SUCCESS = 'SUCCESS', -} - -@Entity() -export default class Update extends BaseEntity { - @PrimaryGeneratedColumn() - id!: number; - - @Column({ type: 'varchar', unique: true, nullable: false }) - name!: string; - - @Column({ type: 'enum', enum: UpdateStatusEnum, nullable: false }) - status!: UpdateStatusEnum; - - @CreateDateColumn() - createdAt!: Date; - - @UpdateDateColumn() - updatedAt!: Date; -} diff --git a/packages/system-api/src/schema.ts b/packages/system-api/src/schema.ts deleted file mode 100644 index ba6e37e2..00000000 --- a/packages/system-api/src/schema.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { GraphQLSchema } from 'graphql'; -import { buildSchema } from 'type-graphql'; -import { customAuthChecker } from './core/middlewares/authChecker'; -import AppsResolver from './modules/apps/apps.resolver'; -import AuthResolver from './modules/auth/auth.resolver'; -import SystemResolver from './modules/system/system.resolver'; - -const createSchema = (): Promise => - buildSchema({ - resolvers: [AppsResolver, AuthResolver, SystemResolver], - validate: true, - authChecker: customAuthChecker, - }); - -export { createSchema }; diff --git a/packages/system-api/src/server.ts b/packages/system-api/src/server.ts deleted file mode 100644 index 7954d3ae..00000000 --- a/packages/system-api/src/server.ts +++ /dev/null @@ -1,103 +0,0 @@ -import 'reflect-metadata'; -import express from 'express'; -import { ApolloServerPluginLandingPageGraphQLPlayground as Playground } from 'apollo-server-core'; -import { ApolloServer } from 'apollo-server-express'; -import { createServer } from 'http'; -import { ZodError } from 'zod'; -import cors, { CorsOptions } from 'cors'; -import { createSchema } from './schema'; -import { ApolloLogs } from './config/logger/apollo.logger'; -import logger from './config/logger/logger'; -import getSessionMiddleware from './core/middlewares/sessionMiddleware'; -import { MyContext } from './types'; -import { __prod__ } from './config/constants/constants'; -import datasource from './config/datasource'; -import appsService from './modules/apps/apps.service'; -import { runUpdates } from './core/updates/run'; -import recover from './core/updates/recover-migrations'; -import startJobs from './core/jobs/jobs'; -import { applyJsonConfig, getConfig, setConfig } from './core/config/TipiConfig'; -import systemController from './modules/system/system.controller'; -import { eventDispatcher, EventTypes } from './core/config/EventDispatcher'; - -const applyCustomConfig = () => { - try { - applyJsonConfig(); - } catch (e) { - logger.error('Error applying settings.json config'); - if (e instanceof ZodError) { - Object.keys(e.flatten().fieldErrors).forEach((key) => { - logger.error(`Error in field ${key}`); - }); - } - } -}; - -const corsOptions: CorsOptions = { - credentials: false, - origin: (_, callback) => { - callback(null, true); - }, -}; - -const main = async () => { - try { - eventDispatcher.clear(); - applyCustomConfig(); - - const app = express(); - const port = 3001; - - app.use(cors(corsOptions)); - app.use(express.static(`${getConfig().rootFolder}/repos/${getConfig().appsRepoId}`)); - app.use('/status', systemController.status); - app.use(getSessionMiddleware); - - await datasource.initialize(); - - const schema = await createSchema(); - const httpServer = createServer(app); - const plugins = [ApolloLogs]; - - if (!__prod__) { - plugins.push(Playground()); - } - - const apolloServer = new ApolloServer({ - schema, - context: ({ req, res }): MyContext => ({ req, res }), - plugins, - cache: 'bounded', - }); - - await apolloServer.start(); - apolloServer.applyMiddleware({ app }); - - try { - await datasource.runMigrations(); - } catch (e) { - logger.error(e); - await recover(datasource); - } - - // Run migrations - await runUpdates(); - - httpServer.listen(port, async () => { - await eventDispatcher.dispatchEventAsync(EventTypes.CLONE_REPO, [getConfig().appsRepoUrl]); - await eventDispatcher.dispatchEventAsync(EventTypes.UPDATE_REPO, [getConfig().appsRepoUrl]); - - startJobs(); - setConfig('status', 'RUNNING'); - - // Start apps - appsService.startAllApps(); - logger.info(`Server running on port ${port} 🚀 Production => ${__prod__}`); - logger.info(`Config: ${JSON.stringify(getConfig(), null, 2)}`); - }); - } catch (error) { - logger.error(error); - } -}; - -main(); diff --git a/packages/system-api/src/test/connection.ts b/packages/system-api/src/test/connection.ts deleted file mode 100755 index a1348f29..00000000 --- a/packages/system-api/src/test/connection.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { DataSource } from 'typeorm'; -import pg from 'pg'; -import App from '../modules/apps/app.entity'; -import User from '../modules/auth/user.entity'; -import Update from '../modules/system/update.entity'; - -const HOST = 'localhost'; -const USER = 'postgres'; -const DATABASE = 'postgres'; -const PASSWORD = 'postgres'; -const PORT = 5433; - -const pgClient = new pg.Client({ - user: USER, - host: HOST, - database: DATABASE, - password: PASSWORD, - port: PORT, -}); - -export const setupConnection = async (testsuite: string): Promise => { - await pgClient.connect(); - - await pgClient.query(`DROP DATABASE IF EXISTS ${testsuite}`); - await pgClient.query(`CREATE DATABASE ${testsuite}`); - - const AppDataSource = new DataSource({ - name: 'default', - type: 'postgres', - host: HOST, - port: PORT, - username: USER, - password: PASSWORD, - database: testsuite, - dropSchema: true, - logging: false, - synchronize: true, - entities: [App, User, Update], - }); - - await AppDataSource.initialize(); - return AppDataSource; -}; - -export const teardownConnection = async (testsuite: string): Promise => { - await pgClient.query(`DROP DATABASE IF EXISTS ${testsuite}`); - await pgClient.end(); -}; diff --git a/packages/system-api/src/test/dotenv-config.ts b/packages/system-api/src/test/dotenv-config.ts deleted file mode 100644 index 8e1023d4..00000000 --- a/packages/system-api/src/test/dotenv-config.ts +++ /dev/null @@ -1,4 +0,0 @@ -import 'reflect-metadata'; -import * as dotenv from 'dotenv'; - -dotenv.config({ path: '.env.test' }); diff --git a/packages/system-api/src/test/gcall.ts b/packages/system-api/src/test/gcall.ts deleted file mode 100644 index 97cd7ec7..00000000 --- a/packages/system-api/src/test/gcall.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { ExecutionResult, graphql, GraphQLSchema } from 'graphql'; -import { Maybe } from 'type-graphql'; -import { createSchema } from '../schema'; - -interface Options { - source: string; - variableValues?: Maybe<{ - [key: string]: unknown; - }>; - userId?: number; - session?: string; -} - -let schema: GraphQLSchema | null = null; - -export const gcall = async ({ source, variableValues, userId, session }: Options): Promise> => { - if (!schema) { - schema = await createSchema(); - } - - return graphql({ - schema, - source, - variableValues, - contextValue: { req: { session: { userId, id: session } } }, - }) as unknown as ExecutionResult; -}; diff --git a/packages/system-api/src/test/jest-setup.ts b/packages/system-api/src/test/jest-setup.ts deleted file mode 100644 index e7f44460..00000000 --- a/packages/system-api/src/test/jest-setup.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { eventDispatcher } from '../core/config/EventDispatcher'; - -jest.mock('../config/logger/logger', () => ({ - error: jest.fn(), - info: jest.fn(), - warn: jest.fn(), -})); - -afterAll(() => { - eventDispatcher.clearInterval(); -}); diff --git a/packages/system-api/src/test/mutations/index.ts b/packages/system-api/src/test/mutations/index.ts deleted file mode 100644 index 8d5d4278..00000000 --- a/packages/system-api/src/test/mutations/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -import 'graphql-import-node'; -import { print } from 'graphql/language/printer'; - -import * as installApp from './installApp.graphql'; -import * as startApp from './startApp.graphql'; -import * as stopApp from './stopApp.graphql'; -import * as uninstallApp from './uninstallApp.graphql'; -import * as updateAppConfig from './updateAppConfig.graphql'; -import * as updateApp from './updateApp.graphql'; -import * as register from './register.graphql'; -import * as login from './login.graphql'; -import * as restart from './restart.graphql'; -import * as update from './update.graphql'; - -export const installAppMutation = print(installApp); -export const startAppMutation = print(startApp); -export const stopAppMutation = print(stopApp); -export const uninstallAppMutation = print(uninstallApp); -export const updateAppConfigMutation = print(updateAppConfig); -export const updateAppMutation = print(updateApp); -export const registerMutation = print(register); -export const loginMutation = print(login); -export const restartMutation = print(restart); -export const updateMutation = print(update); diff --git a/packages/system-api/src/test/mutations/installApp.graphql b/packages/system-api/src/test/mutations/installApp.graphql deleted file mode 100644 index e5faf932..00000000 --- a/packages/system-api/src/test/mutations/installApp.graphql +++ /dev/null @@ -1,25 +0,0 @@ -mutation InstallApp($input: AppInputType!) { - installApp(input: $input) { - id - status - config - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - } -} diff --git a/packages/system-api/src/test/mutations/login.graphql b/packages/system-api/src/test/mutations/login.graphql deleted file mode 100644 index 43b8317f..00000000 --- a/packages/system-api/src/test/mutations/login.graphql +++ /dev/null @@ -1,6 +0,0 @@ -# Write your query or mutation here -mutation Login($input: UsernamePasswordInput!) { - login(input: $input) { - token - } -} diff --git a/packages/system-api/src/test/mutations/register.graphql b/packages/system-api/src/test/mutations/register.graphql deleted file mode 100644 index 249c2c37..00000000 --- a/packages/system-api/src/test/mutations/register.graphql +++ /dev/null @@ -1,6 +0,0 @@ -# Write your query or mutation here -mutation Register($input: UsernamePasswordInput!) { - register(input: $input) { - token - } -} diff --git a/packages/system-api/src/test/mutations/restart.graphql b/packages/system-api/src/test/mutations/restart.graphql deleted file mode 100644 index bb3cfd85..00000000 --- a/packages/system-api/src/test/mutations/restart.graphql +++ /dev/null @@ -1,3 +0,0 @@ -mutation { - restart -} diff --git a/packages/system-api/src/test/mutations/startApp.graphql b/packages/system-api/src/test/mutations/startApp.graphql deleted file mode 100644 index 2e0c5c38..00000000 --- a/packages/system-api/src/test/mutations/startApp.graphql +++ /dev/null @@ -1,31 +0,0 @@ -# Write your query or mutation here -mutation StartApp($id: String!) { - startApp(id: $id) { - id - status - config - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - updateInfo { - current - latest - dockerVersion - } - } -} diff --git a/packages/system-api/src/test/mutations/stopApp.graphql b/packages/system-api/src/test/mutations/stopApp.graphql deleted file mode 100644 index add7c189..00000000 --- a/packages/system-api/src/test/mutations/stopApp.graphql +++ /dev/null @@ -1,30 +0,0 @@ -mutation StopApp($id: String!) { - stopApp(id: $id) { - id - status - config - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - updateInfo { - current - latest - dockerVersion - } - } -} diff --git a/packages/system-api/src/test/mutations/uninstallApp.graphql b/packages/system-api/src/test/mutations/uninstallApp.graphql deleted file mode 100644 index 3a5b9b70..00000000 --- a/packages/system-api/src/test/mutations/uninstallApp.graphql +++ /dev/null @@ -1,30 +0,0 @@ -mutation UninstallApp($id: String!) { - uninstallApp(id: $id) { - id - status - config - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - updateInfo { - current - latest - dockerVersion - } - } -} diff --git a/packages/system-api/src/test/mutations/update.graphql b/packages/system-api/src/test/mutations/update.graphql deleted file mode 100644 index 3e8eb84c..00000000 --- a/packages/system-api/src/test/mutations/update.graphql +++ /dev/null @@ -1,3 +0,0 @@ -mutation { - update -} diff --git a/packages/system-api/src/test/mutations/updateApp.graphql b/packages/system-api/src/test/mutations/updateApp.graphql deleted file mode 100644 index 7d97eca7..00000000 --- a/packages/system-api/src/test/mutations/updateApp.graphql +++ /dev/null @@ -1,30 +0,0 @@ -mutation UpdateApp($id: String!) { - updateApp(id: $id) { - id - status - config - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - updateInfo { - current - latest - dockerVersion - } - } -} diff --git a/packages/system-api/src/test/mutations/updateAppConfig.graphql b/packages/system-api/src/test/mutations/updateAppConfig.graphql deleted file mode 100644 index c9a29939..00000000 --- a/packages/system-api/src/test/mutations/updateAppConfig.graphql +++ /dev/null @@ -1,30 +0,0 @@ -mutation UpdateAppConfig($input: AppInputType!) { - updateAppConfig(input: $input) { - id - status - config - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - updateInfo { - current - latest - dockerVersion - } - } -} diff --git a/packages/system-api/src/test/queries/getApp.graphql b/packages/system-api/src/test/queries/getApp.graphql deleted file mode 100644 index 885a12ff..00000000 --- a/packages/system-api/src/test/queries/getApp.graphql +++ /dev/null @@ -1,29 +0,0 @@ -query GetApp($id: String!) { - getApp(id: $id) { - status - config - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - updateInfo { - current - latest - dockerVersion - } - } -} diff --git a/packages/system-api/src/test/queries/index.ts b/packages/system-api/src/test/queries/index.ts deleted file mode 100644 index b1314529..00000000 --- a/packages/system-api/src/test/queries/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-disable import/no-extraneous-dependencies */ -import 'graphql-import-node'; -import { print } from 'graphql/language/printer'; - -import * as listAppInfos from './listAppInfos.graphql'; -import * as getApp from './getApp.graphql'; -import * as InstalledApps from './installedApps.graphql'; -import * as Me from './me.graphql'; -import * as isConfigured from './isConfigured.graphql'; -import * as systemInfo from './systemInfo.graphql'; -import * as version from './version.graphql'; -import * as refreshToken from './refreshToken.graphql'; - -export const listAppInfosQuery = print(listAppInfos); -export const getAppQuery = print(getApp); -export const InstalledAppsQuery = print(InstalledApps); -export const MeQuery = print(Me); -export const isConfiguredQuery = print(isConfigured); -export const systemInfoQuery = print(systemInfo); -export const versionQuery = print(version); -export const refreshTokenQuery = print(refreshToken); diff --git a/packages/system-api/src/test/queries/installedApps.graphql b/packages/system-api/src/test/queries/installedApps.graphql deleted file mode 100644 index c145937b..00000000 --- a/packages/system-api/src/test/queries/installedApps.graphql +++ /dev/null @@ -1,29 +0,0 @@ -query { - installedApps { - id - status - lastOpened - numOpened - config - createdAt - updatedAt - info { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - } -} diff --git a/packages/system-api/src/test/queries/isConfigured.graphql b/packages/system-api/src/test/queries/isConfigured.graphql deleted file mode 100644 index 2d994b50..00000000 --- a/packages/system-api/src/test/queries/isConfigured.graphql +++ /dev/null @@ -1,3 +0,0 @@ -query IsConfigured { - isConfigured -} diff --git a/packages/system-api/src/test/queries/listAppInfos.graphql b/packages/system-api/src/test/queries/listAppInfos.graphql deleted file mode 100644 index 7c5dedbe..00000000 --- a/packages/system-api/src/test/queries/listAppInfos.graphql +++ /dev/null @@ -1,23 +0,0 @@ -query { - listAppsInfo { - apps { - id - available - port - name - description - version - author - source - categories - url_suffix - form_fields { - max - min - required - env_variable - } - } - total - } -} diff --git a/packages/system-api/src/test/queries/me.graphql b/packages/system-api/src/test/queries/me.graphql deleted file mode 100644 index 2dfaa268..00000000 --- a/packages/system-api/src/test/queries/me.graphql +++ /dev/null @@ -1,6 +0,0 @@ -{ - me { - id - username - } -} diff --git a/packages/system-api/src/test/queries/refreshToken.graphql b/packages/system-api/src/test/queries/refreshToken.graphql deleted file mode 100644 index 4a53d9d0..00000000 --- a/packages/system-api/src/test/queries/refreshToken.graphql +++ /dev/null @@ -1,6 +0,0 @@ -# Write your query or mutation here -query RefreshToken { - refreshToken { - token - } -} diff --git a/packages/system-api/src/test/queries/systemInfo.graphql b/packages/system-api/src/test/queries/systemInfo.graphql deleted file mode 100644 index 503959b6..00000000 --- a/packages/system-api/src/test/queries/systemInfo.graphql +++ /dev/null @@ -1,17 +0,0 @@ -query { - systemInfo { - cpu { - load - } - memory { - total - available - used - } - disk { - total - available - used - } - } -} diff --git a/packages/system-api/src/test/queries/version.graphql b/packages/system-api/src/test/queries/version.graphql deleted file mode 100644 index a1e297e8..00000000 --- a/packages/system-api/src/test/queries/version.graphql +++ /dev/null @@ -1,6 +0,0 @@ -query { - version { - current - latest - } -} diff --git a/packages/system-api/src/types.ts b/packages/system-api/src/types.ts deleted file mode 100644 index e18e62b6..00000000 --- a/packages/system-api/src/types.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { Request, Response } from 'express'; - -export type MyContext = { - req: Request; - res: Response; -}; diff --git a/packages/system-api/tsconfig.json b/packages/system-api/tsconfig.json deleted file mode 100644 index 8bcd52c1..00000000 --- a/packages/system-api/tsconfig.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compilerOptions": { - "target": "es2018", - "module": "CommonJS", - "lib": ["es2021", "ESNext.AsyncIterable"], - "allowJs": true, - "skipLibCheck": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "noEmit": true, - "esModuleInterop": true, - "moduleResolution": "node", - "resolveJsonModule": true, - "isolatedModules": false, - "jsx": "preserve", - "incremental": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "allowSyntheticDefaultImports": true, - "outDir": "./dist" - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "**/*.js", "jest.config.js"], - "exclude": ["node_modules"] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 64b0fa43..5b9b6c51 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,269 +1,189 @@ lockfileVersion: 5.4 -importers: +specifiers: + '@babel/core': ^7.0.0 + '@faker-js/faker': ^7.6.0 + '@hookform/resolvers': ^2.9.10 + '@prisma/client': ^4.8.0 + '@runtipi/postgres-migrations': ^5.3.0 + '@tabler/core': 1.0.0-beta16 + '@tabler/icons': ^1.109.0 + '@tanstack/react-query': ^4.24.4 + '@testing-library/dom': ^8.19.0 + '@testing-library/jest-dom': ^5.16.5 + '@testing-library/react': ^13.4.0 + '@testing-library/user-event': ^14.4.3 + '@trpc/client': ^10.11.1 + '@trpc/next': ^10.11.1 + '@trpc/react-query': ^10.11.1 + '@trpc/server': ^10.11.1 + '@types/express': ^4.17.13 + '@types/fs-extra': ^9.0.13 + '@types/isomorphic-fetch': ^0.0.36 + '@types/jest': ^29.2.4 + '@types/jsonwebtoken': ^9.0.0 + '@types/node': 18.11.18 + '@types/node-cron': ^3.0.2 + '@types/pg': ^8.6.5 + '@types/react': 18.0.8 + '@types/react-dom': 18.0.3 + '@types/semver': ^7.3.12 + '@types/testing-library__jest-dom': ^5.14.5 + '@types/uuid': ^8.3.4 + '@types/validator': ^13.7.2 + '@typescript-eslint/eslint-plugin': ^5.47.1 + '@typescript-eslint/parser': ^5.47.1 + argon2: ^0.29.1 + clsx: ^1.1.1 + dotenv-cli: ^6.0.0 + esbuild: ^0.16.17 + eslint: 8.30.0 + eslint-config-airbnb: ^19.0.4 + eslint-config-airbnb-typescript: ^17.0.0 + eslint-config-next: 13.1.1 + eslint-config-prettier: ^8.6.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jest: ^27.1.7 + eslint-plugin-jsdoc: ^39.6.9 + eslint-plugin-jsx-a11y: ^6.6.1 + eslint-plugin-react: ^7.31.10 + eslint-plugin-react-hooks: ^4.6.0 + express: ^4.17.3 + fs-extra: ^10.1.0 + graphql: ^15.8.0 + graphql-tag: ^2.12.6 + isomorphic-fetch: ^3.0.0 + jest: ^29.3.1 + jest-environment-jsdom: ^29.3.1 + jsonwebtoken: ^9.0.0 + msw: ^1.0.0 + next: 13.1.6 + next-router-mock: ^0.8.0 + node-cron: ^3.0.1 + node-fetch-commonjs: ^3.2.4 + pg: ^8.7.3 + prettier: ^2.8.4 + prisma: ^4.10.1 + react: 18.2.0 + react-dom: 18.2.0 + react-hook-form: ^7.38.0 + react-markdown: ^8.0.3 + react-select: ^5.6.1 + react-tooltip: ^4.4.3 + redis: ^4.3.1 + remark-breaks: ^3.0.2 + remark-gfm: ^3.0.1 + sass: ^1.55.0 + semver: ^7.3.7 + sharp: 0.30.7 + superjson: ^1.12.0 + ts-jest: ^29.0.3 + ts-node: ^10.9.1 + tslib: ^2.4.0 + typescript: 4.9.4 + uuid: ^9.0.0 + validator: ^13.7.0 + wait-for-expect: ^3.0.2 + whatwg-fetch: ^3.6.2 + winston: ^3.7.2 + zod: ^3.19.1 + zustand: ^3.7.2 - .: - specifiers: - '@commitlint/cli': ^17.0.3 - '@commitlint/config-conventional': ^17.0.3 - '@commitlint/cz-commitlint': ^17.0.3 - commitizen: ^4.2.4 - inquirer: 8.2.4 - devDependencies: - '@commitlint/cli': 17.0.3 - '@commitlint/config-conventional': 17.0.3 - '@commitlint/cz-commitlint': 17.0.3_yes7iyjckc3rubj3ixzwc3ince - commitizen: 4.2.5 - inquirer: 8.2.4 +dependencies: + '@hookform/resolvers': 2.9.11_react-hook-form@7.43.1 + '@prisma/client': 4.10.1_prisma@4.10.1 + '@runtipi/postgres-migrations': 5.3.0 + '@tabler/core': 1.0.0-beta16_biqbaboplfbrettd7655fr4n2y + '@tabler/icons': 1.119.0_biqbaboplfbrettd7655fr4n2y + '@tanstack/react-query': 4.24.6_biqbaboplfbrettd7655fr4n2y + '@trpc/client': 10.11.1_@trpc+server@10.11.1 + '@trpc/next': 10.11.1_ck2pp32np6ey6osxngwuwfgwei + '@trpc/react-query': 10.11.1_2pugaexxlcekgcbbhj75jqmiqi + '@trpc/server': 10.11.1 + argon2: 0.29.1 + clsx: 1.2.1 + express: 4.18.2 + fs-extra: 10.1.0 + graphql: 15.8.0 + graphql-tag: 2.12.6_graphql@15.8.0 + isomorphic-fetch: 3.0.0 + jsonwebtoken: 9.0.0 + next: 13.1.6_4u6c57fe2msmz5uzpiwwufo4my + node-cron: 3.0.2 + node-fetch-commonjs: 3.2.4 + pg: 8.9.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-hook-form: 7.43.1_react@18.2.0 + react-markdown: 8.0.5_gvifxuufrqkj4gcqfnnwrb44ya + react-select: 5.7.0_sd644w7yfdyrvmykkrrqd5kd4a + react-tooltip: 4.5.1_biqbaboplfbrettd7655fr4n2y + redis: 4.6.4 + remark-breaks: 3.0.2 + remark-gfm: 3.0.1 + sass: 1.58.2 + semver: 7.3.8 + sharp: 0.30.7 + superjson: 1.12.2 + tslib: 2.5.0 + uuid: 9.0.0 + validator: 13.9.0 + winston: 3.8.2 + zod: 3.20.6 + zustand: 3.7.2_react@18.2.0 - packages/dashboard: - specifiers: - '@apollo/client': ^3.6.8 - '@babel/core': ^7.0.0 - '@faker-js/faker': ^7.3.0 - '@graphql-codegen/cli': ^2.6.2 - '@graphql-codegen/typescript': ^2.5.1 - '@graphql-codegen/typescript-operations': ^2.4.2 - '@graphql-codegen/typescript-react-apollo': ^3.2.16 - '@hookform/resolvers': ^2.9.10 - '@tabler/core': 1.0.0-beta16 - '@tabler/icons': ^1.109.0 - '@testing-library/dom': ^8.19.0 - '@testing-library/jest-dom': ^5.16.5 - '@testing-library/react': ^13.4.0 - '@testing-library/user-event': ^14.4.3 - '@types/isomorphic-fetch': ^0.0.36 - '@types/jest': ^27.5.0 - '@types/node': 17.0.31 - '@types/react': 18.0.8 - '@types/react-dom': 18.0.3 - '@types/semver': ^7.3.12 - '@types/testing-library__jest-dom': ^5.14.5 - '@types/validator': ^13.7.2 - '@typescript-eslint/eslint-plugin': ^5.18.0 - '@typescript-eslint/parser': ^5.0.0 - clsx: ^1.1.1 - concurrently: ^7.1.0 - eslint: 8.12.0 - eslint-config-airbnb: ^19.0.4 - eslint-config-airbnb-typescript: ^17.0.0 - eslint-config-next: 12.1.4 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jest: ^27.1.6 - eslint-plugin-jsx-a11y: ^6.6.1 - eslint-plugin-react: ^7.31.10 - eslint-plugin-react-hooks: ^4.6.0 - graphql: ^15.8.0 - graphql-tag: ^2.12.6 - isomorphic-fetch: ^3.0.0 - jest: ^28.1.0 - jest-environment-jsdom: ^29.3.1 - msw: ^0.49.1 - next: 13.0.3 - next-router-mock: ^0.8.0 - react: 18.2.0 - react-dom: 18.2.0 - react-hook-form: ^7.38.0 - react-markdown: ^8.0.3 - react-select: ^5.6.1 - react-tooltip: ^4.4.3 - remark-breaks: ^3.0.2 - remark-gfm: ^3.0.1 - remark-mdx: ^2.1.1 - sass: ^1.55.0 - semver: ^7.3.7 - sharp: 0.30.7 - swr: ^1.3.0 - ts-jest: ^28.0.2 - tslib: ^2.4.0 - typescript: 4.6.4 - validator: ^13.7.0 - whatwg-fetch: ^3.6.2 - zod: ^3.19.1 - zustand: ^3.7.2 - dependencies: - '@apollo/client': 3.6.8_o264z5epwuajru7y4dsijkqr44 - '@hookform/resolvers': 2.9.10_react-hook-form@7.40.0 - '@tabler/core': 1.0.0-beta16_biqbaboplfbrettd7655fr4n2y - '@tabler/icons': 1.116.1_biqbaboplfbrettd7655fr4n2y - clsx: 1.1.1 - graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 - isomorphic-fetch: 3.0.0 - next: 13.0.3_7nrowiyds4jpk2wpzkb7237oey - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - react-hook-form: 7.40.0_react@18.2.0 - react-markdown: 8.0.3_gvifxuufrqkj4gcqfnnwrb44ya - react-select: 5.7.0_5ubfrz6g4pwsjvo47rxfnxhiaa - react-tooltip: 4.5.1_biqbaboplfbrettd7655fr4n2y - remark-breaks: 3.0.2 - remark-gfm: 3.0.1 - remark-mdx: 2.1.1 - sass: 1.56.1 - semver: 7.3.7 - sharp: 0.30.7 - swr: 1.3.0_react@18.2.0 - tslib: 2.4.0 - validator: 13.7.0 - zod: 3.19.1 - zustand: 3.7.2_react@18.2.0 - devDependencies: - '@babel/core': 7.17.10 - '@faker-js/faker': 7.3.0 - '@graphql-codegen/cli': 2.6.2_b3mcazu44o3sueqtutmadehm2y - '@graphql-codegen/typescript': 2.5.1_graphql@15.8.0 - '@graphql-codegen/typescript-operations': 2.4.2_graphql@15.8.0 - '@graphql-codegen/typescript-react-apollo': 3.2.16_3jt5ibhtazvod5hvf7xqhzsx4q - '@testing-library/dom': 8.19.0 - '@testing-library/jest-dom': 5.16.5 - '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y - '@testing-library/user-event': 14.4.3_aaq3sbffpfe3jnxzm2zngsddei - '@types/isomorphic-fetch': 0.0.36 - '@types/jest': 27.5.0 - '@types/node': 17.0.31 - '@types/react': 18.0.8 - '@types/react-dom': 18.0.3 - '@types/semver': 7.3.12 - '@types/testing-library__jest-dom': 5.14.5 - '@types/validator': 13.7.2 - '@typescript-eslint/eslint-plugin': 5.22.0_oztpoyrbzkyaikrhdkppp3gagu - '@typescript-eslint/parser': 5.22.0_uhoeudlwl7kc47h4kncsfowede - concurrently: 7.1.0 - eslint: 8.12.0 - eslint-config-airbnb: 19.0.4_tpqcnshlhqvperuqm7rlvey33u - eslint-config-airbnb-typescript: 17.0.0_r46exuh3jlhq2wmrnqx2ufqspa - eslint-config-next: 12.1.4_jrolxr2xlutwfqdlrw57qa2k6a - eslint-plugin-import: 2.26.0_hhyjdrupy4c2vgtpytri6cjwoy - eslint-plugin-jest: 27.1.6_uln45ilbhdyv55swkm637nwsny - eslint-plugin-jsx-a11y: 6.6.1_eslint@8.12.0 - eslint-plugin-react: 7.31.11_eslint@8.12.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.12.0 - jest: 28.1.0_@types+node@17.0.31 - jest-environment-jsdom: 29.3.1 - msw: 0.49.1_typescript@4.6.4 - next-router-mock: 0.8.0_next@13.0.3+react@18.2.0 - ts-jest: 28.0.2_idho52n4uf7ux6ste52nmmk7t4 - typescript: 4.6.4 - whatwg-fetch: 3.6.2 - - packages/system-api: - specifiers: - '@faker-js/faker': ^7.3.0 - '@types/cors': ^2.8.12 - '@types/express': ^4.17.13 - '@types/fs-extra': ^9.0.13 - '@types/jest': ^27.5.0 - '@types/jsonwebtoken': ^8.5.9 - '@types/node': 17.0.31 - '@types/node-cron': ^3.0.2 - '@types/pg': ^8.6.5 - '@types/semver': ^7.3.12 - '@types/uuid': ^8.3.4 - '@types/validator': ^13.7.2 - '@typescript-eslint/eslint-plugin': ^5.18.0 - '@typescript-eslint/parser': ^5.22.0 - apollo-server-core: ^3.10.0 - apollo-server-express: ^3.9.0 - argon2: ^0.29.1 - axios: ^0.26.1 - class-validator: ^0.13.2 - concurrently: ^7.1.0 - cors: ^2.8.5 - dotenv: ^16.0.0 - esbuild: ^0.16.6 - eslint: ^8.13.0 - eslint-config-airbnb-typescript: ^17.0.0 - eslint-config-prettier: ^8.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-prettier: ^4.0.0 - express: ^4.17.3 - fs-extra: ^10.1.0 - glob: ^8.0.3 - graphql: ^15.3.0 - graphql-import-node: ^0.0.5 - graphql-type-json: ^0.3.2 - http: 0.0.1-security - jest: ^28.1.0 - jsonwebtoken: ^8.5.1 - node-cron: ^3.0.1 - nodemon: ^2.0.15 - pg: ^8.7.3 - prettier: 2.6.2 - redis: ^4.3.1 - reflect-metadata: ^0.1.13 - rimraf: ^3.0.2 - semver: ^7.3.7 - ts-jest: ^28.0.2 - ts-node: ^10.9.1 - type-graphql: ^1.1.1 - typeorm: ^0.3.11 - typescript: 4.6.4 - uuid: ^9.0.0 - validator: ^13.7.0 - winston: ^3.7.2 - zod: ^3.19.1 - dependencies: - apollo-server-core: 3.10.0_graphql@15.8.0 - apollo-server-express: 3.9.0_jfj6k5cqxqbusbdzwqjdzioxzm - argon2: 0.29.1 - axios: 0.26.1 - class-validator: 0.13.2 - cors: 2.8.5 - dotenv: 16.0.0 - express: 4.18.1 - fs-extra: 10.1.0 - graphql: 15.8.0 - graphql-type-json: 0.3.2_graphql@15.8.0 - http: 0.0.1-security - jsonwebtoken: 8.5.1 - node-cron: 3.0.1 - pg: 8.7.3 - redis: 4.4.0 - reflect-metadata: 0.1.13 - semver: 7.3.7 - type-graphql: 1.1.1_v2revtygxcm7xrdg2oz3ssohfu - typeorm: 0.3.11_j7enc6mli46gfpdixnhxwnbbhm - uuid: 9.0.0 - validator: 13.7.0 - winston: 3.7.2 - zod: 3.19.1 - devDependencies: - '@faker-js/faker': 7.3.0 - '@types/cors': 2.8.12 - '@types/express': 4.17.13 - '@types/fs-extra': 9.0.13 - '@types/jest': 27.5.0 - '@types/jsonwebtoken': 8.5.9 - '@types/node': 17.0.31 - '@types/node-cron': 3.0.2 - '@types/pg': 8.6.5 - '@types/semver': 7.3.12 - '@types/uuid': 8.3.4 - '@types/validator': 13.7.2 - '@typescript-eslint/eslint-plugin': 5.22.0_tal4xlmvnofklupd3hwjtzfb4q - '@typescript-eslint/parser': 5.22.0_hcfsmds2fshutdssjqluwm76uu - concurrently: 7.1.0 - esbuild: 0.16.8 - eslint: 8.15.0 - eslint-config-airbnb-typescript: 17.0.0_c2ouaf3l4ivgkc6ae4nebvztom - eslint-config-prettier: 8.5.0_eslint@8.15.0 - eslint-plugin-import: 2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy - eslint-plugin-prettier: 4.0.0_iqftbjqlxzn3ny5nablrkczhqi - glob: 8.0.3 - graphql-import-node: 0.0.5_graphql@15.8.0 - jest: 28.1.0_rcy5nlo3uetwcso5jthu6pby7u - nodemon: 2.0.16 - prettier: 2.6.2 - rimraf: 3.0.2 - ts-jest: 28.0.2_mplb3v5dftkcf2ovkj2wrc7jiy - ts-node: 10.9.1_l47be6km5p57gglrggidw5gsgm - typescript: 4.6.4 +devDependencies: + '@babel/core': 7.20.12 + '@faker-js/faker': 7.6.0 + '@testing-library/dom': 8.20.0 + '@testing-library/jest-dom': 5.16.5 + '@testing-library/react': 13.4.0_biqbaboplfbrettd7655fr4n2y + '@testing-library/user-event': 14.4.3_yxlyej73nftwmh2fiao7paxmlm + '@types/express': 4.17.17 + '@types/fs-extra': 9.0.13 + '@types/isomorphic-fetch': 0.0.36 + '@types/jest': 29.4.0 + '@types/jsonwebtoken': 9.0.1 + '@types/node': 18.11.18 + '@types/node-cron': 3.0.7 + '@types/pg': 8.6.6 + '@types/react': 18.0.8 + '@types/react-dom': 18.0.3 + '@types/semver': 7.3.13 + '@types/testing-library__jest-dom': 5.14.5 + '@types/uuid': 8.3.4 + '@types/validator': 13.7.12 + '@typescript-eslint/eslint-plugin': 5.52.0_pezh6gz572jkbttmcky6muaye4 + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa + dotenv-cli: 6.0.0 + esbuild: 0.16.17 + eslint: 8.30.0 + eslint-config-airbnb: 19.0.4_cr63lrmoc4dspolruzqiythtbu + eslint-config-airbnb-typescript: 17.0.0_jh5xjcqwwfdwsmi5riakmiondu + eslint-config-next: 13.1.1_lzzuuodtsqwxnvqeq4g4likcqa + eslint-config-prettier: 8.6.0_eslint@8.30.0 + eslint-plugin-import: 2.27.5_pwruqh3pldl3vrraggl56un3si + eslint-plugin-jest: 27.2.1_oh5yamb4myuqqwzna5honvfj4a + eslint-plugin-jsdoc: 39.9.1_eslint@8.30.0 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.30.0 + eslint-plugin-react: 7.32.2_eslint@8.30.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.30.0 + jest: 29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4 + jest-environment-jsdom: 29.4.3 + msw: 1.0.1_typescript@4.9.4 + next-router-mock: 0.8.0_next@13.1.6+react@18.2.0 + prettier: 2.8.4 + prisma: 4.10.1 + ts-jest: 29.0.5_q5pvvsha5rrowzfbt33h5w23u4 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq + typescript: 4.9.4 + wait-for-expect: 3.0.2 + whatwg-fetch: 3.6.2 packages: - /@adobe/css-tools/4.0.1: - resolution: {integrity: sha512-+u76oB43nOHrF4DDWRLWDCtci7f3QJoEBigemIdIeTi1ODqjx6Tad9NCVnPRwewWlKkVab5PlK8DCtPTyX7S8g==} + /@adobe/css-tools/4.1.0: + resolution: {integrity: sha512-mMVJ/j/GbZ/De4ZHWbQAQO1J6iVnjtZLc9WEdkUQb8S/Bu2cAF2bETXUgMAdvMG3/ngtKmcNBe+Zms9bg6jnQQ==} dev: true /@ampproject/remapping/2.2.0: @@ -271,933 +191,328 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.10 - dev: true + '@jridgewell/trace-mapping': 0.3.17 - /@apollo/client/3.6.8_o264z5epwuajru7y4dsijkqr44: - resolution: {integrity: sha512-p/J6KRHZZPGX0bZtMLvRFAIcReYsRYGg+Jz9MkgabWPy0L8rwgyolq9fvKsNqkH888Tj9Yvwrxz9V84KfcORJA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - subscriptions-transport-ws: ^0.9.0 || ^0.11.0 - peerDependenciesMeta: - graphql-ws: - optional: true - react: - optional: true - subscriptions-transport-ws: - optional: true - dependencies: - '@graphql-typed-document-node/core': 3.1.1_graphql@15.8.0 - '@wry/context': 0.6.1 - '@wry/equality': 0.5.2 - '@wry/trie': 0.3.1 - graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 - hoist-non-react-statics: 3.3.2 - optimism: 0.16.1 - prop-types: 15.8.1 - react: 18.2.0 - symbol-observable: 4.0.0 - ts-invariant: 0.10.3 - tslib: 2.4.0 - zen-observable-ts: 1.2.5 - dev: false - - /@apollo/protobufjs/1.2.2: - resolution: {integrity: sha512-vF+zxhPiLtkwxONs6YanSt1EpwpGilThpneExUN5K3tCymuxNnVq2yojTvnpRjv2QfsEIt/n7ozPIIzBLwGIDQ==} - hasBin: true - requiresBuild: true - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.2 - '@types/node': 10.17.60 - long: 4.0.0 - dev: false - - /@apollo/protobufjs/1.2.4: - resolution: {integrity: sha512-npVJ9NVU/pynj+SCU+fambvTneJDyCnif738DnZ7pCxdDtzeEz7WkpSIq5wNUmWm5Td55N+S2xfqZ+WP4hDLng==} - hasBin: true - requiresBuild: true - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.2 - '@types/node': 10.17.60 - long: 4.0.0 - dev: false - - /@apollo/utils.dropunuseddefinitions/1.1.0_graphql@15.8.0: - resolution: {integrity: sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==} - engines: {node: '>=12.13.0'} - peerDependencies: - graphql: 14.x || 15.x || 16.x - dependencies: - graphql: 15.8.0 - dev: false - - /@apollo/utils.keyvaluecache/1.0.1: - resolution: {integrity: sha512-nLgYLomqjVimEzQ4cdvVQkcryi970NDvcRVPfd0OPeXhBfda38WjBq+WhQFk+czSHrmrSp34YHBxpat0EtiowA==} - dependencies: - '@apollo/utils.logger': 1.0.0 - lru-cache: 7.10.1 - dev: false - - /@apollo/utils.logger/1.0.0: - resolution: {integrity: sha512-dx9XrjyisD2pOa+KsB5RcDbWIAdgC91gJfeyLCgy0ctJMjQe7yZK5kdWaWlaOoCeX0z6YI9iYlg7vMPyMpQF3Q==} - dev: false - - /@apollo/utils.printwithreducedwhitespace/1.1.0_graphql@15.8.0: - resolution: {integrity: sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==} - engines: {node: '>=12.13.0'} - peerDependencies: - graphql: 14.x || 15.x || 16.x - dependencies: - graphql: 15.8.0 - dev: false - - /@apollo/utils.removealiases/1.0.0_graphql@15.8.0: - resolution: {integrity: sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==} - engines: {node: '>=12.13.0'} - peerDependencies: - graphql: 14.x || 15.x || 16.x - dependencies: - graphql: 15.8.0 - dev: false - - /@apollo/utils.sortast/1.1.0_graphql@15.8.0: - resolution: {integrity: sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==} - engines: {node: '>=12.13.0'} - peerDependencies: - graphql: 14.x || 15.x || 16.x - dependencies: - graphql: 15.8.0 - lodash.sortby: 4.7.0 - dev: false - - /@apollo/utils.stripsensitiveliterals/1.2.0_graphql@15.8.0: - resolution: {integrity: sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==} - engines: {node: '>=12.13.0'} - peerDependencies: - graphql: 14.x || 15.x || 16.x - dependencies: - graphql: 15.8.0 - dev: false - - /@apollo/utils.usagereporting/1.0.0_graphql@15.8.0: - resolution: {integrity: sha512-5PL7hJMkTPmdo3oxPtigRrIyPxDk/ddrUryHPDaezL1lSFExpNzsDd2f1j0XJoHOg350GRd3LyD64caLA2PU1w==} - engines: {node: '>=12.13.0'} - peerDependencies: - graphql: 14.x || 15.x || 16.x - dependencies: - '@apollo/utils.dropunuseddefinitions': 1.1.0_graphql@15.8.0 - '@apollo/utils.printwithreducedwhitespace': 1.1.0_graphql@15.8.0 - '@apollo/utils.removealiases': 1.0.0_graphql@15.8.0 - '@apollo/utils.sortast': 1.1.0_graphql@15.8.0 - '@apollo/utils.stripsensitiveliterals': 1.2.0_graphql@15.8.0 - apollo-reporting-protobuf: 3.3.2 - graphql: 15.8.0 - dev: false - - /@apollographql/apollo-tools/0.5.4_graphql@15.8.0: - resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==} - engines: {node: '>=8', npm: '>=6'} - peerDependencies: - graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - dev: false - - /@apollographql/graphql-playground-html/1.6.29: - resolution: {integrity: sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==} - dependencies: - xss: 1.0.13 - dev: false - - /@ardatan/relay-compiler/12.0.0_graphql@15.8.0: - resolution: {integrity: sha512-9anThAaj1dQr6IGmzBMcfzOQKTa5artjuPmw8NYK/fiGEMjADbSguBY2FMDykt+QhilR3wc9VA/3yVju7JHg7Q==} - hasBin: true - peerDependencies: - graphql: '*' - dependencies: - '@babel/core': 7.17.10 - '@babel/generator': 7.17.10 - '@babel/parser': 7.17.10 - '@babel/runtime': 7.20.6 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 - babel-preset-fbjs: 3.4.0_@babel+core@7.17.10 - chalk: 4.1.2 - fb-watchman: 2.0.1 - fbjs: 3.0.4 - glob: 7.2.3 - graphql: 15.8.0 - immutable: 3.7.6 - invariant: 2.2.4 - nullthrows: 1.1.1 - relay-runtime: 12.0.0 - signedsource: 1.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@babel/code-frame/7.16.7: - resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} + /@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.17.9 + '@babel/highlight': 7.18.6 - /@babel/compat-data/7.17.10: - resolution: {integrity: sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==} + /@babel/compat-data/7.20.14: + resolution: {integrity: sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.17.10: - resolution: {integrity: sha512-liKoppandF3ZcBnIYFjfSDHZLKdLHGJRkoWtG8zQyGJBQfIYobpnVGI5+pLBNtS6psFLDzyq8+h5HiVljW9PNA==} + /@babel/core/7.20.12: + resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 - '@babel/code-frame': 7.16.7 - '@babel/generator': 7.17.10 - '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 - '@babel/helper-module-transforms': 7.17.7 - '@babel/helpers': 7.17.9 - '@babel/parser': 7.17.10 - '@babel/template': 7.16.7 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 - convert-source-map: 1.8.0 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helpers': 7.20.13 + '@babel/parser': 7.20.15 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 - json5: 2.2.1 + json5: 2.2.3 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/generator/7.17.10: - resolution: {integrity: sha512-46MJZZo9y3o4kmhBVc7zW7i8dtR1oIK/sdO5NcfcZRhTGYi+KKJRtHNgsU6c4VUcJmUNV/LQdebD/9Dlv4K+Tg==} + /@babel/generator/7.20.14: + resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.10 - '@jridgewell/gen-mapping': 0.1.1 + '@babel/types': 7.20.7 + '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 dev: true - /@babel/generator/7.18.2: - resolution: {integrity: sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.18.4 - '@jridgewell/gen-mapping': 0.3.1 - jsesc: 2.5.2 - dev: true - - /@babel/helper-annotate-as-pure/7.16.7: - resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.18.4 - dev: true - - /@babel/helper-compilation-targets/7.17.10_@babel+core@7.17.10: - resolution: {integrity: sha512-gh3RxjWbauw/dFiU/7whjd0qN9K6nPJMqe6+Er7rOavFh0CQUSwhAE3IcTho2rywPJFxej6TUUHDkWcYI6gGqQ==} + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.17.10 - '@babel/core': 7.17.10 - '@babel/helper-validator-option': 7.16.7 - browserslist: 4.20.3 + '@babel/compat-data': 7.20.14 + '@babel/core': 7.20.12 + '@babel/helper-validator-option': 7.18.6 + browserslist: 4.21.5 + lru-cache: 5.1.1 semver: 6.3.0 dev: true - /@babel/helper-create-class-features-plugin/7.18.0_@babel+core@7.17.10: - resolution: {integrity: sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg==} + /@babel/helper-environment-visitor/7.18.9: + resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} + engines: {node: '>=6.9.0'} + + /@babel/helper-function-name/7.19.0: + resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-member-expression-to-functions': 7.17.7 - '@babel/helper-optimise-call-expression': 7.16.7 - '@babel/helper-replace-supers': 7.18.2 - '@babel/helper-split-export-declaration': 7.16.7 + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + + /@babel/helper-module-imports/7.18.6: + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.20.7 + + /@babel/helper-module-transforms/7.20.11: + resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-module-imports': 7.18.6 + '@babel/helper-simple-access': 7.20.2 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-environment-visitor/7.16.7: - resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.10 - dev: true - - /@babel/helper-environment-visitor/7.18.2: - resolution: {integrity: sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==} + /@babel/helper-plugin-utils/7.20.2: + resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-function-name/7.17.9: - resolution: {integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==} + /@babel/helper-simple-access/7.20.2: + resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.16.7 - '@babel/types': 7.17.10 - dev: true + '@babel/types': 7.20.7 - /@babel/helper-hoist-variables/7.16.7: - resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.17.10 - dev: true + '@babel/types': 7.20.7 - /@babel/helper-member-expression-to-functions/7.17.7: - resolution: {integrity: sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==} + /@babel/helper-string-parser/7.19.4: + resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.18.4 - dev: true - /@babel/helper-module-imports/7.16.7: - resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.10 - /@babel/helper-module-transforms/7.17.7: - resolution: {integrity: sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==} + /@babel/helper-validator-option/7.18.6: + resolution: {integrity: sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==} + engines: {node: '>=6.9.0'} + + /@babel/helpers/7.20.13: + resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-simple-access': 7.17.7 - '@babel/helper-split-export-declaration': 7.16.7 - '@babel/helper-validator-identifier': 7.16.7 - '@babel/template': 7.16.7 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color dev: true - /@babel/helper-module-transforms/7.18.0: - resolution: {integrity: sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==} + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-simple-access': 7.18.2 - '@babel/helper-split-export-declaration': 7.16.7 - '@babel/helper-validator-identifier': 7.16.7 - '@babel/template': 7.16.7 - '@babel/traverse': 7.18.5 - '@babel/types': 7.18.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-optimise-call-expression/7.16.7: - resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.18.4 - dev: true - - /@babel/helper-plugin-utils/7.16.7: - resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helper-plugin-utils/7.17.12: - resolution: {integrity: sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==} - engines: {node: '>=6.9.0'} - - /@babel/helper-replace-supers/7.18.2: - resolution: {integrity: sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-environment-visitor': 7.18.2 - '@babel/helper-member-expression-to-functions': 7.17.7 - '@babel/helper-optimise-call-expression': 7.16.7 - '@babel/traverse': 7.18.5 - '@babel/types': 7.18.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/helper-simple-access/7.17.7: - resolution: {integrity: sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.10 - dev: true - - /@babel/helper-simple-access/7.18.2: - resolution: {integrity: sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.18.4 - dev: true - - /@babel/helper-skip-transparent-expression-wrappers/7.16.0: - resolution: {integrity: sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.10 - dev: true - - /@babel/helper-split-export-declaration/7.16.7: - resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.17.10 - dev: true - - /@babel/helper-validator-identifier/7.16.7: - resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} - engines: {node: '>=6.9.0'} - - /@babel/helper-validator-option/7.16.7: - resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} - engines: {node: '>=6.9.0'} - dev: true - - /@babel/helpers/7.17.9: - resolution: {integrity: sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.16.7 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/highlight/7.17.9: - resolution: {integrity: sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.16.7 + '@babel/helper-validator-identifier': 7.19.1 chalk: 2.4.2 js-tokens: 4.0.0 - /@babel/parser/7.17.10: - resolution: {integrity: sha512-n2Q6i+fnJqzOaq2VkdXxy2TCPCWQZHiCo0XqmrCvDWcZQKRyZzYi4Z0yxlBuN0w+r2ZHmre+Q087DSrw3pbJDQ==} + /@babel/parser/7.20.15: + resolution: {integrity: sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.17.10 - dev: true + '@babel/types': 7.20.7 - /@babel/parser/7.18.5: - resolution: {integrity: sha512-YZWVaglMiplo7v8f1oMQ5ZPQr0vn7HPeZXxXWsxXJRjGVrzUFn9OxFQl1sb5wzfootjA/yChhW84BV+383FSOw==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.18.4 - dev: true - - /@babel/plugin-proposal-class-properties/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-U0mI9q8pW5Q9EaTHFPwSVusPMV/DV9Mm8p7csqROFLtIE9rBF5piLqyrBGigftALrBcsBGu4m38JneAe7ZDLXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-create-class-features-plugin': 7.18.0_@babel+core@7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-proposal-object-rest-spread/7.18.0_@babel+core@7.17.10: - resolution: {integrity: sha512-nbTv371eTrFabDfHLElkn9oyf9VG+VKK6WMzhY2o4eHKaG19BToD9947zzGMO6I/Irstx9d8CwX6njPNIAR/yw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/compat-data': 7.17.10 - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': 7.17.12_@babel+core@7.17.10 - dev: true - - /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.17.10: + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.20.12: resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.17.10: + /@babel/plugin-syntax-bigint/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.17.10: + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.20.12: resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-flow/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-B8QIgBvkIG6G2jgsOHQUist7Sm0EBLDCx8sen072IwqNuzMegZNXrYnSv77cYzA8mLDZAfQYqsLIhimiP1s2HQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.17.10: + /@babel/plugin-syntax-import-meta/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.17.10: + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==} + /@babel/plugin-syntax-jsx/7.18.6_@babel+core@7.20.12: + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-jsx/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - - /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.17.10: + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.17.10: + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.17.10: + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.20.12: resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.17.10: + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.17.10: + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.17.10: + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.20.12: resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.17.10: + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.20.12: resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-syntax-typescript/7.17.10_@babel+core@7.17.10: - resolution: {integrity: sha512-xJefea1DWXW09pW4Tm9bjwVlPDyYA2it3fWlmEjpYz6alPvTUjL0EOzNzI/FEOyI3r4/J7uVH5UqKgl1TQ5hqQ==} + /@babel/plugin-syntax-typescript/7.20.0_@babel+core@7.20.12: + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 + '@babel/core': 7.20.12 + '@babel/helper-plugin-utils': 7.20.2 dev: true - /@babel/plugin-transform-arrow-functions/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-PHln3CNi/49V+mza4xMwrg+WGYevSF1oaiXaC2EQfdp4HWlSjRsrDXWJiQBKpP7749u6vQ9mcry2uuFOv5CXvA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-block-scoped-functions/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-block-scoping/7.18.4_@babel+core@7.17.10: - resolution: {integrity: sha512-+Hq10ye+jlvLEogSOtq4mKvtk7qwcUQ1f0Mrueai866C82f844Yom2cttfJdMdqRLTxWpsbfbkIkOIfovyUQXw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-classes/7.18.4_@babel+core@7.17.10: - resolution: {integrity: sha512-e42NSG2mlKWgxKUAD9EJJSkZxR67+wZqzNxLSpc51T8tRU5SLFHsPmgYR5yr7sdgX4u+iHA1C5VafJ6AyImV3A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-environment-visitor': 7.18.2 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-optimise-call-expression': 7.16.7 - '@babel/helper-plugin-utils': 7.17.12 - '@babel/helper-replace-supers': 7.18.2 - '@babel/helper-split-export-declaration': 7.16.7 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-computed-properties/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-a7XINeplB5cQUWMg1E/GI1tFz3LfK021IjV1rj1ypE+R7jHm+pIHmHl25VNkZxtx9uuYp7ThGk8fur1HHG7PgQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-destructuring/7.18.0_@babel+core@7.17.10: - resolution: {integrity: sha512-Mo69klS79z6KEfrLg/1WkmVnB8javh75HX4pi2btjvlIoasuxilEyjtsQW6XPrubNd7AQy0MMaNIaQE4e7+PQw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-flow-strip-types/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-g8cSNt+cHCpG/uunPQELdq/TeV3eg1OLJYwxypwHtAWo9+nErH3lQx9CSO2uI9lF74A0mR0t4KoMjs1snSgnTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - '@babel/plugin-syntax-flow': 7.17.12_@babel+core@7.17.10 - dev: true - - /@babel/plugin-transform-for-of/7.18.1_@babel+core@7.17.10: - resolution: {integrity: sha512-+TTB5XwvJ5hZbO8xvl2H4XaMDOAK57zF4miuC9qQJgysPNEAZZ9Z69rdF5LJkozGdZrjBIUAIyKUWRMmebI7vg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-function-name/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-compilation-targets': 7.17.10_@babel+core@7.17.10 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-literals/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-8iRkvaTjJciWycPIZ9k9duu663FT7VrBdNqNgxnVXEFwOIp55JWcZd23VBRySYbnS3PwQ3rGiabJBBBGj5APmQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-member-expression-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - dev: true - - /@babel/plugin-transform-modules-commonjs/7.18.2_@babel+core@7.17.10: - resolution: {integrity: sha512-f5A865gFPAJAEE0K7F/+nm5CmAE3y8AWlMBG9unu5j9+tk50UQVK0QS8RNxSp7MJf0wh97uYyLWt3Zvu71zyOQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-module-transforms': 7.18.0 - '@babel/helper-plugin-utils': 7.17.12 - '@babel/helper-simple-access': 7.18.2 - babel-plugin-dynamic-import-node: 2.3.3 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-object-super/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.16.7 - '@babel/helper-replace-supers': 7.18.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/plugin-transform-parameters/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-6qW4rWo1cyCdq1FkYri7AHpauchbGLXpdwnYsfxFb+KtddHENfsY5JZb35xUwkK5opOLcJ3BNd2l7PhRYGlwIA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-property-literals/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-react-display-name/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-qgIg8BcZgd0G/Cz916D5+9kqX0c7nPZyXaP8R2tLNN5tkyIZdG5fEwBrxwplzSnjC1jvQmyMNVwUCZPcbGY7Pg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-react-jsx/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-Lcaw8bxd1DKht3thfD4A12dqo1X16he1Lm8rIv8sTwjAYNInRS1qHa9aJoqvzpscItXvftKDCfaEQzwoVyXpEQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-annotate-as-pure': 7.16.7 - '@babel/helper-module-imports': 7.16.7 - '@babel/helper-plugin-utils': 7.17.12 - '@babel/plugin-syntax-jsx': 7.17.12_@babel+core@7.17.10 - '@babel/types': 7.18.4 - dev: true - - /@babel/plugin-transform-shorthand-properties/7.16.7_@babel+core@7.17.10: - resolution: {integrity: sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/plugin-transform-spread/7.17.12_@babel+core@7.17.10: - resolution: {integrity: sha512-9pgmuQAtFi3lpNUstvG9nGfk9DkrdmWNp9KeKPFmuZCpEnxRzYlS8JgwPjYj+1AWDOSvoGN0H30p1cBOmT/Svg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - '@babel/helper-skip-transparent-expression-wrappers': 7.16.0 - dev: true - - /@babel/plugin-transform-template-literals/7.18.2_@babel+core@7.17.10: - resolution: {integrity: sha512-/cmuBVw9sZBGZVOMkpAEaVLwm4JmK2GZ1dFKOGGpMzEHWFmyZZ59lUU0PdRr8YNYeQdNzTDwuxP2X2gzydTc9g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - dependencies: - '@babel/core': 7.17.10 - '@babel/helper-plugin-utils': 7.17.12 - dev: true - - /@babel/runtime-corejs3/7.17.9: - resolution: {integrity: sha512-WxYHHUWF2uZ7Hp1K+D1xQgbgkGUfA+5UPOegEXGt2Y5SMog/rYCVaifLZDbw8UkNXozEqqrZTy6bglL7xTaCOw==} - engines: {node: '>=6.9.0'} - dependencies: - core-js-pure: 3.22.4 - regenerator-runtime: 0.13.11 - dev: true - - /@babel/runtime/7.20.6: - resolution: {integrity: sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==} + /@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 - /@babel/template/7.16.7: - resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.16.7 - '@babel/parser': 7.17.10 - '@babel/types': 7.17.10 - dev: true + '@babel/code-frame': 7.18.6 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 - /@babel/traverse/7.17.10: - resolution: {integrity: sha512-VmbrTHQteIdUUQNTb+zE12SHS/xQVIShmBPhlNP12hD5poF2pbITW1Z4172d03HegaQWhLffdkRJYtAzp0AGcw==} + /@babel/traverse/7.20.13: + resolution: {integrity: sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.16.7 - '@babel/generator': 7.17.10 - '@babel/helper-environment-visitor': 7.16.7 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-hoist-variables': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - '@babel/parser': 7.17.10 - '@babel/types': 7.17.10 + '@babel/code-frame': 7.18.6 + '@babel/generator': 7.20.14 + '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-function-name': 7.19.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/traverse/7.18.5: - resolution: {integrity: sha512-aKXj1KT66sBj0vVzk6rEeAO6Z9aiiQ68wfDgge3nHhA/my6xMM/7HGQUNumKZaoa2qUPQ5whJG9aAifsxUKfLA==} + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.16.7 - '@babel/generator': 7.18.2 - '@babel/helper-environment-visitor': 7.18.2 - '@babel/helper-function-name': 7.17.9 - '@babel/helper-hoist-variables': 7.16.7 - '@babel/helper-split-export-declaration': 7.16.7 - '@babel/parser': 7.18.5 - '@babel/types': 7.18.4 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@babel/types/7.17.10: - resolution: {integrity: sha512-9O26jG0mBYfGkUYCYZRnBwbVLd1UZOICEr2Em6InB6jVfsAv1GKgwXHmrSg+WFWDmeKTA6vyTZiN8tCSM5Oo3A==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.16.7 + '@babel/helper-string-parser': 7.19.4 + '@babel/helper-validator-identifier': 7.19.1 to-fast-properties: 2.0.0 - /@babel/types/7.18.4: - resolution: {integrity: sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-validator-identifier': 7.16.7 - to-fast-properties: 2.0.0 - dev: true - /@bcoe/v8-coverage/0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -1207,186 +522,6 @@ packages: engines: {node: '>=0.1.90'} dev: false - /@commitlint/cli/17.0.3: - resolution: {integrity: sha512-oAo2vi5d8QZnAbtU5+0cR2j+A7PO8zuccux65R/EycwvsZrDVyW518FFrnJK2UQxbRtHFFIG+NjQ6vOiJV0Q8A==} - engines: {node: '>=v14'} - hasBin: true - dependencies: - '@commitlint/format': 17.0.0 - '@commitlint/lint': 17.0.3 - '@commitlint/load': 17.0.3 - '@commitlint/read': 17.0.0 - '@commitlint/types': 17.0.0 - execa: 5.1.1 - lodash: 4.17.21 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - yargs: 17.4.1 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - - /@commitlint/config-conventional/17.0.3: - resolution: {integrity: sha512-HCnzTm5ATwwwzNVq5Y57poS0a1oOOcd5pc1MmBpLbGmSysc4i7F/++JuwtdFPu16sgM3H9J/j2zznRLOSGVO2A==} - engines: {node: '>=v14'} - dependencies: - conventional-changelog-conventionalcommits: 5.0.0 - dev: true - - /@commitlint/config-validator/17.0.3: - resolution: {integrity: sha512-3tLRPQJKapksGE7Kee9axv+9z5I2GDHitDH4q63q7NmNA0wkB+DAorJ0RHz2/K00Zb1/MVdHzhCga34FJvDihQ==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - ajv: 8.11.0 - dev: true - - /@commitlint/cz-commitlint/17.0.3_yes7iyjckc3rubj3ixzwc3ince: - resolution: {integrity: sha512-360I6wnaUWzc23D8Xn4B/cu8thy8GDJPZ4QsYk4xjVzDDyXZ6oXJB0+OlwkpWpSvjuLYAmEKiImvo0yLTASmlg==} - engines: {node: '>=v14'} - peerDependencies: - commitizen: ^4.0.3 - inquirer: ^8.0.0 - dependencies: - '@commitlint/ensure': 17.0.0 - '@commitlint/load': 17.0.3 - '@commitlint/types': 17.0.0 - chalk: 4.1.2 - commitizen: 4.2.5 - inquirer: 8.2.4 - lodash: 4.17.21 - word-wrap: 1.2.3 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - - /@commitlint/ensure/17.0.0: - resolution: {integrity: sha512-M2hkJnNXvEni59S0QPOnqCKIK52G1XyXBGw51mvh7OXDudCmZ9tZiIPpU882p475Mhx48Ien1MbWjCP1zlyC0A==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - lodash: 4.17.21 - dev: true - - /@commitlint/execute-rule/17.0.0: - resolution: {integrity: sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==} - engines: {node: '>=v14'} - dev: true - - /@commitlint/format/17.0.0: - resolution: {integrity: sha512-MZzJv7rBp/r6ZQJDEodoZvdRM0vXu1PfQvMTNWFb8jFraxnISMTnPBWMMjr2G/puoMashwaNM//fl7j8gGV5lA==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - chalk: 4.1.2 - dev: true - - /@commitlint/is-ignored/17.0.3: - resolution: {integrity: sha512-/wgCXAvPtFTQZxsVxj7owLeRf5wwzcXLaYmrZPR4a87iD4sCvUIRl1/ogYrtOyUmHwWfQsvjqIB4mWE/SqWSnA==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - semver: 7.3.7 - dev: true - - /@commitlint/lint/17.0.3: - resolution: {integrity: sha512-2o1fk7JUdxBUgszyt41sHC/8Nd5PXNpkmuOo9jvGIjDHzOwXyV0PSdbEVTH3xGz9NEmjohFHr5l+N+T9fcxong==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/is-ignored': 17.0.3 - '@commitlint/parse': 17.0.0 - '@commitlint/rules': 17.0.0 - '@commitlint/types': 17.0.0 - dev: true - - /@commitlint/load/17.0.3: - resolution: {integrity: sha512-3Dhvr7GcKbKa/ey4QJ5MZH3+J7QFlARohUow6hftQyNjzoXXROm+RwpBes4dDFrXG1xDw9QPXA7uzrOShCd4bw==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/config-validator': 17.0.3 - '@commitlint/execute-rule': 17.0.0 - '@commitlint/resolve-extends': 17.0.3 - '@commitlint/types': 17.0.0 - '@types/node': 17.0.31 - chalk: 4.1.2 - cosmiconfig: 7.0.1 - cosmiconfig-typescript-loader: 2.0.2_l47be6km5p57gglrggidw5gsgm - lodash: 4.17.21 - resolve-from: 5.0.0 - typescript: 4.6.4 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - - /@commitlint/message/17.0.0: - resolution: {integrity: sha512-LpcwYtN+lBlfZijHUdVr8aNFTVpHjuHI52BnfoV01TF7iSLnia0jttzpLkrLmI8HNQz6Vhr9UrxDWtKZiMGsBw==} - engines: {node: '>=v14'} - dev: true - - /@commitlint/parse/17.0.0: - resolution: {integrity: sha512-cKcpfTIQYDG1ywTIr5AG0RAiLBr1gudqEsmAGCTtj8ffDChbBRxm6xXs2nv7GvmJN7msOt7vOKleLvcMmRa1+A==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/types': 17.0.0 - conventional-changelog-angular: 5.0.13 - conventional-commits-parser: 3.2.4 - dev: true - - /@commitlint/read/17.0.0: - resolution: {integrity: sha512-zkuOdZayKX3J6F6mPnVMzohK3OBrsEdOByIqp4zQjA9VLw1hMsDEFQ18rKgUc2adkZar+4S01QrFreDCfZgbxA==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/top-level': 17.0.0 - '@commitlint/types': 17.0.0 - fs-extra: 10.1.0 - git-raw-commits: 2.0.11 - dev: true - - /@commitlint/resolve-extends/17.0.3: - resolution: {integrity: sha512-H/RFMvrcBeJCMdnVC4i8I94108UDccIHrTke2tyQEg9nXQnR5/Hd6MhyNWkREvcrxh9Y+33JLb+PiPiaBxCtBA==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/config-validator': 17.0.3 - '@commitlint/types': 17.0.0 - import-fresh: 3.3.0 - lodash: 4.17.21 - resolve-from: 5.0.0 - resolve-global: 1.0.0 - dev: true - - /@commitlint/rules/17.0.0: - resolution: {integrity: sha512-45nIy3dERKXWpnwX9HeBzK5SepHwlDxdGBfmedXhL30fmFCkJOdxHyOJsh0+B0RaVsLGT01NELpfzJUmtpDwdQ==} - engines: {node: '>=v14'} - dependencies: - '@commitlint/ensure': 17.0.0 - '@commitlint/message': 17.0.0 - '@commitlint/to-lines': 17.0.0 - '@commitlint/types': 17.0.0 - execa: 5.1.1 - dev: true - - /@commitlint/to-lines/17.0.0: - resolution: {integrity: sha512-nEi4YEz04Rf2upFbpnEorG8iymyH7o9jYIVFBG1QdzebbIFET3ir+8kQvCZuBE5pKCtViE4XBUsRZz139uFrRQ==} - engines: {node: '>=v14'} - dev: true - - /@commitlint/top-level/17.0.0: - resolution: {integrity: sha512-dZrEP1PBJvodNWYPOYiLWf6XZergdksKQaT6i1KSROLdjf5Ai0brLOv5/P+CPxBeoj3vBxK4Ax8H1Pg9t7sHIQ==} - engines: {node: '>=v14'} - dependencies: - find-up: 5.0.0 - dev: true - - /@commitlint/types/17.0.0: - resolution: {integrity: sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==} - engines: {node: '>=v14'} - dependencies: - chalk: 4.1.2 - dev: true - /@cspotcode/source-map-support/0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} @@ -1402,67 +537,56 @@ packages: kuler: 2.0.0 dev: false - /@emotion/babel-plugin/11.10.5_@babel+core@7.17.10: - resolution: {integrity: sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==} - peerDependencies: - '@babel/core': ^7.0.0 + /@emotion/babel-plugin/11.10.6: + resolution: {integrity: sha512-p2dAqtVrkhSa7xz1u/m9eHYdLi+en8NowrmXeF/dKtJpU8lCWli8RUAati7NcSl0afsBott48pdnANuD0wh9QQ==} dependencies: - '@babel/core': 7.17.10 - '@babel/helper-module-imports': 7.16.7 - '@babel/plugin-syntax-jsx': 7.17.12_@babel+core@7.17.10 - '@babel/runtime': 7.20.6 + '@babel/helper-module-imports': 7.18.6 + '@babel/runtime': 7.20.13 '@emotion/hash': 0.9.0 '@emotion/memoize': 0.8.0 '@emotion/serialize': 1.1.1 babel-plugin-macros: 3.1.0 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 find-root: 1.1.0 source-map: 0.5.7 stylis: 4.1.3 dev: false - /@emotion/cache/11.7.1: - resolution: {integrity: sha512-r65Zy4Iljb8oyjtLeCuBH8Qjiy107dOYC6SJq7g7GV5UCQWMObY4SJDPGFjiiVpPrOJ2hmJOoBiYTC7hwx9E2A==} + /@emotion/cache/11.10.5: + resolution: {integrity: sha512-dGYHWyzTdmK+f2+EnIGBpkz1lKc4Zbj2KHd4cX3Wi8/OWr5pKslNjc3yABKH4adRGCvSX4VDC0i04mrrq0aiRA==} dependencies: - '@emotion/memoize': 0.7.5 - '@emotion/sheet': 1.1.0 - '@emotion/utils': 1.1.0 - '@emotion/weak-memoize': 0.2.5 - stylis: 4.0.13 + '@emotion/memoize': 0.8.0 + '@emotion/sheet': 1.2.1 + '@emotion/utils': 1.2.0 + '@emotion/weak-memoize': 0.3.0 + stylis: 4.1.3 dev: false /@emotion/hash/0.9.0: resolution: {integrity: sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==} dev: false - /@emotion/memoize/0.7.5: - resolution: {integrity: sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==} - dev: false - /@emotion/memoize/0.8.0: resolution: {integrity: sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==} dev: false - /@emotion/react/11.9.0_4j7i43ydqe3o2mbrnwpqlmvdyq: - resolution: {integrity: sha512-lBVSF5d0ceKtfKCDQJveNAtkC7ayxpVlgOohLgXqRwqWr9bOf4TZAFFyIcNngnV6xK6X4x2ZeXq7vliHkoVkxQ==} + /@emotion/react/11.10.6_gvifxuufrqkj4gcqfnnwrb44ya: + resolution: {integrity: sha512-6HT8jBmcSkfzO7mc+N1L9uwvOnlcGoix8Zn7srt+9ga0MjREo6lRpuVX0kzo6Jp6oTqDhREOFsygN6Ew4fEQbw==} peerDependencies: - '@babel/core': ^7.0.0 '@types/react': '*' react: '>=16.8.0' peerDependenciesMeta: - '@babel/core': - optional: true '@types/react': optional: true dependencies: - '@babel/core': 7.17.10 - '@babel/runtime': 7.20.6 - '@emotion/babel-plugin': 11.10.5_@babel+core@7.17.10 - '@emotion/cache': 11.7.1 + '@babel/runtime': 7.20.13 + '@emotion/babel-plugin': 11.10.6 + '@emotion/cache': 11.10.5 '@emotion/serialize': 1.1.1 - '@emotion/utils': 1.1.0 - '@emotion/weak-memoize': 0.2.5 + '@emotion/use-insertion-effect-with-fallbacks': 1.0.0_react@18.2.0 + '@emotion/utils': 1.2.0 + '@emotion/weak-memoize': 0.3.0 '@types/react': 18.0.8 hoist-non-react-statics: 3.3.2 react: 18.2.0 @@ -1475,46 +599,44 @@ packages: '@emotion/memoize': 0.8.0 '@emotion/unitless': 0.8.0 '@emotion/utils': 1.2.0 - csstype: 3.0.11 + csstype: 3.1.1 dev: false - /@emotion/sheet/1.1.0: - resolution: {integrity: sha512-u0AX4aSo25sMAygCuQTzS+HsImZFuS8llY8O7b9MDRzbJM0kVJlAz6KNDqcG7pOuQZJmj/8X/rAW+66kMnMW+g==} + /@emotion/sheet/1.2.1: + resolution: {integrity: sha512-zxRBwl93sHMsOj4zs+OslQKg/uhF38MB+OMKoCrVuS0nyTkqnau+BM3WGEoOptg9Oz45T/aIGs1qbVAsEFo3nA==} dev: false /@emotion/unitless/0.8.0: resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} dev: false - /@emotion/utils/1.1.0: - resolution: {integrity: sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==} + /@emotion/use-insertion-effect-with-fallbacks/1.0.0_react@18.2.0: + resolution: {integrity: sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 dev: false /@emotion/utils/1.2.0: resolution: {integrity: sha512-sn3WH53Kzpw8oQ5mgMmIzzyAaH2ZqFEbozVVBSYp538E06OSE6ytOp7pRAjNQR+Q/orwqdQYJSe2m3hCOeznkw==} dev: false - /@emotion/weak-memoize/0.2.5: - resolution: {integrity: sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==} + /@emotion/weak-memoize/0.3.0: + resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} dev: false - /@endemolshinegroup/cosmiconfig-typescript-loader/3.0.2_eqevhppa7sa2qvpxws2sflyfju: - resolution: {integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==} - engines: {node: '>=10.0.0'} - peerDependencies: - cosmiconfig: '>=6' + /@es-joy/jsdoccomment/0.36.1: + resolution: {integrity: sha512-922xqFsTpHs6D0BUiG4toiyPOMc8/jafnWKxz1KWgS4XzKPy2qXf1Pe6UFuNSCQqt6tOuhAWXBNuuyUhJmw9Vg==} + engines: {node: ^14 || ^16 || ^17 || ^18 || ^19} dependencies: - cosmiconfig: 7.0.1 - lodash.get: 4.4.2 - make-error: 1.3.6 - ts-node: 9.1.1_typescript@4.6.4 - tslib: 2.4.0 - transitivePeerDependencies: - - typescript + comment-parser: 1.3.1 + esquery: 1.4.2 + jsdoc-type-pratt-parser: 3.1.0 dev: true - /@esbuild/android-arm/0.16.8: - resolution: {integrity: sha512-r/qxYWkC3gY+Uq24wZacAUevGGb6d7d8VpyO8R0HGg31LXVi+eUr8XxHLCcmVzAjRjlZsZfzPelGpAKP/DafKg==} + /@esbuild/android-arm/0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -1522,8 +644,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64/0.16.8: - resolution: {integrity: sha512-TGQM/tdy5EV1KoFHu0+cMrKvPR8UBLGEfwS84PTCJ07KVp21Fr488aFEL2TCamz9CxoF1np36kY6XOSdLncg2Q==} + /@esbuild/android-arm64/0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -1531,8 +653,8 @@ packages: dev: true optional: true - /@esbuild/android-x64/0.16.8: - resolution: {integrity: sha512-HtA4BNfrf5Nyoz3G2IS3qW4A0yckPJ1NjCMA3SiOw3zS1IfpMkbepDGp/Gdokc/tASFd38IP2uIL3W6bHJzAQw==} + /@esbuild/android-x64/0.16.17: + resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -1540,8 +662,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64/0.16.8: - resolution: {integrity: sha512-Ks8K1HGFf6LEjLnnVqB/zyaJcv7zMjbJ9txRZAwQwj+bzg8/AP0TmLBMJf9Ahwn6ATnHrhORtpydP8A/mNthXg==} + /@esbuild/darwin-arm64/0.16.17: + resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -1549,8 +671,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64/0.16.8: - resolution: {integrity: sha512-XXh2070hatspZdG/uPqyHLFlHlGbytvT4JlqZuTU3AizcyOvmatPBSnuARvwCtJMw30wjjehcYY8DWPZ5UF2og==} + /@esbuild/darwin-x64/0.16.17: + resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -1558,8 +680,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64/0.16.8: - resolution: {integrity: sha512-6DJuU3+tG9LcHCG/4K3e0AnqmmKWhUc9WDNIhLHOOdleafXwZeFvsqwfyaowNg9yUw5KipRLvV3JJMQ8kT1aPg==} + /@esbuild/freebsd-arm64/0.16.17: + resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -1567,8 +689,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64/0.16.8: - resolution: {integrity: sha512-UcsCaR25C0tZWnoImprPzr7vMEMjLImlTQAIfWXU2wvjF4gBWKO9GEH2JlsKYqBjfWfGgH+HHoGSF/evZbKyxA==} + /@esbuild/freebsd-x64/0.16.17: + resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -1576,8 +698,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm/0.16.8: - resolution: {integrity: sha512-Hn36NbKd6Prh0Ehv1A2ObjfXtN2g81jTpmq1+uRLHrW7CJW+W8GdVgOCVwyeupADUIOOa8bars6IZGcjkwq21w==} + /@esbuild/linux-arm/0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -1585,8 +707,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64/0.16.8: - resolution: {integrity: sha512-WTL1v/OhSxgE7rEELRFNWskym0e+hKDMl4JZs7jpQp7218yJPOjdOEWsbzVEYv4G1cbbtWFvp9DtaAONtdCW5w==} + /@esbuild/linux-arm64/0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -1594,8 +716,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32/0.16.8: - resolution: {integrity: sha512-Jt+8YBFR2Pk68oS7E9z9PtmgJrDonGdEW3Camb2plZcztKpu/OxfnxFu8f41+TYpKhzUDm5uNMwqxRH3yDYrsQ==} + /@esbuild/linux-ia32/0.16.17: + resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -1603,8 +725,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.16.8: - resolution: {integrity: sha512-P+5J/U/WwPEwcKOFTlTQBK6Gqw4OytpfBvR2V+kBRb5jujwMOQ1aG8iKX14DAwCLks1YHXrXPwXXDPNWEWC59A==} + /@esbuild/linux-loong64/0.16.17: + resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -1612,8 +734,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el/0.16.8: - resolution: {integrity: sha512-RDSnljcka9UkVxcLtWv2lG5zcqkZUxIPY47ZSKytv4aoo8b05dH1gnKVWrxBZ+owp3dX48s2lXm6zp3hZHl8qw==} + /@esbuild/linux-mips64el/0.16.17: + resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -1621,8 +743,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64/0.16.8: - resolution: {integrity: sha512-fNGvIKXyigXYhSflraBsqR/EBhXhuH0/0r7IpU+3reh+8yX3VjowjC/dwmqHDOSQXbcj+HJb1o9kWYi+fJQ/3g==} + /@esbuild/linux-ppc64/0.16.17: + resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -1630,8 +752,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64/0.16.8: - resolution: {integrity: sha512-CsE1IKyVq/Y55PDnBUvm/e7XfvBgfb5kZxHbIEdmB9xt6cTcBkaVvv8EwLDZuYPkYI60WGl0UwyYYx9B2LLgkg==} + /@esbuild/linux-riscv64/0.16.17: + resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -1639,8 +761,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x/0.16.8: - resolution: {integrity: sha512-k8RIN4M+GWQAfJ/oGqwxZlpzOyGF8mxp5mH1A1WUJrpSUo4pe0zkq2EoP1KMQbYkjeJi45YsjwK3IOnSoueXbA==} + /@esbuild/linux-s390x/0.16.17: + resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -1648,8 +770,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64/0.16.8: - resolution: {integrity: sha512-u0hOo4E9PKyVDmPgJNeip1Tg63wxq+3KBJZKQFblqCl+d5N7n1h7pFwdN5ZzeLaaE645ep8aXzf76ndGnyOypg==} + /@esbuild/linux-x64/0.16.17: + resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -1657,8 +779,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64/0.16.8: - resolution: {integrity: sha512-wtENU7TOrnEbUes9aQuNe5PeBM4cTK5dn1W7v6XCr1LatJxAOn6Jn8yDGRsa2uKeEbAS5HeYx7uBAbTBd98OXQ==} + /@esbuild/netbsd-x64/0.16.17: + resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -1666,8 +788,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64/0.16.8: - resolution: {integrity: sha512-Y0DRVd/PIiutCpAYvRZHkpDNN3tdSQ1oyKy6xoh5TFTElAmzdlO7CO8ABs8689gq47lJ466cQEq9adJrKXrgXg==} + /@esbuild/openbsd-x64/0.16.17: + resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -1675,8 +797,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64/0.16.8: - resolution: {integrity: sha512-eKg0I3C5z4NTF396Yo9QByXA8DdRS7QiYPFf6JHcED0BanyLW/jX8csUy96wyGivTNrmU0mCOShbeLgzb0eX7w==} + /@esbuild/sunos-x64/0.16.17: + resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -1684,8 +806,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64/0.16.8: - resolution: {integrity: sha512-M2BZhsa7z8kMGre96HTMXpm266cfJkbdtcZgVfAL8hY4ptkh5MwNDasl85CDo++ffW2issVT+W/xIGJOr0v2pg==} + /@esbuild/win32-arm64/0.16.17: + resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -1693,8 +815,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32/0.16.8: - resolution: {integrity: sha512-mzzHVpnuHQT+IrptiW+uUswEMpVIueYuAkjwt1m4tQuVq9dGWqCA1y9EE+W3S19nMg6JvHMbaRjv3mlCcmi0rA==} + /@esbuild/win32-ia32/0.16.17: + resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -1702,8 +824,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64/0.16.8: - resolution: {integrity: sha512-Zgzyn7njXpSSe1YGQk03eW4uei4QoZKloe/TBQZXgQHo6ul/ux0BtYdLz3MZ8WDlvqTG3QnLV4+gtV5ordM0+g==} + /@esbuild/win32-x64/0.16.17: + resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -1711,15 +833,15 @@ packages: dev: true optional: true - /@eslint/eslintrc/1.2.3: - resolution: {integrity: sha512-uGo44hIwoLGNyduRpjdEpovcbMdd+Nv7amtmJxnKmI8xj6yd5LncmSwDa5NgX/41lIFJtkjD6YdVfgEzPfJ5UA==} + /@eslint/eslintrc/1.4.1: + resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.3.2 - globals: 13.13.0 - ignore: 5.2.0 + espree: 9.4.1 + globals: 13.20.0 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1728,494 +850,31 @@ packages: - supports-color dev: true - /@faker-js/faker/7.3.0: - resolution: {integrity: sha512-1W0PZezq2rxlAssoWemi9gFRD8IQxvf0FPL5Km3TOmGHFG7ib0TbFBJ0yC7D/1NsxunjNTK6WjUXV8ao/mKZ5w==} + /@faker-js/faker/7.6.0: + resolution: {integrity: sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==} engines: {node: '>=14.0.0', npm: '>=6.0.0'} dev: true - /@floating-ui/core/1.0.4: - resolution: {integrity: sha512-FPFLbg2b06MIw1dqk2SOEMAMX3xlrreGjcui5OTxfBDtaKTmh0kioOVjT8gcfl58juawL/yF+S+gnq8aUYQx/Q==} + /@floating-ui/core/1.2.1: + resolution: {integrity: sha512-LSqwPZkK3rYfD7GKoIeExXOyYx6Q1O4iqZWwIehDNuv3Dv425FIAE8PRwtAx1imEolFTHgBEcoFHm9MDnYgPCg==} dev: false - /@floating-ui/dom/1.0.9: - resolution: {integrity: sha512-nF9P6/BoARdt+h+CdUW3td4EUVngeDONCGuzRgnZveRZiJETx63cxhinE0JaPPC2tbcdTY9IGZocS5/7ag3xRg==} + /@floating-ui/dom/1.2.1: + resolution: {integrity: sha512-Rt45SmRiV8eU+xXSB9t0uMYiQ/ZWGE/jumse2o3i5RGlyvcbqOF4q+1qBnzLE2kZ5JGhq0iMkcGXUKbFe7MpTA==} dependencies: - '@floating-ui/core': 1.0.4 + '@floating-ui/core': 1.2.1 dev: false - /@graphql-codegen/cli/2.6.2_b3mcazu44o3sueqtutmadehm2y: - resolution: {integrity: sha512-UO75msoVgvLEvfjCezM09cQQqp32+mR8Ma1ACsBpr7nroFvHbgcu2ulx1cMovg4sxDBCsvd9Eq/xOOMpARUxtw==} - hasBin: true - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/core': 2.5.1_graphql@15.8.0 - '@graphql-codegen/plugin-helpers': 2.4.2_graphql@15.8.0 - '@graphql-tools/apollo-engine-loader': 7.2.19_graphql@15.8.0 - '@graphql-tools/code-file-loader': 7.2.18_graphql@15.8.0 - '@graphql-tools/git-loader': 7.1.17_graphql@15.8.0 - '@graphql-tools/github-loader': 7.2.23_graphql@15.8.0 - '@graphql-tools/graphql-file-loader': 7.3.15_graphql@15.8.0 - '@graphql-tools/json-file-loader': 7.3.15_graphql@15.8.0 - '@graphql-tools/load': 7.5.14_graphql@15.8.0 - '@graphql-tools/prisma-loader': 7.1.24_kdmixh5skunrm3ztvltzjhqkpa - '@graphql-tools/url-loader': 7.9.25_kdmixh5skunrm3ztvltzjhqkpa - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - change-case-all: 1.0.14 - chokidar: 3.5.3 - common-tags: 1.8.2 - cosmiconfig: 7.0.1 - debounce: 1.2.1 - dependency-graph: 0.11.0 - detect-indent: 6.1.0 - glob: 7.2.3 - globby: 11.1.0 - graphql: 15.8.0 - graphql-config: 4.3.1_b3mcazu44o3sueqtutmadehm2y - inquirer: 8.2.4 - is-glob: 4.0.3 - json-to-pretty-yaml: 1.2.2 - latest-version: 5.1.0 - listr: 0.14.3 - listr-update-renderer: 0.5.0_listr@0.14.3 - log-symbols: 4.1.0 - minimatch: 4.2.1 - mkdirp: 1.0.4 - string-env-interpolation: 1.0.1 - ts-log: 2.2.4 - tslib: 2.3.1 - valid-url: 1.0.9 - wrap-ansi: 7.0.0 - yaml: 1.10.2 - yargs: 17.4.1 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - encoding - - supports-color - - typescript - - utf-8-validate - - zen-observable - - zenObservable - dev: true - - /@graphql-codegen/core/2.5.1_graphql@15.8.0: - resolution: {integrity: sha512-alctBVl2hMnBXDLwkgmnFPrZVIiBDsWJSmxJcM4GKg1PB23+xuov35GE47YAyAhQItE1B1fbYnbb1PtGiDZ4LA==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 2.4.2_graphql@15.8.0 - '@graphql-tools/schema': 8.3.14_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.3.1 - dev: true - - /@graphql-codegen/plugin-helpers/2.4.2_graphql@15.8.0: - resolution: {integrity: sha512-LJNvwAPv/sKtI3RnRDm+nPD+JeOfOuSOS4FFIpQCMUCyMnFcchV/CPTTv7tT12fLUpEg6XjuFfDBvOwndti30Q==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - change-case-all: 1.0.14 - common-tags: 1.8.2 - graphql: 15.8.0 - import-from: 4.0.0 - lodash: 4.17.21 - tslib: 2.3.1 - dev: true - - /@graphql-codegen/schema-ast/2.4.1_graphql@15.8.0: - resolution: {integrity: sha512-bIWlKk/ShoVJfghA4Rt1OWnd34/dQmZM/vAe6fu6QKyOh44aAdqPtYQ2dbTyFXoknmu504etKJGEDllYNUJRfg==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 2.4.2_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.3.1 - dev: true - - /@graphql-codegen/typescript-operations/2.4.2_graphql@15.8.0: - resolution: {integrity: sha512-0/Jk+FxJVOdznSJ+G3KKPbMr2gK67yQetUAUS0FzV9FptVDFkklK/BazKqJJE5dNrj9ubuI2BafXPzSTN4M2Ug==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 2.4.2_graphql@15.8.0 - '@graphql-codegen/typescript': 2.5.1_graphql@15.8.0 - '@graphql-codegen/visitor-plugin-common': 2.9.1_graphql@15.8.0 - auto-bind: 4.0.0 - graphql: 15.8.0 - tslib: 2.4.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-codegen/typescript-react-apollo/3.2.16_3jt5ibhtazvod5hvf7xqhzsx4q: - resolution: {integrity: sha512-/tsu7yzVNFfJszfZne9J1Qg4xpriNnoD0pXR+3BJUQjy4cAtApP5H1WTTwdCJCIlPMYJi8r9GFZ3qaYE6mMd3g==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql-tag: ^2.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 2.4.2_graphql@15.8.0 - '@graphql-codegen/visitor-plugin-common': 2.9.1_graphql@15.8.0 - auto-bind: 4.0.0 - change-case-all: 1.0.14 - graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 - tslib: 2.4.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-codegen/typescript/2.5.1_graphql@15.8.0: - resolution: {integrity: sha512-D/9V2VfVIE4Mu5UiMGQtxyFU5xe1ZkAZi8g/IsqymW8rqlhTwsGhtk4JR55qPfOYxR8G94RJSJpzgNakRneytw==} - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 2.4.2_graphql@15.8.0 - '@graphql-codegen/schema-ast': 2.4.1_graphql@15.8.0 - '@graphql-codegen/visitor-plugin-common': 2.9.1_graphql@15.8.0 - auto-bind: 4.0.0 - graphql: 15.8.0 - tslib: 2.4.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-codegen/visitor-plugin-common/2.9.1_graphql@15.8.0: - resolution: {integrity: sha512-j9eGOSGt+sJcwv0ijhZiQ2cF/0ponscekNVoF+vHdOT4RB0qgOQxykPBk6EbKxIHECnkdV8ARdPVTA21A93/QQ==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@graphql-codegen/plugin-helpers': 2.4.2_graphql@15.8.0 - '@graphql-tools/optimize': 1.2.1_graphql@15.8.0 - '@graphql-tools/relay-operation-optimizer': 6.4.14_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - auto-bind: 4.0.0 - change-case-all: 1.0.14 - dependency-graph: 0.11.0 - graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 - parse-filepath: 1.0.2 - tslib: 2.4.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-tools/apollo-engine-loader/7.2.19_graphql@15.8.0: - resolution: {integrity: sha512-4wb32BZjSAsPYIXxqqhnF1lYrLxNIPx2M3gPWU9BSEJNGhe7noDxfXXoWoGC0vwpliX30eBdbGU4a6Ab9RSkwQ==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - cross-undici-fetch: 0.4.7 - graphql: 15.8.0 - sync-fetch: 0.4.1 - tslib: 2.4.0 - transitivePeerDependencies: - - encoding - dev: true - - /@graphql-tools/batch-execute/8.4.10_graphql@15.8.0: - resolution: {integrity: sha512-rugHElhKYZgb6w3mBuNdgjMIo0LW5QbwIwJ1bc9VKWh51dCQmNwJS1Nx8qFWUjhmjVJWbvKWqYb6Z7wTGnOc3g==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - dataloader: 2.1.0 - graphql: 15.8.0 - tslib: 2.4.0 - value-or-promise: 1.0.11 - dev: true - - /@graphql-tools/code-file-loader/7.2.18_graphql@15.8.0: - resolution: {integrity: sha512-zHJ2SPuWqK2/rlyxsb4maQo2locqNsZX3Dp5QoiXhUEsrf5vHkEHlp68ldcoFSzveBhXvIAdNrQVgVhzBQ3q7Q==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/graphql-tag-pluck': 7.2.10_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - globby: 11.1.0 - graphql: 15.8.0 - tslib: 2.4.0 - unixify: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@graphql-tools/delegate/8.7.11_graphql@15.8.0: - resolution: {integrity: sha512-Rm9ThQHPOz/78OsoB8pZF+8YJm7cHsFMbGa67Q2hLmEAf2xLmNKvsfKfnxYuLnfmpdRxdSmab/ecHZ0qW/DS5w==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/batch-execute': 8.4.10_graphql@15.8.0 - '@graphql-tools/schema': 8.3.14_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - dataloader: 2.1.0 - graphql: 15.8.0 - graphql-executor: 0.0.23_graphql@15.8.0 - tslib: 2.4.0 - value-or-promise: 1.0.11 - dev: true - - /@graphql-tools/git-loader/7.1.17_graphql@15.8.0: - resolution: {integrity: sha512-MTmH8kphIcXzNrsE4Y34tsk+mWrnq1l2zx6VbkssjcdJFLfLCU2/hU4Rxt7Rx96YCHHfdGzwsDJubQhs4RCf9w==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/graphql-tag-pluck': 7.2.10_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - is-glob: 4.0.3 - micromatch: 4.0.5 - tslib: 2.4.0 - unixify: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@graphql-tools/github-loader/7.2.23_graphql@15.8.0: - resolution: {integrity: sha512-725ovtuB+uTnNk7cvyItXt31T1GJpdzMN9zUj+NgK3FO9gLkx6mdJfW1Hzc27Fb8is39WaNI232Uf2FLLxuVlA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/graphql-tag-pluck': 7.2.10_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - cross-undici-fetch: 0.4.7 - graphql: 15.8.0 - sync-fetch: 0.4.1 - tslib: 2.4.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-tools/graphql-file-loader/7.3.15_graphql@15.8.0: - resolution: {integrity: sha512-Sw9XadW3bxH3ACNXE8Tsjh+BVedRCJTuRn3NfO//zOYQZiC3HDTzq9MvnW1a00SmPCXg47rxQpq9L3bdLX0Ohg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/import': 6.6.17_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - globby: 11.1.0 - graphql: 15.8.0 - tslib: 2.4.0 - unixify: 1.0.0 - dev: true - - /@graphql-tools/graphql-tag-pluck/7.2.10_graphql@15.8.0: - resolution: {integrity: sha512-j2f0Wzqy69XerNlTTTpSF1weLZN2z8NRrqP0lW/J3bKK9IgOy5eNDzcUUGujcn+MvjkpmjRaD4VFuxN75S2ozQ==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@babel/parser': 7.17.10 - '@babel/traverse': 7.17.10 - '@babel/types': 7.17.10 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.4.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@graphql-tools/import/6.6.17_graphql@15.8.0: - resolution: {integrity: sha512-rnKT2ZaFM+IbSFE0iOGG5sqdaDDv/XHHH43VIpV4ozryKoK9re3qrhEgfDOHaW47zMLGKrHLPCC/QGf0IpJquw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - resolve-from: 5.0.0 - tslib: 2.4.0 - dev: true - - /@graphql-tools/json-file-loader/7.3.15_graphql@15.8.0: - resolution: {integrity: sha512-aPxIWBahYVPAVeGxzAsoEsLm+KVfxPcx/wIUZZX8+02YYmuICNT0TeSAk6Q6iuKMJCS7gtU5eYVdEM7qzC2EfA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - globby: 11.1.0 - graphql: 15.8.0 - tslib: 2.4.0 - unixify: 1.0.0 - dev: true - - /@graphql-tools/load/7.5.14_graphql@15.8.0: - resolution: {integrity: sha512-K7H4tKKGFliRyjbG92KCuv2fS2pHlRxkcNcDtuEQlA8dhthS9qGB14Ld4eHDuRq1RvHTS6mye5NE1alyY44K9g==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/schema': 8.3.14_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - p-limit: 3.1.0 - tslib: 2.4.0 - dev: true - - /@graphql-tools/merge/8.2.14_graphql@15.8.0: - resolution: {integrity: sha512-od6lTF732nwPX91G79eiJf+dyRBHxCaKe7QL4IYeH4d1k+NYqx/ihYpFJNjDaqxmpHH92Hr+TxsP9SYRK3/QKg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.4.0 - - /@graphql-tools/mock/8.6.12_graphql@15.8.0: - resolution: {integrity: sha512-o4plehiIgwqIB3TJDlEx7s6CHucTnrYsv4LqBXfyiXN10E9x0Ab44UxXjePbAd9yJFYEUYp0thqb7WjI3/3cmQ==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/schema': 8.3.14_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - fast-json-stable-stringify: 2.1.0 - graphql: 15.8.0 - tslib: 2.4.0 - dev: false - - /@graphql-tools/optimize/1.2.1_graphql@15.8.0: - resolution: {integrity: sha512-OAg1TYtYfeQMYlfsxNaY0FbEG4xsjdOHZw7/KFT1BdoCDtvl2NlYKoxh97mgZk2XmjqZULw/PS2E1MOk6IQapw==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - graphql: 15.8.0 - tslib: 2.4.0 - dev: true - - /@graphql-tools/prisma-loader/7.1.24_kdmixh5skunrm3ztvltzjhqkpa: - resolution: {integrity: sha512-bjezLITZ5far9RuPbDoE7MfU0F/kqZRo+y5mQIPzQXWaXIQSQvdXjBdh+tNWqSRGSbD1aMeZG2wpD96feqs/wA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/url-loader': 7.9.25_kdmixh5skunrm3ztvltzjhqkpa - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - '@types/js-yaml': 4.0.5 - '@types/json-stable-stringify': 1.0.34 - '@types/jsonwebtoken': 8.5.8 - chalk: 4.1.2 - debug: 4.3.4 - dotenv: 16.0.0 - graphql: 15.8.0 - graphql-request: 4.3.0_graphql@15.8.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - isomorphic-fetch: 3.0.0 - js-yaml: 4.1.0 - json-stable-stringify: 1.0.1 - jsonwebtoken: 8.5.1 - lodash: 4.17.21 - replaceall: 0.1.6 - scuid: 1.1.0 - tslib: 2.4.0 - yaml-ast-parser: 0.0.43 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - encoding - - supports-color - - utf-8-validate - dev: true - - /@graphql-tools/relay-operation-optimizer/6.4.14_graphql@15.8.0: - resolution: {integrity: sha512-vqch2M/sIUfMmlRJ4eCupiHlVPXWOPVpHX9yCZwRrpNg0Eaokyc57NSjJuKVV3KcvcJKf03qfMK2PxFbfDvN9A==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@ardatan/relay-compiler': 12.0.0_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.4.0 - transitivePeerDependencies: - - encoding - - supports-color - dev: true - - /@graphql-tools/schema/8.3.14_graphql@15.8.0: - resolution: {integrity: sha512-ntA4pKwyyPHFFKcIw17FfqGZAiTNZl0tHieQpPIkN5fPc4oHcXOfaj1vBjtIC/Qn6H7XBBu3l2kMA8FpobdxTQ==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/merge': 8.2.14_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.4.0 - value-or-promise: 1.0.11 - - /@graphql-tools/url-loader/7.9.25_kdmixh5skunrm3ztvltzjhqkpa: - resolution: {integrity: sha512-l1C4xym79RbZk3Fe4P2JeNxDogQWPOETZrb+jCHniQ7GT7bjpM20ZcS9oqSNgMyPKQE4vGjV3zRph8vItRQgOg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/delegate': 8.7.11_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - '@graphql-tools/wrap': 8.4.20_graphql@15.8.0 - '@n1ru4l/graphql-live-query': 0.9.0_graphql@15.8.0 - '@types/ws': 8.5.3 - cross-undici-fetch: 0.4.7 - dset: 3.1.2 - extract-files: 11.0.0 - graphql: 15.8.0 - graphql-ws: 5.9.0_graphql@15.8.0 - isomorphic-ws: 4.0.1_ws@8.8.0 - meros: 1.2.0_@types+node@17.0.31 - sync-fetch: 0.4.1 - tslib: 2.4.0 - value-or-promise: 1.0.11 - ws: 8.8.0 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - encoding - - utf-8-validate - dev: true - - /@graphql-tools/utils/8.6.13_graphql@15.8.0: - resolution: {integrity: sha512-FiVqrQzj4cgz0HcZ3CxUs8NtBGPZFpmsVyIgwmL6YCwIhjJQnT72h8G3/vk5zVfjfesht85YGp0inWWuoCKWzg==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - graphql: 15.8.0 - tslib: 2.4.0 - - /@graphql-tools/wrap/8.4.20_graphql@15.8.0: - resolution: {integrity: sha512-qzlrOg9ddaA+30OdG8NU/zDPV2sbJ4Rvool+Zf0nLVRqkAUP/1uxXTQBLgEJKO1xxTlhJ+27FCJ42lG6JG9ZrA==} - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - dependencies: - '@graphql-tools/delegate': 8.7.11_graphql@15.8.0 - '@graphql-tools/schema': 8.3.14_graphql@15.8.0 - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - graphql: 15.8.0 - tslib: 2.4.0 - value-or-promise: 1.0.11 - dev: true - - /@graphql-typed-document-node/core/3.1.1_graphql@15.8.0: - resolution: {integrity: sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg==} - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - dev: false - - /@hookform/resolvers/2.9.10_react-hook-form@7.40.0: - resolution: {integrity: sha512-JIL1DgJIlH9yuxcNGtyhsWX/PgNltz+5Gr6+8SX9fhXc/hPbEIk6wPI82nhgvp3uUb6ZfAM5mqg/x7KR7NAb+A==} + /@hookform/resolvers/2.9.11_react-hook-form@7.43.1: + resolution: {integrity: sha512-bA3aZ79UgcHj7tFV7RlgThzwSSHZgvfbt2wprldRkYBcMopdMvHyO17Wwp/twcJasNFischFfS7oz8Katz8DdQ==} peerDependencies: react-hook-form: ^7.0.0 dependencies: - react-hook-form: 7.40.0_react@18.2.0 + react-hook-form: 7.43.1_react@18.2.0 dev: false - /@humanwhocodes/config-array/0.9.5: - resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} + /@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -2225,12 +884,13 @@ packages: - supports-color dev: true - /@humanwhocodes/object-schema/1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} dev: true - /@iarna/toml/2.2.5: - resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + /@humanwhocodes/object-schema/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true /@istanbuljs/load-nyc-config/1.1.0: @@ -2249,54 +909,53 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console/28.1.0: - resolution: {integrity: sha512-tscn3dlJFGay47kb4qVruQg/XWlmvU0xp3EJOjzzY+sBaI+YgwKcvAmTcyYU7xEiLLIY5HCdWRooAL8dqkFlDA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/console/29.4.3: + resolution: {integrity: sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 chalk: 4.1.2 - jest-message-util: 28.1.0 - jest-util: 28.1.0 + jest-message-util: 29.4.3 + jest-util: 29.4.3 slash: 3.0.0 dev: true - /@jest/core/28.1.0: - resolution: {integrity: sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/core/29.4.3_ts-node@10.9.1: + resolution: {integrity: sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true dependencies: - '@jest/console': 28.1.0 - '@jest/reporters': 28.1.0 - '@jest/test-result': 28.1.0 - '@jest/transform': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@jest/console': 29.4.3 + '@jest/reporters': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 ansi-escapes: 4.3.2 chalk: 4.1.2 - ci-info: 3.3.0 + ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.10 - jest-changed-files: 28.0.2 - jest-config: 28.1.0_@types+node@17.0.31 - jest-haste-map: 28.1.0 - jest-message-util: 28.1.0 - jest-regex-util: 28.0.2 - jest-resolve: 28.1.0 - jest-resolve-dependencies: 28.1.0 - jest-runner: 28.1.0 - jest-runtime: 28.1.0 - jest-snapshot: 28.1.0 - jest-util: 28.1.0 - jest-validate: 28.1.0 - jest-watcher: 28.1.0 + jest-changed-files: 29.4.3 + jest-config: 29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4 + jest-haste-map: 29.4.3 + jest-message-util: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.4.3 + jest-resolve-dependencies: 29.4.3 + jest-runner: 29.4.3 + jest-runtime: 29.4.3 + jest-snapshot: 29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 + jest-watcher: 29.4.3 micromatch: 4.0.5 - pretty-format: 28.1.0 - rimraf: 3.0.2 + pretty-format: 29.4.3 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: @@ -2304,124 +963,60 @@ packages: - ts-node dev: true - /@jest/core/28.1.0_ts-node@10.9.1: - resolution: {integrity: sha512-/2PTt0ywhjZ4NwNO4bUqD9IVJfmFVhVKGlhvSpmEfUCuxYf/3NHcKmRFI+I71lYzbTT3wMuYpETDCTHo81gC/g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/console': 28.1.0 - '@jest/reporters': 28.1.0 - '@jest/test-result': 28.1.0 - '@jest/transform': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - ansi-escapes: 4.3.2 - chalk: 4.1.2 - ci-info: 3.3.0 - exit: 0.1.2 - graceful-fs: 4.2.10 - jest-changed-files: 28.0.2 - jest-config: 28.1.0_rcy5nlo3uetwcso5jthu6pby7u - jest-haste-map: 28.1.0 - jest-message-util: 28.1.0 - jest-regex-util: 28.0.2 - jest-resolve: 28.1.0 - jest-resolve-dependencies: 28.1.0 - jest-runner: 28.1.0 - jest-runtime: 28.1.0 - jest-snapshot: 28.1.0 - jest-util: 28.1.0 - jest-validate: 28.1.0 - jest-watcher: 28.1.0 - micromatch: 4.0.5 - pretty-format: 28.1.0 - rimraf: 3.0.2 - slash: 3.0.0 - strip-ansi: 6.0.1 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - - /@jest/environment/28.1.0: - resolution: {integrity: sha512-S44WGSxkRngzHslhV6RoAExekfF7Qhwa6R5+IYFa81mpcj0YgdBnRSmvHe3SNwOt64yXaE5GG8Y2xM28ii5ssA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/fake-timers': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - jest-mock: 28.1.0 - dev: true - - /@jest/environment/29.3.1: - resolution: {integrity: sha512-pMmvfOPmoa1c1QpfFW0nXYtNLpofqo4BrCIk6f2kW4JFeNlHV2t3vd+3iDLf31e2ot2Mec0uqZfmI+U0K2CFag==} + /@jest/environment/29.4.3: + resolution: {integrity: sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 - '@types/node': 17.0.31 - jest-mock: 29.3.1 + '@jest/fake-timers': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 + jest-mock: 29.4.3 dev: true - /@jest/expect-utils/28.1.0: - resolution: {integrity: sha512-5BrG48dpC0sB80wpeIX5FU6kolDJI4K0n5BM9a5V38MGx0pyRvUBSS0u2aNTdDzmOrCjhOg8pGs6a20ivYkdmw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - jest-get-type: 28.0.2 - dev: true - - /@jest/expect/28.1.0: - resolution: {integrity: sha512-be9ETznPLaHOmeJqzYNIXv1ADEzENuQonIoobzThOYPuK/6GhrWNIJDVTgBLCrz3Am73PyEU2urQClZp0hLTtA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - expect: 28.1.0 - jest-snapshot: 28.1.0 - transitivePeerDependencies: - - supports-color - dev: true - - /@jest/fake-timers/28.1.0: - resolution: {integrity: sha512-Xqsf/6VLeAAq78+GNPzI7FZQRf5cCHj1qgQxCjws9n8rKw8r1UYoeaALwBvyuzOkpU3c1I6emeMySPa96rxtIg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.0 - '@sinonjs/fake-timers': 9.1.2 - '@types/node': 17.0.31 - jest-message-util: 28.1.0 - jest-mock: 28.1.0 - jest-util: 28.1.0 - dev: true - - /@jest/fake-timers/29.3.1: - resolution: {integrity: sha512-iHTL/XpnDlFki9Tq0Q1GGuVeQ8BHZGIYsvCO5eN/O/oJaRzofG9Xndd9HuSDBI/0ZS79pg0iwn07OMTQ7ngF2A==} + /@jest/expect-utils/29.4.3: + resolution: {integrity: sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 - '@sinonjs/fake-timers': 9.1.2 - '@types/node': 17.0.31 - jest-message-util: 29.3.1 - jest-mock: 29.3.1 - jest-util: 29.3.1 + jest-get-type: 29.4.3 dev: true - /@jest/globals/28.1.0: - resolution: {integrity: sha512-3m7sTg52OTQR6dPhsEQSxAvU+LOBbMivZBwOvKEZ+Rb+GyxVnXi9HKgOTYkx/S99T8yvh17U4tNNJPIEQmtwYw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/expect/29.4.3: + resolution: {integrity: sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 28.1.0 - '@jest/expect': 28.1.0 - '@jest/types': 28.1.0 + expect: 29.4.3 + jest-snapshot: 29.4.3 transitivePeerDependencies: - supports-color dev: true - /@jest/reporters/28.1.0: - resolution: {integrity: sha512-qxbFfqap/5QlSpIizH9c/bFCDKsQlM4uAKSOvZrP+nIdrjqre3FmKzpTtYyhsaVcOSNK7TTt2kjm+4BJIjysFA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/fake-timers/29.4.3: + resolution: {integrity: sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.4.3 + '@sinonjs/fake-timers': 10.0.2 + '@types/node': 18.11.18 + jest-message-util: 29.4.3 + jest-mock: 29.4.3 + jest-util: 29.4.3 + dev: true + + /@jest/globals/29.4.3: + resolution: {integrity: sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.4.3 + '@jest/expect': 29.4.3 + '@jest/types': 29.4.3 + jest-mock: 29.4.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/reporters/29.4.3: + resolution: {integrity: sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -2429,185 +1024,158 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 28.1.0 - '@jest/test-result': 28.1.0 - '@jest/transform': 28.1.0 - '@jest/types': 28.1.0 - '@jridgewell/trace-mapping': 0.3.10 - '@types/node': 17.0.31 + '@jest/console': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@jridgewell/trace-mapping': 0.3.17 + '@types/node': 18.11.18 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.10 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.4 - jest-util: 28.1.0 - jest-worker: 28.1.0 + istanbul-reports: 3.1.5 + jest-message-util: 29.4.3 + jest-util: 29.4.3 + jest-worker: 29.4.3 slash: 3.0.0 string-length: 4.0.2 strip-ansi: 6.0.1 - terminal-link: 2.1.1 - v8-to-istanbul: 9.0.0 + v8-to-istanbul: 9.1.0 transitivePeerDependencies: - supports-color dev: true - /@jest/schemas/28.0.2: - resolution: {integrity: sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@sinclair/typebox': 0.23.5 - dev: true - - /@jest/schemas/29.0.0: - resolution: {integrity: sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==} + /@jest/schemas/29.4.3: + resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.24.51 + '@sinclair/typebox': 0.25.23 dev: true - /@jest/source-map/28.0.2: - resolution: {integrity: sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/source-map/29.4.3: + resolution: {integrity: sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jridgewell/trace-mapping': 0.3.10 + '@jridgewell/trace-mapping': 0.3.17 callsites: 3.1.0 graceful-fs: 4.2.10 dev: true - /@jest/test-result/28.1.0: - resolution: {integrity: sha512-sBBFIyoPzrZho3N+80P35A5oAkSKlGfsEFfXFWuPGBsW40UAjCkGakZhn4UQK4iQlW2vgCDMRDOob9FGKV8YoQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/test-result/29.4.3: + resolution: {integrity: sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 28.1.0 - '@jest/types': 28.1.0 + '@jest/console': 29.4.3 + '@jest/types': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer/28.1.0: - resolution: {integrity: sha512-tZCEiVWlWNTs/2iK9yi6o3AlMfbbYgV4uuZInSVdzZ7ftpHZhCMuhvk2HLYhCZzLgPFQ9MnM1YaxMnh3TILFiQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/test-sequencer/29.4.3: + resolution: {integrity: sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 28.1.0 + '@jest/test-result': 29.4.3 graceful-fs: 4.2.10 - jest-haste-map: 28.1.0 + jest-haste-map: 29.4.3 slash: 3.0.0 dev: true - /@jest/transform/28.1.0: - resolution: {integrity: sha512-omy2xe5WxlAfqmsTjTPxw+iXRTRnf+NtX0ToG+4S0tABeb4KsKmPUHq5UBuwunHg3tJRwgEQhEp0M/8oiatLEA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /@jest/transform/29.4.3: + resolution: {integrity: sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.17.10 - '@jest/types': 28.1.0 - '@jridgewell/trace-mapping': 0.3.10 + '@babel/core': 7.20.12 + '@jest/types': 29.4.3 + '@jridgewell/trace-mapping': 0.3.17 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 - convert-source-map: 1.8.0 + convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.10 - jest-haste-map: 28.1.0 - jest-regex-util: 28.0.2 - jest-util: 28.1.0 + jest-haste-map: 29.4.3 + jest-regex-util: 29.4.3 + jest-util: 29.4.3 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - write-file-atomic: 4.0.1 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color dev: true - /@jest/types/28.1.0: - resolution: {integrity: sha512-xmEggMPr317MIOjjDoZ4ejCSr9Lpbt/u34+dvc99t7DS8YirW5rwZEhzKPC2BMUFkUhI48qs6qLUSGw5FuL0GA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.0.2 - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.31 - '@types/yargs': 17.0.10 - chalk: 4.1.2 - dev: true - - /@jest/types/29.3.1: - resolution: {integrity: sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==} + /@jest/types/29.4.3: + resolution: {integrity: sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.0.0 + '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 17.0.31 - '@types/yargs': 17.0.10 + '@types/node': 18.11.18 + '@types/yargs': 17.0.22 chalk: 4.1.2 dev: true - /@josephg/resolvable/1.0.1: - resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} - dev: false - /@jridgewell/gen-mapping/0.1.1: resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.1 - '@jridgewell/sourcemap-codec': 1.4.13 - dev: true + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 - /@jridgewell/gen-mapping/0.3.1: - resolution: {integrity: sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==} + /@jridgewell/gen-mapping/0.3.2: + resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.1 - '@jridgewell/sourcemap-codec': 1.4.13 - '@jridgewell/trace-mapping': 0.3.10 - dev: true + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.17 - /@jridgewell/resolve-uri/3.0.7: - resolution: {integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==} + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/set-array/1.1.1: - resolution: {integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==} + /@jridgewell/set-array/1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} dev: true - /@jridgewell/sourcemap-codec/1.4.13: - resolution: {integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==} - dev: true + /@jridgewell/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping/0.3.10: - resolution: {integrity: sha512-Q0YbBd6OTsXm8Y21+YUSDXupHnodNC2M4O18jtd3iwJ3+vMZNdKGols0a9G6JOK0dcJ3IdUUHoh908ZI6qhk8Q==} + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: - '@jridgewell/resolve-uri': 3.0.7 - '@jridgewell/sourcemap-codec': 1.4.13 - dev: true + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 /@jridgewell/trace-mapping/0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.0.7 - '@jridgewell/sourcemap-codec': 1.4.13 + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 dev: true - /@mapbox/node-pre-gyp/1.0.9: - resolution: {integrity: sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==} + /@mapbox/node-pre-gyp/1.0.10: + resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} hasBin: true dependencies: detect-libc: 2.0.1 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.6.7 + node-fetch: 2.6.9 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 - semver: 7.3.7 - tar: 6.1.11 + semver: 7.3.8 + tar: 6.1.13 transitivePeerDependencies: - encoding - supports-color @@ -2621,8 +1189,8 @@ packages: set-cookie-parser: 2.5.1 dev: true - /@mswjs/interceptors/0.17.6: - resolution: {integrity: sha512-201pBIWehTURb6q8Gheu4Zhvd3Ox1U4BJq5KiOQsYzkWyfiOG4pwcz5hPZIEryztgrf8/sdwABpvY757xMmfrQ==} + /@mswjs/interceptors/0.17.7: + resolution: {integrity: sha512-dPInyLEF6ybLxfKGY99euI+mbT6ls4PVO9qPgGIsRk3+2VZVfT7fo9Sq6Q8eKT9W38QtUyhG74hN7xMtKWioGw==} engines: {node: '>=14'} dependencies: '@open-draft/until': 1.0.3 @@ -2637,26 +1205,17 @@ packages: - supports-color dev: true - /@n1ru4l/graphql-live-query/0.9.0_graphql@15.8.0: - resolution: {integrity: sha512-BTpWy1e+FxN82RnLz4x1+JcEewVdfmUhV1C6/XYD5AjS7PQp9QFF7K8bCD6gzPTr2l+prvqOyVueQhFJxB1vfg==} - peerDependencies: - graphql: ^15.4.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - dev: true + /@next/env/13.1.6: + resolution: {integrity: sha512-s+W9Fdqh5MFk6ECrbnVmmAOwxKQuhGMT7xXHrkYIBMBcTiOqNWhv5KbJIboKR5STXxNXl32hllnvKaffzFaWQg==} - /@next/env/13.0.3: - resolution: {integrity: sha512-/4WzeG61Ot/PxsghXkSqQJ6UohFfwXoZ3dtsypmR9EBP+OIax9JRq0trq8Z/LCT9Aq4JbihVkaazRWguORjTAw==} - dev: false - - /@next/eslint-plugin-next/12.1.4: - resolution: {integrity: sha512-BRy565KVK6Cdy8LHaHTiwctLqBu/RT84RLpESug70BDJzBlV8QBvODyx/j7wGhvYqp9kvstM05lyb6JaTkSCcQ==} + /@next/eslint-plugin-next/13.1.1: + resolution: {integrity: sha512-SBrOFS8PC3nQ5aeZmawJkjKkWjwK9RoxvBSv/86nZp0ubdoVQoko8r8htALd9ufp16NhacCdqhu9bzZLDWtALQ==} dependencies: glob: 7.1.7 dev: true - /@next/swc-android-arm-eabi/13.0.3: - resolution: {integrity: sha512-uxfUoj65CdFc1gX2q7GtBX3DhKv9Kn343LMqGNvXyuTpYTGMmIiVY7b9yF8oLWRV0gVKqhZBZifUmoPE8SJU6Q==} + /@next/swc-android-arm-eabi/13.1.6: + resolution: {integrity: sha512-F3/6Z8LH/pGlPzR1AcjPFxx35mPqjE5xZcf+IL+KgbW9tMkp7CYi1y7qKrEWU7W4AumxX/8OINnDQWLiwLasLQ==} engines: {node: '>= 10'} cpu: [arm] os: [android] @@ -2664,8 +1223,8 @@ packages: dev: false optional: true - /@next/swc-android-arm64/13.0.3: - resolution: {integrity: sha512-t2k+WDfg7Cq2z/EnalKGsd/9E5F4Hdo1xu+UzZXYDpKUI9zgE6Bz8ajQb8m8txv3qOaWdKuDa5j5ziq9Acd1Xw==} + /@next/swc-android-arm64/13.1.6: + resolution: {integrity: sha512-cMwQjnB8vrYkWyK/H0Rf2c2pKIH4RGjpKUDvbjVAit6SbwPDpmaijLio0LWFV3/tOnY6kvzbL62lndVA0mkYpw==} engines: {node: '>= 10'} cpu: [arm64] os: [android] @@ -2673,8 +1232,8 @@ packages: dev: false optional: true - /@next/swc-darwin-arm64/13.0.3: - resolution: {integrity: sha512-wV6j6SZ1bc/YHOLCLk9JVqaZTCCey6HBV7inl2DriHsHqIcO6F3+QiYf0KXwRP9BE0GSZZrYd5mZQm2JPTHdJA==} + /@next/swc-darwin-arm64/13.1.6: + resolution: {integrity: sha512-KKRQH4DDE4kONXCvFMNBZGDb499Hs+xcFAwvj+rfSUssIDrZOlyfJNy55rH5t2Qxed1e4K80KEJgsxKQN1/fyw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] @@ -2682,8 +1241,8 @@ packages: dev: false optional: true - /@next/swc-darwin-x64/13.0.3: - resolution: {integrity: sha512-jaI2CMuYWvUtRixV3AIjUhnxUDU1FKOR+8hADMhYt3Yz+pCKuj4RZ0n0nY5qUf3qT1AtvnJXEgyatSFJhSp/wQ==} + /@next/swc-darwin-x64/13.1.6: + resolution: {integrity: sha512-/uOky5PaZDoaU99ohjtNcDTJ6ks/gZ5ykTQDvNZDjIoCxFe3+t06bxsTPY6tAO6uEAw5f6vVFX5H5KLwhrkZCA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] @@ -2691,8 +1250,8 @@ packages: dev: false optional: true - /@next/swc-freebsd-x64/13.0.3: - resolution: {integrity: sha512-nbyT0toBTJrcj5TCB9pVnQpGJ3utGyQj4CWegZs1ulaeUQ5Z7CS/qt8nRyYyOKYHtOdSCJ9Nw5F/RgKNkdpOdw==} + /@next/swc-freebsd-x64/13.1.6: + resolution: {integrity: sha512-qaEALZeV7to6weSXk3Br80wtFQ7cFTpos/q+m9XVRFggu+8Ib895XhMWdJBzew6aaOcMvYR6KQ6JmHA2/eMzWw==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] @@ -2700,8 +1259,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm-gnueabihf/13.0.3: - resolution: {integrity: sha512-1naLxYvRUQCoFCU1nMkcQueRc0Iux9xBv1L5pzH2ejtIWFg8BrSgyuluJG4nyAhFCx4WG863IEIkAaefOowVdA==} + /@next/swc-linux-arm-gnueabihf/13.1.6: + resolution: {integrity: sha512-OybkbC58A1wJ+JrJSOjGDvZzrVEQA4sprJejGqMwiZyLqhr9Eo8FXF0y6HL+m1CPCpPhXEHz/2xKoYsl16kNqw==} engines: {node: '>= 10'} cpu: [arm] os: [linux] @@ -2709,8 +1268,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-gnu/13.0.3: - resolution: {integrity: sha512-3Z4A8JkuGWpMVbUhUPQInK/SLY+kijTT78Q/NZCrhLlyvwrVxaQALJNlXzxDLraUgv4oVH0Wz/FIw1W9PUUhxA==} + /@next/swc-linux-arm64-gnu/13.1.6: + resolution: {integrity: sha512-yCH+yDr7/4FDuWv6+GiYrPI9kcTAO3y48UmaIbrKy8ZJpi7RehJe3vIBRUmLrLaNDH3rY1rwoHi471NvR5J5NQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -2718,8 +1277,8 @@ packages: dev: false optional: true - /@next/swc-linux-arm64-musl/13.0.3: - resolution: {integrity: sha512-MoYe9SM40UaunTjC+01c9OILLH3uSoeri58kDMu3KF/EFEvn1LZ6ODeDj+SLGlAc95wn46hrRJS2BPmDDE+jFQ==} + /@next/swc-linux-arm64-musl/13.1.6: + resolution: {integrity: sha512-ECagB8LGX25P9Mrmlc7Q/TQBb9rGScxHbv/kLqqIWs2fIXy6Y/EiBBiM72NTwuXUFCNrWR4sjUPSooVBJJ3ESQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] @@ -2727,8 +1286,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-gnu/13.0.3: - resolution: {integrity: sha512-z22T5WGnRanjLMXdF0NaNjSpBlEzzY43t5Ysp3nW1oI6gOkub6WdQNZeHIY7A2JwkgSWZmtjLtf+Fzzz38LHeQ==} + /@next/swc-linux-x64-gnu/13.1.6: + resolution: {integrity: sha512-GT5w2mruk90V/I5g6ScuueE7fqj/d8Bui2qxdw6lFxmuTgMeol5rnzAv4uAoVQgClOUO/MULilzlODg9Ib3Y4Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -2736,8 +1295,8 @@ packages: dev: false optional: true - /@next/swc-linux-x64-musl/13.0.3: - resolution: {integrity: sha512-ZOMT7zjBFmkusAtr47k8xs/oTLsNlTH6xvYb+iux7yly2hZGwhfBLzPGBsbeMZukZ96IphJTagT+C033s6LNVA==} + /@next/swc-linux-x64-musl/13.1.6: + resolution: {integrity: sha512-keFD6KvwOPzmat4TCnlnuxJCQepPN+8j3Nw876FtULxo8005Y9Ghcl7ACcR8GoiKoddAq8gxNBrpjoxjQRHeAQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] @@ -2745,8 +1304,8 @@ packages: dev: false optional: true - /@next/swc-win32-arm64-msvc/13.0.3: - resolution: {integrity: sha512-Q4BM16Djl+Oah9UdGrvjFYgoftYB2jNd+rtRGPX5Mmxo09Ry/KiLbOZnoUyoIxKc1xPyfqMXuaVsAFQLYs0KEQ==} + /@next/swc-win32-arm64-msvc/13.1.6: + resolution: {integrity: sha512-OwertslIiGQluFvHyRDzBCIB07qJjqabAmINlXUYt7/sY7Q7QPE8xVi5beBxX/rxTGPIbtyIe3faBE6Z2KywhQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] @@ -2754,8 +1313,8 @@ packages: dev: false optional: true - /@next/swc-win32-ia32-msvc/13.0.3: - resolution: {integrity: sha512-Sa8yGkNeRUsic8Qjf7MLIAfP0p0+einK/wIqJ8UO1y76j+8rRQu42AMs5H4Ax1fm9GEYq6I8njHtY59TVpTtGQ==} + /@next/swc-win32-ia32-msvc/13.1.6: + resolution: {integrity: sha512-g8zowiuP8FxUR9zslPmlju7qYbs2XBtTLVSxVikPtUDQedhcls39uKYLvOOd1JZg0ehyhopobRoH1q+MHlIN/w==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] @@ -2763,8 +1322,8 @@ packages: dev: false optional: true - /@next/swc-win32-x64-msvc/13.0.3: - resolution: {integrity: sha512-IAptmSqA7k4tQzaw2NAkoEjj3+Dz9ceuvlEHwYh770MMDL4V0ku2m+UHrmn5HUCEDHhgwwjg2nyf6728q2jr1w==} + /@next/swc-win32-x64-msvc/13.1.6: + resolution: {integrity: sha512-Ls2OL9hi3YlJKGNdKv8k3X/lLgc3VmLG3a/DeTkAd+lAituJp8ZHmRmm9f9SL84fT3CotlzcgbdaCDfFwFA6bA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -2790,7 +1349,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.15.0 dev: true /@open-draft/until/1.0.3: @@ -2802,165 +1361,128 @@ packages: engines: {node: '>=10'} dev: false + /@pkgr/utils/2.3.1: + resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dependencies: + cross-spawn: 7.0.3 + is-glob: 4.0.3 + open: 8.4.1 + picocolors: 1.0.0 + tiny-glob: 0.2.9 + tslib: 2.5.0 + dev: true + /@popperjs/core/2.11.6: resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} dev: false - /@protobufjs/aspromise/1.1.2: - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - dev: false - - /@protobufjs/base64/1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: false - - /@protobufjs/codegen/2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: false - - /@protobufjs/eventemitter/1.1.0: - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - dev: false - - /@protobufjs/fetch/1.1.0: - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + /@prisma/client/4.10.1_prisma@4.10.1: + resolution: {integrity: sha512-VonXLJZybdt8e5XZH5vnIGCRNnIh6OMX1FS3H/yzMGLT3STj5TJ/OkMcednrvELgk8PK89Vo3aSh51MWNO0axA==} + engines: {node: '>=14.17'} + requiresBuild: true + peerDependencies: + prisma: '*' + peerDependenciesMeta: + prisma: + optional: true dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 + '@prisma/engines-version': 4.10.1-2.aead147aa326ccb985dcfed5b065b4fdabd44b19 + prisma: 4.10.1 dev: false - /@protobufjs/float/1.0.2: - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + /@prisma/engines-version/4.10.1-2.aead147aa326ccb985dcfed5b065b4fdabd44b19: + resolution: {integrity: sha512-tsjTho7laDhf9EJ9EnDxAPEf7yrigSMDhniXeU4YoWc7azHAs4GPxRi2P9LTFonmHkJLMOLjR77J1oIP8Ife1w==} dev: false - /@protobufjs/inquire/1.1.0: - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - dev: false + /@prisma/engines/4.10.1: + resolution: {integrity: sha512-B3tcTxjx196nuAu1GOTKO9cGPUgTFHYRdkPkTS4m5ptb2cejyBlH9X7GOfSt3xlI7p4zAJDshJP4JJivCg9ouA==} + requiresBuild: true - /@protobufjs/path/1.1.2: - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - dev: false - - /@protobufjs/pool/1.1.0: - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - dev: false - - /@protobufjs/utf8/1.1.0: - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - dev: false - - /@redis/bloom/1.1.0_@redis+client@1.3.1: - resolution: {integrity: sha512-9QovlxmpRtvxVbN0UBcv8WfdSMudNZZTFqCsnBszcQXqaZb/TVe30ScgGEO7u1EAIacTPAo7/oCYjYAxiHLanQ==} + /@redis/bloom/1.2.0_@redis+client@1.5.5: + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} peerDependencies: '@redis/client': ^1.0.0 dependencies: - '@redis/client': 1.3.1 + '@redis/client': 1.5.5 dev: false - /@redis/client/1.3.1: - resolution: {integrity: sha512-FKEHpOu7Q4+cuM6VWjA54988K5jkqOxvhvj2hEGSx086lvKwXyjzO7Lya7hcirZ0/Db8FLBJN7UXsJuyoNWPJg==} + /@redis/client/1.5.5: + resolution: {integrity: sha512-fuMnpDYSjT5JXR9rrCW1YWA4L8N/9/uS4ImT3ZEC/hcaQRI1D/9FvwjriRj1UvepIgzZXthFVKMNRzP/LNL7BQ==} engines: {node: '>=14'} dependencies: - cluster-key-slot: 1.1.1 + cluster-key-slot: 1.1.2 generic-pool: 3.9.0 yallist: 4.0.0 dev: false - /@redis/graph/1.1.0_@redis+client@1.3.1: + /@redis/graph/1.1.0_@redis+client@1.5.5: resolution: {integrity: sha512-16yZWngxyXPd+MJxeSr0dqh2AIOi8j9yXKcKCwVaKDbH3HTuETpDVPcLujhFYVPtYrngSco31BUcSa9TH31Gqg==} peerDependencies: '@redis/client': ^1.0.0 dependencies: - '@redis/client': 1.3.1 + '@redis/client': 1.5.5 dev: false - /@redis/json/1.0.4_@redis+client@1.3.1: + /@redis/json/1.0.4_@redis+client@1.5.5: resolution: {integrity: sha512-LUZE2Gdrhg0Rx7AN+cZkb1e6HjoSKaeeW8rYnt89Tly13GBI5eP4CwDVr+MY8BAYfCg4/N15OUrtLoona9uSgw==} peerDependencies: '@redis/client': ^1.0.0 dependencies: - '@redis/client': 1.3.1 + '@redis/client': 1.5.5 dev: false - /@redis/search/1.1.0_@redis+client@1.3.1: - resolution: {integrity: sha512-NyFZEVnxIJEybpy+YskjgOJRNsfTYqaPbK/Buv6W2kmFNaRk85JiqjJZA5QkRmWvGbyQYwoO5QfDi2wHskKrQQ==} + /@redis/search/1.1.1_@redis+client@1.5.5: + resolution: {integrity: sha512-pqCXTc5e7wJJgUuJiC3hBgfoFRoPxYzwn0BEfKgejTM7M/9zP3IpUcqcjgfp8hF+LoV8rHZzcNTz7V+pEIY7LQ==} peerDependencies: '@redis/client': ^1.0.0 dependencies: - '@redis/client': 1.3.1 + '@redis/client': 1.5.5 dev: false - /@redis/time-series/1.0.3_@redis+client@1.3.1: - resolution: {integrity: sha512-OFp0q4SGrTH0Mruf6oFsHGea58u8vS/iI5+NpYdicaM+7BgqBZH8FFvNZ8rYYLrUO/QRqMq72NpXmxLVNcdmjA==} + /@redis/time-series/1.0.4_@redis+client@1.5.5: + resolution: {integrity: sha512-ThUIgo2U/g7cCuZavucQTQzA9g9JbDDY2f64u3AbAoz/8vE2lt2U37LamDUVChhaDA3IRT9R6VvJwqnUfTJzng==} peerDependencies: '@redis/client': ^1.0.0 dependencies: - '@redis/client': 1.3.1 + '@redis/client': 1.5.5 dev: false - /@rushstack/eslint-patch/1.0.8: - resolution: {integrity: sha512-ZK5v4bJwgXldAUA8r3q9YKfCwOqoHTK/ZqRjSeRXQrBXWouoPnS4MQtgC4AXGiiBuUu5wxrRgTlv0ktmM4P1Aw==} - dev: true - - /@samverschueren/stream-to-observable/0.3.1_rxjs@6.6.7: - resolution: {integrity: sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==} - engines: {node: '>=6'} - peerDependencies: - rxjs: '*' - zen-observable: '*' - peerDependenciesMeta: - rxjs: - optional: true - zen-observable: - optional: true + /@runtipi/postgres-migrations/5.3.0: + resolution: {integrity: sha512-pTAx/8j843L4n9f4TOCRh6eGFQD827jY64EVy5luHZNOfaiX1KI6SaWpzMfNPdAwy1od0k5FZrDJjpyHXC0ppg==} + engines: {node: '>10.17.0'} + hasBin: true dependencies: - any-observable: 0.3.0_rxjs@6.6.7 - rxjs: 6.6.7 + pg: 8.9.0 + sql-template-strings: 2.2.2 transitivePeerDependencies: - - zenObservable + - pg-native + dev: false + + /@rushstack/eslint-patch/1.2.0: + resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} dev: true - /@sinclair/typebox/0.23.5: - resolution: {integrity: sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==} + /@sinclair/typebox/0.25.23: + resolution: {integrity: sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==} dev: true - /@sinclair/typebox/0.24.51: - resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==} - dev: true - - /@sindresorhus/is/0.14.0: - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} - engines: {node: '>=6'} - dev: true - - /@sinonjs/commons/1.8.3: - resolution: {integrity: sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==} + /@sinonjs/commons/2.0.0: + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers/9.1.2: - resolution: {integrity: sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==} + /@sinonjs/fake-timers/10.0.2: + resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} dependencies: - '@sinonjs/commons': 1.8.3 + '@sinonjs/commons': 2.0.0 dev: true - /@sqltools/formatter/1.2.3: - resolution: {integrity: sha512-O3uyB/JbkAEMZaP3YqyHH7TMnex7tWyCbCI4EfJdOCoN6HIhqdJBWTM6aCCiWQ/5f5wxjgU735QAIpJbjDvmzg==} - dev: false - - /@swc/helpers/0.4.11: - resolution: {integrity: sha512-rEUrBSGIoSFuYxwBYtlUFMlE2CwGhmW+w9355/5oduSw8e5h2+Tj4UrAGNNgP9915++wj5vkQo0UuOBqOAq4nw==} + /@swc/helpers/0.4.14: + resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: - tslib: 2.4.0 - dev: false - - /@szmarczak/http-timer/1.1.2: - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} - engines: {node: '>=6'} - dependencies: - defer-to-connect: 1.1.3 - dev: true + tslib: 2.5.0 /@tabler/core/1.0.0-beta16_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-jg/IiGLGHeQive1b+DfOR8JA0DB/ihc/wIEMohLkVHplC/R66uYF/8zg5Ptk5OeV2XAkn+UaPwsfcdmmJR4utw==} @@ -3014,15 +1536,15 @@ packages: optional: true dependencies: '@popperjs/core': 2.11.6 - '@tabler/icons': 1.116.1_biqbaboplfbrettd7655fr4n2y + '@tabler/icons': 1.119.0_biqbaboplfbrettd7655fr4n2y bootstrap: 5.2.3_@popperjs+core@2.11.6 transitivePeerDependencies: - react - react-dom dev: false - /@tabler/icons/1.116.1_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-Ge/UZLhkuvr6G9wJNuFBf9WX0gt8v/3nZxBOz+Od6Yj5vE7fF6ViNBcPEPBw0Y+mzuy/g+h78nwpPLVPv4yGGg==} + /@tabler/icons/1.119.0_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-Fk3Qq4w2SXcTjc/n1cuL5bccPkylrOMo7cYpQIf/yw6zP76LQV9dtLcHQUjFiUnaYuswR645CnURIhlafyAh9g==} peerDependencies: react: ^16.x || 17.x || 18.x react-dom: ^16.x || 17.x || 18.x @@ -3036,16 +1558,38 @@ packages: react-dom: 18.2.0_react@18.2.0 dev: false - /@testing-library/dom/8.19.0: - resolution: {integrity: sha512-6YWYPPpxG3e/xOo6HIWwB/58HukkwIVTOaZ0VwdMVjhRUX/01E4FtQbck9GazOOj7MXHc5RBzMrU86iBJHbI+A==} + /@tanstack/query-core/4.24.6: + resolution: {integrity: sha512-Tfru6YTDTCpX7dKVwHp/sosw/dNjEdzrncduUjIkQxn7n7u+74HT2ZrGtwwrU6Orws4x7zp3FKRqBPWVVhpx9w==} + dev: false + + /@tanstack/react-query/4.24.6_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-pbJUVZCS4pcXS0kZiY+mVJ01ude0GrH5OXT2g9whcqSveRG/YVup/XdA9NdRpSMGkP2HxDRxxRNsTXkniWeIIA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@tanstack/query-core': 4.24.6 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + use-sync-external-store: 1.2.0_react@18.2.0 + dev: false + + /@testing-library/dom/8.20.0: + resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==} engines: {node: '>=12'} dependencies: - '@babel/code-frame': 7.16.7 - '@babel/runtime': 7.20.6 - '@types/aria-query': 4.2.2 + '@babel/code-frame': 7.18.6 + '@babel/runtime': 7.20.13 + '@types/aria-query': 5.0.1 aria-query: 5.1.3 chalk: 4.1.2 - dom-accessibility-api: 0.5.14 + dom-accessibility-api: 0.5.16 lz-string: 1.4.4 pretty-format: 27.5.1 dev: true @@ -3054,13 +1598,13 @@ packages: resolution: {integrity: sha512-N5ixQ2qKpi5OLYfwQmUb/5mSV9LneAcaUfp32pn4yCnpb8r/Yz0pXFPck21dIicKmi+ta5WRAknkZCfA8refMA==} engines: {node: '>=8', npm: '>=6', yarn: '>=1'} dependencies: - '@adobe/css-tools': 4.0.1 - '@babel/runtime': 7.20.6 + '@adobe/css-tools': 4.1.0 + '@babel/runtime': 7.20.13 '@types/testing-library__jest-dom': 5.14.5 aria-query: 5.1.3 chalk: 3.0.0 css.escape: 1.5.1 - dom-accessibility-api: 0.5.14 + dom-accessibility-api: 0.5.16 lodash: 4.17.21 redent: 3.0.0 dev: true @@ -3072,20 +1616,20 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 dependencies: - '@babel/runtime': 7.20.6 - '@testing-library/dom': 8.19.0 + '@babel/runtime': 7.20.13 + '@testing-library/dom': 8.20.0 '@types/react-dom': 18.0.3 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true - /@testing-library/user-event/14.4.3_aaq3sbffpfe3jnxzm2zngsddei: + /@testing-library/user-event/14.4.3_yxlyej73nftwmh2fiao7paxmlm: resolution: {integrity: sha512-kCUc5MEwaEMakkO5x7aoD+DLi02ehmEM2QCGWvNqAS1dV/fAvORWEjnjsEIvml59M7Y5kCkWN6fCCyPOe8OL6Q==} engines: {node: '>=12', npm: '>=6'} peerDependencies: '@testing-library/dom': '>=7.21.4' dependencies: - '@testing-library/dom': 8.19.0 + '@testing-library/dom': 8.20.0 dev: true /@tootallnate/once/2.0.0: @@ -3093,6 +1637,55 @@ packages: engines: {node: '>= 10'} dev: true + /@trpc/client/10.11.1_@trpc+server@10.11.1: + resolution: {integrity: sha512-6aHY27YomzyUAlKhJE4jJulzDjc6vAKAKoWqAmoYbEEhApvyDrMo52bdYqqsukjxvA/L/uPhjOcPU5OsO+x+pA==} + peerDependencies: + '@trpc/server': 10.11.1 + dependencies: + '@trpc/server': 10.11.1 + dev: false + + /@trpc/next/10.11.1_ck2pp32np6ey6osxngwuwfgwei: + resolution: {integrity: sha512-lIXdYvD3pU7ryX5/F4jviaSKQTAHF+yUzApyp60o9QOjiYrMs1UL7sP7eBD1cDo45Ma3ffgzvl6o+6Y3JvsdAQ==} + peerDependencies: + '@tanstack/react-query': ^4.3.8 + '@trpc/client': 10.11.1 + '@trpc/react-query': ^10.8.0 + '@trpc/server': 10.11.1 + next: '*' + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@tanstack/react-query': 4.24.6_biqbaboplfbrettd7655fr4n2y + '@trpc/client': 10.11.1_@trpc+server@10.11.1 + '@trpc/react-query': 10.11.1_2pugaexxlcekgcbbhj75jqmiqi + '@trpc/server': 10.11.1 + next: 13.1.6_4u6c57fe2msmz5uzpiwwufo4my + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-ssr-prepass: 1.5.0_react@18.2.0 + dev: false + + /@trpc/react-query/10.11.1_2pugaexxlcekgcbbhj75jqmiqi: + resolution: {integrity: sha512-GqM0idzlQMi6upK/8IOa117UXckJDsRY+UHVkeawtkLi4hWvk82ic+zXRNw5MDYqKCC2CAlp8JIyrKfOuBdXqw==} + peerDependencies: + '@tanstack/react-query': ^4.3.8 + '@trpc/client': 10.11.1 + '@trpc/server': 10.11.1 + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + '@tanstack/react-query': 4.24.6_biqbaboplfbrettd7655fr4n2y + '@trpc/client': 10.11.1_@trpc+server@10.11.1 + '@trpc/server': 10.11.1 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + dev: false + + /@trpc/server/10.11.1: + resolution: {integrity: sha512-7FnvuaNsSl6HLloh0a297McS4yjhbqg/bw1h/XOAKduNPUQwXNmJf48X1PAsD8ODtO1Rrjz9TeynJD7uCEn0xQ==} + dev: false + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -3109,124 +1702,88 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true - /@types/accepts/1.3.5: - resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} - dependencies: - '@types/node': 17.0.31 - dev: false - - /@types/acorn/4.0.6: - resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - dependencies: - '@types/estree': 0.0.51 - dev: false - - /@types/aria-query/4.2.2: - resolution: {integrity: sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==} + /@types/aria-query/5.0.1: + resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} dev: true - /@types/babel__core/7.1.19: - resolution: {integrity: sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==} + /@types/babel__core/7.20.0: + resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.18.5 - '@babel/types': 7.18.4 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 - '@types/babel__traverse': 7.17.1 + '@types/babel__traverse': 7.18.3 dev: true /@types/babel__generator/7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.18.4 + '@babel/types': 7.20.7 dev: true /@types/babel__template/7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.18.5 - '@babel/types': 7.18.4 + '@babel/parser': 7.20.15 + '@babel/types': 7.20.7 dev: true - /@types/babel__traverse/7.17.1: - resolution: {integrity: sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==} + /@types/babel__traverse/7.18.3: + resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.18.4 + '@babel/types': 7.20.7 dev: true /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 17.0.31 + '@types/node': 18.11.18 + dev: true /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 + dev: true /@types/cookie/0.4.1: resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} dev: true - /@types/cors/2.8.12: - resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==} - /@types/debug/4.1.7: resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} dependencies: '@types/ms': 0.7.31 - /@types/estree-jsx/0.0.1: - resolution: {integrity: sha512-gcLAYiMfQklDCPjQegGn0TBAn9it05ISEsEhlKQUddIk7o2XDokOcTN7HBO8tznM0D9dGezvHEfRZBfZf6me0A==} + /@types/express-serve-static-core/4.17.33: + resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/estree': 0.0.51 - dev: false - - /@types/estree/0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: false - - /@types/express-serve-static-core/4.17.28: - resolution: {integrity: sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==} - dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 + dev: true - /@types/express-serve-static-core/4.17.29: - resolution: {integrity: sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==} - dependencies: - '@types/node': 17.0.31 - '@types/qs': 6.9.7 - '@types/range-parser': 1.2.4 - dev: false - - /@types/express/4.17.13: - resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==} + /@types/express/4.17.17: + resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==} dependencies: '@types/body-parser': 1.19.2 - '@types/express-serve-static-core': 4.17.28 + '@types/express-serve-static-core': 4.17.33 '@types/qs': 6.9.7 - '@types/serve-static': 1.13.10 + '@types/serve-static': 1.15.0 + dev: true /@types/fs-extra/9.0.13: resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 dev: true - /@types/glob/7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + /@types/graceful-fs/4.1.6: + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/minimatch': 3.0.5 - '@types/node': 17.0.31 - dev: false - - /@types/graceful-fs/4.1.5: - resolution: {integrity: sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==} - dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 dev: true /@types/hast/2.3.4: @@ -3255,25 +1812,21 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest/27.5.0: - resolution: {integrity: sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g==} + /@types/jest/29.4.0: + resolution: {integrity: sha512-VaywcGQ9tPorCX/Jkkni7RWGFfI11whqzs8dvxF41P17Z+z872thvEvlIbznjPJ02kl1HMX3LmLOonsj2n7HeQ==} dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 + expect: 29.4.3 + pretty-format: 29.4.3 dev: true /@types/js-levenshtein/1.1.1: resolution: {integrity: sha512-qC4bCqYGy1y/NP7dDVr7KJarn+PbX1nSpwA7JXdu0HxT3QYjO8MJ+cntENtHFVy2dRAyBV23OZ6MxsW1AM1L8g==} dev: true - /@types/js-yaml/4.0.5: - resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} - dev: true - /@types/jsdom/20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -3282,88 +1835,51 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/json-stable-stringify/1.0.34: - resolution: {integrity: sha512-s2cfwagOQAS8o06TcwKfr9Wx11dNGbH2E9vJz1cqV+a/LOyhWNLUNd6JSRYNzvB4d29UuJX2M0Dj9vE1T8fRXw==} - dev: true - /@types/json5/0.0.29: - resolution: {integrity: sha1-7ihweulOEdK4J7y+UnC86n8+ce4=} + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/jsonwebtoken/8.5.8: - resolution: {integrity: sha512-zm6xBQpFDIDM6o9r6HSgDeIcLy82TKWctCXEPbJJcXb5AKmi5BNNdLXneixK4lplX3PqIVcwLBCGE/kAGnlD4A==} + /@types/jsonwebtoken/9.0.1: + resolution: {integrity: sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 dev: true - /@types/jsonwebtoken/8.5.9: - resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==} - dependencies: - '@types/node': 17.0.31 - dev: true - - /@types/keyv/3.1.4: - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - dependencies: - '@types/node': 17.0.31 - dev: true - - /@types/long/4.0.2: - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - dev: false - /@types/mdast/3.0.10: resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} dependencies: '@types/unist': 2.0.6 dev: false - /@types/mdurl/1.0.2: - resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} - dev: false - - /@types/mime/1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - - /@types/minimatch/3.0.5: - resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - dev: false - - /@types/minimist/1.2.2: - resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} + /@types/mime/3.0.1: + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true /@types/ms/0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - /@types/node-cron/3.0.2: - resolution: {integrity: sha512-SK/4GYWiWvGLPl/yv+Tm5oLYbzMx1V3y7CsNTvOb3vF8O9oXH11U6/zckISHnBl4YH8MvXHFIUXbYoBONSdmzw==} + /@types/node-cron/3.0.7: + resolution: {integrity: sha512-9PuLtBboc/+JJ7FshmJWv769gDonTpItN0Ol5TMwclpSQNjVyB2SRxSKBcTtbSysSL5R7Oea06kTTFNciCoYwA==} dev: true - /@types/node/10.17.60: - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - dev: false - - /@types/node/17.0.31: - resolution: {integrity: sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==} - - /@types/normalize-package-data/2.4.1: - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + /@types/node/18.11.18: + resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: false - /@types/pg/8.6.5: - resolution: {integrity: sha512-tOkGtAqRVkHa/PVZicq67zuujI4Oorfglsr2IbKofDwBSysnaqSx7W1mDqFqdkGE6Fbgh+PZAl0r/BWON/mozw==} + /@types/pg/8.6.6: + resolution: {integrity: sha512-O2xNmXebtwVekJDD+02udOncjVcMZQuTEQEMpKJ0ZRf5E7/9JJX3izhKUcUifBkyKpljyUM6BTgy2trmviKlpw==} dependencies: - '@types/node': 17.0.31 - pg-protocol: 1.5.0 + '@types/node': 18.11.18 + pg-protocol: 1.6.0 pg-types: 2.2.0 dev: true - /@types/prettier/2.6.0: - resolution: {integrity: sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw==} + /@types/prettier/2.7.2: + resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} dev: true /@types/prop-types/15.7.5: @@ -3371,9 +1887,11 @@ packages: /@types/qs/6.9.7: resolution: {integrity: sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==} + dev: true /@types/range-parser/1.2.4: resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + dev: true /@types/react-dom/18.0.3: resolution: {integrity: sha512-1RRW9kst+67gveJRYPxGmVy8eVJ05O43hg77G2j5m76/RFJtMbcfAs2viQ2UNsvvDg8F7OfQZx8qQcl6ymygaQ==} @@ -3381,8 +1899,8 @@ packages: '@types/react': 18.0.8 dev: true - /@types/react-transition-group/4.4.4: - resolution: {integrity: sha512-7gAPz7anVK5xzbeQW9wFBDg7G++aPLAFY0QaSMOou9rJZpbuI58WAuJrgu+qR92l61grlnCUe7AFX8KGahAgug==} + /@types/react-transition-group/4.4.5: + resolution: {integrity: sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==} dependencies: '@types/react': 18.0.8 dev: false @@ -3392,30 +1910,26 @@ packages: dependencies: '@types/prop-types': 15.7.5 '@types/scheduler': 0.16.2 - csstype: 3.0.11 - - /@types/responselike/1.0.0: - resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} - dependencies: - '@types/node': 17.0.31 - dev: true + csstype: 3.1.1 /@types/scheduler/0.16.2: resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} - /@types/semver/7.3.12: - resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==} + /@types/semver/7.3.13: + resolution: {integrity: sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==} + dev: true - /@types/serve-static/1.13.10: - resolution: {integrity: sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==} + /@types/serve-static/1.15.0: + resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: - '@types/mime': 1.3.2 - '@types/node': 17.0.31 + '@types/mime': 3.0.1 + '@types/node': 18.11.18 + dev: true /@types/set-cookie-parser/2.4.2: resolution: {integrity: sha512-fBZgytwhYAUkj/jC/FAV4RQ5EerRup1YQsXQCh8rZfiHkc4UahC192oH0smGwsXol3cL3A5oETuAHeQHmhXM4w==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 dev: true /@types/stack-utils/2.0.1: @@ -3425,13 +1939,17 @@ packages: /@types/testing-library__jest-dom/5.14.5: resolution: {integrity: sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==} dependencies: - '@types/jest': 27.5.0 + '@types/jest': 29.4.0 dev: true /@types/tough-cookie/4.0.2: resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} dev: true + /@types/triple-beam/1.3.2: + resolution: {integrity: sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==} + dev: false + /@types/unist/2.0.6: resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} dev: false @@ -3440,28 +1958,22 @@ packages: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} dev: true - /@types/validator/13.7.2: - resolution: {integrity: sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==} - dev: true - - /@types/ws/8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} - dependencies: - '@types/node': 17.0.31 + /@types/validator/13.7.12: + resolution: {integrity: sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==} dev: true /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs/17.0.10: - resolution: {integrity: sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==} + /@types/yargs/17.0.22: + resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==} dependencies: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin/5.22.0_oztpoyrbzkyaikrhdkppp3gagu: - resolution: {integrity: sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==} + /@typescript-eslint/eslint-plugin/5.52.0_pezh6gz572jkbttmcky6muaye4: + resolution: {integrity: sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -3471,51 +1983,25 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.22.0_uhoeudlwl7kc47h4kncsfowede - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/type-utils': 5.22.0_uhoeudlwl7kc47h4kncsfowede - '@typescript-eslint/utils': 5.22.0_uhoeudlwl7kc47h4kncsfowede + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa + '@typescript-eslint/scope-manager': 5.52.0 + '@typescript-eslint/type-utils': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa + '@typescript-eslint/utils': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa debug: 4.3.4 - eslint: 8.12.0 - functional-red-black-tree: 1.0.1 - ignore: 5.2.0 + eslint: 8.30.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 regexpp: 3.2.0 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.6.4 - typescript: 4.6.4 + semver: 7.3.8 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin/5.22.0_tal4xlmvnofklupd3hwjtzfb4q: - resolution: {integrity: sha512-YCiy5PUzpAeOPGQ7VSGDEY2NeYUV1B0swde2e0HzokRsHBYjSdF6DZ51OuRZxVPHx0032lXGLvOMls91D8FXlg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/parser': 5.22.0_hcfsmds2fshutdssjqluwm76uu - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/type-utils': 5.22.0_hcfsmds2fshutdssjqluwm76uu - '@typescript-eslint/utils': 5.22.0_hcfsmds2fshutdssjqluwm76uu - debug: 4.3.4 - eslint: 8.15.0 - functional-red-black-tree: 1.0.1 - ignore: 5.2.0 - regexpp: 3.2.0 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.6.4 - typescript: 4.6.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser/5.10.1_uhoeudlwl7kc47h4kncsfowede: - resolution: {integrity: sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==} + /@typescript-eslint/parser/5.52.0_lzzuuodtsqwxnvqeq4g4likcqa: + resolution: {integrity: sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -3524,74 +2010,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.10.1 - '@typescript-eslint/types': 5.10.1 - '@typescript-eslint/typescript-estree': 5.10.1_typescript@4.6.4 + '@typescript-eslint/scope-manager': 5.52.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/typescript-estree': 5.52.0_typescript@4.9.4 debug: 4.3.4 - eslint: 8.12.0 - typescript: 4.6.4 + eslint: 8.30.0 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.22.0_hcfsmds2fshutdssjqluwm76uu: - resolution: {integrity: sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/typescript-estree': 5.22.0_typescript@4.6.4 - debug: 4.3.4 - eslint: 8.15.0 - typescript: 4.6.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/parser/5.22.0_uhoeudlwl7kc47h4kncsfowede: - resolution: {integrity: sha512-piwC4krUpRDqPaPbFaycN70KCP87+PC5WZmrWs+DlVOxxmF+zI6b6hETv7Quy4s9wbkV16ikMeZgXsvzwI3icQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/typescript-estree': 5.22.0_typescript@4.6.4 - debug: 4.3.4 - eslint: 8.12.0 - typescript: 4.6.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/scope-manager/5.10.1: - resolution: {integrity: sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==} + /@typescript-eslint/scope-manager/5.52.0: + resolution: {integrity: sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.10.1 - '@typescript-eslint/visitor-keys': 5.10.1 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/visitor-keys': 5.52.0 dev: true - /@typescript-eslint/scope-manager/5.22.0: - resolution: {integrity: sha512-yA9G5NJgV5esANJCO0oF15MkBO20mIskbZ8ijfmlKIvQKg0ynVKfHZ15/nhAJN5m8Jn3X5qkwriQCiUntC9AbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/visitor-keys': 5.22.0 - dev: true - - /@typescript-eslint/type-utils/5.22.0_hcfsmds2fshutdssjqluwm76uu: - resolution: {integrity: sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==} + /@typescript-eslint/type-utils/5.52.0_lzzuuodtsqwxnvqeq4g4likcqa: + resolution: {integrity: sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -3600,46 +2038,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.22.0_hcfsmds2fshutdssjqluwm76uu + '@typescript-eslint/typescript-estree': 5.52.0_typescript@4.9.4 + '@typescript-eslint/utils': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa debug: 4.3.4 - eslint: 8.15.0 - tsutils: 3.21.0_typescript@4.6.4 - typescript: 4.6.4 + eslint: 8.30.0 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils/5.22.0_uhoeudlwl7kc47h4kncsfowede: - resolution: {integrity: sha512-iqfLZIsZhK2OEJ4cQ01xOq3NaCuG5FQRKyHicA3xhZxMgaxQazLUHbH/B2k9y5i7l3+o+B5ND9Mf1AWETeMISA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: '*' - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/utils': 5.22.0_uhoeudlwl7kc47h4kncsfowede - debug: 4.3.4 - eslint: 8.12.0 - tsutils: 3.21.0_typescript@4.6.4 - typescript: 4.6.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/types/5.10.1: - resolution: {integrity: sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==} + /@typescript-eslint/types/5.52.0: + resolution: {integrity: sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types/5.22.0: - resolution: {integrity: sha512-T7owcXW4l0v7NTijmjGWwWf/1JqdlWiBzPqzAWhobxft0SiEvMJB56QXmeCQjrPuM8zEfGUKyPQr/L8+cFUBLw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/typescript-estree/5.10.1_typescript@4.6.4: - resolution: {integrity: sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==} + /@typescript-eslint/typescript-estree/5.52.0_typescript@4.9.4: + resolution: {integrity: sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -3647,112 +2062,46 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.10.1 - '@typescript-eslint/visitor-keys': 5.10.1 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/visitor-keys': 5.52.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0_typescript@4.6.4 - typescript: 4.6.4 + tsutils: 3.21.0_typescript@4.9.4 + typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.22.0_typescript@4.6.4: - resolution: {integrity: sha512-EyBEQxvNjg80yinGE2xdhpDYm41so/1kOItl0qrjIiJ1kX/L/L8WWGmJg8ni6eG3DwqmOzDqOhe6763bF92nOw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/visitor-keys': 5.22.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.3.7 - tsutils: 3.21.0_typescript@4.6.4 - typescript: 4.6.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/utils/5.22.0_hcfsmds2fshutdssjqluwm76uu: - resolution: {integrity: sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==} + /@typescript-eslint/utils/5.52.0_lzzuuodtsqwxnvqeq4g4likcqa: + resolution: {integrity: sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/typescript-estree': 5.22.0_typescript@4.6.4 - eslint: 8.15.0 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.52.0 + '@typescript-eslint/types': 5.52.0 + '@typescript-eslint/typescript-estree': 5.52.0_typescript@4.9.4 + eslint: 8.30.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.15.0 + eslint-utils: 3.0.0_eslint@8.30.0 + semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/utils/5.22.0_uhoeudlwl7kc47h4kncsfowede: - resolution: {integrity: sha512-HodsGb037iobrWSUMS7QH6Hl1kppikjA1ELiJlNSTYf/UdMEwzgj0WIp+lBNb6WZ3zTwb0tEz51j0Wee3iJ3wQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.22.0 - '@typescript-eslint/types': 5.22.0 - '@typescript-eslint/typescript-estree': 5.22.0_typescript@4.6.4 - eslint: 8.12.0 - eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.12.0 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - - /@typescript-eslint/visitor-keys/5.10.1: - resolution: {integrity: sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==} + /@typescript-eslint/visitor-keys/5.52.0: + resolution: {integrity: sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.10.1 + '@typescript-eslint/types': 5.52.0 eslint-visitor-keys: 3.3.0 dev: true - /@typescript-eslint/visitor-keys/5.22.0: - resolution: {integrity: sha512-DbgTqn2Dv5RFWluG88tn0pP6Ex0ROF+dpDO1TNNZdRtLjUr6bdznjA6f/qNqJLjd2PgguAES2Zgxh/JzwzETDg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - '@typescript-eslint/types': 5.22.0 - eslint-visitor-keys: 3.3.0 - dev: true - - /@wry/context/0.6.1: - resolution: {integrity: sha512-LOmVnY1iTU2D8tv4Xf6MVMZZ+juIJ87Kt/plMijjN20NMAXGmH4u8bS1t0uT74cZ5gwpocYueV58YwyI8y+GKw==} - engines: {node: '>=8'} - dependencies: - tslib: 2.4.0 - dev: false - - /@wry/equality/0.5.2: - resolution: {integrity: sha512-oVMxbUXL48EV/C0/M7gLVsoK6qRHPS85x8zECofEZOVvxGmIPLA9o5Z27cc2PoAyZz1S2VoM2A7FLAnpfGlneA==} - engines: {node: '>=8'} - dependencies: - tslib: 2.4.0 - dev: false - - /@wry/trie/0.3.1: - resolution: {integrity: sha512-WwB53ikYudh9pIorgxrkHKrQZcCqNM/Q/bDzZBffEaGUKGuHrRb3zZUT9Sh2qw9yogC7SsdRmQ1ER0pqvd3bfw==} - engines: {node: '>=8'} - dependencies: - tslib: 2.4.0 - dev: false - /@xmldom/xmldom/0.8.6: resolution: {integrity: sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==} engines: {node: '>=10.0.0'} @@ -3764,27 +2113,13 @@ packages: dev: true optional: true - /JSONStream/1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 - dev: true - /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} dev: true /abbrev/1.1.1: resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} - - /abort-controller/3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - dependencies: - event-target-shim: 5.0.1 - dev: true + dev: false /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -3797,29 +2132,25 @@ packages: /acorn-globals/7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} dependencies: - acorn: 8.8.1 + acorn: 8.8.2 acorn-walk: 8.2.0 dev: true - /acorn-jsx/5.3.2_acorn@8.7.1: + /acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.7.1 + acorn: 8.8.2 + dev: true /acorn-walk/8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} dev: true - /acorn/8.7.1: - resolution: {integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==} - engines: {node: '>=0.4.0'} - hasBin: true - - /acorn/8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -3841,26 +2172,6 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.11.0: - resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - dev: true - - /ansi-align/3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - dependencies: - string-width: 4.2.3 - dev: true - - /ansi-escapes/3.2.0: - resolution: {integrity: sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==} - engines: {node: '>=4'} - dev: true - /ansi-escapes/4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} @@ -3868,25 +2179,10 @@ packages: type-fest: 0.21.3 dev: true - /ansi-regex/2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - dev: true - - /ansi-regex/3.0.1: - resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} - engines: {node: '>=4'} - dev: true - /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-styles/2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - dev: true - /ansi-styles/3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -3898,183 +2194,20 @@ packages: engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true /ansi-styles/5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} dev: true - /any-observable/0.3.0_rxjs@6.6.7: - resolution: {integrity: sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==} - engines: {node: '>=6'} - peerDependencies: - rxjs: '*' - zenObservable: '*' - peerDependenciesMeta: - rxjs: - optional: true - zenObservable: - optional: true - dependencies: - rxjs: 6.6.7 - dev: true - - /any-promise/1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - dev: false - - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - /apollo-datasource/3.3.2: - resolution: {integrity: sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==} - engines: {node: '>=12.0'} - dependencies: - '@apollo/utils.keyvaluecache': 1.0.1 - apollo-server-env: 4.2.1 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-reporting-protobuf/3.3.1: - resolution: {integrity: sha512-tyvj3Vj71TCh6c8PtdHOLgHHBSJ05DF/A/Po3q8yfHTBkOPcOJZE/GGN/PT/pwKg7HHxKcAeHDw7+xciVvGx0w==} - dependencies: - '@apollo/protobufjs': 1.2.2 - dev: false - - /apollo-reporting-protobuf/3.3.2: - resolution: {integrity: sha512-j1tx9tmkVdsLt1UPzBrvz90PdjAeKW157WxGn+aXlnnGfVjZLIRXX3x5t1NWtXvB7rVaAsLLILLtDHW382TSoQ==} - dependencies: - '@apollo/protobufjs': 1.2.4 - dev: false - - /apollo-server-core/3.10.0_graphql@15.8.0: - resolution: {integrity: sha512-ln5drIk3oW/ycYhcYL9TvM7vRf7OZwJrgHWlnjnMakozBQIBSumdMi4pN001DhU9mVBWTfnmBv3CdcxJdGXIvA==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - '@apollo/utils.keyvaluecache': 1.0.1 - '@apollo/utils.logger': 1.0.0 - '@apollo/utils.usagereporting': 1.0.0_graphql@15.8.0 - '@apollographql/apollo-tools': 0.5.4_graphql@15.8.0 - '@apollographql/graphql-playground-html': 1.6.29 - '@graphql-tools/mock': 8.6.12_graphql@15.8.0 - '@graphql-tools/schema': 8.3.14_graphql@15.8.0 - '@josephg/resolvable': 1.0.1 - apollo-datasource: 3.3.2 - apollo-reporting-protobuf: 3.3.2 - apollo-server-env: 4.2.1 - apollo-server-errors: 3.3.1_graphql@15.8.0 - apollo-server-plugin-base: 3.6.2_graphql@15.8.0 - apollo-server-types: 3.6.2_graphql@15.8.0 - async-retry: 1.3.3 - fast-json-stable-stringify: 2.1.0 - graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 - loglevel: 1.8.0 - lru-cache: 6.0.0 - sha.js: 2.4.11 - uuid: 8.3.2 - whatwg-mimetype: 3.0.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-env/4.2.1: - resolution: {integrity: sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==} - engines: {node: '>=12.0'} - dependencies: - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-errors/3.3.1_graphql@15.8.0: - resolution: {integrity: sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - dev: false - - /apollo-server-express/3.9.0_jfj6k5cqxqbusbdzwqjdzioxzm: - resolution: {integrity: sha512-scSeHy9iB7W3OiF3uLQEzad9Jm9tEfDF8ACsJb2P+xX69uqg6zizsrQvj3qRhazCO7FKMcMu9zQFR0hy7zKbUA==} - engines: {node: '>=12.0'} - peerDependencies: - express: ^4.17.1 - graphql: ^15.3.0 || ^16.0.0 - dependencies: - '@types/accepts': 1.3.5 - '@types/body-parser': 1.19.2 - '@types/cors': 2.8.12 - '@types/express': 4.17.13 - '@types/express-serve-static-core': 4.17.29 - accepts: 1.3.8 - apollo-server-core: 3.10.0_graphql@15.8.0 - apollo-server-types: 3.6.1_graphql@15.8.0 - body-parser: 1.20.0 - cors: 2.8.5 - express: 4.18.1 - graphql: 15.8.0 - parseurl: 1.3.3 - transitivePeerDependencies: - - encoding - - supports-color - dev: false - - /apollo-server-plugin-base/3.6.2_graphql@15.8.0: - resolution: {integrity: sha512-erWXjLOO1u7fxQkbxJ2cwSO7p0tYzNied91I1SJ9tikXZ/2eZUyDyvrpI+4g70kOdEi+AmJ5Fo8ahEXKJ75zdg==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - apollo-server-types: 3.6.2_graphql@15.8.0 - graphql: 15.8.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-types/3.6.1_graphql@15.8.0: - resolution: {integrity: sha512-XOPlBlRdwP00PrG03OffGGWuzyei+J9t1rAnvyHsSdP0JCgQWigHJfvL1N9Bhgi4UTjl9JadKOJh1znLNlqIFQ==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - '@apollo/utils.keyvaluecache': 1.0.1 - '@apollo/utils.logger': 1.0.0 - apollo-reporting-protobuf: 3.3.1 - apollo-server-env: 4.2.1 - graphql: 15.8.0 - transitivePeerDependencies: - - encoding - dev: false - - /apollo-server-types/3.6.2_graphql@15.8.0: - resolution: {integrity: sha512-9Z54S7NB+qW1VV+kmiqwU2Q6jxWfX89HlSGCGOo3zrkrperh85LrzABgN9S92+qyeHYd72noMDg2aI039sF3dg==} - engines: {node: '>=12.0'} - peerDependencies: - graphql: ^15.3.0 || ^16.0.0 - dependencies: - '@apollo/utils.keyvaluecache': 1.0.1 - '@apollo/utils.logger': 1.0.0 - apollo-reporting-protobuf: 3.3.2 - apollo-server-env: 4.2.1 - graphql: 15.8.0 - transitivePeerDependencies: - - encoding - dev: false - - /app-root-path/3.0.0: - resolution: {integrity: sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw==} - engines: {node: '>= 6.0.0'} - dev: false - /aproba/2.0.0: resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} dev: false @@ -4096,9 +2229,9 @@ packages: engines: {node: '>=14.0.0'} requiresBuild: true dependencies: - '@mapbox/node-pre-gyp': 1.0.9 + '@mapbox/node-pre-gyp': 1.0.10 '@phc/format': 1.0.0 - node-addon-api: 5.0.0 + node-addon-api: 5.1.0 transitivePeerDependencies: - encoding - supports-color @@ -4112,48 +2245,26 @@ packages: /argparse/2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - /aria-query/4.2.2: - resolution: {integrity: sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==} - engines: {node: '>=6.0'} - dependencies: - '@babel/runtime': 7.20.6 - '@babel/runtime-corejs3': 7.17.9 dev: true /aria-query/5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} dependencies: - deep-equal: 2.1.0 + deep-equal: 2.2.0 dev: true /array-flatten/1.1.1: - resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: false - /array-ify/1.0.0: - resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - dev: true - - /array-includes/3.1.5: - resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.0 - get-intrinsic: 1.1.1 - is-string: 1.0.7 - dev: true - /array-includes/3.1.6: resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - get-intrinsic: 1.1.3 + define-properties: 1.2.0 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 is-string: 1.0.7 dev: true @@ -4162,13 +2273,13 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.flat/1.3.0: - resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} + /array.prototype.flat/1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.0 + define-properties: 1.2.0 + es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 dev: true @@ -4177,8 +2288,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 dev: true @@ -4186,31 +2297,16 @@ packages: resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 - get-intrinsic: 1.1.3 - dev: true - - /arrify/1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true - - /asap/2.0.6: - resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + get-intrinsic: 1.2.0 dev: true /ast-types-flow/0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} dev: true - /async-retry/1.3.3: - resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} - dependencies: - retry: 0.13.1 - dev: false - /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: false @@ -4219,49 +2315,33 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node/1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true - - /auto-bind/4.0.0: - resolution: {integrity: sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==} - engines: {node: '>=8'} - dev: true - /available-typed-arrays/1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} dev: true - /axe-core/4.5.2: - resolution: {integrity: sha512-u2MVsXfew5HBvjsczCv+xlwdNnB1oQR9HlAcsejZttNjKKSkeDNVwB1vMThIUIFI9GoT57Vtk8iQLwqOfAkboA==} + /axe-core/4.6.3: + resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} engines: {node: '>=4'} dev: true - /axios/0.26.1: - resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + /axobject-query/3.1.1: + resolution: {integrity: sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==} dependencies: - follow-redirects: 1.15.0 - transitivePeerDependencies: - - debug - dev: false - - /axobject-query/2.2.0: - resolution: {integrity: sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==} + deep-equal: 2.2.0 dev: true - /babel-jest/28.1.0_@babel+core@7.17.10: - resolution: {integrity: sha512-zNKk0yhDZ6QUwfxh9k07GII6siNGMJWVUU49gmFj5gfdqDKLqa2RArXOF2CODp4Dr7dLxN2cvAV+667dGJ4b4w==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /babel-jest/29.4.3_@babel+core@7.20.12: + resolution: {integrity: sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: - '@babel/core': 7.17.10 - '@jest/transform': 28.1.0 - '@types/babel__core': 7.1.19 + '@babel/core': 7.20.12 + '@jest/transform': 29.4.3 + '@types/babel__core': 7.20.0 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 28.0.2_@babel+core@7.17.10 + babel-preset-jest: 29.4.3_@babel+core@7.20.12 chalk: 4.1.2 graceful-fs: 4.2.10 slash: 3.0.0 @@ -4269,114 +2349,67 @@ packages: - supports-color dev: true - /babel-plugin-dynamic-import-node/2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - dependencies: - object.assign: 4.1.2 - dev: true - /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} dependencies: - '@babel/helper-plugin-utils': 7.17.12 + '@babel/helper-plugin-utils': 7.20.2 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.0 + istanbul-lib-instrument: 5.2.1 test-exclude: 6.0.0 transitivePeerDependencies: - supports-color dev: true - /babel-plugin-jest-hoist/28.0.2: - resolution: {integrity: sha512-Kizhn/ZL+68ZQHxSnHyuvJv8IchXD62KQxV77TBDV/xoBFBOfgRAk97GNs6hXdTTCiVES9nB2I6+7MXXrk5llQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /babel-plugin-jest-hoist/29.4.3: + resolution: {integrity: sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.16.7 - '@babel/types': 7.18.4 - '@types/babel__core': 7.1.19 - '@types/babel__traverse': 7.17.1 + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.3 dev: true /babel-plugin-macros/3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.20.6 - cosmiconfig: 7.0.1 - resolve: 1.22.0 + '@babel/runtime': 7.20.13 + cosmiconfig: 7.1.0 + resolve: 1.22.1 dev: false - /babel-plugin-syntax-trailing-function-commas/7.0.0-beta.0: - resolution: {integrity: sha512-Xj9XuRuz3nTSbaTXWv3itLOcxyF4oPD8douBBmj7U9BBC6nEBYfyOJYQMf/8PJAFotC62UY5dFfIGEPr7WswzQ==} - dev: true - - /babel-preset-current-node-syntax/1.0.1_@babel+core@7.17.10: + /babel-preset-current-node-syntax/1.0.1_@babel+core@7.20.12: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.10 - '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.17.10 - '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.10 - '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.17.10 - '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.17.10 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.17.10 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.17.10 + '@babel/core': 7.20.12 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.20.12 + '@babel/plugin-syntax-bigint': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.20.12 + '@babel/plugin-syntax-import-meta': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.20.12 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.20.12 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.20.12 dev: true - /babel-preset-fbjs/3.4.0_@babel+core@7.17.10: - resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + /babel-preset-jest/29.4.3_@babel+core@7.20.12: + resolution: {integrity: sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.17.10 - '@babel/plugin-proposal-class-properties': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-proposal-object-rest-spread': 7.18.0_@babel+core@7.17.10 - '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.17.10 - '@babel/plugin-syntax-flow': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-syntax-jsx': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.17.10 - '@babel/plugin-transform-arrow-functions': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoped-functions': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-block-scoping': 7.18.4_@babel+core@7.17.10 - '@babel/plugin-transform-classes': 7.18.4_@babel+core@7.17.10 - '@babel/plugin-transform-computed-properties': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-transform-destructuring': 7.18.0_@babel+core@7.17.10 - '@babel/plugin-transform-flow-strip-types': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-transform-for-of': 7.18.1_@babel+core@7.17.10 - '@babel/plugin-transform-function-name': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-literals': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-transform-member-expression-literals': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-modules-commonjs': 7.18.2_@babel+core@7.17.10 - '@babel/plugin-transform-object-super': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-parameters': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-transform-property-literals': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-react-display-name': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-react-jsx': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-transform-shorthand-properties': 7.16.7_@babel+core@7.17.10 - '@babel/plugin-transform-spread': 7.17.12_@babel+core@7.17.10 - '@babel/plugin-transform-template-literals': 7.18.2_@babel+core@7.17.10 - babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 - transitivePeerDependencies: - - supports-color - dev: true - - /babel-preset-jest/28.0.2_@babel+core@7.17.10: - resolution: {integrity: sha512-sYzXIdgIXXroJTFeB3S6sNDWtlJ2dllCdTEsnZ65ACrMojj3hVNFRmnJ1HZtomGi+Be7aqpY/HJ92fr8OhKVkQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - peerDependencies: - '@babel/core': ^7.0.0 - dependencies: - '@babel/core': 7.17.10 - babel-plugin-jest-hoist: 28.0.2 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.10 + '@babel/core': 7.20.12 + babel-plugin-jest-hoist: 29.4.3 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 dev: true /bail/2.0.2: @@ -4400,19 +2433,19 @@ packages: inherits: 2.0.4 readable-stream: 3.6.0 - /body-parser/1.20.0: - resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==} + /body-parser/1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 - content-type: 1.0.4 + content-type: 1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.10.3 + qs: 6.11.0 raw-body: 2.5.1 type-is: 1.6.18 unpipe: 1.0.0 @@ -4428,49 +2461,27 @@ packages: '@popperjs/core': 2.11.6 dev: false - /boxen/5.1.2: - resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} - engines: {node: '>=10'} - 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 - dev: true - /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - /brace-expansion/2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: true - /braces/3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /browserslist/4.20.3: - resolution: {integrity: sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==} + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001338 - electron-to-chromium: 1.4.136 - escalade: 3.1.1 - node-releases: 2.0.4 - picocolors: 1.0.0 - dev: true + caniuse-lite: 1.0.30001456 + electron-to-chromium: 1.4.301 + node-releases: 2.0.10 + update-browserslist-db: 1.0.10_browserslist@4.21.5 /bs-logger/0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} @@ -4487,6 +2498,7 @@ packages: /buffer-equal-constant-time/1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + dev: false /buffer-from/1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} @@ -4503,69 +2515,21 @@ packages: base64-js: 1.5.1 ieee754: 1.2.1 - /buffer/6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: false - - /busboy/1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - dependencies: - streamsearch: 1.1.0 - dev: true - /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: false - /cacheable-request/6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.2 - get-stream: 5.2.0 - http-cache-semantics: 4.1.0 - keyv: 3.1.0 - lowercase-keys: 2.0.0 - normalize-url: 4.5.1 - responselike: 1.0.2 - dev: true - - /cachedir/2.3.0: - resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} - engines: {node: '>=6'} - dev: true - /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.1 + get-intrinsic: 1.2.0 /callsites/3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /camel-case/4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - dependencies: - pascal-case: 3.1.2 - tslib: 2.4.0 - dev: true - - /camelcase-keys/6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - dev: true - /camelcase/5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} @@ -4576,37 +2540,13 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite/1.0.30001338: - resolution: {integrity: sha512-1gLHWyfVoRDsHieO+CaeYe7jSo/MT7D7lhaXUiwwbuR5BwQxORs0f1tAwUSQr3YbxRXJvxHM/PA5FfPQRnsPeQ==} - dev: true - - /caniuse-lite/1.0.30001419: - resolution: {integrity: sha512-aFO1r+g6R7TW+PNQxKzjITwLOyDhVRLjW0LcwS/HCZGUUKTGNp9+IwLC4xyDSZBygVL/mxaFR3HIV6wEKQuSzw==} - dev: false - - /capital-case/1.0.4: - resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.0 - upper-case-first: 2.0.2 - dev: true + /caniuse-lite/1.0.30001456: + resolution: {integrity: sha512-XFHJY5dUgmpMV25UqaD4kVq2LsiaU5rS8fb0f17pCoXQiQslzmFgnfOxfvo1bTpTqf7dwG/N/05CnLCnOEKmzA==} /ccount/2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} dev: false - /chalk/1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} - dependencies: - ansi-styles: 2.2.1 - escape-string-regexp: 1.0.5 - has-ansi: 2.0.0 - strip-ansi: 3.0.1 - supports-color: 2.0.0 - dev: true - /chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4637,37 +2577,6 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - - /change-case-all/1.0.14: - resolution: {integrity: sha512-CWVm2uT7dmSHdO/z1CXT/n47mWonyypzBbuCy5tN7uMg22BsfkhwT6oHmFCAk+gL1LOOxhdbB9SZz3J1KTY3gA==} - dependencies: - change-case: 4.1.2 - is-lower-case: 2.0.2 - is-upper-case: 2.0.2 - lower-case: 2.0.2 - lower-case-first: 2.0.2 - sponge-case: 1.0.1 - swap-case: 2.0.2 - title-case: 3.0.3 - upper-case: 2.0.2 - upper-case-first: 2.0.2 - dev: true - - /change-case/4.1.2: - resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} - dependencies: - camel-case: 4.1.2 - capital-case: 1.0.4 - constant-case: 3.0.4 - dot-case: 3.0.4 - header-case: 2.0.4 - no-case: 3.0.4 - param-case: 3.0.4 - pascal-case: 3.1.2 - path-case: 3.0.4 - sentence-case: 3.0.4 - snake-case: 3.0.4 - tslib: 2.4.0 dev: true /char-regex/1.0.2: @@ -4675,20 +2584,8 @@ packages: engines: {node: '>=10'} dev: true - /character-entities-html4/2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - dev: false - - /character-entities-legacy/3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - dev: false - - /character-entities/2.0.1: - resolution: {integrity: sha512-OzmutCf2Kmc+6DrFrrPS8/tDh2+DpnrfzdICHWhcVC9eOd0N1PXmQEE1a8iM4IziIAG+8tmTq3K+oo0ubH6RRQ==} - dev: false - - /character-reference-invalid/2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + /character-entities/2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} dev: false /chardet/0.7.0: @@ -4699,7 +2596,7 @@ packages: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: - anymatch: 3.1.2 + anymatch: 3.1.3 braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 @@ -4718,37 +2615,15 @@ packages: engines: {node: '>=10'} dev: false - /ci-info/2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - dev: true - - /ci-info/3.3.0: - resolution: {integrity: sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==} + /ci-info/3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} dev: true /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} dev: true - /class-validator/0.13.2: - resolution: {integrity: sha512-yBUcQy07FPlGzUjoLuUfIOXzgynnQPPruyK1Ge2B74k9ROwnle1E+NxLWnUv5OLU8hA/qL5leAE9XnXq3byaBw==} - dependencies: - libphonenumber-js: 1.10.6 - validator: 13.7.0 - dev: false - - /cli-boxes/2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true - - /cli-cursor/2.1.0: - resolution: {integrity: sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==} - engines: {node: '>=4'} - dependencies: - restore-cursor: 2.0.0 - dev: true - /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} @@ -4756,32 +2631,11 @@ packages: restore-cursor: 3.1.0 dev: true - /cli-highlight/2.1.11: - resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} - hasBin: true - dependencies: - chalk: 4.1.2 - highlight.js: 10.7.3 - mz: 2.7.0 - parse5: 5.1.1 - parse5-htmlparser2-tree-adapter: 6.0.1 - yargs: 16.2.0 - dev: false - - /cli-spinners/2.6.1: - resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} + /cli-spinners/2.7.0: + resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==} engines: {node: '>=6'} dev: true - /cli-truncate/0.2.1: - resolution: {integrity: sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==} - engines: {node: '>=0.10.0'} - dependencies: - slice-ansi: 0.0.4 - string-width: 1.0.2 - dev: true - /cli-width/3.0.0: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} @@ -4791,25 +2645,13 @@ packages: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false - /cliui/6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true - - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - - /clone-response/1.0.2: - resolution: {integrity: sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==} - dependencies: - mimic-response: 1.0.1 dev: true /clone/1.0.4: @@ -4817,13 +2659,13 @@ packages: engines: {node: '>=0.8'} dev: true - /clsx/1.1.1: - resolution: {integrity: sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==} + /clsx/1.2.1: + resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} dev: false - /cluster-key-slot/1.1.1: - resolution: {integrity: sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw==} + /cluster-key-slot/1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} dev: false @@ -4832,11 +2674,6 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /code-point-at/1.1.0: - resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} - engines: {node: '>=0.10.0'} - dev: true - /collect-v8-coverage/1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true @@ -4899,79 +2736,17 @@ packages: delayed-stream: 1.0.0 dev: true - /comma-separated-tokens/2.0.2: - resolution: {integrity: sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==} + /comma-separated-tokens/2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false - /commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: false - - /commitizen/4.2.5: - resolution: {integrity: sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ==} - engines: {node: '>= 12'} - hasBin: true - dependencies: - cachedir: 2.3.0 - cz-conventional-changelog: 3.3.0 - dedent: 0.7.0 - detect-indent: 6.1.0 - find-node-modules: 2.1.3 - find-root: 1.1.0 - fs-extra: 9.1.0 - glob: 7.2.3 - inquirer: 8.2.4 - is-utf8: 0.2.1 - lodash: 4.17.21 - minimist: 1.2.6 - strip-bom: 4.0.0 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - - /common-tags/1.8.2: - resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} - engines: {node: '>=4.0.0'} - dev: true - - /compare-func/2.0.0: - resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} - dependencies: - array-ify: 1.0.0 - dot-prop: 5.3.0 + /comment-parser/1.3.1: + resolution: {integrity: sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==} + engines: {node: '>= 12.0.0'} dev: true /concat-map/0.0.1: - resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} - - /concurrently/7.1.0: - resolution: {integrity: sha512-Bz0tMlYKZRUDqJlNiF/OImojMB9ruKUz6GCfmhFnSapXgPe+3xzY4byqoKG9tUZ7L2PGEUjfLPOLfIX3labnmw==} - engines: {node: ^12.20.0 || ^14.13.0 || >=16.0.0} - hasBin: true - dependencies: - chalk: 4.1.2 - date-fns: 2.28.0 - lodash: 4.17.21 - rxjs: 6.6.7 - spawn-command: 0.0.2-1 - supports-color: 8.1.1 - tree-kill: 1.2.2 - yargs: 16.2.0 - dev: true - - /configstore/5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.10 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - dev: true + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} /confusing-browser-globals/1.0.11: resolution: {integrity: sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==} @@ -4981,14 +2756,6 @@ packages: resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} dev: false - /constant-case/3.0.4: - resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.0 - upper-case: 2.0.2 - dev: true - /content-disposition/0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -4996,52 +2763,20 @@ packages: safe-buffer: 5.2.1 dev: false - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + /content-type/1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: false - /conventional-changelog-angular/5.0.13: - resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==} - engines: {node: '>=10'} - dependencies: - compare-func: 2.0.0 - q: 1.5.1 - dev: true + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - /conventional-changelog-conventionalcommits/5.0.0: - resolution: {integrity: sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==} - engines: {node: '>=10'} - dependencies: - compare-func: 2.0.0 - lodash: 4.17.21 - q: 1.5.1 + /convert-source-map/2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true - /conventional-commit-types/3.0.0: - resolution: {integrity: sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==} - dev: true - - /conventional-commits-parser/3.2.4: - resolution: {integrity: sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==} - engines: {node: '>=10'} - hasBin: true - dependencies: - is-text-path: 1.0.1 - JSONStream: 1.3.5 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - dev: true - - /convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 - /cookie-signature/1.0.6: - resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: false /cookie/0.4.2: @@ -5054,44 +2789,15 @@ packages: engines: {node: '>= 0.6'} dev: false - /core-js-pure/3.22.4: - resolution: {integrity: sha512-4iF+QZkpzIz0prAFuepmxwJ2h5t4agvE8WPYqs2mjLJMNNwJOnpch76w2Q7bUfCPEv/V7wpvOfog0w273M+ZSw==} - deprecated: core-js-pure@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js-pure. - requiresBuild: true - dev: true - - /cors/2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + /copy-anything/3.0.3: + resolution: {integrity: sha512-fpW2W/BqEzqPp29QS+MwwfisHCQZtiduTe/m8idFo0xbti9fIZ2WVhAsCv4ggFVH3AgCkVdpoOCtQC6gBrdhjw==} + engines: {node: '>=12.13'} dependencies: - object-assign: 4.1.1 - vary: 1.1.2 + is-what: 4.1.8 dev: false - /cosmiconfig-toml-loader/1.0.0: - resolution: {integrity: sha512-H/2gurFWVi7xXvCyvsWRLCMekl4tITJcX0QEsDMpzxtuxDyM59xLatYNg4s/k9AA/HdtCYfj2su8mgA0GSDLDA==} - dependencies: - '@iarna/toml': 2.2.5 - dev: true - - /cosmiconfig-typescript-loader/2.0.2_l47be6km5p57gglrggidw5gsgm: - resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==} - engines: {node: '>=12', npm: '>=6'} - peerDependencies: - '@types/node': '*' - typescript: '>=3' - dependencies: - '@types/node': 17.0.31 - cosmiconfig: 7.0.1 - ts-node: 10.9.1_l47be6km5p57gglrggidw5gsgm - typescript: 4.6.4 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true - - /cosmiconfig/7.0.1: - resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + /cosmiconfig/7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.0 @@ -5099,19 +2805,12 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 + dev: false /create-require/1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-fetch/3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} - dependencies: - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding - dev: true - /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -5121,33 +2820,10 @@ packages: which: 2.0.2 dev: true - /cross-undici-fetch/0.4.7: - resolution: {integrity: sha512-e5KZdjHigxFECfw1B7cjmXLm3yT8eiffSJYUSyIWxy6c+f/MGiJsV1NHegZvG23ZgQ0o8rNaZxbtu5NdF5FmwQ==} - dependencies: - abort-controller: 3.0.0 - busboy: 1.6.0 - form-data-encoder: 1.7.1 - formdata-node: 4.3.3 - node-fetch: 2.6.7 - undici: 5.5.1 - web-streams-polyfill: 3.2.1 - transitivePeerDependencies: - - encoding - dev: true - - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - /css.escape/1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} dev: true - /cssfilter/0.0.10: - resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} - dev: false - /cssom/0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true @@ -5163,35 +2839,13 @@ packages: cssom: 0.3.8 dev: true - /csstype/3.0.11: - resolution: {integrity: sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==} - - /cz-conventional-changelog/3.3.0: - resolution: {integrity: sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==} - engines: {node: '>= 10'} - dependencies: - chalk: 2.4.2 - commitizen: 4.2.5 - conventional-commit-types: 3.0.0 - lodash.map: 4.6.0 - longest: 2.0.1 - word-wrap: 1.2.3 - optionalDependencies: - '@commitlint/load': 17.0.3 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - dev: true + /csstype/3.1.1: + resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} /damerau-levenshtein/1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} dev: true - /dargs/7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - dev: true - /data-urls/3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} @@ -5201,22 +2855,6 @@ packages: whatwg-url: 11.0.0 dev: true - /dataloader/2.1.0: - resolution: {integrity: sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==} - dev: true - - /date-fns/1.30.1: - resolution: {integrity: sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==} - dev: true - - /date-fns/2.28.0: - resolution: {integrity: sha512-8d35hViGYx/QH0icHYCeLmsLmMUheMmTyV9Fcm6gvNwdw31yXXH+O85sOBJ+OLnLQMKZowvpKb6FgMIQjcpvQw==} - engines: {node: '>=0.11'} - - /debounce/1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - dev: true - /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -5226,6 +2864,7 @@ packages: optional: true dependencies: ms: 2.0.0 + dev: false /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -5238,18 +2877,6 @@ packages: ms: 2.1.3 dev: true - /debug/3.2.7_supports-color@5.5.0: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - supports-color: 5.5.0 - dev: true - /debug/4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -5261,19 +2888,6 @@ packages: dependencies: ms: 2.1.2 - /decamelize-keys/1.1.0: - resolution: {integrity: sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==} - engines: {node: '>=0.10.0'} - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - dev: true - - /decamelize/1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true - /decimal.js/10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} dev: true @@ -5281,16 +2895,9 @@ packages: /decode-named-character-reference/1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: - character-entities: 2.0.1 + character-entities: 2.0.2 dev: false - /decompress-response/3.3.0: - resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 - dev: true - /decompress-response/6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} @@ -5302,15 +2909,17 @@ packages: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} dev: true - /deep-equal/2.1.0: - resolution: {integrity: sha512-2pxgvWu3Alv1PoWEyVg7HS8YhGlUFUV7N5oOvfL6d+7xAmLSemMwv/c8Zv/i9KFzxV5Kt5CAvQc70fLwVuf4UA==} + /deep-equal/2.2.0: + resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} dependencies: call-bind: 1.0.2 - es-get-iterator: 1.1.2 - get-intrinsic: 1.1.3 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.0 is-arguments: 1.1.1 + is-array-buffer: 3.0.1 is-date-object: 1.0.5 is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 isarray: 2.0.5 object-is: 1.1.5 object-keys: 1.1.1 @@ -5325,28 +2934,30 @@ packages: /deep-extend/0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} + dev: false /deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /deepmerge/4.2.2: - resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + /deepmerge/4.3.0: + resolution: {integrity: sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==} engines: {node: '>=0.10.0'} dev: true - /defaults/1.0.3: - resolution: {integrity: sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==} + /defaults/1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 dev: true - /defer-to-connect/1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} dev: true - /define-properties/1.1.4: - resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==} + /define-properties/1.2.0: + resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} dependencies: has-property-descriptors: 1.0.0 @@ -5367,13 +2978,8 @@ packages: engines: {node: '>= 0.8'} dev: false - /dependency-graph/0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dev: true - - /dequal/2.0.2: - resolution: {integrity: sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==} + /dequal/2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} dev: false @@ -5382,16 +2988,6 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: false - /detect-file/1.0.0: - resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} - engines: {node: '>=0.10.0'} - dev: true - - /detect-indent/6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} - engines: {node: '>=8'} - dev: true - /detect-libc/2.0.1: resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==} engines: {node: '>=8'} @@ -5402,14 +2998,9 @@ packages: engines: {node: '>=8'} dev: true - /diff-sequences/27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dev: true - - /diff-sequences/28.0.2: - resolution: {integrity: sha512-YtEoNynLDFCRznv/XDalsKGSZDoj0U5kLnXvY0JSq3nBboRrZXjD81+eSiwi+nzcZDwedMmcowcxNwwgFW23mQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /diff-sequences/29.4.3: + resolution: {integrity: sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /diff/4.0.2: @@ -5443,15 +3034,15 @@ packages: esutils: 2.0.3 dev: true - /dom-accessibility-api/0.5.14: - resolution: {integrity: sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==} + /dom-accessibility-api/0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} dev: true /dom-helpers/5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dependencies: - '@babel/runtime': 7.20.6 - csstype: 3.0.11 + '@babel/runtime': 7.20.13 + csstype: 3.1.1 dev: false /domexception/4.0.0: @@ -5461,53 +3052,41 @@ packages: webidl-conversions: 7.0.0 dev: true - /dot-case/3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + /dotenv-cli/6.0.0: + resolution: {integrity: sha512-qXlCOi3UMDhCWFKe0yq5sg3X+pJAz+RQDiFN38AMSbUrnY3uZshSfDJUAge951OS7J9gwLZGfsBlWRSOYz/TRg==} + hasBin: true dependencies: - no-case: 3.0.4 - tslib: 2.4.0 + cross-spawn: 7.0.3 + dotenv: 16.0.3 + dotenv-expand: 8.0.3 + minimist: 1.2.8 dev: true - /dot-prop/5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: true - - /dotenv/16.0.0: - resolution: {integrity: sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==} + /dotenv-expand/8.0.3: + resolution: {integrity: sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==} engines: {node: '>=12'} - - /dset/3.1.2: - resolution: {integrity: sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==} - engines: {node: '>=4'} dev: true - /duplexer3/0.1.4: - resolution: {integrity: sha512-CEj8FwwNA4cVH2uFCoHUrmojhYh1vmCdOaneKJXwkeY1i9jnlslVo9dx+hQ5Hl9GnH/Bwy/IjxAyOePyPKYnzA==} + /dotenv/16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} dev: true /ecdsa-sig-formatter/1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} dependencies: safe-buffer: 5.2.1 - - /ee-first/1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} dev: false - /electron-to-chromium/1.4.136: - resolution: {integrity: sha512-GnITX8rHnUrIVnTxU9UlsTnSemHUA2iF+6QrRqxFbp/mf0vfuSc/goEyyQhUX3TUUCE3mv/4BNuXOtaJ4ur0eA==} - dev: true + /ee-first/1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false - /elegant-spinner/1.0.1: - resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} - engines: {node: '>=0.10.0'} - dev: true + /electron-to-chromium/1.4.301: + resolution: {integrity: sha512-bz00ASIIDjcgszZKuEA1JEFhbDjqUNbQ/PEhNEl1wbixzYpeTp2H2QWjsQvAL2T1wJBdOwCF5hE896BoMwYKrA==} - /emittery/0.10.2: - resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} + /emittery/0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} dev: true @@ -5523,7 +3102,7 @@ packages: dev: false /encodeurl/1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: false @@ -5531,6 +3110,15 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 + dev: false + + /enhanced-resolve/5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.10 + tapable: 2.2.1 + dev: true /entities/4.4.0: resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==} @@ -5542,76 +3130,66 @@ packages: dependencies: is-arrayish: 0.2.1 - /es-abstract/1.20.0: - resolution: {integrity: sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA==} + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} engines: {node: '>= 0.4'} dependencies: + available-typed-arrays: 1.0.5 call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function-bind: 1.1.1 function.prototype.name: 1.1.5 - get-intrinsic: 1.1.1 + get-intrinsic: 1.2.0 get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 has: 1.0.3 has-property-descriptors: 1.0.0 + has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.3 - is-callable: 1.2.4 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-weakref: 1.0.2 - object-inspect: 1.12.0 - object-keys: 1.1.1 - object.assign: 4.1.2 - regexp.prototype.flags: 1.4.3 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 - unbox-primitive: 1.0.2 - dev: true - - /es-abstract/1.20.4: - resolution: {integrity: sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - es-to-primitive: 1.2.1 - function-bind: 1.1.1 - function.prototype.name: 1.1.5 - get-intrinsic: 1.1.3 - get-symbol-description: 1.0.0 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-symbols: 1.0.3 - internal-slot: 1.0.3 + internal-slot: 1.0.5 + is-array-buffer: 3.0.1 is-callable: 1.2.7 is-negative-zero: 2.0.2 is-regex: 1.1.4 is-shared-array-buffer: 1.0.2 is-string: 1.0.7 + is-typed-array: 1.1.10 is-weakref: 1.0.2 - object-inspect: 1.12.2 + object-inspect: 1.12.3 object-keys: 1.1.1 object.assign: 4.1.4 regexp.prototype.flags: 1.4.3 safe-regex-test: 1.0.0 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 dev: true - /es-get-iterator/1.1.2: - resolution: {integrity: sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==} + /es-get-iterator/1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has-symbols: 1.0.3 is-arguments: 1.1.1 is-map: 2.0.2 is-set: 2.0.2 is-string: 1.0.7 isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.0 + has: 1.0.3 + has-tostringtag: 1.0.0 dev: true /es-shim-unscopables/1.0.0: @@ -5624,52 +3202,47 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: - is-callable: 1.2.4 + is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 dev: true - /esbuild/0.16.8: - resolution: {integrity: sha512-RKxRaLYAI5b/IVJ5k8jK3bO2G7cch2ZIZFbfKHbBzpwsWt9+VChcBEndNISBBZ5c3WwekFfkfl11/2QfIGHgDw==} + /esbuild/0.16.17: + resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.16.8 - '@esbuild/android-arm64': 0.16.8 - '@esbuild/android-x64': 0.16.8 - '@esbuild/darwin-arm64': 0.16.8 - '@esbuild/darwin-x64': 0.16.8 - '@esbuild/freebsd-arm64': 0.16.8 - '@esbuild/freebsd-x64': 0.16.8 - '@esbuild/linux-arm': 0.16.8 - '@esbuild/linux-arm64': 0.16.8 - '@esbuild/linux-ia32': 0.16.8 - '@esbuild/linux-loong64': 0.16.8 - '@esbuild/linux-mips64el': 0.16.8 - '@esbuild/linux-ppc64': 0.16.8 - '@esbuild/linux-riscv64': 0.16.8 - '@esbuild/linux-s390x': 0.16.8 - '@esbuild/linux-x64': 0.16.8 - '@esbuild/netbsd-x64': 0.16.8 - '@esbuild/openbsd-x64': 0.16.8 - '@esbuild/sunos-x64': 0.16.8 - '@esbuild/win32-arm64': 0.16.8 - '@esbuild/win32-ia32': 0.16.8 - '@esbuild/win32-x64': 0.16.8 + '@esbuild/android-arm': 0.16.17 + '@esbuild/android-arm64': 0.16.17 + '@esbuild/android-x64': 0.16.17 + '@esbuild/darwin-arm64': 0.16.17 + '@esbuild/darwin-x64': 0.16.17 + '@esbuild/freebsd-arm64': 0.16.17 + '@esbuild/freebsd-x64': 0.16.17 + '@esbuild/linux-arm': 0.16.17 + '@esbuild/linux-arm64': 0.16.17 + '@esbuild/linux-ia32': 0.16.17 + '@esbuild/linux-loong64': 0.16.17 + '@esbuild/linux-mips64el': 0.16.17 + '@esbuild/linux-ppc64': 0.16.17 + '@esbuild/linux-riscv64': 0.16.17 + '@esbuild/linux-s390x': 0.16.17 + '@esbuild/linux-x64': 0.16.17 + '@esbuild/netbsd-x64': 0.16.17 + '@esbuild/openbsd-x64': 0.16.17 + '@esbuild/sunos-x64': 0.16.17 + '@esbuild/win32-arm64': 0.16.17 + '@esbuild/win32-ia32': 0.16.17 + '@esbuild/win32-x64': 0.16.17 dev: true /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - /escape-goat/2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} - dev: true - /escape-html/1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: false /escape-string-regexp/1.0.5: @@ -5703,7 +3276,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-airbnb-base/15.0.0_gwd37gqv3vjv3xlpl7ju3ag2qu: + /eslint-config-airbnb-base/15.0.0_qyiwuuxhvwqdqhhtfgdncqdw4m: resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -5711,29 +3284,14 @@ packages: eslint-plugin-import: ^2.25.2 dependencies: confusing-browser-globals: 1.0.11 - eslint: 8.15.0 - eslint-plugin-import: 2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy - object.assign: 4.1.2 - object.entries: 1.1.5 + eslint: 8.30.0 + eslint-plugin-import: 2.27.5_pwruqh3pldl3vrraggl56un3si + object.assign: 4.1.4 + object.entries: 1.1.6 semver: 6.3.0 dev: true - /eslint-config-airbnb-base/15.0.0_m4t3vvrby3btqwe437vnsnvyim: - resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} - engines: {node: ^10.12.0 || >=12.0.0} - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - dependencies: - confusing-browser-globals: 1.0.11 - eslint: 8.12.0 - eslint-plugin-import: 2.26.0_hhyjdrupy4c2vgtpytri6cjwoy - object.assign: 4.1.2 - object.entries: 1.1.5 - semver: 6.3.0 - dev: true - - /eslint-config-airbnb-typescript/17.0.0_c2ouaf3l4ivgkc6ae4nebvztom: + /eslint-config-airbnb-typescript/17.0.0_jh5xjcqwwfdwsmi5riakmiondu: resolution: {integrity: sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.13.0 @@ -5741,29 +3299,14 @@ packages: eslint: ^7.32.0 || ^8.2.0 eslint-plugin-import: ^2.25.3 dependencies: - '@typescript-eslint/eslint-plugin': 5.22.0_tal4xlmvnofklupd3hwjtzfb4q - '@typescript-eslint/parser': 5.22.0_hcfsmds2fshutdssjqluwm76uu - eslint: 8.15.0 - eslint-config-airbnb-base: 15.0.0_gwd37gqv3vjv3xlpl7ju3ag2qu - eslint-plugin-import: 2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy + '@typescript-eslint/eslint-plugin': 5.52.0_pezh6gz572jkbttmcky6muaye4 + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa + eslint: 8.30.0 + eslint-config-airbnb-base: 15.0.0_qyiwuuxhvwqdqhhtfgdncqdw4m + eslint-plugin-import: 2.27.5_pwruqh3pldl3vrraggl56un3si dev: true - /eslint-config-airbnb-typescript/17.0.0_r46exuh3jlhq2wmrnqx2ufqspa: - resolution: {integrity: sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.13.0 - '@typescript-eslint/parser': ^5.0.0 - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - dependencies: - '@typescript-eslint/eslint-plugin': 5.22.0_oztpoyrbzkyaikrhdkppp3gagu - '@typescript-eslint/parser': 5.22.0_uhoeudlwl7kc47h4kncsfowede - eslint: 8.12.0 - eslint-config-airbnb-base: 15.0.0_m4t3vvrby3btqwe437vnsnvyim - eslint-plugin-import: 2.26.0_hhyjdrupy4c2vgtpytri6cjwoy - dev: true - - /eslint-config-airbnb/19.0.4_tpqcnshlhqvperuqm7rlvey33u: + /eslint-config-airbnb/19.0.4_cr63lrmoc4dspolruzqiythtbu: resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -5773,99 +3316,94 @@ packages: eslint-plugin-react: ^7.28.0 eslint-plugin-react-hooks: ^4.3.0 dependencies: - eslint: 8.12.0 - eslint-config-airbnb-base: 15.0.0_m4t3vvrby3btqwe437vnsnvyim - eslint-plugin-import: 2.26.0_hhyjdrupy4c2vgtpytri6cjwoy - eslint-plugin-jsx-a11y: 6.6.1_eslint@8.12.0 - eslint-plugin-react: 7.31.11_eslint@8.12.0 - eslint-plugin-react-hooks: 4.6.0_eslint@8.12.0 - object.assign: 4.1.2 + eslint: 8.30.0 + eslint-config-airbnb-base: 15.0.0_qyiwuuxhvwqdqhhtfgdncqdw4m + eslint-plugin-import: 2.27.5_pwruqh3pldl3vrraggl56un3si + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.30.0 + eslint-plugin-react: 7.32.2_eslint@8.30.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.30.0 + object.assign: 4.1.4 object.entries: 1.1.6 dev: true - /eslint-config-next/12.1.4_jrolxr2xlutwfqdlrw57qa2k6a: - resolution: {integrity: sha512-Uj0jrVjoQbg9qerxRjSHoOOv3PEzoZxpb8G9LYct25fsflP8xIiUq0l4WEu2KSB5owuLv5hie7wSMqPEsHj+bQ==} + /eslint-config-next/13.1.1_lzzuuodtsqwxnvqeq4g4likcqa: + resolution: {integrity: sha512-/5S2XGWlGaiqrRhzpn51ux5JUSLwx8PVK2keLi5xk7QmhfYB8PqE6R6SlVw6hgnf/VexvUXSrlNJ/su00NhtHQ==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 - next: '>=10.2.0' typescript: '>=3.3.1' peerDependenciesMeta: typescript: optional: true dependencies: - '@next/eslint-plugin-next': 12.1.4 - '@rushstack/eslint-patch': 1.0.8 - '@typescript-eslint/parser': 5.10.1_uhoeudlwl7kc47h4kncsfowede - eslint: 8.12.0 - eslint-import-resolver-node: 0.3.4 - eslint-import-resolver-typescript: 2.4.0_l3k33lf43msdtqtpwrwceacqke - eslint-plugin-import: 2.25.2_svocbphju65ulgskrkawser2je - eslint-plugin-jsx-a11y: 6.5.1_eslint@8.12.0 - eslint-plugin-react: 7.29.1_eslint@8.12.0 - eslint-plugin-react-hooks: 4.3.0_eslint@8.12.0 - next: 13.0.3_7nrowiyds4jpk2wpzkb7237oey - typescript: 4.6.4 + '@next/eslint-plugin-next': 13.1.1 + '@rushstack/eslint-patch': 1.2.0 + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa + eslint: 8.30.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.3_qyiwuuxhvwqdqhhtfgdncqdw4m + eslint-plugin-import: 2.27.5_6kkbzanwtklxra7ywbiwgsmma4 + eslint-plugin-jsx-a11y: 6.7.1_eslint@8.30.0 + eslint-plugin-react: 7.32.2_eslint@8.30.0 + eslint-plugin-react-hooks: 4.6.0_eslint@8.30.0 + typescript: 4.9.4 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true - /eslint-config-prettier/8.5.0_eslint@8.15.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + /eslint-config-prettier/8.6.0_eslint@8.30.0: + resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.15.0 + eslint: 8.30.0 dev: true - /eslint-import-resolver-node/0.3.4: - resolution: {integrity: sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==} - dependencies: - debug: 2.6.9 - resolve: 1.22.0 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-import-resolver-node/0.3.6: - resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + /eslint-import-resolver-node/0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 - resolve: 1.22.0 + is-core-module: 2.11.0 + resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript/2.4.0_l3k33lf43msdtqtpwrwceacqke: - resolution: {integrity: sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA==} - engines: {node: '>=4'} + /eslint-import-resolver-typescript/3.5.3_qyiwuuxhvwqdqhhtfgdncqdw4m: + resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' dependencies: debug: 4.3.4 - eslint: 8.12.0 - eslint-plugin-import: 2.25.2_svocbphju65ulgskrkawser2je - glob: 7.2.3 + enhanced-resolve: 5.12.0 + eslint: 8.30.0 + eslint-plugin-import: 2.27.5_6kkbzanwtklxra7ywbiwgsmma4 + get-tsconfig: 4.4.0 + globby: 13.1.3 + is-core-module: 2.11.0 is-glob: 4.0.3 - resolve: 1.22.0 - tsconfig-paths: 3.14.1 + synckit: 0.8.5 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils/2.7.3_sysdrzuw2ki4kxpuwc4tznw2ha: - resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} + /eslint-module-utils/2.7.4_gg3a2ipfffgqkrlpyfns5m7weq: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' + eslint: '*' eslint-import-resolver-node: '*' eslint-import-resolver-typescript: '*' eslint-import-resolver-webpack: '*' peerDependenciesMeta: '@typescript-eslint/parser': optional: true + eslint: + optional: true eslint-import-resolver-node: optional: true eslint-import-resolver-typescript: @@ -5873,26 +3411,28 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.10.1_uhoeudlwl7kc47h4kncsfowede + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa debug: 3.2.7 - eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 2.4.0_l3k33lf43msdtqtpwrwceacqke - find-up: 2.1.0 + eslint: 8.30.0 + eslint-import-resolver-node: 0.3.7 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils/2.7.3_wex3ustmkv4ospy3s77r6ihlwq: - resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} + /eslint-module-utils/2.7.4_mvor3inlig5nubyjwhvdcz3avi: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' + eslint: '*' eslint-import-resolver-node: '*' eslint-import-resolver-typescript: '*' eslint-import-resolver-webpack: '*' peerDependenciesMeta: '@typescript-eslint/parser': optional: true + eslint: + optional: true eslint-import-resolver-node: optional: true eslint-import-resolver-typescript: @@ -5900,16 +3440,17 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.22.0_uhoeudlwl7kc47h4kncsfowede + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa debug: 3.2.7 - eslint-import-resolver-node: 0.3.6 - find-up: 2.1.0 + eslint: 8.30.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.3_qyiwuuxhvwqdqhhtfgdncqdw4m transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-import/2.25.2_svocbphju65ulgskrkawser2je: - resolution: {integrity: sha512-qCwQr9TYfoBHOFcVGKY9C9unq05uOxxdklmBXLVvcwo68y5Hta6/GzCZEMx2zQiu0woKNEER0LE7ZgaOfBU14g==} + /eslint-plugin-import/2.27.5_6kkbzanwtklxra7ywbiwgsmma4: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -5918,20 +3459,22 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.10.1_uhoeudlwl7kc47h4kncsfowede + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa array-includes: 3.1.6 - array.prototype.flat: 1.3.0 - debug: 2.6.9 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.12.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3_sysdrzuw2ki4kxpuwc4tznw2ha + eslint: 8.30.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_mvor3inlig5nubyjwhvdcz3avi has: 1.0.3 - is-core-module: 2.9.0 + is-core-module: 2.11.0 is-glob: 4.0.3 minimatch: 3.1.2 object.values: 1.1.6 - resolve: 1.22.0 + resolve: 1.22.1 + semver: 6.3.0 tsconfig-paths: 3.14.1 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -5939,8 +3482,8 @@ packages: - supports-color dev: true - /eslint-plugin-import/2.26.0_6nacgdzqm4zbhelsxkmd2vkvxy: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + /eslint-plugin-import/2.27.5_pwruqh3pldl3vrraggl56un3si: + resolution: {integrity: sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -5949,20 +3492,22 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.22.0_hcfsmds2fshutdssjqluwm76uu - array-includes: 3.1.5 - array.prototype.flat: 1.3.0 - debug: 2.6.9 + '@typescript-eslint/parser': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.15.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3_wex3ustmkv4ospy3s77r6ihlwq + eslint: 8.30.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_gg3a2ipfffgqkrlpyfns5m7weq has: 1.0.3 - is-core-module: 2.9.0 + is-core-module: 2.11.0 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.5 - resolve: 1.22.0 + object.values: 1.1.6 + resolve: 1.22.1 + semver: 6.3.0 tsconfig-paths: 3.14.1 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -5970,39 +3515,8 @@ packages: - supports-color dev: true - /eslint-plugin-import/2.26.0_hhyjdrupy4c2vgtpytri6cjwoy: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - '@typescript-eslint/parser': 5.22.0_uhoeudlwl7kc47h4kncsfowede - array-includes: 3.1.5 - array.prototype.flat: 1.3.0 - debug: 2.6.9 - doctrine: 2.1.0 - eslint: 8.12.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3_wex3ustmkv4ospy3s77r6ihlwq - has: 1.0.3 - is-core-module: 2.9.0 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.values: 1.1.5 - resolve: 1.22.0 - tsconfig-paths: 3.14.1 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /eslint-plugin-jest/27.1.6_uln45ilbhdyv55swkm637nwsny: - resolution: {integrity: sha512-XA7RFLSrlQF9IGtAmhddkUkBuICCTuryfOTfCSWcZHiHb69OilIH05oozH2XA6CEOtztnOd0vgXyvxZodkxGjg==} + /eslint-plugin-jest/27.2.1_oh5yamb4myuqqwzna5honvfj4a: + resolution: {integrity: sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^5.0.0 @@ -6014,118 +3528,69 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.22.0_oztpoyrbzkyaikrhdkppp3gagu - '@typescript-eslint/utils': 5.22.0_uhoeudlwl7kc47h4kncsfowede - eslint: 8.12.0 - jest: 28.1.0_@types+node@17.0.31 + '@typescript-eslint/eslint-plugin': 5.52.0_pezh6gz572jkbttmcky6muaye4 + '@typescript-eslint/utils': 5.52.0_lzzuuodtsqwxnvqeq4g4likcqa + eslint: 8.30.0 + jest: 29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y/6.5.1_eslint@8.12.0: - resolution: {integrity: sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==} - engines: {node: '>=4.0'} + /eslint-plugin-jsdoc/39.9.1_eslint@8.30.0: + resolution: {integrity: sha512-Rq2QY6BZP2meNIs48aZ3GlIlJgBqFCmR55+UBvaDkA3ZNQ0SvQXOs2QKkubakEijV8UbIVbVZKsOVN8G3MuqZw==} + engines: {node: ^14 || ^16 || ^17 || ^18 || ^19} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^7.0.0 || ^8.0.0 dependencies: - '@babel/runtime': 7.20.6 - aria-query: 4.2.2 - array-includes: 3.1.6 - ast-types-flow: 0.0.7 - axe-core: 4.5.2 - axobject-query: 2.2.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 8.12.0 - has: 1.0.3 - jsx-ast-utils: 3.3.3 - language-tags: 1.0.5 - minimatch: 3.1.2 + '@es-joy/jsdoccomment': 0.36.1 + comment-parser: 1.3.1 + debug: 4.3.4 + escape-string-regexp: 4.0.0 + eslint: 8.30.0 + esquery: 1.4.2 + semver: 7.3.8 + spdx-expression-parse: 3.0.1 + transitivePeerDependencies: + - supports-color dev: true - /eslint-plugin-jsx-a11y/6.6.1_eslint@8.12.0: - resolution: {integrity: sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==} + /eslint-plugin-jsx-a11y/6.7.1_eslint@8.30.0: + resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==} engines: {node: '>=4.0'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.20.6 - aria-query: 4.2.2 + '@babel/runtime': 7.20.13 + aria-query: 5.1.3 array-includes: 3.1.6 + array.prototype.flatmap: 1.3.1 ast-types-flow: 0.0.7 - axe-core: 4.5.2 - axobject-query: 2.2.0 + axe-core: 4.6.3 + axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.12.0 + eslint: 8.30.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 minimatch: 3.1.2 + object.entries: 1.1.6 + object.fromentries: 2.0.6 semver: 6.3.0 dev: true - /eslint-plugin-prettier/4.0.0_iqftbjqlxzn3ny5nablrkczhqi: - resolution: {integrity: sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==} - engines: {node: '>=6.0.0'} - peerDependencies: - eslint: '>=7.28.0' - eslint-config-prettier: '*' - prettier: '>=2.0.0' - peerDependenciesMeta: - eslint-config-prettier: - optional: true - dependencies: - eslint: 8.15.0 - eslint-config-prettier: 8.5.0_eslint@8.15.0 - prettier: 2.6.2 - prettier-linter-helpers: 1.0.0 - dev: true - - /eslint-plugin-react-hooks/4.3.0_eslint@8.12.0: - resolution: {integrity: sha512-XslZy0LnMn+84NEG9jSGR6eGqaZB3133L8xewQo3fQagbQuGt7a63gf+P1NGKZavEYEC3UXaWEAA/AqDkuN6xA==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - dependencies: - eslint: 8.12.0 - dev: true - - /eslint-plugin-react-hooks/4.6.0_eslint@8.12.0: + /eslint-plugin-react-hooks/4.6.0_eslint@8.30.0: resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.12.0 + eslint: 8.30.0 dev: true - /eslint-plugin-react/7.29.1_eslint@8.12.0: - resolution: {integrity: sha512-WtzRpHMhsOX05ZrkyaaqmLl2uXGqmYooCfBxftJKlkYdsltiufGgfU7uuoHwR2lBam2Kh/EIVID4aU9e3kbCMA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - dependencies: - array-includes: 3.1.6 - array.prototype.flatmap: 1.3.1 - doctrine: 2.1.0 - eslint: 8.12.0 - estraverse: 5.3.0 - jsx-ast-utils: 3.3.3 - minimatch: 3.1.2 - object.entries: 1.1.6 - object.fromentries: 2.0.6 - object.hasown: 1.1.2 - object.values: 1.1.6 - prop-types: 15.8.1 - resolve: 2.0.0-next.3 - semver: 6.3.0 - string.prototype.matchall: 4.0.8 - dev: true - - /eslint-plugin-react/7.31.11_eslint@8.12.0: - resolution: {integrity: sha512-TTvq5JsT5v56wPa9OYHzsrOlHzKZKjV+aLgS+55NJP/cuzdiQPC7PfYoUjMoxlffKtvijpk7vA/jmuqRb9nohw==} + /eslint-plugin-react/7.32.2_eslint@8.30.0: + resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -6134,16 +3599,16 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.12.0 + eslint: 8.30.0 estraverse: 5.3.0 - jsx-ast-utils: 3.3.0 + jsx-ast-utils: 3.3.3 minimatch: 3.1.2 object.entries: 1.1.6 object.fromentries: 2.0.6 object.hasown: 1.1.2 object.values: 1.1.6 prop-types: 15.8.1 - resolve: 2.0.0-next.3 + resolve: 2.0.0-next.4 semver: 6.3.0 string.prototype.matchall: 4.0.8 dev: true @@ -6164,23 +3629,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.12.0: + /eslint-utils/3.0.0_eslint@8.30.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.12.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-utils/3.0.0_eslint@8.15.0: - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.15.0 + eslint: 8.30.0 eslint-visitor-keys: 2.1.0 dev: true @@ -6194,13 +3649,15 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.12.0: - resolution: {integrity: sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==} + /eslint/8.30.0: + resolution: {integrity: sha512-MGADB39QqYuzEGov+F/qb18r4i7DohCDOfatHaxI2iGlPuC65bwG2gxgO+7DkyL38dRFaRH7RaRAgU6JKL9rMQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint/eslintrc': 1.2.3 - '@humanwhocodes/config-array': 0.9.5 + '@eslint/eslintrc': 1.4.1 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -6208,20 +3665,23 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.12.0 + eslint-utils: 3.0.0_eslint@8.30.0 eslint-visitor-keys: 3.3.0 - espree: 9.3.2 - esquery: 1.4.0 + espree: 9.4.1 + esquery: 1.4.2 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 + find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.13.0 - ignore: 5.2.0 + globals: 13.20.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-sdsl: 4.3.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -6233,61 +3693,16 @@ packages: strip-ansi: 6.0.1 strip-json-comments: 3.1.1 text-table: 0.2.0 - v8-compile-cache: 2.3.0 transitivePeerDependencies: - supports-color dev: true - /eslint/8.15.0: - resolution: {integrity: sha512-GG5USZ1jhCu8HJkzGgeK8/+RGnHaNYZGrGDzUtigK3BsGESW/rs2az23XqE0WVwDxy1VRvvjSSGu5nB0Bu+6SA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint/eslintrc': 1.2.3 - '@humanwhocodes/config-array': 0.9.5 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.15.0 - eslint-visitor-keys: 3.3.0 - espree: 9.3.2 - esquery: 1.4.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - functional-red-black-tree: 1.0.1 - glob-parent: 6.0.2 - globals: 13.13.0 - ignore: 5.2.0 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.1 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - v8-compile-cache: 2.3.0 - transitivePeerDependencies: - - supports-color - dev: true - - /espree/9.3.2: - resolution: {integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==} + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.7.1 - acorn-jsx: 5.3.2_acorn@8.7.1 + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 eslint-visitor-keys: 3.3.0 dev: true @@ -6297,8 +3712,8 @@ packages: hasBin: true dev: true - /esquery/1.4.0: - resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} + /esquery/1.4.2: + resolution: {integrity: sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 @@ -6321,32 +3736,16 @@ packages: engines: {node: '>=4.0'} dev: true - /estree-util-is-identifier-name/2.0.0: - resolution: {integrity: sha512-aXXZFVMnBBDRP81vS4YtAYJ0hUkgEsXea7lNKWCOeaAquGb1Jm2rcONPB5fpzwgbNxulTvrWuKnp9UElUGAKeQ==} - dev: false - - /estree-util-visit/1.1.0: - resolution: {integrity: sha512-3lXJ4Us9j8TUif9cWcQy81t9p5OLasnDuuhrFiqb+XstmKC1d1LmrQWYsY49/9URcfHE64mPypDBaNK9NwWDPQ==} - dependencies: - '@types/estree-jsx': 0.0.1 - '@types/unist': 2.0.6 - dev: false - /esutils/2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true /etag/1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: false - /event-target-shim/5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: true - /events/3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -6377,33 +3776,26 @@ packages: engines: {node: '>=6'} dev: false - /expand-tilde/2.0.2: - resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} - engines: {node: '>=0.10.0'} + /expect/29.4.3: + resolution: {integrity: sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - homedir-polyfill: 1.0.3 + '@jest/expect-utils': 29.4.3 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.4.3 + jest-message-util: 29.4.3 + jest-util: 29.4.3 dev: true - /expect/28.1.0: - resolution: {integrity: sha512-qFXKl8Pmxk8TBGfaFKRtcQjfXEnKAs+dmlxdwvukJZorwrAabT7M3h8oLOG01I2utEhkmUTi17CHaPBovZsKdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/expect-utils': 28.1.0 - jest-get-type: 28.0.2 - jest-matcher-utils: 28.1.0 - jest-message-util: 28.1.0 - jest-util: 28.1.0 - dev: true - - /express/4.18.1: - resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==} + /express/4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.0 + body-parser: 1.20.1 content-disposition: 0.5.4 - content-type: 1.0.4 + content-type: 1.0.5 cookie: 0.5.0 cookie-signature: 1.0.6 debug: 2.6.9 @@ -6420,7 +3812,7 @@ packages: parseurl: 1.3.3 path-to-regexp: 0.1.7 proxy-addr: 2.0.7 - qs: 6.10.3 + qs: 6.11.0 range-parser: 1.2.1 safe-buffer: 5.2.1 send: 0.18.0 @@ -6447,26 +3839,12 @@ packages: tmp: 0.0.33 dev: true - /extract-files/11.0.0: - resolution: {integrity: sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==} - engines: {node: ^12.20 || >= 14.13} - dev: true - - /extract-files/9.0.0: - resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} - engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} - dev: true - /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff/1.2.0: - resolution: {integrity: sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==} - dev: true - - /fast-glob/3.2.11: - resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -6478,59 +3856,35 @@ packages: /fast-json-stable-stringify/2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - /fast-levenshtein/2.0.6: - resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true - /fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 dev: true - /fb-watchman/2.0.1: - resolution: {integrity: sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==} + /fb-watchman/2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 dev: true - /fbjs-css-vars/1.0.2: - resolution: {integrity: sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==} - dev: true - - /fbjs/3.0.4: - resolution: {integrity: sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==} - dependencies: - cross-fetch: 3.1.5 - fbjs-css-vars: 1.0.2 - loose-envify: 1.4.0 - object-assign: 4.1.1 - promise: 7.3.1 - setimmediate: 1.0.5 - ua-parser-js: 0.7.31 - transitivePeerDependencies: - - encoding - dev: true - /fecha/4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} dev: false - /figures/1.7.0: - resolution: {integrity: sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==} - engines: {node: '>=0.10.0'} + /fetch-blob/3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} dependencies: - escape-string-regexp: 1.0.5 - object-assign: 4.1.1 - dev: true - - /figures/2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + dev: false /figures/3.2.0: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} @@ -6567,22 +3921,9 @@ packages: - supports-color dev: false - /find-node-modules/2.1.3: - resolution: {integrity: sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==} - dependencies: - findup-sync: 4.0.0 - merge: 2.1.1 - dev: true - /find-root/1.1.0: resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} - - /find-up/2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - dependencies: - locate-path: 2.0.0 - dev: true + dev: false /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -6600,61 +3941,28 @@ packages: path-exists: 4.0.0 dev: true - /findup-sync/4.0.0: - resolution: {integrity: sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==} - engines: {node: '>= 8'} - dependencies: - detect-file: 1.0.0 - is-glob: 4.0.3 - micromatch: 4.0.5 - resolve-dir: 1.0.1 - dev: true - /flat-cache/3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.5 + flatted: 3.2.7 rimraf: 3.0.2 dev: true - /flatted/3.2.5: - resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true /fn.name/1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} dev: false - /follow-redirects/1.15.0: - resolution: {integrity: sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dev: false - /for-each/0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /form-data-encoder/1.7.1: - resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} - dev: true - - /form-data/3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /form-data/4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -6664,13 +3972,12 @@ packages: mime-types: 2.1.35 dev: true - /formdata-node/4.3.3: - resolution: {integrity: sha512-coTew7WODO2vF+XhpUdmYz4UBvlsiTMSNaFYZlrXIqYbFd4W7bMwnoALNLE6uvNgzTg2j1JDF0ZImEfF06VPAA==} - engines: {node: '>= 12.20'} + /formdata-polyfill/4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.1 - dev: true + fetch-blob: 3.2.0 + dev: false /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -6678,7 +3985,7 @@ packages: dev: false /fresh/0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: false @@ -6693,22 +4000,13 @@ packages: graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 - - /fs-extra/9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true + dev: false /fs-minipass/2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.6 + minipass: 3.3.6 dev: false /fs.realpath/1.0.0: @@ -6729,15 +4027,11 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 functions-have-names: 1.2.3 dev: true - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} - dev: true - /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true @@ -6770,16 +4064,10 @@ packages: /get-caller-file/2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + dev: true - /get-intrinsic/1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-symbols: 1.0.3 - - /get-intrinsic/1.1.3: - resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} + /get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==} dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -6790,20 +4078,6 @@ packages: engines: {node: '>=8.0.0'} dev: true - /get-stream/4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream/5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -6814,19 +4088,11 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true - /git-raw-commits/2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - hasBin: true - dependencies: - dargs: 7.0.0 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 + /get-tsconfig/4.4.0: + resolution: {integrity: sha512-0Gdjo/9+FzsYhXCEFueo2aY1z1tpXrxWZzP7k8ul9qt1U5o8rYJwTJYmaeHdrVosYIVYkOy2iwCJ9FdpocJhPQ==} dev: true /github-from-package/0.0.0: @@ -6867,177 +4133,69 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 - /glob/8.0.3: - resolution: {integrity: sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==} - engines: {node: '>=12'} - dependencies: - fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.1 - once: 1.4.0 - dev: true - - /global-dirs/0.1.1: - resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} - engines: {node: '>=4'} - dependencies: - ini: 1.3.8 - dev: true - - /global-dirs/3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 - dev: true - - /global-modules/1.0.0: - resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} - engines: {node: '>=0.10.0'} - dependencies: - global-prefix: 1.0.2 - is-windows: 1.0.2 - resolve-dir: 1.0.1 - dev: true - - /global-prefix/1.0.2: - resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} - engines: {node: '>=0.10.0'} - dependencies: - expand-tilde: 2.0.2 - homedir-polyfill: 1.0.3 - ini: 1.3.8 - is-windows: 1.0.2 - which: 1.3.1 - dev: true - /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} dev: true - /globals/13.13.0: - resolution: {integrity: sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==} + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.0 + dev: true + + /globalyzer/0.1.0: + resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} + dev: true + /globby/11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.11 - ignore: 5.2.0 + fast-glob: 3.2.12 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true + /globby/13.1.3: + resolution: {integrity: sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.2.12 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + + /globrex/0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true + /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.1.3 - dev: true - - /got/9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} - engines: {node: '>=8.6'} - dependencies: - '@sindresorhus/is': 0.14.0 - '@szmarczak/http-timer': 1.1.2 - '@types/keyv': 3.1.4 - '@types/responselike': 1.0.0 - cacheable-request: 6.1.0 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 4.1.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 1.1.0 - to-readable-stream: 1.0.0 - url-parse-lax: 3.0.0 + get-intrinsic: 1.2.0 dev: true /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - /graphql-config/4.3.1_b3mcazu44o3sueqtutmadehm2y: - resolution: {integrity: sha512-czBWzJSGaLJfOHBLuUTZVRTjfgohPfvlaeN1B5nXBVptFARpiFuS7iI4FnRhCGwm6qt1h2j1g05nkg0OIGA6bg==} - engines: {node: '>= 10.0.0'} - peerDependencies: - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - dependencies: - '@endemolshinegroup/cosmiconfig-typescript-loader': 3.0.2_eqevhppa7sa2qvpxws2sflyfju - '@graphql-tools/graphql-file-loader': 7.3.15_graphql@15.8.0 - '@graphql-tools/json-file-loader': 7.3.15_graphql@15.8.0 - '@graphql-tools/load': 7.5.14_graphql@15.8.0 - '@graphql-tools/merge': 8.2.14_graphql@15.8.0 - '@graphql-tools/url-loader': 7.9.25_kdmixh5skunrm3ztvltzjhqkpa - '@graphql-tools/utils': 8.6.13_graphql@15.8.0 - cosmiconfig: 7.0.1 - cosmiconfig-toml-loader: 1.0.0 - graphql: 15.8.0 - minimatch: 4.2.1 - string-env-interpolation: 1.0.1 - transitivePeerDependencies: - - '@types/node' - - bufferutil - - encoding - - typescript - - utf-8-validate + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphql-executor/0.0.23_graphql@15.8.0: - resolution: {integrity: sha512-3Ivlyfjaw3BWmGtUSnMpP/a4dcXCp0mJtj0PiPG14OKUizaMKlSEX+LX2Qed0LrxwniIwvU6B4w/koVjEPyWJg==} - engines: {node: ^12.22.0 || ^14.16.0 || >=16.0.0} - peerDependencies: - graphql: ^15.0.0 || ^16.0.0 - dependencies: - graphql: 15.8.0 - dev: true - - /graphql-import-node/0.0.5_graphql@15.8.0: - resolution: {integrity: sha512-OXbou9fqh9/Lm7vwXT0XoRN9J5+WCYKnbiTalgFDvkQERITRmcfncZs6aVABedd5B85yQU5EULS4a5pnbpuI0Q==} - peerDependencies: - graphql: '*' - dependencies: - graphql: 15.8.0 - dev: true - - /graphql-query-complexity/0.7.2_graphql@15.8.0: - resolution: {integrity: sha512-+VgmrfxGEjHI3zuojWOR8bsz7Ycz/BZjNjxnlUieTz5DsB92WoIrYCSZdWG7UWZ3rfcA1Gb2Nf+wB80GsaZWuQ==} - peerDependencies: - graphql: ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - graphql: 15.8.0 - lodash.get: 4.4.2 - dev: false - - /graphql-request/4.3.0_graphql@15.8.0: - resolution: {integrity: sha512-2v6hQViJvSsifK606AliqiNiijb1uwWp6Re7o0RTyH+uRTv/u7Uqm2g4Fjq/LgZIzARB38RZEvVBFOQOVdlBow==} - peerDependencies: - graphql: 14 - 16 - dependencies: - cross-fetch: 3.1.5 - extract-files: 9.0.0 - form-data: 3.0.1 - graphql: 15.8.0 - transitivePeerDependencies: - - encoding - dev: true - - /graphql-subscriptions/1.2.1_graphql@15.8.0: - resolution: {integrity: sha512-95yD/tKi24q8xYa7Q9rhQN16AYj5wPbrb8tmHGM3WRc9EBmWrG/0kkMl+tQG8wcEuE9ibR4zyOM31p5Sdr2v4g==} - peerDependencies: - graphql: ^0.10.5 || ^0.11.3 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - dependencies: - graphql: 15.8.0 - iterall: 1.3.0 - dev: false - /graphql-tag/2.12.6_graphql@15.8.0: resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} @@ -7045,57 +4203,35 @@ packages: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: graphql: 15.8.0 - tslib: 2.4.0 - - /graphql-type-json/0.3.2_graphql@15.8.0: - resolution: {integrity: sha512-J+vjof74oMlCWXSvt0DOf2APEdZOCdubEvGDUAlqH//VBYcOYsGgRW7Xzorr44LvkjiuvecWc8fChxuZZbChtg==} - peerDependencies: - graphql: '>=0.8.0' - dependencies: - graphql: 15.8.0 + tslib: 2.5.0 dev: false - /graphql-ws/5.9.0_graphql@15.8.0: - resolution: {integrity: sha512-CXv0l0nI1bgChwl4Rm+BqNOAKwL/C9T2N8RfmTkhQ38YLFdUXCi2WNW4oFp8BJP+t75nCLzjHHgR04sP1oF02w==} - engines: {node: '>=10'} - peerDependencies: - graphql: '>=0.11 <=16' - dependencies: - graphql: 15.8.0 - dev: true - /graphql/15.8.0: resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} engines: {node: '>= 10.x'} - /hard-rejection/2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - dev: true - - /has-ansi/2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} - dependencies: - ansi-regex: 2.1.1 - dev: true - /has-bigints/1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true /has-flag/3.0.0: - resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} /has-flag/4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} + dev: true /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} dev: true /has-symbols/1.0.3: @@ -7113,60 +4249,26 @@ packages: resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} dev: false - /has-yarn/2.1.0: - resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} - engines: {node: '>=8'} - dev: true - /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} dependencies: function-bind: 1.1.1 - /hast-util-whitespace/2.0.0: - resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} + /hast-util-whitespace/2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} dev: false - /header-case/2.0.4: - resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} - dependencies: - capital-case: 1.0.4 - tslib: 2.4.0 - dev: true - /headers-polyfill/3.1.2: resolution: {integrity: sha512-tWCK4biJ6hcLqTviLXVR9DTRfYGQMXEIUj3gwJ2rZ5wO/at3XtkI4g8mCvFdUF9l1KMBNCfmNAdnahm1cgavQA==} dev: true - /highlight.js/10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - dev: false - /hoist-non-react-statics/3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 dev: false - /homedir-polyfill/1.0.3: - resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} - engines: {node: '>=0.10.0'} - dependencies: - parse-passwd: 1.0.0 - dev: true - - /hosted-git-info/2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true - - /hosted-git-info/4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - dependencies: - lru-cache: 6.0.0 - dev: true - /html-encoding-sniffer/3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} engines: {node: '>=12'} @@ -7178,10 +4280,6 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /http-cache-semantics/4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} - dev: true - /http-errors/2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} @@ -7204,10 +4302,6 @@ packages: - supports-color dev: true - /http/0.0.1-security: - resolution: {integrity: sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==} - dev: false - /https-proxy-agent/5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} @@ -7238,23 +4332,13 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - /ignore-by-default/1.0.1: - resolution: {integrity: sha1-SMptcvbGo68Aqa1K5odr44ieKwk=} - dev: true - - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} dev: true - /immutable/3.7.6: - resolution: {integrity: sha512-AizQPcaofEtO11RZhPPHBOJRdo/20MKQF9mBLnVkBoyHi1/zXK8fzVdnEpSV9gxqtnh6Qomfp3F0xT5qP/vThw==} - engines: {node: '>=0.8.0'} - dev: true - - /immutable/4.1.0: - resolution: {integrity: sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==} - dev: false + /immutable/4.2.4: + resolution: {integrity: sha512-WDxL3Hheb1JkRN3sQkyujNlL/xRjAo3rJtaU5xeufUauG66JdMr32bLj4gF+vWl84DIA3Zxw7tiAjneYzRRw+w==} /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -7263,16 +4347,6 @@ packages: parent-module: 1.0.1 resolve-from: 4.0.0 - /import-from/4.0.0: - resolution: {integrity: sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==} - engines: {node: '>=12.2'} - dev: true - - /import-lazy/2.1.0: - resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} - engines: {node: '>=4'} - dev: true - /import-local/3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -7283,15 +4357,10 @@ packages: dev: true /imurmurhash/0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string/3.2.0: - resolution: {integrity: sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==} - engines: {node: '>=4'} - dev: true - /indent-string/4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -7308,22 +4377,18 @@ packages: /ini/1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - /ini/2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true + dev: false /inline-style-parser/0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} dev: false - /inquirer/8.2.4: - resolution: {integrity: sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==} + /inquirer/8.2.5: + resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==} engines: {node: '>=12.0.0'} dependencies: ansi-escapes: 4.3.2 - chalk: 4.1.2 + chalk: 4.1.1 cli-cursor: 3.1.0 cli-width: 3.0.0 external-editor: 3.1.0 @@ -7332,52 +4397,27 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.5.6 + rxjs: 7.8.0 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 7.0.0 dev: true - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 has: 1.0.3 side-channel: 1.0.4 dev: true - /invariant/2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - dependencies: - loose-envify: 1.4.0 - dev: true - /ipaddr.js/1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: false - /is-absolute/1.0.0: - resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} - engines: {node: '>=0.10.0'} - dependencies: - is-relative: 1.0.0 - is-windows: 1.0.2 - dev: true - - /is-alphabetical/2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - dev: false - - /is-alphanumerical/2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - dependencies: - is-alphabetical: 2.0.1 - is-decimal: 2.0.1 - dev: false - /is-arguments/1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -7386,6 +4426,14 @@ packages: has-tostringtag: 1.0.0 dev: true + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.2.0 + is-typed-array: 1.1.10 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} @@ -7418,25 +4466,13 @@ packages: engines: {node: '>=4'} dev: false - /is-callable/1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} - engines: {node: '>= 0.4'} - dev: true - /is-callable/1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-ci/2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - dependencies: - ci-info: 2.0.0 - dev: true - - /is-core-module/2.9.0: - resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==} + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 @@ -7447,26 +4483,16 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-decimal/2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - dev: false + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true /is-extglob/2.1.1: - resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-fullwidth-code-point/1.0.0: - resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} - engines: {node: '>=0.10.0'} - dependencies: - number-is-nan: 1.0.1 - dev: true - - /is-fullwidth-code-point/2.0.0: - resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} - engines: {node: '>=4'} - dev: true - /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -7489,29 +4515,11 @@ packages: dependencies: is-extglob: 2.1.1 - /is-hexadecimal/2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - dev: false - - /is-installed-globally/0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.0 - is-path-inside: 3.0.3 - dev: true - /is-interactive/1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} dev: true - /is-lower-case/2.0.2: - resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} - dependencies: - tslib: 2.4.0 - dev: true - /is-map/2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} dev: true @@ -7525,11 +4533,6 @@ packages: resolution: {integrity: sha512-5IcdXuf++TTNt3oGl9EBdkvndXA8gmc4bz/Y+mdEpWh3Mcn/+kOw6hI7LD5CocqJWMzeb0I0ClndRVNdEPuJXQ==} dev: true - /is-npm/5.0.0: - resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} - engines: {node: '>=10'} - dev: true - /is-number-object/1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} @@ -7541,30 +4544,13 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /is-obj/2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: true - - /is-observable/1.1.0: - resolution: {integrity: sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==} - engines: {node: '>=4'} - dependencies: - symbol-observable: 1.2.0 - dev: true - /is-path-inside/3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} dev: true - /is-plain-obj/1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - dev: true - - /is-plain-obj/4.0.0: - resolution: {integrity: sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==} + /is-plain-obj/4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} dev: false @@ -7572,10 +4558,6 @@ packages: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true - /is-promise/2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - dev: true - /is-regex/1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -7584,13 +4566,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-relative/1.0.0: - resolution: {integrity: sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==} - engines: {node: '>=0.10.0'} - dependencies: - is-unc-path: 1.0.0 - dev: true - /is-set/2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} dev: true @@ -7601,11 +4576,6 @@ packages: call-bind: 1.0.2 dev: true - /is-stream/1.1.0: - resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} - engines: {node: '>=0.10.0'} - dev: true - /is-stream/2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -7624,13 +4594,6 @@ packages: has-symbols: 1.0.3 dev: true - /is-text-path/1.0.1: - resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==} - engines: {node: '>=0.10.0'} - dependencies: - text-extensions: 1.9.0 - dev: true - /is-typed-array/1.1.10: resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} engines: {node: '>= 0.4'} @@ -7642,32 +4605,11 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-typedarray/1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - - /is-unc-path/1.0.0: - resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} - engines: {node: '>=0.10.0'} - dependencies: - unc-path-regex: 0.1.2 - dev: true - /is-unicode-supported/0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true - /is-upper-case/2.0.2: - resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} - dependencies: - tslib: 2.4.0 - dev: true - - /is-utf8/0.2.1: - resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} - dev: true - /is-weakmap/2.0.1: resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} dev: true @@ -7682,16 +4624,19 @@ packages: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 dev: true - /is-windows/1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + /is-what/4.1.8: + resolution: {integrity: sha512-yq8gMao5upkPoGEU9LsB2P+K3Kt8Q3fQFCGyNCWOAnJAMzEXVV9drYb0TXr42TTliLLhKIBvulgAXgtLLnwzGA==} + engines: {node: '>=12.13'} + dev: false - /is-yarn-global/0.3.0: - resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 dev: true /isarray/2.0.5: @@ -7705,30 +4650,23 @@ packages: /isomorphic-fetch/3.0.0: resolution: {integrity: sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==} dependencies: - node-fetch: 2.6.7 + node-fetch: 2.6.9 whatwg-fetch: 3.6.2 transitivePeerDependencies: - encoding - - /isomorphic-ws/4.0.1_ws@8.8.0: - resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} - peerDependencies: - ws: '*' - dependencies: - ws: 8.8.0 - dev: true + dev: false /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} dev: true - /istanbul-lib-instrument/5.2.0: - resolution: {integrity: sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==} + /istanbul-lib-instrument/5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.17.10 - '@babel/parser': 7.18.5 + '@babel/core': 7.20.12 + '@babel/parser': 7.20.15 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 6.3.0 @@ -7756,56 +4694,52 @@ packages: - supports-color dev: true - /istanbul-reports/3.1.4: - resolution: {integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==} + /istanbul-reports/3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 dev: true - /iterall/1.3.0: - resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} - dev: false - - /jest-changed-files/28.0.2: - resolution: {integrity: sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-changed-files/29.4.3: + resolution: {integrity: sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 - throat: 6.0.1 + p-limit: 3.1.0 dev: true - /jest-circus/28.1.0: - resolution: {integrity: sha512-rNYfqfLC0L0zQKRKsg4n4J+W1A2fbyGH7Ss/kDIocp9KXD9iaL111glsLu7+Z7FHuZxwzInMDXq+N1ZIBkI/TQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-circus/29.4.3: + resolution: {integrity: sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 28.1.0 - '@jest/expect': 28.1.0 - '@jest/test-result': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@jest/environment': 29.4.3 + '@jest/expect': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 is-generator-fn: 2.1.0 - jest-each: 28.1.0 - jest-matcher-utils: 28.1.0 - jest-message-util: 28.1.0 - jest-runtime: 28.1.0 - jest-snapshot: 28.1.0 - jest-util: 28.1.0 - pretty-format: 28.1.0 + jest-each: 29.4.3 + jest-matcher-utils: 29.4.3 + jest-message-util: 29.4.3 + jest-runtime: 29.4.3 + jest-snapshot: 29.4.3 + jest-util: 29.4.3 + p-limit: 3.1.0 + pretty-format: 29.4.3 slash: 3.0.0 - stack-utils: 2.0.5 - throat: 6.0.1 + stack-utils: 2.0.6 transitivePeerDependencies: - supports-color dev: true - /jest-cli/28.1.0_@types+node@17.0.31: - resolution: {integrity: sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-cli/29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4: + resolution: {integrity: sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -7813,55 +4747,27 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 28.1.0 - '@jest/test-result': 28.1.0 - '@jest/types': 28.1.0 + '@jest/core': 29.4.3_ts-node@10.9.1 + '@jest/test-result': 29.4.3 + '@jest/types': 29.4.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 28.1.0_@types+node@17.0.31 - jest-util: 28.1.0 - jest-validate: 28.1.0 + jest-config: 29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4 + jest-util: 29.4.3 + jest-validate: 29.4.3 prompts: 2.4.2 - yargs: 17.4.1 + yargs: 17.7.0 transitivePeerDependencies: - '@types/node' - supports-color - ts-node dev: true - /jest-cli/28.1.0_rcy5nlo3uetwcso5jthu6pby7u: - resolution: {integrity: sha512-fDJRt6WPRriHrBsvvgb93OxgajHHsJbk4jZxiPqmZbMDRcHskfJBBfTyjFko0jjfprP544hOktdSi9HVgl4VUQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 28.1.0_ts-node@10.9.1 - '@jest/test-result': 28.1.0 - '@jest/types': 28.1.0 - chalk: 4.1.2 - exit: 0.1.2 - graceful-fs: 4.2.10 - import-local: 3.1.0 - jest-config: 28.1.0_rcy5nlo3uetwcso5jthu6pby7u - jest-util: 28.1.0 - jest-validate: 28.1.0 - prompts: 2.4.2 - yargs: 17.4.1 - transitivePeerDependencies: - - '@types/node' - - supports-color - - ts-node - dev: true - - /jest-config/28.1.0_@types+node@17.0.31: - resolution: {integrity: sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-config/29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4: + resolution: {integrity: sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@types/node': '*' ts-node: '>=9.0.0' @@ -7871,113 +4777,64 @@ packages: ts-node: optional: true dependencies: - '@babel/core': 7.17.10 - '@jest/test-sequencer': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - babel-jest: 28.1.0_@babel+core@7.17.10 + '@babel/core': 7.20.12 + '@jest/test-sequencer': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 + babel-jest: 29.4.3_@babel+core@7.20.12 chalk: 4.1.2 - ci-info: 3.3.0 - deepmerge: 4.2.2 + ci-info: 3.8.0 + deepmerge: 4.3.0 glob: 7.2.3 graceful-fs: 4.2.10 - jest-circus: 28.1.0 - jest-environment-node: 28.1.0 - jest-get-type: 28.0.2 - jest-regex-util: 28.0.2 - jest-resolve: 28.1.0 - jest-runner: 28.1.0 - jest-util: 28.1.0 - jest-validate: 28.1.0 + jest-circus: 29.4.3 + jest-environment-node: 29.4.3 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.4.3 + jest-runner: 29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 28.1.0 + pretty-format: 29.4.3 slash: 3.0.0 strip-json-comments: 3.1.1 + ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq transitivePeerDependencies: - supports-color dev: true - /jest-config/28.1.0_rcy5nlo3uetwcso5jthu6pby7u: - resolution: {integrity: sha512-aOV80E9LeWrmflp7hfZNn/zGA4QKv/xsn2w8QCBP0t0+YqObuCWTSgNbHJ0j9YsTuCO08ZR/wsvlxqqHX20iUA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - peerDependencies: - '@types/node': '*' - ts-node: '>=9.0.0' - peerDependenciesMeta: - '@types/node': - optional: true - ts-node: - optional: true - dependencies: - '@babel/core': 7.17.10 - '@jest/test-sequencer': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - babel-jest: 28.1.0_@babel+core@7.17.10 - chalk: 4.1.2 - ci-info: 3.3.0 - deepmerge: 4.2.2 - glob: 7.2.3 - graceful-fs: 4.2.10 - jest-circus: 28.1.0 - jest-environment-node: 28.1.0 - jest-get-type: 28.0.2 - jest-regex-util: 28.0.2 - jest-resolve: 28.1.0 - jest-runner: 28.1.0 - jest-util: 28.1.0 - jest-validate: 28.1.0 - micromatch: 4.0.5 - parse-json: 5.2.0 - pretty-format: 28.1.0 - slash: 3.0.0 - strip-json-comments: 3.1.1 - ts-node: 10.9.1_l47be6km5p57gglrggidw5gsgm - transitivePeerDependencies: - - supports-color - dev: true - - /jest-diff/27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-diff/29.4.3: + resolution: {integrity: sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + diff-sequences: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-diff/28.1.0: - resolution: {integrity: sha512-8eFd3U3OkIKRtlasXfiAQfbovgFgRDb0Ngcs2E+FMeBZ4rUezqIaGjuyggJBp+llosQXNEWofk/Sz4Hr5gMUhA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - chalk: 4.1.2 - diff-sequences: 28.0.2 - jest-get-type: 28.0.2 - pretty-format: 28.1.0 - dev: true - - /jest-docblock/28.0.2: - resolution: {integrity: sha512-FH10WWw5NxLoeSdQlJwu+MTiv60aXV/t8KEwIRGEv74WARE1cXIqh1vGdy2CraHuWOOrnzTWj/azQKqW4fO7xg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-docblock/29.4.3: + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 dev: true - /jest-each/28.1.0: - resolution: {integrity: sha512-a/XX02xF5NTspceMpHujmOexvJ4GftpYXqr6HhhmKmExtMXsyIN/fvanQlt/BcgFoRKN4OCXxLQKth9/n6OPFg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-each/29.4.3: + resolution: {integrity: sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 28.1.0 + '@jest/types': 29.4.3 chalk: 4.1.2 - jest-get-type: 28.0.2 - jest-util: 28.1.0 - pretty-format: 28.1.0 + jest-get-type: 29.4.3 + jest-util: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-environment-jsdom/29.3.1: - resolution: {integrity: sha512-G46nKgiez2Gy4zvYNhayfMEAFlVHhWfncqvqS6yCd0i+a4NsSUD2WtrKSaYQrYiLQaupHXxCRi8xxVL2M9PbhA==} + /jest-environment-jsdom/29.4.3: + resolution: {integrity: sha512-rFjf8JXrw3OjUzzmSE5l0XjMj0/MSVEUMCSXBGPDkfwb1T03HZI7iJSL0cGctZApPSyJxbjyKDVxkZuyhHkuTw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: canvas: ^2.5.0 @@ -7985,13 +4842,13 @@ packages: canvas: optional: true dependencies: - '@jest/environment': 29.3.1 - '@jest/fake-timers': 29.3.1 - '@jest/types': 29.3.1 + '@jest/environment': 29.4.3 + '@jest/fake-timers': 29.4.3 + '@jest/types': 29.4.3 '@types/jsdom': 20.0.1 - '@types/node': 17.0.31 - jest-mock: 29.3.1 - jest-util: 29.3.1 + '@types/node': 18.11.18 + jest-mock: 29.4.3 + jest-util: 29.4.3 jsdom: 20.0.3 transitivePeerDependencies: - bufferutil @@ -7999,124 +4856,86 @@ packages: - utf-8-validate dev: true - /jest-environment-node/28.1.0: - resolution: {integrity: sha512-gBLZNiyrPw9CSMlTXF1yJhaBgWDPVvH0Pq6bOEwGMXaYNzhzhw2kA/OijNF8egbCgDS0/veRv97249x2CX+udQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-environment-node/29.4.3: + resolution: {integrity: sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 28.1.0 - '@jest/fake-timers': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - jest-mock: 28.1.0 - jest-util: 28.1.0 + '@jest/environment': 29.4.3 + '@jest/fake-timers': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 + jest-mock: 29.4.3 + jest-util: 29.4.3 dev: true - /jest-get-type/27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-get-type/29.4.3: + resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-get-type/28.0.2: - resolution: {integrity: sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dev: true - - /jest-haste-map/28.1.0: - resolution: {integrity: sha512-xyZ9sXV8PtKi6NCrJlmq53PyNVHzxmcfXNVvIRHpHmh1j/HChC4pwKgyjj7Z9us19JMw8PpQTJsFWOsIfT93Dw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-haste-map/29.4.3: + resolution: {integrity: sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 28.1.0 - '@types/graceful-fs': 4.1.5 - '@types/node': 17.0.31 - anymatch: 3.1.2 - fb-watchman: 2.0.1 + '@jest/types': 29.4.3 + '@types/graceful-fs': 4.1.6 + '@types/node': 18.11.18 + anymatch: 3.1.3 + fb-watchman: 2.0.2 graceful-fs: 4.2.10 - jest-regex-util: 28.0.2 - jest-util: 28.1.0 - jest-worker: 28.1.0 + jest-regex-util: 29.4.3 + jest-util: 29.4.3 + jest-worker: 29.4.3 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.2 dev: true - /jest-leak-detector/28.1.0: - resolution: {integrity: sha512-uIJDQbxwEL2AMMs2xjhZl2hw8s77c3wrPaQ9v6tXJLGaaQ+4QrNJH5vuw7hA7w/uGT/iJ42a83opAqxGHeyRIA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-leak-detector/29.4.3: + resolution: {integrity: sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-get-type: 28.0.2 - pretty-format: 28.1.0 + jest-get-type: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-matcher-utils/27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-matcher-utils/29.4.3: + resolution: {integrity: sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + jest-diff: 29.4.3 + jest-get-type: 29.4.3 + pretty-format: 29.4.3 dev: true - /jest-matcher-utils/28.1.0: - resolution: {integrity: sha512-onnax0n2uTLRQFKAjC7TuaxibrPSvZgKTcSCnNUz/tOjJ9UhxNm7ZmPpoQavmTDUjXvUQ8KesWk2/VdrxIFzTQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-message-util/29.4.3: + resolution: {integrity: sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - chalk: 4.1.2 - jest-diff: 28.1.0 - jest-get-type: 28.0.2 - pretty-format: 28.1.0 - dev: true - - /jest-message-util/28.1.0: - resolution: {integrity: sha512-RpA8mpaJ/B2HphDMiDlrAZdDytkmwFqgjDZovM21F35lHGeUeCvYmm6W+sbQ0ydaLpg5bFAUuWG1cjqOl8vqrw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@babel/code-frame': 7.16.7 - '@jest/types': 28.1.0 + '@babel/code-frame': 7.18.6 + '@jest/types': 29.4.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.10 micromatch: 4.0.5 - pretty-format: 28.1.0 + pretty-format: 29.4.3 slash: 3.0.0 - stack-utils: 2.0.5 + stack-utils: 2.0.6 dev: true - /jest-message-util/29.3.1: - resolution: {integrity: sha512-lMJTbgNcDm5z+6KDxWtqOFWlGQxD6XaYwBqHR8kmpkP+WWWG90I35kdtQHY67Ay5CSuydkTBbJG+tH9JShFCyA==} + /jest-mock/29.4.3: + resolution: {integrity: sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/code-frame': 7.16.7 - '@jest/types': 29.3.1 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.10 - micromatch: 4.0.5 - pretty-format: 29.3.1 - slash: 3.0.0 - stack-utils: 2.0.5 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 + jest-util: 29.4.3 dev: true - /jest-mock/28.1.0: - resolution: {integrity: sha512-H7BrhggNn77WhdL7O1apG0Q/iwl0Bdd5E1ydhCJzL3oBLh/UYxAwR3EJLsBZ9XA3ZU4PA3UNw4tQjduBTCTmLw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - dev: true - - /jest-mock/29.3.1: - resolution: {integrity: sha512-H8/qFDtDVMFvFP4X8NuOT3XRDzOUTz+FeACjufHzsOIBAxivLqkB1PoLCaJx9iPPQ8dZThHPp/G3WRWyMgA3JA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.3.1 - '@types/node': 17.0.31 - jest-util: 29.3.1 - dev: true - - /jest-pnp-resolver/1.2.2_jest-resolve@28.1.0: - resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + /jest-pnp-resolver/1.2.3_jest-resolve@29.4.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: jest-resolve: '*' @@ -8124,191 +4943,181 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 28.1.0 + jest-resolve: 29.4.3 dev: true - /jest-regex-util/28.0.2: - resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-regex-util/29.4.3: + resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies/28.1.0: - resolution: {integrity: sha512-Ue1VYoSZquPwEvng7Uefw8RmZR+me/1kr30H2jMINjGeHgeO/JgrR6wxj2ofkJ7KSAA11W3cOrhNCbj5Dqqd9g==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-resolve-dependencies/29.4.3: + resolution: {integrity: sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - jest-regex-util: 28.0.2 - jest-snapshot: 28.1.0 + jest-regex-util: 29.4.3 + jest-snapshot: 29.4.3 transitivePeerDependencies: - supports-color dev: true - /jest-resolve/28.1.0: - resolution: {integrity: sha512-vvfN7+tPNnnhDvISuzD1P+CRVP8cK0FHXRwPAcdDaQv4zgvwvag2n55/h5VjYcM5UJG7L4TwE5tZlzcI0X2Lhw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-resolve/29.4.3: + resolution: {integrity: sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.10 - jest-haste-map: 28.1.0 - jest-pnp-resolver: 1.2.2_jest-resolve@28.1.0 - jest-util: 28.1.0 - jest-validate: 28.1.0 - resolve: 1.22.0 - resolve.exports: 1.1.0 + jest-haste-map: 29.4.3 + jest-pnp-resolver: 1.2.3_jest-resolve@29.4.3 + jest-util: 29.4.3 + jest-validate: 29.4.3 + resolve: 1.22.1 + resolve.exports: 2.0.0 slash: 3.0.0 dev: true - /jest-runner/28.1.0: - resolution: {integrity: sha512-FBpmuh1HB2dsLklAlRdOxNTTHKFR6G1Qmd80pVDvwbZXTriqjWqjei5DKFC1UlM732KjYcE6yuCdiF0WUCOS2w==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-runner/29.4.3: + resolution: {integrity: sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 28.1.0 - '@jest/environment': 28.1.0 - '@jest/test-result': 28.1.0 - '@jest/transform': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@jest/console': 29.4.3 + '@jest/environment': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 chalk: 4.1.2 - emittery: 0.10.2 + emittery: 0.13.1 graceful-fs: 4.2.10 - jest-docblock: 28.0.2 - jest-environment-node: 28.1.0 - jest-haste-map: 28.1.0 - jest-leak-detector: 28.1.0 - jest-message-util: 28.1.0 - jest-resolve: 28.1.0 - jest-runtime: 28.1.0 - jest-util: 28.1.0 - jest-watcher: 28.1.0 - jest-worker: 28.1.0 + jest-docblock: 29.4.3 + jest-environment-node: 29.4.3 + jest-haste-map: 29.4.3 + jest-leak-detector: 29.4.3 + jest-message-util: 29.4.3 + jest-resolve: 29.4.3 + jest-runtime: 29.4.3 + jest-util: 29.4.3 + jest-watcher: 29.4.3 + jest-worker: 29.4.3 + p-limit: 3.1.0 source-map-support: 0.5.13 - throat: 6.0.1 transitivePeerDependencies: - supports-color dev: true - /jest-runtime/28.1.0: - resolution: {integrity: sha512-wNYDiwhdH/TV3agaIyVF0lsJ33MhyujOe+lNTUiolqKt8pchy1Hq4+tDMGbtD5P/oNLA3zYrpx73T9dMTOCAcg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-runtime/29.4.3: + resolution: {integrity: sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 28.1.0 - '@jest/fake-timers': 28.1.0 - '@jest/globals': 28.1.0 - '@jest/source-map': 28.0.2 - '@jest/test-result': 28.1.0 - '@jest/transform': 28.1.0 - '@jest/types': 28.1.0 + '@jest/environment': 29.4.3 + '@jest/fake-timers': 29.4.3 + '@jest/globals': 29.4.3 + '@jest/source-map': 29.4.3 + '@jest/test-result': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 - execa: 5.1.1 glob: 7.2.3 graceful-fs: 4.2.10 - jest-haste-map: 28.1.0 - jest-message-util: 28.1.0 - jest-mock: 28.1.0 - jest-regex-util: 28.0.2 - jest-resolve: 28.1.0 - jest-snapshot: 28.1.0 - jest-util: 28.1.0 + jest-haste-map: 29.4.3 + jest-message-util: 29.4.3 + jest-mock: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.4.3 + jest-snapshot: 29.4.3 + jest-util: 29.4.3 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-snapshot/28.1.0: - resolution: {integrity: sha512-ex49M2ZrZsUyQLpLGxQtDbahvgBjlLPgklkqGM0hq/F7W/f8DyqZxVHjdy19QKBm4O93eDp+H5S23EiTbbUmHw==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-snapshot/29.4.3: + resolution: {integrity: sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.17.10 - '@babel/generator': 7.18.2 - '@babel/plugin-syntax-typescript': 7.17.10_@babel+core@7.17.10 - '@babel/traverse': 7.18.5 - '@babel/types': 7.18.4 - '@jest/expect-utils': 28.1.0 - '@jest/transform': 28.1.0 - '@jest/types': 28.1.0 - '@types/babel__traverse': 7.17.1 - '@types/prettier': 2.6.0 - babel-preset-current-node-syntax: 1.0.1_@babel+core@7.17.10 + '@babel/core': 7.20.12 + '@babel/generator': 7.20.14 + '@babel/plugin-syntax-jsx': 7.18.6_@babel+core@7.20.12 + '@babel/plugin-syntax-typescript': 7.20.0_@babel+core@7.20.12 + '@babel/traverse': 7.20.13 + '@babel/types': 7.20.7 + '@jest/expect-utils': 29.4.3 + '@jest/transform': 29.4.3 + '@jest/types': 29.4.3 + '@types/babel__traverse': 7.18.3 + '@types/prettier': 2.7.2 + babel-preset-current-node-syntax: 1.0.1_@babel+core@7.20.12 chalk: 4.1.2 - expect: 28.1.0 + expect: 29.4.3 graceful-fs: 4.2.10 - jest-diff: 28.1.0 - jest-get-type: 28.0.2 - jest-haste-map: 28.1.0 - jest-matcher-utils: 28.1.0 - jest-message-util: 28.1.0 - jest-util: 28.1.0 + jest-diff: 29.4.3 + jest-get-type: 29.4.3 + jest-haste-map: 29.4.3 + jest-matcher-utils: 29.4.3 + jest-message-util: 29.4.3 + jest-util: 29.4.3 natural-compare: 1.4.0 - pretty-format: 28.1.0 + pretty-format: 29.4.3 semver: 7.3.8 transitivePeerDependencies: - supports-color dev: true - /jest-util/28.1.0: - resolution: {integrity: sha512-qYdCKD77k4Hwkose2YBEqQk7PzUf/NSE+rutzceduFveQREeH6b+89Dc9+wjX9dAwHcgdx4yedGA3FQlU/qCTA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/types': 28.1.0 - '@types/node': 17.0.31 - chalk: 4.1.2 - ci-info: 3.3.0 - graceful-fs: 4.2.10 - picomatch: 2.3.1 - dev: true - - /jest-util/29.3.1: - resolution: {integrity: sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==} + /jest-util/29.4.3: + resolution: {integrity: sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 29.3.1 - '@types/node': 17.0.31 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 chalk: 4.1.2 - ci-info: 3.3.0 + ci-info: 3.8.0 graceful-fs: 4.2.10 picomatch: 2.3.1 dev: true - /jest-validate/28.1.0: - resolution: {integrity: sha512-Lly7CJYih3vQBfjLeANGgBSBJ7pEa18cxpQfQEq2go2xyEzehnHfQTjoUia8xUv4x4J80XKFIDwJJThXtRFQXQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-validate/29.4.3: + resolution: {integrity: sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 28.1.0 + '@jest/types': 29.4.3 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 28.0.2 + jest-get-type: 29.4.3 leven: 3.1.0 - pretty-format: 28.1.0 + pretty-format: 29.4.3 dev: true - /jest-watcher/28.1.0: - resolution: {integrity: sha512-tNHMtfLE8Njcr2IRS+5rXYA4BhU90gAOwI9frTGOqd+jX0P/Au/JfRSNqsf5nUTcWdbVYuLxS1KjnzILSoR5hA==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-watcher/29.4.3: + resolution: {integrity: sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/test-result': 28.1.0 - '@jest/types': 28.1.0 - '@types/node': 17.0.31 + '@jest/test-result': 29.4.3 + '@jest/types': 29.4.3 + '@types/node': 18.11.18 ansi-escapes: 4.3.2 chalk: 4.1.2 - emittery: 0.10.2 - jest-util: 28.1.0 + emittery: 0.13.1 + jest-util: 29.4.3 string-length: 4.0.2 dev: true - /jest-worker/28.1.0: - resolution: {integrity: sha512-ZHwM6mNwaWBR52Snff8ZvsCTqQsvhCxP/bT1I6T6DAnb6ygkshsyLQIMxFwHpYxht0HOoqt23JlC01viI7T03A==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest-worker/29.4.3: + resolution: {integrity: sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 + jest-util: 29.4.3 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest/28.1.0_@types+node@17.0.31: - resolution: {integrity: sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /jest/29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4: + resolution: {integrity: sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 @@ -8316,28 +5125,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 28.1.0 + '@jest/core': 29.4.3_ts-node@10.9.1 + '@jest/types': 29.4.3 import-local: 3.1.0 - jest-cli: 28.1.0_@types+node@17.0.31 - transitivePeerDependencies: - - '@types/node' - - supports-color - - ts-node - dev: true - - /jest/28.1.0_rcy5nlo3uetwcso5jthu6pby7u: - resolution: {integrity: sha512-TZR+tHxopPhzw3c3560IJXZWLNHgpcz1Zh0w5A65vynLGNcg/5pZ+VildAd7+XGOu6jd58XMY/HNn0IkZIXVXg==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - hasBin: true - peerDependencies: - node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 - peerDependenciesMeta: - node-notifier: - optional: true - dependencies: - '@jest/core': 28.1.0_ts-node@10.9.1 - import-local: 3.1.0 - jest-cli: 28.1.0_rcy5nlo3uetwcso5jthu6pby7u + jest-cli: 29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4 transitivePeerDependencies: - '@types/node' - supports-color @@ -8349,6 +5140,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /js-sdsl/4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} + dev: true + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -8365,6 +5160,12 @@ packages: hasBin: true dependencies: argparse: 2.0.1 + dev: true + + /jsdoc-type-pratt-parser/3.1.0: + resolution: {integrity: sha512-MgtD0ZiCDk9B+eI73BextfRrVQl0oyzRG8B2BjORts6jbunj4ScKPcyXGTbB6eXL4y9TzxCm6hyeLq/2ASzNdw==} + engines: {node: '>=12.0.0'} + dev: true /jsdom/20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} @@ -8376,7 +5177,7 @@ packages: optional: true dependencies: abab: 2.0.6 - acorn: 8.8.1 + acorn: 8.8.2 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -8399,7 +5200,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.11.0 + ws: 8.12.1 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -8413,10 +5214,6 @@ packages: hasBin: true dev: true - /json-buffer/3.0.0: - resolution: {integrity: sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==} - dev: true - /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -8424,37 +5221,19 @@ packages: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse/1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true - /json-stable-stringify-without-jsonify/1.0.1: - resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json-stable-stringify/1.0.1: - resolution: {integrity: sha512-i/J297TW6xyj7sDFa7AmBPkQvLIxWr2kKPWI26tXydnZrzVAocNqn5DMNT1Mzk0vit1V5UkRM7C1KdVNp7Lmcg==} - dependencies: - jsonify: 0.0.0 - dev: true - - /json-to-pretty-yaml/1.2.2: - resolution: {integrity: sha512-rvm6hunfCcqegwYaG5T4yKJWxc9FXFgBVrcTZ4XfSVRwa5HA/Xs+vB/Eo9treYYHCeNM0nrSUr82V/M31Urc7A==} - engines: {node: '>= 0.2.0'} - dependencies: - remedial: 1.0.8 - remove-trailing-spaces: 1.0.8 - dev: true - - /json5/1.0.1: - resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: - minimist: 1.2.6 + minimist: 1.2.8 dev: true - /json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true @@ -8465,38 +5244,17 @@ packages: universalify: 2.0.0 optionalDependencies: graceful-fs: 4.2.10 + dev: false - /jsonify/0.0.0: - resolution: {integrity: sha512-trvBk1ki43VZptdBI5rIlG4YOzyeH/WefQt5rj1grasPn4iiZWKet8nkgc4GlsAylaztn0qZfUYOiTsASJFdNA==} - dev: true - - /jsonparse/1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true - - /jsonwebtoken/8.5.1: - resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} - engines: {node: '>=4', npm: '>=1.4.28'} + /jsonwebtoken/9.0.0: + resolution: {integrity: sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==} + engines: {node: '>=12', npm: '>=6'} dependencies: jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 + lodash: 4.17.21 ms: 2.1.3 - semver: 5.7.1 - - /jsx-ast-utils/3.3.0: - resolution: {integrity: sha512-XzO9luP6L0xkxwhIJMTJQpZo/eeN60K08jHdexfD569AGxeNug6UketeHXEhROoM8aR7EcUoOQmIhcJQjcuq8Q==} - engines: {node: '>=4.0'} - dependencies: - array-includes: 3.1.6 - object.assign: 4.1.2 - dev: true + semver: 7.3.8 + dev: false /jsx-ast-utils/3.3.3: resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} @@ -8512,31 +5270,22 @@ packages: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 + dev: false /jws/3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - - /keyv/3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} - dependencies: - json-buffer: 3.0.0 - dev: true - - /kind-of/6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true + dev: false /kleur/3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} dev: true - /kleur/4.1.4: - resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} + /kleur/4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} dev: false @@ -8544,21 +5293,14 @@ packages: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} dev: false - /language-subtag-registry/0.3.21: - resolution: {integrity: sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==} + /language-subtag-registry/0.3.22: + resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: true /language-tags/1.0.5: resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==} dependencies: - language-subtag-registry: 0.3.21 - dev: true - - /latest-version/5.1.0: - resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} - engines: {node: '>=8'} - dependencies: - package-json: 6.5.0 + language-subtag-registry: 0.3.22 dev: true /leven/3.1.0: @@ -8582,71 +5324,9 @@ packages: type-check: 0.4.0 dev: true - /libphonenumber-js/1.10.6: - resolution: {integrity: sha512-CIjT100/SmntsUjsLVs2t3ufeN4KdNXUxhD07tH153pdbaCWuAjv0jK/gPuywR3IImB/U/MQM+x9RfhMs5XZiA==} - dev: false - /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /listr-silent-renderer/1.1.1: - resolution: {integrity: sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==} - engines: {node: '>=4'} - dev: true - - /listr-update-renderer/0.5.0_listr@0.14.3: - resolution: {integrity: sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==} - engines: {node: '>=6'} - peerDependencies: - listr: ^0.14.2 - dependencies: - chalk: 1.1.3 - cli-truncate: 0.2.1 - elegant-spinner: 1.0.1 - figures: 1.7.0 - indent-string: 3.2.0 - listr: 0.14.3 - log-symbols: 1.0.2 - log-update: 2.3.0 - strip-ansi: 3.0.1 - dev: true - - /listr-verbose-renderer/0.5.0: - resolution: {integrity: sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==} - engines: {node: '>=4'} - dependencies: - chalk: 2.4.2 - cli-cursor: 2.1.0 - date-fns: 1.30.1 - figures: 2.0.0 - dev: true - - /listr/0.14.3: - resolution: {integrity: sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==} - engines: {node: '>=6'} - dependencies: - '@samverschueren/stream-to-observable': 0.3.1_rxjs@6.6.7 - is-observable: 1.1.0 - is-promise: 2.2.2 - is-stream: 1.1.0 - listr-silent-renderer: 1.1.1 - listr-update-renderer: 0.5.0_listr@0.14.3 - listr-verbose-renderer: 0.5.0 - p-map: 2.1.0 - rxjs: 6.6.7 - transitivePeerDependencies: - - zen-observable - - zenObservable - dev: true - - /locate-path/2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: true - /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -8661,31 +5341,6 @@ packages: p-locate: 5.0.0 dev: true - /lodash.get/4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - - /lodash.includes/4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - /lodash.isboolean/3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - - /lodash.isinteger/4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - /lodash.isnumber/3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - - /lodash.isplainobject/4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - - /lodash.isstring/4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - - /lodash.map/4.6.0: - resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==} - dev: true - /lodash.memoize/4.1.2: resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} dev: true @@ -8694,96 +5349,42 @@ packages: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lodash.once/4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - - /lodash.sortby/4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - dev: false - /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true - - /log-symbols/1.0.2: - resolution: {integrity: sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==} - engines: {node: '>=0.10.0'} - dependencies: - chalk: 1.1.3 - dev: true /log-symbols/4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: - chalk: 4.1.2 + chalk: 4.1.1 is-unicode-supported: 0.1.0 dev: true - /log-update/2.3.0: - resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} - engines: {node: '>=4'} - dependencies: - ansi-escapes: 3.2.0 - cli-cursor: 2.1.0 - wrap-ansi: 3.0.1 - dev: true - - /logform/2.4.0: - resolution: {integrity: sha512-CPSJw4ftjf517EhXZGGvTHHkYobo7ZCc0kvwUoOYcjfR2UVrI66RHj8MCrfAdEitdmFqbu2BYdYs8FHHZSb6iw==} + /logform/2.5.1: + resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} dependencies: '@colors/colors': 1.5.0 + '@types/triple-beam': 1.3.2 fecha: 4.2.3 ms: 2.1.3 - safe-stable-stringify: 2.3.1 + safe-stable-stringify: 2.4.2 triple-beam: 1.3.0 dev: false - /loglevel/1.8.0: - resolution: {integrity: sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==} - engines: {node: '>= 0.6.0'} + /longest-streak/3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} dev: false - /long/4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: false - - /longest-streak/3.0.1: - resolution: {integrity: sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==} - dev: false - - /longest/2.0.1: - resolution: {integrity: sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==} - engines: {node: '>=0.10.0'} - dev: true - /loose-envify/1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 - /lower-case-first/2.0.2: - resolution: {integrity: sha512-EVm/rR94FJTZi3zefZ82fLWab+GX14LJN4HrWBcuo6Evmsl9hEfnqxgcHCKb9q+mNf6EVdsjx/qucYFIIB84pg==} + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: - tslib: 2.4.0 - dev: true - - /lower-case/2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - dependencies: - tslib: 2.4.0 - dev: true - - /lowercase-keys/1.0.1: - resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==} - engines: {node: '>=0.10.0'} - dev: true - - /lowercase-keys/2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: true + yallist: 3.1.1 /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} @@ -8791,11 +5392,6 @@ packages: dependencies: yallist: 4.0.0 - /lru-cache/7.10.1: - resolution: {integrity: sha512-BQuhQxPuRl79J5zSXRP+uNzPOyZw2oFI9JLRQ80XswSvg21KMKNtQza9eF42rfI/3Z40RvzBdXgziEkudzjo8A==} - engines: {node: '>=12'} - dev: false - /lz-string/1.4.4: resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} hasBin: true @@ -8817,201 +5413,143 @@ packages: tmpl: 1.0.5 dev: true - /map-cache/0.2.2: - resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} - engines: {node: '>=0.10.0'} - dev: true - - /map-obj/1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - dev: true - - /map-obj/4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - dev: true - - /markdown-table/3.0.2: - resolution: {integrity: sha512-y8j3a5/DkJCmS5x4dMCQL+OR0+2EAq3DOtio1COSHsmW2BGXnNCK3v12hJt1LrUz5iZH5g0LmuYOjDdI+czghA==} + /markdown-table/3.0.3: + resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} dev: false - /mdast-util-definitions/5.1.0: - resolution: {integrity: sha512-5hcR7FL2EuZ4q6lLMUK5w4lHT2H3vqL9quPvYZ/Ku5iifrirfMHiGdhxdXMUbUkDmz5I+TYMd7nbaxUhbQkfpQ==} + /mdast-util-definitions/5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: '@types/mdast': 3.0.10 '@types/unist': 2.0.6 - unist-util-visit: 3.1.0 + unist-util-visit: 4.1.2 dev: false - /mdast-util-find-and-replace/2.2.0: - resolution: {integrity: sha512-bz8hUWkMX7UcasORORcyBEsTKJ+dBiFwRPrm43hHC9NMRylIMLbfO5rwfeCN+UtY4AAi7s8WqXftb9eX6ZsqCg==} + /mdast-util-find-and-replace/2.2.2: + resolution: {integrity: sha512-MTtdFRz/eMDHXzeK6W3dO7mXUlF82Gom4y0oOgvHhh/HXZAGvIQDUvQ0SuUx+j2tv44b8xTHOm8K/9OoRFnXKw==} dependencies: + '@types/mdast': 3.0.10 escape-string-regexp: 5.0.0 - unist-util-is: 5.1.1 - unist-util-visit-parents: 5.1.0 + unist-util-is: 5.2.0 + unist-util-visit-parents: 5.1.3 dev: false - /mdast-util-from-markdown/1.2.0: - resolution: {integrity: sha512-iZJyyvKD1+K7QX1b5jXdE7Sc5dtoTry1vzV28UZZe8Z1xVnB/czKntJ7ZAkG0tANqRnBF6p3p7GpU1y19DTf2Q==} + /mdast-util-from-markdown/1.3.0: + resolution: {integrity: sha512-HN3W1gRIuN/ZW295c7zi7g9lVBllMgZE40RxCX37wrTPWXCWtpvOZdfnuK+1WNpvZje6XuJeI3Wnb4TJEUem+g==} dependencies: '@types/mdast': 3.0.10 '@types/unist': 2.0.6 decode-named-character-reference: 1.0.2 - mdast-util-to-string: 3.1.0 - micromark: 3.0.10 + mdast-util-to-string: 3.1.1 + micromark: 3.1.0 micromark-util-decode-numeric-character-reference: 1.0.0 micromark-util-decode-string: 1.0.2 micromark-util-normalize-identifier: 1.0.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - unist-util-stringify-position: 3.0.2 - uvu: 0.5.3 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 transitivePeerDependencies: - supports-color dev: false - /mdast-util-gfm-autolink-literal/1.0.2: - resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} + /mdast-util-gfm-autolink-literal/1.0.3: + resolution: {integrity: sha512-My8KJ57FYEy2W2LyNom4n3E7hKTuQk/0SES0u16tjA9Z3oFkF4RrC/hPAPgjlSpezsOvI8ObcXcElo92wn5IGA==} dependencies: '@types/mdast': 3.0.10 ccount: 2.0.1 - mdast-util-find-and-replace: 2.2.0 + mdast-util-find-and-replace: 2.2.2 micromark-util-character: 1.1.0 dev: false - /mdast-util-gfm-footnote/1.0.1: - resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==} + /mdast-util-gfm-footnote/1.0.2: + resolution: {integrity: sha512-56D19KOGbE00uKVj3sgIykpwKL179QsVFwx/DCW0u/0+URsryacI4MAdNJl0dh+u2PSsD9FtxPFbHCzJ78qJFQ==} dependencies: '@types/mdast': 3.0.10 - mdast-util-to-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 micromark-util-normalize-identifier: 1.0.0 dev: false - /mdast-util-gfm-strikethrough/1.0.1: - resolution: {integrity: sha512-zKJbEPe+JP6EUv0mZ0tQUyLQOC+FADt0bARldONot/nefuISkaZFlmVK4tU6JgfyZGrky02m/I6PmehgAgZgqg==} + /mdast-util-gfm-strikethrough/1.0.3: + resolution: {integrity: sha512-DAPhYzTYrRcXdMjUtUjKvW9z/FNAMTdU0ORyMcbmkwYNbKocDpdk+PX1L1dQgOID/+vVs1uBQ7ElrBQfZ0cuiQ==} dependencies: '@types/mdast': 3.0.10 - mdast-util-to-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 dev: false - /mdast-util-gfm-table/1.0.4: - resolution: {integrity: sha512-aEuoPwZyP4iIMkf2cLWXxx3EQ6Bmh2yKy9MVCg4i6Sd3cX80dcLEfXO/V4ul3pGH9czBK4kp+FAl+ZHmSUt9/w==} + /mdast-util-gfm-table/1.0.7: + resolution: {integrity: sha512-jjcpmNnQvrmN5Vx7y7lEc2iIOEytYv7rTvu+MeyAsSHTASGCCRA79Igg2uKssgOs1i1po8s3plW0sTu1wkkLGg==} dependencies: - markdown-table: 3.0.2 - mdast-util-from-markdown: 1.2.0 - mdast-util-to-markdown: 1.3.0 + '@types/mdast': 3.0.10 + markdown-table: 3.0.3 + mdast-util-from-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-gfm-task-list-item/1.0.1: - resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==} + /mdast-util-gfm-task-list-item/1.0.2: + resolution: {integrity: sha512-PFTA1gzfp1B1UaiJVyhJZA1rm0+Tzn690frc/L8vNX1Jop4STZgOE6bxUhnzdVSB+vm2GU1tIsuQcA9bxTQpMQ==} dependencies: '@types/mdast': 3.0.10 - mdast-util-to-markdown: 1.3.0 + mdast-util-to-markdown: 1.5.0 dev: false - /mdast-util-gfm/2.0.1: - resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==} + /mdast-util-gfm/2.0.2: + resolution: {integrity: sha512-qvZ608nBppZ4icQlhQQIAdc6S3Ffj9RGmzwUKUWuEICFnd1LVkN3EktF7ZHAgfcEdvZB5owU9tQgt99e2TlLjg==} dependencies: - mdast-util-from-markdown: 1.2.0 - mdast-util-gfm-autolink-literal: 1.0.2 - mdast-util-gfm-footnote: 1.0.1 - mdast-util-gfm-strikethrough: 1.0.1 - mdast-util-gfm-table: 1.0.4 - mdast-util-gfm-task-list-item: 1.0.1 - mdast-util-to-markdown: 1.3.0 + mdast-util-from-markdown: 1.3.0 + mdast-util-gfm-autolink-literal: 1.0.3 + mdast-util-gfm-footnote: 1.0.2 + mdast-util-gfm-strikethrough: 1.0.3 + mdast-util-gfm-table: 1.0.7 + mdast-util-gfm-task-list-item: 1.0.2 + mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color dev: false - /mdast-util-mdx-expression/1.2.1: - resolution: {integrity: sha512-BtQwyalaq6jRjx0pagtuAwGrmzL1yInrfA4EJv7GOoiPOUbR4gr6h65I+G3WTh1/Cag2Eda4ip400Ch6CFmWiA==} + /mdast-util-phrasing/3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} dependencies: - '@types/estree-jsx': 0.0.1 - '@types/hast': 2.3.4 '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 - mdast-util-to-markdown: 1.3.0 - transitivePeerDependencies: - - supports-color + unist-util-is: 5.2.0 dev: false - /mdast-util-mdx-jsx/2.0.1: - resolution: {integrity: sha512-oPC7/smPBf7vxnvIYH5y3fPo2lw1rdrswFfSb4i0GTAXRUQv7JUU/t/hbp07dgGdUFTSDOHm5DNamhNg/s2Hrg==} - dependencies: - '@types/estree-jsx': 0.0.1 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.10 - ccount: 2.0.1 - mdast-util-to-markdown: 1.3.0 - parse-entities: 4.0.0 - stringify-entities: 4.0.3 - unist-util-remove-position: 4.0.1 - unist-util-stringify-position: 3.0.2 - vfile-message: 3.1.2 - dev: false - - /mdast-util-mdx/2.0.0: - resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==} - dependencies: - mdast-util-mdx-expression: 1.2.1 - mdast-util-mdx-jsx: 2.0.1 - mdast-util-mdxjs-esm: 1.2.0 - transitivePeerDependencies: - - supports-color - dev: false - - /mdast-util-mdxjs-esm/1.2.0: - resolution: {integrity: sha512-IPpX9GBzAIbIRCjbyeLDpMhACFb0wxTIujuR3YElB8LWbducUdMgRJuqs/Vg8xQ1bIAMm7lw8L+YNtua0xKXRw==} - dependencies: - '@types/estree-jsx': 0.0.1 - '@types/hast': 2.3.4 - '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 - mdast-util-to-markdown: 1.3.0 - transitivePeerDependencies: - - supports-color - dev: false - - /mdast-util-to-hast/12.1.1: - resolution: {integrity: sha512-qE09zD6ylVP14jV4mjLIhDBOrpFdShHZcEsYvvKGABlr9mGbV7mTlRWdoFxL/EYSTNDiC9GZXy7y8Shgb9Dtzw==} + /mdast-util-to-hast/12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: '@types/hast': 2.3.4 '@types/mdast': 3.0.10 - '@types/mdurl': 1.0.2 - mdast-util-definitions: 5.1.0 - mdurl: 1.0.1 - micromark-util-sanitize-uri: 1.0.0 - unist-builder: 3.0.0 - unist-util-generated: 2.0.0 - unist-util-position: 4.0.3 - unist-util-visit: 4.1.0 + mdast-util-definitions: 5.1.2 + micromark-util-sanitize-uri: 1.1.0 + trim-lines: 3.0.1 + unist-util-generated: 2.0.1 + unist-util-position: 4.0.4 + unist-util-visit: 4.1.2 dev: false - /mdast-util-to-markdown/1.3.0: - resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==} + /mdast-util-to-markdown/1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: '@types/mdast': 3.0.10 '@types/unist': 2.0.6 - longest-streak: 3.0.1 - mdast-util-to-string: 3.1.0 + longest-streak: 3.1.0 + mdast-util-phrasing: 3.0.1 + mdast-util-to-string: 3.1.1 micromark-util-decode-string: 1.0.2 - unist-util-visit: 4.1.0 - zwitch: 2.0.2 + unist-util-visit: 4.1.2 + zwitch: 2.0.4 dev: false - /mdast-util-to-string/3.1.0: - resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} - dev: false - - /mdurl/1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + /mdast-util-to-string/3.1.1: + resolution: {integrity: sha512-tGvhT94e+cVnQt8JWE9/b3cUQZWS732TJxXHktvP+BYo62PpYD53Ls/6cC60rW21dW+txxiM4zMdc6abASvZKA==} + dependencies: + '@types/mdast': 3.0.10 dev: false /media-typer/0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: false @@ -9019,54 +5557,21 @@ packages: resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} dev: false - /meow/8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} - dependencies: - '@types/minimist': 1.2.2 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.0 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - dev: true - /merge-descriptors/1.0.1: - resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: false /merge-stream/2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true - /merge/2.1.1: - resolution: {integrity: sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==} - dev: true - /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} dev: true - /meros/1.2.0_@types+node@17.0.31: - resolution: {integrity: sha512-3QRZIS707pZQnijHdhbttXRWwrHhZJ/gzolneoxKVz9N/xmsvY/7Ls8lpnI9gxbgxjcHsAVEW3mgwiZCo6kkJQ==} - engines: {node: '>=12'} - peerDependencies: - '@types/node': '>=12' - peerDependenciesMeta: - '@types/node': - optional: true - dependencies: - '@types/node': 17.0.31 - dev: true - /methods/1.1.2: - resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: false @@ -9088,17 +5593,17 @@ packages: micromark-util-subtokenize: 1.0.2 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-extension-gfm-autolink-literal/1.0.3: resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} dependencies: micromark-util-character: 1.1.0 - micromark-util-sanitize-uri: 1.0.0 + micromark-util-sanitize-uri: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-extension-gfm-footnote/1.0.4: @@ -9108,10 +5613,10 @@ packages: micromark-factory-space: 1.0.0 micromark-util-character: 1.1.0 micromark-util-normalize-identifier: 1.0.0 - micromark-util-sanitize-uri: 1.0.0 + micromark-util-sanitize-uri: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-extension-gfm-strikethrough/1.0.4: @@ -9122,7 +5627,7 @@ packages: micromark-util-resolve-all: 1.0.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-extension-gfm-table/1.0.5: @@ -9132,7 +5637,7 @@ packages: micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-extension-gfm-tagfilter/1.0.1: @@ -9148,7 +5653,7 @@ packages: micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-extension-gfm/2.0.1: @@ -9164,64 +5669,6 @@ packages: micromark-util-types: 1.0.2 dev: false - /micromark-extension-mdx-expression/1.0.3: - resolution: {integrity: sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==} - dependencies: - micromark-factory-mdx-expression: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.3 - dev: false - - /micromark-extension-mdx-jsx/1.0.3: - resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} - dependencies: - '@types/acorn': 4.0.6 - estree-util-is-identifier-name: 2.0.0 - micromark-factory-mdx-expression: 1.0.6 - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - uvu: 0.5.3 - vfile-message: 3.1.2 - dev: false - - /micromark-extension-mdx-md/1.0.0: - resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} - dependencies: - micromark-util-types: 1.0.2 - dev: false - - /micromark-extension-mdxjs-esm/1.0.3: - resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} - dependencies: - micromark-core-commonmark: 1.0.6 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - unist-util-position-from-estree: 1.1.1 - uvu: 0.5.3 - vfile-message: 3.1.2 - dev: false - - /micromark-extension-mdxjs/1.0.0: - resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} - dependencies: - acorn: 8.7.1 - acorn-jsx: 5.3.2_acorn@8.7.1 - micromark-extension-mdx-expression: 1.0.3 - micromark-extension-mdx-jsx: 1.0.3 - micromark-extension-mdx-md: 1.0.0 - micromark-extension-mdxjs-esm: 1.0.3 - micromark-util-combine-extensions: 1.0.0 - micromark-util-types: 1.0.2 - dev: false - /micromark-factory-destination/1.0.0: resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} dependencies: @@ -9236,20 +5683,7 @@ packages: micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 - dev: false - - /micromark-factory-mdx-expression/1.0.6: - resolution: {integrity: sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==} - dependencies: - micromark-factory-space: 1.0.0 - micromark-util-character: 1.1.0 - micromark-util-events-to-acorn: 1.1.0 - micromark-util-symbol: 1.0.1 - micromark-util-types: 1.0.2 - unist-util-position-from-estree: 1.1.1 - uvu: 0.5.3 - vfile-message: 3.1.2 + uvu: 0.5.6 dev: false /micromark-factory-space/1.0.0: @@ -9266,7 +5700,7 @@ packages: micromark-util-character: 1.1.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-factory-whitespace/1.0.0: @@ -9325,18 +5759,6 @@ packages: resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} dev: false - /micromark-util-events-to-acorn/1.1.0: - resolution: {integrity: sha512-hB8HzidNt/Us5q2BvqXj8eeEm0U9rRfnZxcA9T65JRUMAY4MbfJRAFm7m9fXMAdSHJiVPmajsp8/rp6/FlHL8A==} - dependencies: - '@types/acorn': 4.0.6 - '@types/estree': 0.0.51 - estree-util-visit: 1.1.0 - micromark-util-types: 1.0.2 - uvu: 0.5.3 - vfile-location: 4.0.1 - vfile-message: 3.1.2 - dev: false - /micromark-util-html-tag-name/1.1.0: resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} dev: false @@ -9353,8 +5775,8 @@ packages: micromark-util-types: 1.0.2 dev: false - /micromark-util-sanitize-uri/1.0.0: - resolution: {integrity: sha512-cCxvBKlmac4rxCGx6ejlIviRaMKZc0fWm5HdCHEeDWRSkn44l6NdYVRyU+0nT1XC72EQJMZV8IPHF+jTr56lAg==} + /micromark-util-sanitize-uri/1.1.0: + resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} dependencies: micromark-util-character: 1.1.0 micromark-util-encode: 1.0.1 @@ -9367,7 +5789,7 @@ packages: micromark-util-chunked: 1.0.0 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 dev: false /micromark-util-symbol/1.0.1: @@ -9378,8 +5800,8 @@ packages: resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} dev: false - /micromark/3.0.10: - resolution: {integrity: sha512-ryTDy6UUunOXy2HPjelppgJ2sNfcPz1pLlMdA6Rz9jPzhLikWXv/irpWV/I2jd68Uhmny7hHxAlAhk4+vWggpg==} + /micromark/3.1.0: + resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} dependencies: '@types/debug': 4.1.7 debug: 4.3.4 @@ -9393,11 +5815,11 @@ packages: micromark-util-encode: 1.0.1 micromark-util-normalize-identifier: 1.0.0 micromark-util-resolve-all: 1.0.0 - micromark-util-sanitize-uri: 1.0.0 + micromark-util-sanitize-uri: 1.1.0 micromark-util-subtokenize: 1.0.2 micromark-util-symbol: 1.0.1 micromark-util-types: 1.0.2 - uvu: 0.5.3 + uvu: 0.5.6 transitivePeerDependencies: - supports-color dev: false @@ -9426,21 +5848,11 @@ packages: hasBin: true dev: false - /mimic-fn/1.2.0: - resolution: {integrity: sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==} - engines: {node: '>=4'} - dev: true - /mimic-fn/2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: true - /mimic-response/1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true - /mimic-response/3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -9456,44 +5868,26 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/4.2.1: - resolution: {integrity: sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 1.1.11 - dev: true + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - /minimatch/5.1.1: - resolution: {integrity: sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g==} - engines: {node: '>=10'} - dependencies: - brace-expansion: 2.0.1 - dev: true - - /minimist-options/4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 - dev: true - - /minimist/1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} - - /minipass/3.1.6: - resolution: {integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==} + /minipass/3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 dev: false + /minipass/4.0.3: + resolution: {integrity: sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==} + engines: {node: '>=8'} + dev: false + /minizlib/2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.6 + minipass: 3.3.6 yallist: 4.0.0 dev: false @@ -9505,6 +5899,7 @@ packages: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true + dev: false /mri/1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} @@ -9513,6 +5908,7 @@ packages: /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -9520,8 +5916,8 @@ packages: /ms/2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - /msw/0.49.1_typescript@4.6.4: - resolution: {integrity: sha512-JpIIq4P65ofj0HVmDMkJuRwgP9s5kcdutpZ15evMTb2k91/USB7IKWRLV9J1Mzc3OqTdwNj4RwtOWJ5y/FulQQ==} + /msw/1.0.1_typescript@4.9.4: + resolution: {integrity: sha512-fBwQRCmf+jh0zlGlasBfpCaxLqb4QLMsY1Q+nkXkO0nnUYopl50NcNRvP4V+TAiqOwJSd0LrQ5NcJqwbrnTBqw==} engines: {node: '>=14'} hasBin: true requiresBuild: true @@ -9532,7 +5928,7 @@ packages: optional: true dependencies: '@mswjs/cookies': 0.2.2 - '@mswjs/interceptors': 0.17.6 + '@mswjs/interceptors': 0.17.7 '@open-draft/until': 1.0.3 '@types/cookie': 0.4.1 '@types/js-levenshtein': 1.1.1 @@ -9541,16 +5937,16 @@ packages: cookie: 0.4.2 graphql: 15.8.0 headers-polyfill: 3.1.2 - inquirer: 8.2.4 + inquirer: 8.2.5 is-node-process: 1.0.1 js-levenshtein: 1.1.6 - node-fetch: 2.6.7 + node-fetch: 2.6.9 outvariant: 1.3.0 path-to-regexp: 6.2.1 - strict-event-emitter: 0.2.8 + strict-event-emitter: 0.4.6 type-fest: 2.19.0 - typescript: 4.6.4 - yargs: 17.4.1 + typescript: 4.9.4 + yargs: 17.7.0 transitivePeerDependencies: - encoding - supports-color @@ -9560,14 +5956,6 @@ packages: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} dev: true - /mz/2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - dependencies: - any-promise: 1.3.0 - object-assign: 4.1.1 - thenify-all: 1.6.0 - dev: false - /nanoid/3.3.4: resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -9578,8 +5966,12 @@ packages: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} dev: false + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + /natural-compare/1.4.0: - resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true /negotiator/0.6.3: @@ -9587,18 +5979,18 @@ packages: engines: {node: '>= 0.6'} dev: false - /next-router-mock/0.8.0_next@13.0.3+react@18.2.0: + /next-router-mock/0.8.0_next@13.1.6+react@18.2.0: resolution: {integrity: sha512-aw/QnDFRqGDIkC3y4mCL5HQCNK94IzIfrEYy2c17WVp6Q4V5GUarFx751Sccf8fUPdkzD2/RsldyScvNZGA8lw==} peerDependencies: next: '>=10.0.0' react: '>=17.0.0' dependencies: - next: 13.0.3_7nrowiyds4jpk2wpzkb7237oey + next: 13.1.6_4u6c57fe2msmz5uzpiwwufo4my react: 18.2.0 dev: true - /next/13.0.3_7nrowiyds4jpk2wpzkb7237oey: - resolution: {integrity: sha512-rFQeepcenRxKzeKlh1CsmEnxsJwhIERtbUjmYnKZyDInZsU06lvaGw5DT44rlNp1Rv2MT/e9vffZ8vK+ytwXHA==} + /next/13.1.6_4u6c57fe2msmz5uzpiwwufo4my: + resolution: {integrity: sha512-hHlbhKPj9pW+Cymvfzc15lvhaOZ54l+8sXDXJWm3OBNBzgrVj6hwGPmqqsXg40xO1Leq+kXpllzRPuncpC0Phw==} engines: {node: '>=14.6.0'} hasBin: true peerDependencies: @@ -9615,64 +6007,66 @@ packages: sass: optional: true dependencies: - '@next/env': 13.0.3 - '@swc/helpers': 0.4.11 - caniuse-lite: 1.0.30001419 + '@next/env': 13.1.6 + '@swc/helpers': 0.4.14 + caniuse-lite: 1.0.30001456 postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - sass: 1.56.1 - styled-jsx: 5.1.0_fo674ziljcu7kfxvd3l72z7dda - use-sync-external-store: 1.2.0_react@18.2.0 + sass: 1.58.2 + styled-jsx: 5.1.1_2exiyaescjxorpwwmy4ejghgte optionalDependencies: - '@next/swc-android-arm-eabi': 13.0.3 - '@next/swc-android-arm64': 13.0.3 - '@next/swc-darwin-arm64': 13.0.3 - '@next/swc-darwin-x64': 13.0.3 - '@next/swc-freebsd-x64': 13.0.3 - '@next/swc-linux-arm-gnueabihf': 13.0.3 - '@next/swc-linux-arm64-gnu': 13.0.3 - '@next/swc-linux-arm64-musl': 13.0.3 - '@next/swc-linux-x64-gnu': 13.0.3 - '@next/swc-linux-x64-musl': 13.0.3 - '@next/swc-win32-arm64-msvc': 13.0.3 - '@next/swc-win32-ia32-msvc': 13.0.3 - '@next/swc-win32-x64-msvc': 13.0.3 + '@next/swc-android-arm-eabi': 13.1.6 + '@next/swc-android-arm64': 13.1.6 + '@next/swc-darwin-arm64': 13.1.6 + '@next/swc-darwin-x64': 13.1.6 + '@next/swc-freebsd-x64': 13.1.6 + '@next/swc-linux-arm-gnueabihf': 13.1.6 + '@next/swc-linux-arm64-gnu': 13.1.6 + '@next/swc-linux-arm64-musl': 13.1.6 + '@next/swc-linux-x64-gnu': 13.1.6 + '@next/swc-linux-x64-musl': 13.1.6 + '@next/swc-win32-arm64-msvc': 13.1.6 + '@next/swc-win32-ia32-msvc': 13.1.6 + '@next/swc-win32-x64-msvc': 13.1.6 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros dev: false - /no-case/3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - dependencies: - lower-case: 2.0.2 - tslib: 2.4.0 - dev: true - - /node-abi/3.30.0: - resolution: {integrity: sha512-qWO5l3SCqbwQavymOmtTVuCWZE23++S+rxyoHjXqUmPyzRcaoI4lA2gO55/drddGnedAyjA7sk76SfQ5lfUMnw==} + /node-abi/3.33.0: + resolution: {integrity: sha512-7GGVawqyHF4pfd0YFybhv/eM9JwTtPqx0mAanQ146O3FlSh3pA24zf9IRQTOsfTSqXTNzPSP5iagAJ94jjuVog==} engines: {node: '>=10'} dependencies: semver: 7.3.8 dev: false - /node-addon-api/5.0.0: - resolution: {integrity: sha512-CvkDw2OEnme7ybCykJpVcKH+uAOLV2qLqiyla128dN9TkEWfrYmxG6C2boDe5KcNQqZF3orkqzGgOMvZ/JNekA==} + /node-addon-api/5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} dev: false - /node-cron/3.0.1: - resolution: {integrity: sha512-RAWZTNn2M5KDIUV/389UX0EXsqvdFAwc9QwHQceh0Ga56dygqSRthqIjwpgZsoDspHGt2rkHdk9Z4RgfPMdALw==} + /node-cron/3.0.2: + resolution: {integrity: sha512-iP8l0yGlNpE0e6q1o185yOApANRe47UPbLf4YxfbiNHt/RU5eBcGB/e0oudruheSf+LQeDMezqC5BVAb5wwRcQ==} engines: {node: '>=6.0.0'} + dependencies: + uuid: 8.3.2 dev: false /node-domexception/1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} - dev: true + dev: false - /node-fetch/2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + /node-fetch-commonjs/3.2.4: + resolution: {integrity: sha512-bZW7+ldcuuMPLTJk8DufhT6qHDRdljYD0jqBjmrYfcInaYcReX5kK42SQsu/jvtit/tER28yYjnk63PEEmNPtg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + formdata-polyfill: 4.0.10 + web-streams-polyfill: 3.2.1 + dev: false + + /node-fetch/2.6.9: + resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -9686,34 +6080,8 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} dev: true - /node-releases/2.0.4: - resolution: {integrity: sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==} - dev: true - - /nodemon/2.0.16: - resolution: {integrity: sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==} - engines: {node: '>=8.10.0'} - hasBin: true - requiresBuild: true - dependencies: - chokidar: 3.5.3 - debug: 3.2.7_supports-color@5.5.0 - ignore-by-default: 1.0.1 - minimatch: 3.1.2 - pstree.remy: 1.1.8 - semver: 5.7.1 - supports-color: 5.5.0 - touch: 3.1.0 - undefsafe: 2.0.5 - update-notifier: 5.1.0 - dev: true - - /nopt/1.0.10: - resolution: {integrity: sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=} - hasBin: true - dependencies: - abbrev: 1.1.1 - dev: true + /node-releases/2.0.10: + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} /nopt/5.0.0: resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} @@ -9723,41 +6091,10 @@ packages: abbrev: 1.1.1 dev: false - /normalize-package-data/2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.0 - semver: 5.7.1 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-package-data/3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.9.0 - semver: 7.3.8 - validate-npm-package-license: 3.0.4 - dev: true - - /normalize-path/2.1.1: - resolution: {integrity: sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==} - engines: {node: '>=0.10.0'} - dependencies: - remove-trailing-separator: 1.1.0 - dev: true - /normalize-path/3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - /normalize-url/4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} - engines: {node: '>=8'} - dev: true - /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -9774,15 +6111,6 @@ packages: set-blocking: 2.0.0 dev: false - /nullthrows/1.1.1: - resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} - dev: true - - /number-is-nan/1.0.1: - resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} - engines: {node: '>=0.10.0'} - dev: true - /nwsapi/2.2.2: resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==} dev: true @@ -9791,19 +6119,15 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - /object-inspect/1.12.0: - resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} - dev: true - - /object-inspect/1.12.2: - resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} /object-is/1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 dev: true /object-keys/1.1.1: @@ -9811,42 +6135,23 @@ packages: engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.2: - resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - /object.assign/4.1.4: resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 has-symbols: 1.0.3 object-keys: 1.1.1 dev: true - /object.entries/1.1.5: - resolution: {integrity: sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.0 - dev: true - /object.entries/1.1.6: resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 dev: true /object.fromentries/2.0.6: @@ -9854,24 +6159,15 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 dev: true /object.hasown/1.1.2: resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} dependencies: - define-properties: 1.1.4 - es-abstract: 1.20.4 - dev: true - - /object.values/1.1.5: - resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.0 + define-properties: 1.2.0 + es-abstract: 1.21.1 dev: true /object.values/1.1.6: @@ -9879,8 +6175,8 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 dev: true /on-finished/2.4.1: @@ -9901,13 +6197,6 @@ packages: fn.name: 1.1.0 dev: false - /onetime/2.0.1: - resolution: {integrity: sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==} - engines: {node: '>=4'} - dependencies: - mimic-fn: 1.2.0 - dev: true - /onetime/5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -9915,12 +6204,14 @@ packages: mimic-fn: 2.1.0 dev: true - /optimism/0.16.1: - resolution: {integrity: sha512-64i+Uw3otrndfq5kaoGNoY7pvOhSsjFEN4bdEFh80MWVk/dbgJfMv7VFDeCT8LxNAlEVhQmdVEbfE7X2nWNIIg==} + /open/8.4.1: + resolution: {integrity: sha512-/4b7qZNhv6Uhd7jjnREh1NjnPxlTq+XNWPG88Ydkj5AILcA5m3ajvcg57pB24EQjKv0dK62XnDqk9c/hkIG5Kg==} + engines: {node: '>=12'} dependencies: - '@wry/context': 0.6.1 - '@wry/trie': 0.3.1 - dev: false + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true /optionator/0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} @@ -9951,9 +6242,9 @@ packages: engines: {node: '>=10'} dependencies: bl: 4.1.0 - chalk: 4.1.2 + chalk: 4.1.1 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.7.0 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -9970,18 +6261,6 @@ packages: resolution: {integrity: sha512-yeWM9k6UPfG/nzxdaPlJkB2p08hCg4xP6Lx99F+vP8YF7xyZVfTmJjrrNalkmzudD4WFvNLVudQikqUmF8zhVQ==} dev: true - /p-cancelable/1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} - engines: {node: '>=6'} - dev: true - - /p-limit/1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - dependencies: - p-try: 1.0.0 - dev: true - /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -9996,13 +6275,6 @@ packages: yocto-queue: 0.1.0 dev: true - /p-locate/2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - dependencies: - p-limit: 1.3.0 - dev: true - /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -10017,98 +6289,30 @@ packages: p-limit: 3.1.0 dev: true - /p-map/2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - dev: true - - /p-try/1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - dev: true - /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /package-json/6.5.0: - resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} - engines: {node: '>=8'} - dependencies: - got: 9.6.0 - registry-auth-token: 4.2.1 - registry-url: 5.1.0 - semver: 6.3.0 - dev: true - /packet-reader/1.0.0: resolution: {integrity: sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==} dev: false - /param-case/3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - dependencies: - dot-case: 3.0.4 - tslib: 2.4.0 - dev: true - /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 - /parse-entities/4.0.0: - resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==} - dependencies: - '@types/unist': 2.0.6 - character-entities: 2.0.1 - character-entities-legacy: 3.0.0 - character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.0.2 - is-alphanumerical: 2.0.1 - is-decimal: 2.0.1 - is-hexadecimal: 2.0.1 - dev: false - - /parse-filepath/1.0.2: - resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} - engines: {node: '>=0.8'} - dependencies: - is-absolute: 1.0.0 - map-cache: 0.2.2 - path-root: 0.1.1 - dev: true - /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.16.7 + '@babel/code-frame': 7.18.6 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - /parse-passwd/1.0.0: - resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} - engines: {node: '>=0.10.0'} - dev: true - - /parse5-htmlparser2-tree-adapter/6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} - dependencies: - parse5: 6.0.1 - dev: false - - /parse5/5.1.1: - resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} - dev: false - - /parse5/6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: false - /parse5/7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: @@ -10120,25 +6324,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /pascal-case/3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.0 - dev: true - - /path-case/3.0.4: - resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.4.0 - dev: true - - /path-exists/3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true - /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -10156,20 +6341,8 @@ packages: /path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - /path-root-regex/0.1.2: - resolution: {integrity: sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==} - engines: {node: '>=0.10.0'} - dev: true - - /path-root/0.1.1: - resolution: {integrity: sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==} - engines: {node: '>=0.10.0'} - dependencies: - path-root-regex: 0.1.2 - dev: true - /path-to-regexp/0.1.7: - resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: false /path-to-regexp/6.2.1: @@ -10188,16 +6361,16 @@ packages: resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} engines: {node: '>=4.0.0'} - /pg-pool/3.5.1_pg@8.7.3: - resolution: {integrity: sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==} + /pg-pool/3.5.2_pg@8.9.0: + resolution: {integrity: sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==} peerDependencies: pg: '>=8.0' dependencies: - pg: 8.7.3 + pg: 8.9.0 dev: false - /pg-protocol/1.5.0: - resolution: {integrity: sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ==} + /pg-protocol/1.6.0: + resolution: {integrity: sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==} /pg-types/2.2.0: resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} @@ -10209,11 +6382,11 @@ packages: postgres-date: 1.0.7 postgres-interval: 1.2.0 - /pg/8.7.3: - resolution: {integrity: sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==} + /pg/8.9.0: + resolution: {integrity: sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==} engines: {node: '>= 8.0.0'} peerDependencies: - pg-native: '>=2.0.0' + pg-native: '>=3.0.1' peerDependenciesMeta: pg-native: optional: true @@ -10221,8 +6394,8 @@ packages: buffer-writer: 2.0.0 packet-reader: 1.0.0 pg-connection-string: 2.5.0 - pg-pool: 3.5.1_pg@8.7.3 - pg-protocol: 1.5.0 + pg-pool: 3.5.2_pg@8.9.0 + pg-protocol: 1.6.0 pg-types: 2.2.0 pgpass: 1.0.5 dev: false @@ -10287,10 +6460,10 @@ packages: detect-libc: 2.0.1 expand-template: 2.0.3 github-from-package: 0.0.0 - minimist: 1.2.6 + minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 1.0.2 - node-abi: 3.30.0 + node-abi: 3.33.0 pump: 3.0.0 rc: 1.2.8 simple-get: 4.0.1 @@ -10308,20 +6481,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prepend-http/2.0.0: - resolution: {integrity: sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==} - engines: {node: '>=4'} - dev: true - - /prettier-linter-helpers/1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - dependencies: - fast-diff: 1.2.0 - dev: true - - /prettier/2.6.2: - resolution: {integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==} + /prettier/2.8.4: + resolution: {integrity: sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -10335,30 +6496,22 @@ packages: react-is: 17.0.2 dev: true - /pretty-format/28.1.0: - resolution: {integrity: sha512-79Z4wWOYCdvQkEoEuSlBhHJqWeZ8D8YRPiPctJFCtvuaClGpiwiQYSCUOE6IEKUbbFukKOTFIUAXE8N4EQTo1Q==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - dependencies: - '@jest/schemas': 28.0.2 - ansi-regex: 5.0.1 - ansi-styles: 5.2.0 - react-is: 18.1.0 - dev: true - - /pretty-format/29.3.1: - resolution: {integrity: sha512-FyLnmb1cYJV8biEIiRyzRFvs2lry7PPIvOqKVe1GCUEYg4YGmlx1qG9EJNMxArYm7piII4qb8UV1Pncq5dxmcg==} + /pretty-format/29.4.3: + resolution: {integrity: sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/schemas': 29.0.0 + '@jest/schemas': 29.4.3 ansi-styles: 5.2.0 - react-is: 18.1.0 + react-is: 18.2.0 dev: true - /promise/7.3.1: - resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + /prisma/4.10.1: + resolution: {integrity: sha512-0jDxgg+DruB1kHVNlcspXQB9au62IFfVg9drkhzXudszHNUAQn0lVuu+T8np0uC2z1nKD5S3qPeCyR8u5YFLnA==} + engines: {node: '>=14.17'} + hasBin: true + requiresBuild: true dependencies: - asap: 2.0.6 - dev: true + '@prisma/engines': 4.10.1 /prompts/2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} @@ -10375,8 +6528,8 @@ packages: object-assign: 4.1.1 react-is: 16.13.1 - /property-information/6.1.1: - resolution: {integrity: sha512-hrzC564QIl0r0vy4l6MvRLhafmUowhO/O3KgVSoXIbbA2Sz4j8HGpJc6T2cubRVwMwpdiG/vKGfhT4IixmKN9w==} + /property-information/6.2.0: + resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} dev: false /proxy-addr/2.0.7: @@ -10391,35 +6544,20 @@ packages: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pstree.remy/1.1.8: - resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} - dev: true - /pump/3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 + dev: false - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} dev: true - /pupa/2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} - dependencies: - escape-goat: 2.1.1 - dev: true - - /q/1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - dev: true - - /qs/6.10.3: - resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==} + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.4 @@ -10433,11 +6571,6 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-lru/4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - dev: true - /range-parser/1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -10459,8 +6592,9 @@ packages: dependencies: deep-extend: 0.6.0 ini: 1.3.8 - minimist: 1.2.6 + minimist: 1.2.8 strip-json-comments: 2.0.1 + dev: false /react-dom/18.2.0_react@18.2.0: resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} @@ -10472,8 +6606,8 @@ packages: scheduler: 0.23.0 dev: false - /react-hook-form/7.40.0_react@18.2.0: - resolution: {integrity: sha512-0rokdxMPJs0k9bvFtY6dbcSydyNhnZNXCR49jgDr/aR03FDHFOK6gfh8ccqB3fl696Mk7lqh04xdm+agqWXKSw==} + /react-hook-form/7.43.1_react@18.2.0: + resolution: {integrity: sha512-+s3+s8LLytRMriwwuSqeLStVjRXFGxgjjx2jED7Z+wz1J/88vpxieRQGvJVvzrzVxshZ0BRuocFERb779m2kNg==} engines: {node: '>=12.22.0'} peerDependencies: react: ^16.8.0 || ^17 || ^18 @@ -10488,11 +6622,11 @@ packages: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: true - /react-is/18.1.0: - resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} + /react-is/18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-markdown/8.0.3_gvifxuufrqkj4gcqfnnwrb44ya: - resolution: {integrity: sha512-We36SfqaKoVNpN1QqsZwWSv/OZt5J15LNgTLWynwAN5b265hrQrsjMtlRNwUvS+YyR3yDM8HpTNc4pK9H/Gc0A==} + /react-markdown/8.0.5_gvifxuufrqkj4gcqfnnwrb44ya: + resolution: {integrity: sha512-jGJolWWmOWAvzf+xMdB9zwStViODyyFQhNB/bwCerbBKmrTmgmA599CGiOlP58OId1IMoIRsA8UdI1Lod4zb5A==} peerDependencies: '@types/react': '>=16' react: '>=16' @@ -10501,45 +6635,52 @@ packages: '@types/prop-types': 15.7.5 '@types/react': 18.0.8 '@types/unist': 2.0.6 - comma-separated-tokens: 2.0.2 - hast-util-whitespace: 2.0.0 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 2.0.1 prop-types: 15.8.1 - property-information: 6.1.1 + property-information: 6.2.0 react: 18.2.0 - react-is: 18.1.0 + react-is: 18.2.0 remark-parse: 10.0.1 remark-rehype: 10.1.0 - space-separated-tokens: 2.0.1 - style-to-object: 0.3.0 + space-separated-tokens: 2.0.2 + style-to-object: 0.4.1 unified: 10.1.2 - unist-util-visit: 4.1.0 - vfile: 5.3.2 + unist-util-visit: 4.1.2 + vfile: 5.3.7 transitivePeerDependencies: - supports-color dev: false - /react-select/5.7.0_5ubfrz6g4pwsjvo47rxfnxhiaa: + /react-select/5.7.0_sd644w7yfdyrvmykkrrqd5kd4a: resolution: {integrity: sha512-lJGiMxCa3cqnUr2Jjtg9YHsaytiZqeNOKeibv6WF5zbK/fPegZ1hg3y/9P1RZVLhqBTs0PfqQLKuAACednYGhQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.20.6 - '@emotion/cache': 11.7.1 - '@emotion/react': 11.9.0_4j7i43ydqe3o2mbrnwpqlmvdyq - '@floating-ui/dom': 1.0.9 - '@types/react-transition-group': 4.4.4 + '@babel/runtime': 7.20.13 + '@emotion/cache': 11.10.5 + '@emotion/react': 11.10.6_gvifxuufrqkj4gcqfnnwrb44ya + '@floating-ui/dom': 1.2.1 + '@types/react-transition-group': 4.4.5 memoize-one: 6.0.0 prop-types: 15.8.1 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - react-transition-group: 4.4.2_biqbaboplfbrettd7655fr4n2y + react-transition-group: 4.4.5_biqbaboplfbrettd7655fr4n2y use-isomorphic-layout-effect: 1.1.2_gvifxuufrqkj4gcqfnnwrb44ya transitivePeerDependencies: - - '@babel/core' - '@types/react' dev: false + /react-ssr-prepass/1.5.0_react@18.2.0: + resolution: {integrity: sha512-yFNHrlVEReVYKsLI5lF05tZoHveA5pGzjFbFJY/3pOqqjGOmMmqx83N4hIjN2n6E1AOa+eQEUxs3CgRnPmT0RQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /react-tooltip/4.5.1_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-Zo+CSFUGXar1uV+bgXFFDe7VeS2iByeIp5rTgTcc2HqtuOS5D76QapejNNfx320MCY91TlhTQat36KGFTqgcvw==} engines: {npm: '>=6.13'} @@ -10553,13 +6694,13 @@ packages: uuid: 7.0.3 dev: false - /react-transition-group/4.4.2_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==} + /react-transition-group/4.4.5_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: react: '>=16.6.0' react-dom: '>=16.6.0' dependencies: - '@babel/runtime': 7.20.6 + '@babel/runtime': 7.20.13 dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -10574,25 +6715,6 @@ packages: loose-envify: 1.4.0 dev: false - /read-pkg-up/7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - dev: true - - /read-pkg/5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - dependencies: - '@types/normalize-package-data': 2.4.1 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - dev: true - /readable-stream/3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} @@ -10615,19 +6737,15 @@ packages: strip-indent: 3.0.0 dev: true - /redis/4.4.0: - resolution: {integrity: sha512-tQyFG6O9iewLxxHYRyirJNklhe2QI7M/0o8q0jk7D9Z/Cxh/7oZrQyHKyjWz0TkkCls8ool/xvhL9K8zRnkaYQ==} + /redis/4.6.4: + resolution: {integrity: sha512-wi2tgDdQ+Q8q+PR5FLRx4QvDiWaA+PoJbrzsyFqlClN5R4LplHqN3scs/aGjE//mbz++W19SgxiEnQ27jnCRaA==} dependencies: - '@redis/bloom': 1.1.0_@redis+client@1.3.1 - '@redis/client': 1.3.1 - '@redis/graph': 1.1.0_@redis+client@1.3.1 - '@redis/json': 1.0.4_@redis+client@1.3.1 - '@redis/search': 1.1.0_@redis+client@1.3.1 - '@redis/time-series': 1.0.3_@redis+client@1.3.1 - dev: false - - /reflect-metadata/0.1.13: - resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} + '@redis/bloom': 1.2.0_@redis+client@1.5.5 + '@redis/client': 1.5.5 + '@redis/graph': 1.1.0_@redis+client@1.5.5 + '@redis/json': 1.0.4_@redis+client@1.5.5 + '@redis/search': 1.1.1_@redis+client@1.5.5 + '@redis/time-series': 1.0.4_@redis+client@1.5.5 dev: false /regenerator-runtime/0.13.11: @@ -10638,7 +6756,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 + define-properties: 1.2.0 functions-have-names: 1.2.3 dev: true @@ -10647,63 +6765,30 @@ packages: engines: {node: '>=8'} dev: true - /registry-auth-token/4.2.1: - resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} - engines: {node: '>=6.0.0'} - dependencies: - rc: 1.2.8 - dev: true - - /registry-url/5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} - dependencies: - rc: 1.2.8 - dev: true - - /relay-runtime/12.0.0: - resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} - dependencies: - '@babel/runtime': 7.20.6 - fbjs: 3.0.4 - invariant: 2.2.4 - transitivePeerDependencies: - - encoding - dev: true - /remark-breaks/3.0.2: resolution: {integrity: sha512-x96YDJ9X+Ry0/JNZFKfr1hpcAKvGYWfUTszxY9RbxKEqq6uzPPoLCuHdZsLPZZUdAv3nCROyc7FPrQLWr2rxyw==} dependencies: '@types/mdast': 3.0.10 unified: 10.1.2 - unist-util-visit: 4.1.0 + unist-util-visit: 4.1.2 dev: false /remark-gfm/3.0.1: resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} dependencies: '@types/mdast': 3.0.10 - mdast-util-gfm: 2.0.1 + mdast-util-gfm: 2.0.2 micromark-extension-gfm: 2.0.1 unified: 10.1.2 transitivePeerDependencies: - supports-color dev: false - /remark-mdx/2.1.1: - resolution: {integrity: sha512-0wXdEITnFyjLquN3VvACNLzbGzWM5ujzTvfgOkONBZgSFJ7ezLLDaTWqf6H9eUgVITEP8asp6LJ0W/X090dXBg==} - dependencies: - mdast-util-mdx: 2.0.0 - micromark-extension-mdxjs: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - /remark-parse/10.0.1: resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} dependencies: '@types/mdast': 3.0.10 - mdast-util-from-markdown: 1.2.0 + mdast-util-from-markdown: 1.3.0 unified: 10.1.2 transitivePeerDependencies: - supports-color @@ -10714,38 +6799,13 @@ packages: dependencies: '@types/hast': 2.3.4 '@types/mdast': 3.0.10 - mdast-util-to-hast: 12.1.1 + mdast-util-to-hast: 12.3.0 unified: 10.1.2 dev: false - /remedial/1.0.8: - resolution: {integrity: sha512-/62tYiOe6DzS5BqVsNpH/nkGlX45C/Sp6V+NtiN6JQNS1Viay7cWkazmRkrQrdFj2eshDe96SIQNIoMxqhzBOg==} - dev: true - - /remove-trailing-separator/1.1.0: - resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==} - dev: true - - /remove-trailing-spaces/1.0.8: - resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} - dev: true - - /replaceall/0.1.6: - resolution: {integrity: sha512-sL26E4+8Kec7bwpRjHlQvbNZcpnGroT3PA7ywsgH6GjzxAg4IGNlNalLoRC/JmTed7cMhyDbi44pWw1kMhDxlw==} - engines: {node: '>= 0.8.x'} - dev: true - /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - - /require-from-string/2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true - - /require-main-filename/2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true /requires-port/1.0.0: @@ -10759,14 +6819,6 @@ packages: resolve-from: 5.0.0 dev: true - /resolve-dir/1.0.1: - resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} - engines: {node: '>=0.10.0'} - dependencies: - expand-tilde: 2.0.2 - global-modules: 1.0.0 - dev: true - /resolve-from/4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -10776,45 +6828,26 @@ packages: engines: {node: '>=8'} dev: true - /resolve-global/1.0.0: - resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} - engines: {node: '>=8'} - dependencies: - global-dirs: 0.1.1 - dev: true - - /resolve.exports/1.1.0: - resolution: {integrity: sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==} + /resolve.exports/2.0.0: + resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} engines: {node: '>=10'} dev: true - /resolve/1.22.0: - resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + /resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: - is-core-module: 2.9.0 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - /resolve/2.0.0-next.3: - resolution: {integrity: sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==} + /resolve/2.0.0-next.4: + resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} + hasBin: true dependencies: - is-core-module: 2.9.0 + is-core-module: 2.11.0 path-parse: 1.0.7 - dev: true - - /responselike/1.0.2: - resolution: {integrity: sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==} - dependencies: - lowercase-keys: 1.0.1 - dev: true - - /restore-cursor/2.0.0: - resolution: {integrity: sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==} - engines: {node: '>=4'} - dependencies: - onetime: 2.0.1 - signal-exit: 3.0.7 + supports-preserve-symlinks-flag: 1.0.0 dev: true /restore-cursor/3.1.0: @@ -10825,11 +6858,6 @@ packages: signal-exit: 3.0.7 dev: true - /retry/0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: false - /reusify/1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -10852,17 +6880,10 @@ packages: queue-microtask: 1.2.3 dev: true - /rxjs/6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} + /rxjs/7.8.0: + resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: - tslib: 1.14.1 - dev: true - - /rxjs/7.5.6: - resolution: {integrity: sha512-dnyv2/YsXhnm461G+R/Pe5bWP41Nm6LBXEYWI6eiFP4fiwx6WRI/CD0zbdVAudd9xwLEF2IDcKXLHit0FYjUzw==} - dependencies: - tslib: 2.4.0 + tslib: 2.5.0 dev: true /sade/1.8.1: @@ -10872,9 +6893,6 @@ packages: mri: 1.2.0 dev: false - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -10882,32 +6900,28 @@ packages: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 + get-intrinsic: 1.2.0 is-regex: 1.1.4 dev: true - /safe-stable-stringify/2.3.1: - resolution: {integrity: sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==} + /safe-stable-stringify/2.4.2: + resolution: {integrity: sha512-gMxvPJYhP0O9n2pvcfYfIuYgbledAOJFcqRThtPRmjscaipiwcwPPKLytpVzMkG2HAN87Qmo2d4PtGiri1dSLA==} engines: {node: '>=10'} dev: false /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /sass/1.56.1: - resolution: {integrity: sha512-VpEyKpyBPCxE7qGDtOcdJ6fFbcpOM+Emu7uZLxVrkX8KVU/Dp5UF7WLvzqRuUhB6mqqQt1xffLoG+AndxTZrCQ==} + /sass/1.58.2: + resolution: {integrity: sha512-2mbyOWOv/lhEXD6nVrQZQ4KT2DlwcODbTskM42EyqBAFUWOhiiYtAXZqjZz1ygzapYf+N+2GwfIH9M5FM4GUMg==} engines: {node: '>=12.0.0'} hasBin: true dependencies: chokidar: 3.5.3 - immutable: 4.1.0 + immutable: 4.2.4 source-map-js: 1.0.2 dev: false - /sax/1.2.4: - resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} - dev: false - /saxes/6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -10921,32 +6935,10 @@ packages: loose-envify: 1.4.0 dev: false - /scuid/1.1.0: - resolution: {integrity: sha512-MuCAyrGZcTLfQoH2XoBlQ8C6bzwN88XT/0slOGz0pn8+gIP85BOAfYa44ZXQUTOwRwPU0QvgU+V+OSajl/59Xg==} - dev: true - - /semver-diff/3.1.1: - resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - /semver/6.3.0: resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} hasBin: true - /semver/7.3.7: - resolution: {integrity: sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==} - engines: {node: '>=10'} - hasBin: true - dependencies: - lru-cache: 6.0.0 - /semver/7.3.8: resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==} engines: {node: '>=10'} @@ -10975,14 +6967,6 @@ packages: - supports-color dev: false - /sentence-case/3.0.4: - resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} - dependencies: - no-case: 3.0.4 - tslib: 2.4.0 - upper-case-first: 2.0.2 - dev: true - /serve-static/1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} @@ -10997,27 +6981,16 @@ packages: /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false /set-cookie-parser/2.5.1: resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} dev: true - /setimmediate/1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: true - /setprototypeof/1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: false - /sha.js/2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: false - /sharp/0.30.7: resolution: {integrity: sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig==} engines: {node: '>=12.13.0'} @@ -11025,7 +6998,7 @@ packages: dependencies: color: 4.2.3 detect-libc: 2.0.1 - node-addon-api: 5.0.0 + node-addon-api: 5.1.0 prebuild-install: 7.1.1 semver: 7.3.8 simple-get: 4.0.1 @@ -11049,16 +7022,12 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.3 - object-inspect: 1.12.2 + get-intrinsic: 1.2.0 + object-inspect: 1.12.3 /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /signedsource/1.0.0: - resolution: {integrity: sha512-6+eerH9fEnNmi/hyM1DXcRK3pWdoMQtlkQ+ns0ntzunjKqp5i3sKCc80ym8Fib3iaYhdJUOPdhlJWj1tvge2Ww==} - dev: true - /simple-concat/1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: false @@ -11086,16 +7055,9 @@ packages: engines: {node: '>=8'} dev: true - /slice-ansi/0.0.4: - resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} - engines: {node: '>=0.10.0'} - dev: true - - /snake-case/3.0.4: - resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} - dependencies: - dot-case: 3.0.4 - tslib: 2.4.0 + /slash/4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} dev: true /source-map-js/1.0.2: @@ -11110,13 +7072,6 @@ packages: source-map: 0.6.1 dev: true - /source-map-support/0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - dependencies: - buffer-from: 1.1.2 - source-map: 0.6.1 - dev: true - /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} engines: {node: '>=0.10.0'} @@ -11127,21 +7082,10 @@ packages: engines: {node: '>=0.10.0'} dev: true - /space-separated-tokens/2.0.1: - resolution: {integrity: sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==} + /space-separated-tokens/2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: false - /spawn-command/0.0.2-1: - resolution: {integrity: sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=} - dev: true - - /spdx-correct/3.1.1: - resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} - dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 - dev: true - /spdx-exceptions/2.3.0: resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} dev: true @@ -11150,17 +7094,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 + spdx-license-ids: 3.0.12 dev: true - /spdx-license-ids/3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} - dev: true - - /split2/3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - dependencies: - readable-stream: 3.6.0 + /spdx-license-ids/3.0.12: + resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true /split2/4.1.0: @@ -11168,22 +7106,21 @@ packages: engines: {node: '>= 10.x'} dev: false - /sponge-case/1.0.1: - resolution: {integrity: sha512-dblb9Et4DAtiZ5YSUZHLl4XhH4uK80GhAZrVXdN4O2P4gQ40Wa5UIOPUHlA/nFd2PLblBZWUioLMMAVrgpoYcA==} - dependencies: - tslib: 2.4.0 - dev: true - /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: true + /sql-template-strings/2.2.2: + resolution: {integrity: sha512-UXhXR2869FQaD+GMly8jAMCRZ94nU5KcrFetZfWEMd+LVVG6y0ExgHAhatEcKZ/wk8YcKPdi+hiD2wm75lq3/Q==} + engines: {node: '>=4.0.0'} + dev: false + /stack-trace/0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} dev: false - /stack-utils/2.0.5: - resolution: {integrity: sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==} + /stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 @@ -11194,9 +7131,11 @@ packages: engines: {node: '>= 0.8'} dev: false - /streamsearch/1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} + /stop-iteration-iterator/1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.5 dev: true /strict-event-emitter/0.2.8: @@ -11205,8 +7144,8 @@ packages: events: 3.3.0 dev: true - /string-env-interpolation/1.0.1: - resolution: {integrity: sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg==} + /strict-event-emitter/0.4.6: + resolution: {integrity: sha512-12KWeb+wixJohmnwNFerbyiBrAlq5qJLwIt38etRtKtmmHyDSoGlIqFE9wx+4IwG0aDjI7GV8tc8ZccjWZZtTg==} dev: true /string-length/4.0.2: @@ -11217,23 +7156,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string-width/1.0.2: - resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} - engines: {node: '>=0.10.0'} - dependencies: - code-point-at: 1.1.0 - is-fullwidth-code-point: 1.0.0 - strip-ansi: 3.0.1 - dev: true - - /string-width/2.1.1: - resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} - engines: {node: '>=4'} - dependencies: - is-fullwidth-code-point: 2.0.0 - strip-ansi: 4.0.0 - dev: true - /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -11246,29 +7168,29 @@ packages: resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 - get-intrinsic: 1.1.3 + define-properties: 1.2.0 + es-abstract: 1.21.1 + get-intrinsic: 1.2.0 has-symbols: 1.0.3 - internal-slot: 1.0.3 + internal-slot: 1.0.5 regexp.prototype.flags: 1.4.3 side-channel: 1.0.4 dev: true - /string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 dev: true - /string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 - define-properties: 1.1.4 - es-abstract: 1.20.4 + define-properties: 1.2.0 + es-abstract: 1.21.1 dev: true /string_decoder/1.3.0: @@ -11276,27 +7198,6 @@ packages: dependencies: safe-buffer: 5.2.1 - /stringify-entities/4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - dev: false - - /strip-ansi/3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} - dependencies: - ansi-regex: 2.1.1 - dev: true - - /strip-ansi/4.0.0: - resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} - engines: {node: '>=4'} - dependencies: - ansi-regex: 3.0.1 - dev: true - /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -11328,20 +7229,21 @@ packages: /strip-json-comments/2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} + dev: false /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /style-to-object/0.3.0: - resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} + /style-to-object/0.4.1: + resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==} dependencies: inline-style-parser: 0.1.1 dev: false - /styled-jsx/5.1.0_fo674ziljcu7kfxvd3l72z7dda: - resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} + /styled-jsx/5.1.1_2exiyaescjxorpwwmy4ejghgte: + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} peerDependencies: '@babel/core': '*' @@ -11353,23 +7255,21 @@ packages: babel-plugin-macros: optional: true dependencies: - '@babel/core': 7.17.10 + '@babel/core': 7.20.12 client-only: 0.0.1 react: 18.2.0 dev: false - /stylis/4.0.13: - resolution: {integrity: sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==} - dev: false - /stylis/4.1.3: resolution: {integrity: sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==} dev: false - /supports-color/2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - dev: true + /superjson/1.12.2: + resolution: {integrity: sha512-ugvUo9/WmvWOjstornQhsN/sR9mnGtWGYeTxFuqLb4AiT4QdUavjGFRALCPKWWnAiUJ4HTpytj5e0t5HoMRkXg==} + engines: {node: '>=10'} + dependencies: + copy-anything: 3.0.3 + dev: false /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -11382,6 +7282,7 @@ packages: engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true /supports-color/8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} @@ -11390,54 +7291,25 @@ packages: has-flag: 4.0.0 dev: true - /supports-hyperlinks/2.2.0: - resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag/1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - /swap-case/2.0.2: - resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} - dependencies: - tslib: 2.4.0 - dev: true - - /swr/1.3.0_react@18.2.0: - resolution: {integrity: sha512-dkghQrOl2ORX9HYrMDtPa7LTVHJjCTeZoB1dqTbnnEDlSvN8JEKpYIYurDfvbQFUUS8Cg8PceFVZNkW0KNNYPw==} - peerDependencies: - react: ^16.11.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: false - - /symbol-observable/1.2.0: - resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} - engines: {node: '>=0.10.0'} - dev: true - - /symbol-observable/4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} - dev: false - /symbol-tree/3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true - /sync-fetch/0.4.1: - resolution: {integrity: sha512-JDtyFEvnKUzt1CxRtzzsGgkBanEv8XRmLyJo0F0nGkpCR8EjYmpOJJXz8GA/SWtlPU0nAYh0+CNMNnFworGyOA==} - engines: {node: '>=14'} + /synckit/0.8.5: + resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} + engines: {node: ^14.18.0 || >=16.0.0} dependencies: - buffer: 5.7.1 - node-fetch: 2.6.7 - transitivePeerDependencies: - - encoding + '@pkgr/utils': 2.3.1 + tslib: 2.5.0 + dev: true + + /tapable/2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} dev: true /tar-fs/2.1.1: @@ -11460,26 +7332,18 @@ packages: readable-stream: 3.6.0 dev: false - /tar/6.1.11: - resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==} - engines: {node: '>= 10'} + /tar/6.1.13: + resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==} + engines: {node: '>=10'} dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 - minipass: 3.1.6 + minipass: 4.0.3 minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 dev: false - /terminal-link/2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.2.0 - dev: true - /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -11489,50 +7353,23 @@ packages: minimatch: 3.1.2 dev: true - /text-extensions/1.9.0: - resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} - engines: {node: '>=0.10'} - dev: true - /text-hex/1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} dev: false /text-table/0.2.0: - resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} - dev: true - - /thenify-all/1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - dependencies: - thenify: 3.3.1 - dev: false - - /thenify/3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - dependencies: - any-promise: 1.3.0 - dev: false - - /throat/6.0.1: - resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true /through/2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true - /through2/4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + /tiny-glob/0.2.9: + resolution: {integrity: sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==} dependencies: - readable-stream: 3.6.0 - dev: true - - /title-case/3.0.3: - resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} - dependencies: - tslib: 2.4.0 + globalyzer: 0.1.0 + globrex: 0.1.2 dev: true /tmp/0.0.33: @@ -11547,14 +7384,9 @@ packages: dev: true /to-fast-properties/2.0.0: - resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - /to-readable-stream/1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} - engines: {node: '>=6'} - dev: true - /to-regex-range/5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -11566,19 +7398,12 @@ packages: engines: {node: '>=0.6'} dev: false - /touch/3.1.0: - resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} - hasBin: true - dependencies: - nopt: 1.0.10 - dev: true - /tough-cookie/4.1.2: resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.1.1 + punycode: 2.3.0 universalify: 0.2.0 url-parse: 1.5.10 dev: true @@ -11590,18 +7415,12 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: - punycode: 2.1.1 + punycode: 2.3.0 dev: true - /tree-kill/1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true - - /trim-newlines/3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - dev: true + /trim-lines/3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} + dev: false /triple-beam/1.3.0: resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} @@ -11611,88 +7430,42 @@ packages: resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} dev: false - /ts-invariant/0.10.3: - resolution: {integrity: sha512-uivwYcQaxAucv1CzRp2n/QdYPo4ILf9VXgH19zEIjFx2EJufV16P0JtJVpYHy89DItG6Kwj2oIUjrcK5au+4tQ==} - engines: {node: '>=8'} - dependencies: - tslib: 2.4.0 - dev: false - - /ts-jest/28.0.2_idho52n4uf7ux6ste52nmmk7t4: - resolution: {integrity: sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} + /ts-jest/29.0.5_q5pvvsha5rrowzfbt33h5w23u4: + resolution: {integrity: sha512-PL3UciSgIpQ7f6XjVOmbi96vmDHUqAyqDr8YxzopDqX3kfgYtX1cuNeBjP+L9sFXi6nzsGGA6R3fP3DDDJyrxA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true peerDependencies: '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: ^28.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 esbuild: '*' - jest: ^28.0.0 + jest: ^29.0.0 typescript: '>=4.3' peerDependenciesMeta: '@babel/core': optional: true - '@types/jest': + '@jest/types': optional: true babel-jest: optional: true esbuild: optional: true dependencies: - '@babel/core': 7.17.10 - '@types/jest': 27.5.0 + '@babel/core': 7.20.12 bs-logger: 0.2.6 + esbuild: 0.16.17 fast-json-stable-stringify: 2.1.0 - jest: 28.1.0_@types+node@17.0.31 - jest-util: 28.1.0 - json5: 2.2.1 + jest: 29.4.3_zfha7dvnw4nti6zkbsmhmn6xo4 + jest-util: 29.4.3 + json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.3.7 - typescript: 4.6.4 - yargs-parser: 20.2.9 + semver: 7.3.8 + typescript: 4.9.4 + yargs-parser: 21.1.1 dev: true - /ts-jest/28.0.2_mplb3v5dftkcf2ovkj2wrc7jiy: - resolution: {integrity: sha512-IOZMb3D0gx6IHO9ywPgiQxJ3Zl4ECylEFwoVpENB55aTn5sdO0Ptyx/7noNBxAaUff708RqQL4XBNxxOVjY0vQ==} - engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: ^28.0.0 - esbuild: '*' - jest: ^28.0.0 - typescript: '>=4.3' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/jest': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@types/jest': 27.5.0 - bs-logger: 0.2.6 - esbuild: 0.16.8 - fast-json-stable-stringify: 2.1.0 - jest: 28.1.0_rcy5nlo3uetwcso5jthu6pby7u - jest-util: 28.1.0 - json5: 2.2.1 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.3.7 - typescript: 4.6.4 - yargs-parser: 20.2.9 - dev: true - - /ts-log/2.2.4: - resolution: {integrity: sha512-DEQrfv6l7IvN2jlzc/VTdZJYsWUnQNCsueYjMkC/iXoEoi5fNan6MjeDqkvhfzbmHgdz9UxDUluX3V5HdjTydQ==} - dev: true - - /ts-node/10.9.1_l47be6km5p57gglrggidw5gsgm: + /ts-node/10.9.1_awa2wsr5thmg3i7jqycphctjfq: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -11711,40 +7484,24 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 17.0.31 - acorn: 8.8.1 + '@types/node': 18.11.18 + acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.6.4 + typescript: 4.9.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true - /ts-node/9.1.1_typescript@4.6.4: - resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} - engines: {node: '>=10.0.0'} - hasBin: true - peerDependencies: - typescript: '>=2.7' - dependencies: - arg: 4.1.3 - create-require: 1.1.1 - diff: 4.0.2 - make-error: 1.3.6 - source-map-support: 0.5.21 - typescript: 4.6.4 - yn: 3.1.1 - dev: true - /tsconfig-paths/3.14.1: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: '@types/json5': 0.0.29 - json5: 1.0.1 - minimist: 1.2.6 + json5: 1.0.2 + minimist: 1.2.8 strip-bom: 3.0.0 dev: true @@ -11752,21 +7509,17 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.3.1: - resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} - dev: true + /tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} - /tslib/2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} - - /tsutils/3.21.0_typescript@4.6.4: + /tsutils/3.21.0_typescript@4.9.4: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.6.4 + typescript: 4.9.4 dev: true /tunnel-agent/0.6.0: @@ -11794,11 +7547,6 @@ packages: engines: {node: '>=4'} dev: true - /type-fest/0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - dev: true - /type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} @@ -11809,41 +7557,11 @@ packages: engines: {node: '>=10'} dev: true - /type-fest/0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true - - /type-fest/0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true - /type-fest/2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: true - /type-graphql/1.1.1_v2revtygxcm7xrdg2oz3ssohfu: - resolution: {integrity: sha512-iOOWVn0ehCYMukmnXStbkRwFE9dcjt7/oDcBS1JyQZo9CbhlIll4lHHps54HMEk4A4c8bUPd+DjK8w1/ZrxB4A==} - engines: {node: '>= 10.3'} - requiresBuild: true - peerDependencies: - class-validator: '>=0.12.0' - graphql: ^15.3.0 - dependencies: - '@types/glob': 7.2.0 - '@types/node': 17.0.31 - '@types/semver': 7.3.12 - class-validator: 0.13.2 - glob: 7.2.3 - graphql: 15.8.0 - graphql-query-complexity: 0.7.2_graphql@15.8.0 - graphql-subscriptions: 1.2.1_graphql@15.8.0 - semver: 7.3.7 - tslib: 2.4.0 - dev: false - /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -11852,104 +7570,20 @@ packages: mime-types: 2.1.35 dev: false - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - is-typedarray: 1.0.0 + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 dev: true - /typeorm/0.3.11_j7enc6mli46gfpdixnhxwnbbhm: - resolution: {integrity: sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg==} - engines: {node: '>= 12.9.0'} - hasBin: true - peerDependencies: - '@google-cloud/spanner': ^5.18.0 - '@sap/hana-client': ^2.12.25 - better-sqlite3: ^7.1.2 || ^8.0.0 - hdb-pool: ^0.1.6 - ioredis: ^5.0.4 - mongodb: ^3.6.0 - mssql: ^7.3.0 - mysql2: ^2.2.5 - oracledb: ^5.1.0 - pg: ^8.5.1 - pg-native: ^3.0.0 - pg-query-stream: ^4.0.0 - redis: ^3.1.1 || ^4.0.0 - sql.js: ^1.4.0 - sqlite3: ^5.0.3 - ts-node: ^10.7.0 - typeorm-aurora-data-api-driver: ^2.0.0 - peerDependenciesMeta: - '@google-cloud/spanner': - optional: true - '@sap/hana-client': - optional: true - better-sqlite3: - optional: true - hdb-pool: - optional: true - ioredis: - optional: true - mongodb: - optional: true - mssql: - optional: true - mysql2: - optional: true - oracledb: - optional: true - pg: - optional: true - pg-native: - optional: true - pg-query-stream: - optional: true - redis: - optional: true - sql.js: - optional: true - sqlite3: - optional: true - ts-node: - optional: true - typeorm-aurora-data-api-driver: - optional: true - dependencies: - '@sqltools/formatter': 1.2.3 - app-root-path: 3.0.0 - buffer: 6.0.3 - chalk: 4.1.2 - cli-highlight: 2.1.11 - date-fns: 2.28.0 - debug: 4.3.4 - dotenv: 16.0.0 - glob: 7.2.3 - js-yaml: 4.1.0 - mkdirp: 1.0.4 - pg: 8.7.3 - redis: 4.4.0 - reflect-metadata: 0.1.13 - sha.js: 2.4.11 - ts-node: 10.9.1_l47be6km5p57gglrggidw5gsgm - tslib: 2.4.0 - uuid: 8.3.2 - xml2js: 0.4.23 - yargs: 17.4.1 - transitivePeerDependencies: - - supports-color - dev: false - - /typescript/4.6.4: - resolution: {integrity: sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==} + /typescript/4.9.4: + resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /ua-parser-js/0.7.31: - resolution: {integrity: sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==} - dev: true - /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -11959,20 +7593,6 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unc-path-regex/0.1.2: - resolution: {integrity: sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==} - engines: {node: '>=0.10.0'} - dev: true - - /undefsafe/2.0.5: - resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} - dev: true - - /undici/5.5.1: - resolution: {integrity: sha512-MEvryPLf18HvlCbLSzCW0U00IMftKGI5udnjrQbC5D4P0Hodwffhv+iGfWuJwg16Y/TK11ZFK8i+BPVW2z/eAw==} - engines: {node: '>=12.18'} - dev: true - /unified/10.1.2: resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: @@ -11980,85 +7600,44 @@ packages: bail: 2.0.2 extend: 3.0.2 is-buffer: 2.0.5 - is-plain-obj: 4.0.0 + is-plain-obj: 4.1.0 trough: 2.1.0 - vfile: 5.3.2 + vfile: 5.3.7 dev: false - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true + /unist-util-generated/2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} + dev: false - /unist-builder/3.0.0: - resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==} + /unist-util-is/5.2.0: + resolution: {integrity: sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==} + dev: false + + /unist-util-position/4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} dependencies: '@types/unist': 2.0.6 dev: false - /unist-util-generated/2.0.0: - resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==} - dev: false - - /unist-util-is/5.1.1: - resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} - dev: false - - /unist-util-position-from-estree/1.1.1: - resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==} + /unist-util-stringify-position/3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: '@types/unist': 2.0.6 dev: false - /unist-util-position/4.0.3: - resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==} + /unist-util-visit-parents/5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: '@types/unist': 2.0.6 + unist-util-is: 5.2.0 dev: false - /unist-util-remove-position/4.0.1: - resolution: {integrity: sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==} + /unist-util-visit/4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: '@types/unist': 2.0.6 - unist-util-visit: 4.1.0 - dev: false - - /unist-util-stringify-position/3.0.2: - resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} - dependencies: - '@types/unist': 2.0.6 - dev: false - - /unist-util-visit-parents/4.1.1: - resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - dev: false - - /unist-util-visit-parents/5.1.0: - resolution: {integrity: sha512-y+QVLcY5eR/YVpqDsLf/xh9R3Q2Y4HxkZTp7ViLDU6WtJCEcPmRzW1gpdWDCDIqIlhuPDXOgttqPlykrHYDekg==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - dev: false - - /unist-util-visit/3.1.0: - resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - unist-util-visit-parents: 4.1.1 - dev: false - - /unist-util-visit/4.1.0: - resolution: {integrity: sha512-n7lyhFKJfVZ9MnKtqbsqkQEk5P1KShj0+//V7mAcoI6bpbUjh3C/OG8HVD+pBihfh6Ovl01m8dkcv9HNqYajmQ==} - dependencies: - '@types/unist': 2.0.6 - unist-util-is: 5.1.1 - unist-util-visit-parents: 5.1.0 + unist-util-is: 5.2.0 + unist-util-visit-parents: 5.1.3 dev: false /universalify/0.2.0: @@ -12069,62 +7648,27 @@ packages: /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - - /unixify/1.0.0: - resolution: {integrity: sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==} - engines: {node: '>=0.10.0'} - dependencies: - normalize-path: 2.1.1 - dev: true + dev: false /unpipe/1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: false - /update-notifier/5.1.0: - resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} - engines: {node: '>=10'} + /update-browserslist-db/1.0.10_browserslist@4.21.5: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' dependencies: - boxen: 5.1.2 - chalk: 4.1.2 - configstore: 5.0.1 - has-yarn: 2.1.0 - import-lazy: 2.1.0 - is-ci: 2.0.0 - is-installed-globally: 0.4.0 - is-npm: 5.0.0 - is-yarn-global: 0.3.0 - latest-version: 5.1.0 - pupa: 2.1.1 - semver: 7.3.7 - semver-diff: 3.1.1 - xdg-basedir: 4.0.0 - dev: true - - /upper-case-first/2.0.2: - resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} - dependencies: - tslib: 2.4.0 - dev: true - - /upper-case/2.0.2: - resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} - dependencies: - tslib: 2.4.0 - dev: true + browserslist: 4.21.5 + escalade: 3.1.1 + picocolors: 1.0.0 /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 - dev: true - - /url-parse-lax/3.0.0: - resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} - engines: {node: '>=4'} - dependencies: - prepend-http: 2.0.0 + punycode: 2.3.0 dev: true /url-parse/1.5.10: @@ -12169,7 +7713,7 @@ packages: dev: true /utils-merge/1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: false @@ -12188,14 +7732,14 @@ packages: hasBin: true dev: false - /uvu/0.5.3: - resolution: {integrity: sha512-brFwqA3FXzilmtnIyJ+CxdkInkY/i4ErvP7uV0DnUVxQcQ55reuHphorpF+tZoVHK2MniZ/VJzI7zJQoc9T9Yw==} + /uvu/0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} engines: {node: '>=8'} hasBin: true dependencies: - dequal: 2.0.2 + dequal: 2.0.3 diff: 5.1.0 - kleur: 4.1.4 + kleur: 4.1.5 sade: 1.8.1 dev: false @@ -12203,65 +7747,39 @@ packages: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true - /v8-compile-cache/2.3.0: - resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} - dev: true - - /v8-to-istanbul/9.0.0: - resolution: {integrity: sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==} + /v8-to-istanbul/9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.10 + '@jridgewell/trace-mapping': 0.3.17 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 dev: true - /valid-url/1.0.9: - resolution: {integrity: sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA==} - dev: true - - /validate-npm-package-license/3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - dependencies: - spdx-correct: 3.1.1 - spdx-expression-parse: 3.0.1 - dev: true - - /validator/13.7.0: - resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==} + /validator/13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==} engines: {node: '>= 0.10'} dev: false - /value-or-promise/1.0.11: - resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} - engines: {node: '>=12'} - /vary/1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: false - /vfile-location/4.0.1: - resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==} + /vfile-message/3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: '@types/unist': 2.0.6 - vfile: 5.3.2 + unist-util-stringify-position: 3.0.3 dev: false - /vfile-message/3.1.2: - resolution: {integrity: sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==} - dependencies: - '@types/unist': 2.0.6 - unist-util-stringify-position: 3.0.2 - dev: false - - /vfile/5.3.2: - resolution: {integrity: sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==} + /vfile/5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: '@types/unist': 2.0.6 is-buffer: 2.0.5 - unist-util-stringify-position: 3.0.2 - vfile-message: 3.1.2 + unist-util-stringify-position: 3.0.3 + vfile-message: 3.1.4 dev: false /w3c-xmlserializer/4.0.0: @@ -12271,6 +7789,10 @@ packages: xml-name-validator: 4.0.0 dev: true + /wait-for-expect/3.0.2: + resolution: {integrity: sha512-cfS1+DZxuav1aBYbaO/kE06EOS8yRw7qOFoD3XtjTkYvCvh3zUvNST8DXK/nPaeqIzIv3P3kL3lRJn8iwOiSag==} + dev: true + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -12280,7 +7802,7 @@ packages: /wcwidth/1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: - defaults: 1.0.3 + defaults: 1.0.4 dev: true /web-encoding/1.1.5: @@ -12294,12 +7816,7 @@ packages: /web-streams-polyfill/3.2.1: resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} engines: {node: '>= 8'} - dev: true - - /web-streams-polyfill/4.0.0-beta.1: - resolution: {integrity: sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ==} - engines: {node: '>= 12'} - dev: true + dev: false /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} @@ -12322,6 +7839,7 @@ packages: /whatwg-mimetype/3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} + dev: true /whatwg-url/11.0.0: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} @@ -12356,10 +7874,6 @@ packages: is-weakset: 2.0.2 dev: true - /which-module/2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} - dev: true - /which-typed-array/1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} engines: {node: '>= 0.4'} @@ -12372,13 +7886,6 @@ packages: is-typed-array: 1.1.10 dev: true - /which/1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -12393,33 +7900,27 @@ packages: string-width: 4.2.3 dev: false - /widest-line/3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.3 - dev: true - /winston-transport/4.5.0: resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} engines: {node: '>= 6.4.0'} dependencies: - logform: 2.4.0 + logform: 2.5.1 readable-stream: 3.6.0 triple-beam: 1.3.0 dev: false - /winston/3.7.2: - resolution: {integrity: sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng==} + /winston/3.8.2: + resolution: {integrity: sha512-MsE1gRx1m5jdTTO9Ld/vND4krP2To+lgDoMEHGGa4HIlAUyXJtfc7CxQcGXVyz2IBpw5hbFkj2b/AtUdQwyRew==} engines: {node: '>= 12.0.0'} dependencies: + '@colors/colors': 1.5.0 '@dabh/diagnostics': 2.0.3 async: 3.2.4 is-stream: 2.0.1 - logform: 2.4.0 + logform: 2.5.1 one-time: 1.0.0 readable-stream: 3.6.0 - safe-stable-stringify: 2.3.1 + safe-stable-stringify: 2.4.2 stack-trace: 0.0.10 triple-beam: 1.3.0 winston-transport: 4.5.0 @@ -12430,23 +7931,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /wrap-ansi/3.0.1: - resolution: {integrity: sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==} - engines: {node: '>=4'} - dependencies: - string-width: 2.1.1 - strip-ansi: 4.0.0 - dev: true - - /wrap-ansi/6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - dev: true - /wrap-ansi/7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -12454,33 +7938,25 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - - /write-file-atomic/4.0.1: - resolution: {integrity: sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==} - engines: {node: ^12.13.0 || ^14.15.0 || >=16} + /write-file-atomic/4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 dev: true - /ws/8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + /ws/8.12.1: + resolution: {integrity: sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -12488,134 +7964,52 @@ packages: optional: true dev: true - /ws/8.8.0: - resolution: {integrity: sha512-JDAgSYQ1ksuwqfChJusw1LSJ8BizJ2e/vVu5Lxjq3YvNJNlROv1ui4i+c/kUUrPheBvQl4c5UbERhTwKa6QBJQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xdg-basedir/4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: true - /xml-name-validator/4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /xml2js/0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} - engines: {node: '>=4.0.0'} - dependencies: - sax: 1.2.4 - xmlbuilder: 11.0.1 - dev: false - - /xmlbuilder/11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: false - /xmlchars/2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true - /xss/1.0.13: - resolution: {integrity: sha512-clu7dxTm1e8Mo5fz3n/oW3UCXBfV89xZ72jM8yzo1vR/pIS0w3sgB3XV2H8Vm6zfGnHL0FzvLJPJEBhd86/z4Q==} - engines: {node: '>= 0.10.0'} - hasBin: true - dependencies: - commander: 2.20.3 - cssfilter: 0.0.10 - dev: false - /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} - /y18n/4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true - /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} + dev: true + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - /yaml-ast-parser/0.0.43: - resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} - dev: true - /yaml/1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} + dev: false - /yargs-parser/18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true - - /yargs-parser/20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - - /yargs-parser/21.0.1: - resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - - /yargs/15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.0 - y18n: 4.0.3 - yargs-parser: 18.1.3 dev: true - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + /yargs/17.7.0: + resolution: {integrity: sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==} + engines: {node: '>=12'} dependencies: - cliui: 7.0.4 + cliui: 8.0.1 escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 - - /yargs/17.4.1: - resolution: {integrity: sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g==} - engines: {node: '>=12'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.0.1 + yargs-parser: 21.1.1 + dev: true /yn/3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} @@ -12627,18 +8021,8 @@ packages: engines: {node: '>=10'} dev: true - /zen-observable-ts/1.2.5: - resolution: {integrity: sha512-QZWQekv6iB72Naeake9hS1KxHlotfRpe+WGNbNx5/ta+R3DNjVO2bswf63gXlWDcs+EMd7XY8HfVQyP1X6T4Zg==} - dependencies: - zen-observable: 0.8.15 - dev: false - - /zen-observable/0.8.15: - resolution: {integrity: sha512-PQ2PC7R9rslx84ndNBZB/Dkv8V8fZEpk83RLgXtYd0fwUgEjseMn1Dgajh2x6S8QbZAFa9p2qVCEuYZNgve0dQ==} - dev: false - - /zod/3.19.1: - resolution: {integrity: sha512-LYjZsEDhCdYET9ikFu6dVPGp2YH9DegXjdJToSzD9rO6fy4qiRYFoyEYwps88OseJlPyl2NOe2iJuhEhL7IpEA==} + /zod/3.20.6: + resolution: {integrity: sha512-oyu0m54SGCtzh6EClBVqDDlAYRz4jrVtKwQ7ZnsEmMI9HnzuZFj8QFwAY1M5uniIYACdGvv0PBWPF2kO0aNofA==} dev: false /zustand/3.7.2_react@18.2.0: @@ -12653,6 +8037,6 @@ packages: react: 18.2.0 dev: false - /zwitch/2.0.2: - resolution: {integrity: sha512-JZxotl7SxAJH0j7dN4pxsTV6ZLXoLdGME+PsjkL/DaBrVryK9kTGq06GfKrwcSOqypP+fdXGoCHE36b99fWVoA==} + /zwitch/2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml deleted file mode 100644 index 9c9be4ba..00000000 --- a/pnpm-workspace.yaml +++ /dev/null @@ -1,2 +0,0 @@ -packages: - - "packages/**" diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 00000000..38ff4557 --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,69 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model App { + id String @id(map: "PK_9478629fc093d229df09e560aea") @unique(map: "UQ_9478629fc093d229df09e560aea") @db.VarChar + status app_status_enum @default(stopped) + lastOpened DateTime? @default(now()) @db.Timestamptz(6) + numOpened Int @default(0) + config Json + createdAt DateTime @default(now()) @db.Timestamp(6) + updatedAt DateTime @default(now()) @db.Timestamp(6) + version Int @default(1) + exposed Boolean @default(false) + domain String? @db.VarChar + + @@map("app") +} + +model Migrations { + id Int @id + name String @unique @db.VarChar(100) + hash String @db.VarChar(40) + executed_at DateTime? @default(now()) @db.Timestamp(6) + + @@map("migrations") +} + +model Update { + id Int @id(map: "PK_575f77a0576d6293bc1cb752847") @default(autoincrement()) + name String @unique(map: "UQ_6e7d7ecccdc972caa0ad33cb014") @db.VarChar + status update_status_enum + createdAt DateTime @default(now()) @db.Timestamp(6) + updatedAt DateTime @default(now()) @db.Timestamp(6) + + @@map("update") +} + +model User { + id Int @id(map: "PK_cace4a159ff9f2512dd42373760") @default(autoincrement()) + username String @unique(map: "UQ_78a916df40e02a9deb1c4b75edb") @db.VarChar + password String @db.VarChar + createdAt DateTime @default(now()) @db.Timestamp(6) + updatedAt DateTime @default(now()) @db.Timestamp(6) + operator Boolean @default(false) + + @@map("user") +} + +enum app_status_enum { + running + stopped + installing + uninstalling + stopping + starting + missing + updating +} + +enum update_status_enum { + FAILED + SUCCESS +} diff --git a/packages/dashboard/public/android-chrome-192x192.png b/public/android-chrome-192x192.png similarity index 100% rename from packages/dashboard/public/android-chrome-192x192.png rename to public/android-chrome-192x192.png diff --git a/packages/dashboard/public/android-chrome-512x512.png b/public/android-chrome-512x512.png similarity index 100% rename from packages/dashboard/public/android-chrome-512x512.png rename to public/android-chrome-512x512.png diff --git a/packages/dashboard/public/apple-touch-icon.png b/public/apple-touch-icon.png similarity index 100% rename from packages/dashboard/public/apple-touch-icon.png rename to public/apple-touch-icon.png diff --git a/packages/dashboard/public/browserconfig.xml b/public/browserconfig.xml similarity index 100% rename from packages/dashboard/public/browserconfig.xml rename to public/browserconfig.xml diff --git a/packages/dashboard/public/empty.svg b/public/empty.svg similarity index 100% rename from packages/dashboard/public/empty.svg rename to public/empty.svg diff --git a/packages/dashboard/public/error.png b/public/error.png similarity index 100% rename from packages/dashboard/public/error.png rename to public/error.png diff --git a/packages/dashboard/public/favicon-16x16.png b/public/favicon-16x16.png similarity index 100% rename from packages/dashboard/public/favicon-16x16.png rename to public/favicon-16x16.png diff --git a/packages/dashboard/public/favicon-32x32.png b/public/favicon-32x32.png similarity index 100% rename from packages/dashboard/public/favicon-32x32.png rename to public/favicon-32x32.png diff --git a/packages/dashboard/public/favicon.ico b/public/favicon.ico similarity index 100% rename from packages/dashboard/public/favicon.ico rename to public/favicon.ico diff --git a/packages/dashboard/public/mockServiceWorker.js b/public/mockServiceWorker.js similarity index 99% rename from packages/dashboard/public/mockServiceWorker.js rename to public/mockServiceWorker.js index 4ed73191..a8aa7b55 100644 --- a/packages/dashboard/public/mockServiceWorker.js +++ b/public/mockServiceWorker.js @@ -2,7 +2,7 @@ /* tslint:disable */ /** - * Mock Service Worker (0.49.1). + * Mock Service Worker (1.0.1). * @see https://github.com/mswjs/msw * - Please do NOT modify this file. * - Please do NOT serve this file on production. diff --git a/packages/dashboard/public/mstile-150x150.png b/public/mstile-150x150.png similarity index 100% rename from packages/dashboard/public/mstile-150x150.png rename to public/mstile-150x150.png diff --git a/packages/dashboard/public/placeholder.png b/public/placeholder.png similarity index 100% rename from packages/dashboard/public/placeholder.png rename to public/placeholder.png diff --git a/packages/dashboard/public/safari-pinned-tab.svg b/public/safari-pinned-tab.svg similarity index 100% rename from packages/dashboard/public/safari-pinned-tab.svg rename to public/safari-pinned-tab.svg diff --git a/packages/dashboard/public/site.webmanifest b/public/site.webmanifest similarity index 100% rename from packages/dashboard/public/site.webmanifest rename to public/site.webmanifest diff --git a/packages/dashboard/public/tipi.png b/public/tipi.png similarity index 100% rename from packages/dashboard/public/tipi.png rename to public/tipi.png diff --git a/repos/.gitkeep b/repos/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/scripts/app.sh b/scripts/app.sh index 32360e16..5960f847 100755 --- a/scripts/app.sh +++ b/scripts/app.sh @@ -83,6 +83,18 @@ compose() { local common_compose_file="${ROOT_FOLDER}/repos/${REPO_ID}/apps/docker-compose.common.yml" + local user_compose_file="${ROOT_FOLDER}/user-config/${app}/docker-compose.yml" + local user_compose_args= + if [[ -f ${user_compose_file} ]]; then + user_compose_args="--file ${user_compose_file}" + fi + + local user_env_file="${ROOT_FOLDER}/user-config/${app}/app.env" + local user_env_args= + if [[ -f ${user_env_file} ]]; then + user_env_args="--env-file ${user_env_file}" + fi + # Vars to use in compose file export APP_DATA_DIR="${STORAGE_PATH}/app-data/${app}" export ROOT_FOLDER_HOST="${ROOT_FOLDER_HOST}" @@ -93,9 +105,11 @@ compose() { docker compose \ --env-file "${app_data_dir}/app.env" \ + ${user_env_args} \ --project-name "${app}" \ --file "${app_compose_file}" \ --file "${common_compose_file}" \ + ${user_compose_args} \ "${@}" } diff --git a/scripts/common.sh b/scripts/common.sh index f0b0f4b5..84ba7b4b 100644 --- a/scripts/common.sh +++ b/scripts/common.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash +ROOT_FOLDER="${PWD}" # Get field from json file function get_json_field() { local json_file="$1" diff --git a/scripts/install.sh b/scripts/install.sh index dbb8e7e0..a11a852a 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -4,6 +4,15 @@ set -o nounset set -o pipefail echo "Installing runtipi..." + +ARCHITECTURE="$(uname -m)" +# Not supported on 32 bits systems +if [[ "$ARCHITECTURE" == "armv7"* ]] || [[ "$ARCHITECTURE" == "i686" ]] || [[ "$ARCHITECTURE" == "i386" ]]; then + echo "runtipi is not supported on 32 bits systems" + exit 1 +fi + + LATEST_VERSION=$(curl -s https://api.github.com/repos/meienberger/runtipi/releases/latest | grep tag_name | cut -d '"' -f4) ### -------------------------------- @@ -65,7 +74,11 @@ if [ -f "package.json" ]; then fi cp -r runtipi-"${LATEST_VERSION}"/package.json . +mkdir -p apps +mkdir -p app-data mkdir -p state +mkdir -p repos + mkdir -p media/torrents mkdir -p media/torrents/watch mkdir -p media/torrents/completed diff --git a/scripts/reset-password.sh b/scripts/reset-password.sh new file mode 100755 index 00000000..64502cfb --- /dev/null +++ b/scripts/reset-password.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -euo pipefail + +source "${BASH_SOURCE%/*}/common.sh" + +ensure_pwd + +ROOT_FOLDER="$(pwd)" +STATE_FOLDER="${ROOT_FOLDER}/state" + +# Create file request-password-change in state folder +touch "${STATE_FOLDER}/password-change-request" diff --git a/scripts/start-dev.sh b/scripts/start-dev.sh index ccbb35b5..ce40878f 100755 --- a/scripts/start-dev.sh +++ b/scripts/start-dev.sh @@ -8,6 +8,8 @@ fi source "${BASH_SOURCE%/*}/common.sh" +clean_logs + ### -------------------------------- ### General variables ### -------------------------------- @@ -22,6 +24,11 @@ ARCHITECTURE="$(uname -m)" TZ="UTC" JWT_SECRET=secret POSTGRES_PASSWORD=postgres +POSTGRES_USERNAME=tipi +POSTGRES_DBNAME=tipi +POSTGRES_PORT=5432 +POSTGRES_HOST=tipi-db +REDIS_HOST=tipi-redis TIPI_VERSION=$(get_json_field "${ROOT_FOLDER}/package.json" version) INTERNAL_IP=localhost storage_path="${ROOT_FOLDER}" @@ -96,11 +103,16 @@ for template in ${ENV_FILE}; do sed "${sed_args[@]}" "s//${ARCHITECTURE}/g" "${template}" sed "${sed_args[@]}" "s//${NGINX_PORT}/g" "${template}" sed "${sed_args[@]}" "s//${NGINX_PORT_SSL}/g" "${template}" - sed "${sed_args[@]}" "s//${POSTGRES_PASSWORD}/g" "${template}" sed "${sed_args[@]}" "s//${REPO_ID}/g" "${template}" sed "${sed_args[@]}" "s//${APPS_REPOSITORY_ESCAPED}/g" "${template}" sed "${sed_args[@]}" "s//${DOMAIN}/g" "${template}" sed "${sed_args[@]}" "s//${STORAGE_PATH_ESCAPED}/g" "${template}" + sed "${sed_args[@]}" "s//${POSTGRES_PASSWORD}/g" "${template}" + sed "${sed_args[@]}" "s//${POSTGRES_USERNAME}/g" "${template}" + sed "${sed_args[@]}" "s//${POSTGRES_DBNAME}/g" "${template}" + sed "${sed_args[@]}" "s//${POSTGRES_PORT}/g" "${template}" + sed "${sed_args[@]}" "s//${POSTGRES_HOST}/g" "${template}" + sed "${sed_args[@]}" "s//${REDIS_HOST}/g" "${template}" done mv -f "$ENV_FILE" "$ROOT_FOLDER/.env.dev" diff --git a/scripts/start.sh b/scripts/start.sh index 1d91ce60..0de85a5c 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -43,47 +43,31 @@ NGINX_PORT_SSL=443 DOMAIN=tipi.localhost SED_ROOT_FOLDER="$(echo "$ROOT_FOLDER" | sed 's/\//\\\//g')" DNS_IP="9.9.9.9" # Default to Quad9 DNS -ARCHITECTURE="$(uname -m)" +ARCHITECTURE="$(uname -m | tr '[:upper:]' '[:lower:]')" apps_repository="https://github.com/meienberger/runtipi-appstore" REPO_ID="$("${ROOT_FOLDER}"/scripts/git.sh get_hash ${apps_repository})" APPS_REPOSITORY_ESCAPED="$(echo ${apps_repository} | sed 's/\//\\\//g')" JWT_SECRET=$(derive_entropy "jwt") POSTGRES_PASSWORD=$(derive_entropy "postgres") +POSTGRES_USERNAME=tipi +POSTGRES_DBNAME=tipi +POSTGRES_PORT=5432 +POSTGRES_HOST=tipi-db TIPI_VERSION=$(get_json_field "${ROOT_FOLDER}/package.json" version) storage_path="${ROOT_FOLDER}" STORAGE_PATH_ESCAPED="$(echo "${storage_path}" | sed 's/\//\\\//g')" -NETWORK_INTERFACE="$(ip route | grep default | awk '{print $5}' | uniq)" -NETWORK_INTERFACE_COUNT=$(echo "$NETWORK_INTERFACE" | wc -l) +REDIS_HOST=tipi-redis +INTERNAL_IP= -if [[ "$NETWORK_INTERFACE_COUNT" -eq 0 ]]; then - echo "No network interface found!" - exit 1 -elif [[ "$NETWORK_INTERFACE_COUNT" -gt 1 ]]; then - echo "Found multiple network interfaces. Please select one of the following interfaces:" - echo "$NETWORK_INTERFACE" - while true; do - read -rp "> " USER_NETWORK_INTERFACE - if echo "$NETWORK_INTERFACE" | grep -x "$USER_NETWORK_INTERFACE"; then - NETWORK_INTERFACE="$USER_NETWORK_INTERFACE" - break - else - echo "Please select one of the interfaces above. (CTRL+C to abort)" - fi - done -fi -INTERNAL_IP="$(ip addr show "${NETWORK_INTERFACE}" | grep "inet " | awk '{print $2}' | cut -d/ -f1)" - -if [[ "$ARCHITECTURE" == "aarch64" ]]; then +if [[ "$ARCHITECTURE" == "aarch64" ]] || [[ "$ARCHITECTURE" == "armv8"* ]]; then ARCHITECTURE="arm64" -elif [[ "$ARCHITECTURE" == "armv7"* || "$ARCHITECTURE" == "armv8"* ]]; then - ARCHITECTURE="arm" elif [[ "$ARCHITECTURE" == "x86_64" ]]; then ARCHITECTURE="amd64" fi # If none of the above conditions are met, the architecture is not supported -if [[ "$ARCHITECTURE" != "arm64" ]] && [[ "$ARCHITECTURE" != "arm" ]] && [[ "$ARCHITECTURE" != "amd64" ]]; then - echo "Architecture ${ARCHITECTURE} not supported!" +if [[ "$ARCHITECTURE" != "arm64" ]] && [[ "$ARCHITECTURE" != "amd64" ]]; then + echo "Architecture ${ARCHITECTURE} not supported if you think this is a mistake, please open an issue on GitHub." exit 1 fi @@ -147,6 +131,48 @@ while [ -n "${1-}" ]; do shift done +if [[ -z "${INTERNAL_IP:-}" ]]; then + network_interface="$(ip route | grep default | awk '{print $5}' | uniq)" + network_interface_count=$(echo "$network_interface" | wc -l) + + if [[ "$network_interface_count" -eq 0 ]]; then + echo "No network interface found!" + exit 1 + elif [[ "$network_interface_count" -gt 1 ]]; then + echo "Found multiple network interfaces. Please select one of the following interfaces:" + echo "$network_interface" + while true; do + read -rp "> " USER_NETWORK_INTERFACE + if echo "$network_interface" | grep -x "$USER_NETWORK_INTERFACE"; then + network_interface="$USER_NETWORK_INTERFACE" + break + else + echo "Please select one of the interfaces above. (CTRL+C to abort)" + fi + done + fi + + INTERNAL_IP="$(ip addr show "${network_interface}" | grep "inet " | awk '{print $2}' | cut -d/ -f1)" + internal_ip_count=$(echo "$INTERNAL_IP" | wc -l) + + if [[ "$internal_ip_count" -eq 0 ]]; then + echo "No IP address found for network interface ${network_interface}! Set the IP address manually with --listen-ip or with the listenIp field in settings.json." + exit 1 + elif [[ "$internal_ip_count" -gt 1 ]]; then + echo "Found multiple IP addresses for network interface ${network_interface}. Please select one of the following IP addresses:" + echo "$INTERNAL_IP" + while true; do + read -rp "> " USER_INTERNAL_IP + if echo "$INTERNAL_IP" | grep -x "$USER_INTERNAL_IP"; then + INTERNAL_IP="$USER_INTERNAL_IP" + break + else + echo "Please select one of the IP addresses above. (CTRL+C to abort)" + fi + done + fi +fi + # If port is not 80 and domain is not tipi.localhost, we exit if [[ "${NGINX_PORT}" != "80" ]] && [[ "${DOMAIN}" != "tipi.localhost" ]]; then echo "Using a custom domain with a custom port is not supported" @@ -229,10 +255,15 @@ for template in ${ENV_FILE}; do sed -i "s//${NGINX_PORT}/g" "${template}" sed -i "s//${NGINX_PORT_SSL}/g" "${template}" sed -i "s//${POSTGRES_PASSWORD}/g" "${template}" + sed -i "s//${POSTGRES_USERNAME}/g" "${template}" + sed -i "s//${POSTGRES_DBNAME}/g" "${template}" + sed -i "s//${POSTGRES_PORT}/g" "${template}" + sed -i "s//${POSTGRES_HOST}/g" "${template}" sed -i "s//${REPO_ID}/g" "${template}" sed -i "s//${APPS_REPOSITORY_ESCAPED}/g" "${template}" sed -i "s//${DOMAIN}/g" "${template}" sed -i "s//${STORAGE_PATH_ESCAPED}/g" "${template}" + sed -i "s//${REDIS_HOST}/g" "${template}" done mv -f "$ENV_FILE" "$ROOT_FOLDER/.env" diff --git a/sonar-project.properties b/sonar-project.properties index 99cb8101..da0d16d6 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,4 +1,4 @@ sonar.projectKey=runtipi sonar.sources=. -sonar.exclusions=.github/**, .vscode/**, **/__mocks__/**, **/__tests__/**, packages/system-api/src/test/** +sonar.exclusions=.github/**, .vscode/**, **/__mocks__/**, **/__tests__/** sonar.projectName=runtipi diff --git a/packages/dashboard/src/components/AppLogo/AppLogo.module.scss b/src/client/components/AppLogo/AppLogo.module.scss similarity index 100% rename from packages/dashboard/src/components/AppLogo/AppLogo.module.scss rename to src/client/components/AppLogo/AppLogo.module.scss diff --git a/packages/dashboard/src/components/AppLogo/AppLogo.tsx b/src/client/components/AppLogo/AppLogo.tsx similarity index 82% rename from packages/dashboard/src/components/AppLogo/AppLogo.tsx rename to src/client/components/AppLogo/AppLogo.tsx index b7a4e22e..860ff586 100644 --- a/packages/dashboard/src/components/AppLogo/AppLogo.tsx +++ b/src/client/components/AppLogo/AppLogo.tsx @@ -4,11 +4,7 @@ import { getUrl } from '../../core/helpers/url-helpers'; import styles from './AppLogo.module.scss'; export const AppLogo: React.FC<{ id?: string; size?: number; className?: string; alt?: string }> = ({ id, size = 80, className = '', alt = '' }) => { - let logoUrl = id ? `/api/apps/${id}/metadata/logo.jpg` : getUrl('placeholder.png'); - - if (process.env.NEXT_PUBLIC_API_MOCKING === 'enabled') { - logoUrl = getUrl('placeholder.png'); - } + const logoUrl = id ? `/static/apps/${id}/metadata/logo.jpg` : getUrl('placeholder.png'); return (
diff --git a/packages/dashboard/src/components/AppLogo/index.ts b/src/client/components/AppLogo/index.ts similarity index 100% rename from packages/dashboard/src/components/AppLogo/index.ts rename to src/client/components/AppLogo/index.ts diff --git a/packages/dashboard/src/components/AppStatus/AppStatus.module.scss b/src/client/components/AppStatus/AppStatus.module.scss similarity index 100% rename from packages/dashboard/src/components/AppStatus/AppStatus.module.scss rename to src/client/components/AppStatus/AppStatus.module.scss diff --git a/packages/dashboard/src/components/AppStatus/AppStatus.tsx b/src/client/components/AppStatus/AppStatus.tsx similarity index 64% rename from packages/dashboard/src/components/AppStatus/AppStatus.tsx rename to src/client/components/AppStatus/AppStatus.tsx index 228ea8e5..d687a9bc 100644 --- a/packages/dashboard/src/components/AppStatus/AppStatus.tsx +++ b/src/client/components/AppStatus/AppStatus.tsx @@ -1,14 +1,14 @@ import clsx from 'clsx'; import React from 'react'; +import * as AppTypes from '../../core/types'; import styles from './AppStatus.module.scss'; -import { AppStatusEnum } from '../../generated/graphql'; -export const AppStatus: React.FC<{ status: AppStatusEnum; lite?: boolean }> = ({ status, lite }) => { +export const AppStatus: React.FC<{ status: AppTypes.AppStatus; lite?: boolean }> = ({ status, lite }) => { const formattedStatus = `${status[0]}${status.substring(1, status.length).toLowerCase()}`; const classes = clsx('status-dot status-gray', { - 'status-dot-animated status-green': status === AppStatusEnum.Running, - 'status-red': status === AppStatusEnum.Stopped, + 'status-dot-animated status-green': status === 'running', + 'status-red': status === 'stopped', }); return ( diff --git a/packages/dashboard/src/components/AppStatus/index.tsx b/src/client/components/AppStatus/index.tsx similarity index 100% rename from packages/dashboard/src/components/AppStatus/index.tsx rename to src/client/components/AppStatus/index.tsx diff --git a/packages/dashboard/src/components/AppTile/AppTile.module.scss b/src/client/components/AppTile/AppTile.module.scss similarity index 100% rename from packages/dashboard/src/components/AppTile/AppTile.module.scss rename to src/client/components/AppTile/AppTile.module.scss diff --git a/packages/dashboard/src/components/AppTile/AppTile.tsx b/src/client/components/AppTile/AppTile.tsx similarity index 95% rename from packages/dashboard/src/components/AppTile/AppTile.tsx rename to src/client/components/AppTile/AppTile.tsx index 53574c95..348bf824 100644 --- a/packages/dashboard/src/components/AppTile/AppTile.tsx +++ b/src/client/components/AppTile/AppTile.tsx @@ -4,8 +4,8 @@ import { IconDownload } from '@tabler/icons'; import { AppStatus } from '../AppStatus'; import { AppLogo } from '../AppLogo/AppLogo'; import { limitText } from '../../modules/AppStore/helpers/table.helpers'; -import { AppInfo, AppStatusEnum } from '../../generated/graphql'; import styles from './AppTile.module.scss'; +import { AppInfo, AppStatus as AppStatusEnum } from '../../core/types'; type AppTileInfo = Pick; diff --git a/packages/dashboard/src/components/AppTile/index.tsx b/src/client/components/AppTile/index.tsx similarity index 100% rename from packages/dashboard/src/components/AppTile/index.tsx rename to src/client/components/AppTile/index.tsx diff --git a/packages/dashboard/src/components/Layout/Layout.module.scss b/src/client/components/Layout/Layout.module.scss similarity index 100% rename from packages/dashboard/src/components/Layout/Layout.module.scss rename to src/client/components/Layout/Layout.module.scss diff --git a/src/client/components/Layout/Layout.test.tsx b/src/client/components/Layout/Layout.test.tsx new file mode 100644 index 00000000..20721fc4 --- /dev/null +++ b/src/client/components/Layout/Layout.test.tsx @@ -0,0 +1,50 @@ +import React from 'react'; +import { render, screen, waitFor } from '../../../../tests/test-utils'; +import { getTRPCMock, getTRPCMockError } from '../../mocks/getTrpcMock'; +import { server } from '../../mocks/server'; +import { Layout } from './Layout'; + +const pushFn = jest.fn(); +jest.mock('next/router', () => { + const actualRouter = jest.requireActual('next-router-mock'); + + return { + ...actualRouter, + useRouter: () => ({ + ...actualRouter.useRouter(), + push: pushFn, + }), + }; +}); + +describe('Test: Layout', () => { + it('should render correctly its children', () => { + render(test); + + expect(screen.getByText('test')).toBeInTheDocument(); + }); + + it('should correctly set token in localStorage when refreshToken is called', async () => { + // Arranger + server.use(getTRPCMock({ path: ['auth', 'refreshToken'], type: 'mutation', response: { token: 'fake-token' } })); + render(test); + + // Act + await waitFor(() => { + expect(localStorage.getItem('token')).toBe('fake-token'); + }); + }); + + it('should remove token from local storage and redirect to login page on error', async () => { + // Arranger + server.use(getTRPCMockError({ path: ['auth', 'refreshToken'], type: 'mutation', message: 'fake-error' })); + render(test); + const removeItemSpy = jest.spyOn(localStorage, 'removeItem'); + + // Act + await waitFor(() => { + expect(removeItemSpy).toBeCalledWith('token'); + expect(pushFn).toBeCalledWith('/login'); + }); + }); +}); diff --git a/packages/dashboard/src/components/Layout/Layout.tsx b/src/client/components/Layout/Layout.tsx similarity index 76% rename from packages/dashboard/src/components/Layout/Layout.tsx rename to src/client/components/Layout/Layout.tsx index ab35eb1a..7e41962b 100644 --- a/packages/dashboard/src/components/Layout/Layout.tsx +++ b/src/client/components/Layout/Layout.tsx @@ -4,9 +4,11 @@ import React, { useEffect } from 'react'; import clsx from 'clsx'; import ReactTooltip from 'react-tooltip'; import semver from 'semver'; -import { useRefreshTokenQuery, useVersionQuery } from '../../generated/graphql'; +import { useRouter } from 'next/router'; import { Header } from '../ui/Header'; import styles from './Layout.module.scss'; +import { useSystemStore } from '../../state/systemStore'; +import { trpc } from '../../utils/trpc'; interface IProps { loading?: boolean; @@ -17,16 +19,24 @@ interface IProps { } export const Layout: React.FC = ({ children, breadcrumbs, title, actions }) => { - const { data } = useRefreshTokenQuery({ fetchPolicy: 'network-only' }); - const { data: dataVersion } = useVersionQuery({ nextFetchPolicy: 'network-only' }); - const defaultVersion = '0.0.0'; - const isLatest = semver.gte(dataVersion?.version.current || defaultVersion, dataVersion?.version.latest || defaultVersion); + const router = useRouter(); + const refreshToken = trpc.auth.refreshToken.useMutation({ + onSuccess: (data) => { + if (data?.token) localStorage.setItem('token', data.token); + }, + onError: () => { + localStorage.removeItem('token'); + router.push('/login'); + }, + }); useEffect(() => { - if (data?.refreshToken?.token) { - localStorage.setItem('token', data.refreshToken.token); - } - }, [data?.refreshToken?.token]); + refreshToken.mutate(); + }, []); + + const { version } = useSystemStore(); + const defaultVersion = '0.0.0'; + const isLatest = semver.gte(version?.current || defaultVersion, version?.latest || defaultVersion); const renderBreadcrumbs = () => { if (!breadcrumbs) { @@ -49,7 +59,7 @@ export const Layout: React.FC = ({ children, breadcrumbs, title, actions return (
- {title} - Tipi + {`${title} - Tipi`}
diff --git a/packages/dashboard/src/components/Layout/index.ts b/src/client/components/Layout/index.ts similarity index 100% rename from packages/dashboard/src/components/Layout/index.ts rename to src/client/components/Layout/index.ts diff --git a/packages/dashboard/src/components/Markdown/Markdown.tsx b/src/client/components/Markdown/Markdown.tsx similarity index 85% rename from packages/dashboard/src/components/Markdown/Markdown.tsx rename to src/client/components/Markdown/Markdown.tsx index 556f806e..ac6f87b9 100644 --- a/packages/dashboard/src/components/Markdown/Markdown.tsx +++ b/src/client/components/Markdown/Markdown.tsx @@ -1,8 +1,8 @@ +import clsx from 'clsx'; import React from 'react'; import ReactMarkdown from 'react-markdown'; import remarkBreaks from 'remark-breaks'; import remarkGfm from 'remark-gfm'; -import remarkMdx from 'remark-mdx'; const MarkdownImg = (props: Pick, HTMLImageElement>, 'key' | keyof React.ImgHTMLAttributes>) => (
@@ -13,9 +13,8 @@ const MarkdownImg = (props: Pick = ({ children, className }) => (

, // h2: (props) =>

, // h3: (props) =>

, // ul: (props) =>