diff --git a/.devcontainer/.p10k.zsh b/.devcontainer/.p10k.zsh index 75f4991d..9f55f4d9 100644 --- a/.devcontainer/.p10k.zsh +++ b/.devcontainer/.p10k.zsh @@ -1,8 +1,8 @@ -# Generated by Powerlevel10k configuration wizard on 2023-09-13 at 13:25 UTC. +# Generated by Powerlevel10k configuration wizard on 2023-10-16 at 13:51 UTC. # Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 48479. # Wizard options: awesome-patched + powerline, large icons, classic, unicode, light, -# 12h time, angled separators, sharp heads, sharp tails, 2 lines, solid, no frame, -# compact, many icons, concise, transient_prompt, instant_prompt=verbose. +# 24h time, angled separators, sharp heads, sharp tails, 2 lines, disconnected, +# left frame, compact, many icons, fluent, transient_prompt, instant_prompt=verbose. # Type `p10k configure` to generate another config. # # Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate @@ -37,7 +37,7 @@ vcs # git status # =========================[ Line #2 ]========================= newline # \n - prompt_char # prompt symbol + # prompt_char # prompt symbol ) # The list of segments shown on the right. Fill it with less important segments. @@ -95,7 +95,7 @@ midnight_commander # midnight commander shell (https://midnight-commander.org/) nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) chezmoi_shell # chezmoi shell (https://www.chezmoi.io/) - # vi_mode # vi mode (you don't need this if you've enabled prompt_char) + vi_mode # vi mode (you don't need this if you've enabled prompt_char) # vpn_ip # virtual private network indicator # load # CPU load # disk_usage # disk usage @@ -141,9 +141,9 @@ # Connect left prompt lines with these symbols. You'll probably want to use the same color # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX= - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX= + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%242F╭─' + typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%242F├─' + typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%242F╰─' # Connect right prompt lines with these symbols. typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= @@ -153,7 +153,7 @@ # '─'. The last two make it easier to see the alignment between left and right prompt and to # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false # for more compact prompt if using this option. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='─' + typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then @@ -504,7 +504,7 @@ # Custom icon. # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' # Custom prefix. - # typeset -g POWERLEVEL9K_VCS_PREFIX='%248Fon ' + typeset -g POWERLEVEL9K_VCS_PREFIX='%248Fon ' # Show status of repositories of these types. You can add svn and/or hg if you are # using them. If you do, your prompt may become slow even when your current directory @@ -524,7 +524,7 @@ # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=false + typeset -g POWERLEVEL9K_STATUS_OK=true typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' @@ -536,7 +536,7 @@ # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=false + typeset -g POWERLEVEL9K_STATUS_ERROR=true typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' @@ -565,7 +565,7 @@ # Custom icon. # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' # Custom prefix. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%248Ftook ' + typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%248Ftook ' #######################[ background_jobs: presence of background jobs ]####################### # Don't show the number of background jobs. @@ -941,7 +941,7 @@ # Custom icon. # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' # Custom prefix. - # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%248Fwith ' + typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%248Fwith ' ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### # Python virtual environment color. @@ -1372,7 +1372,7 @@ POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' # Custom prefix. - # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%248Fat ' + typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%248Fat ' #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# # Show aws only when the command you are typing invokes one of these tools. @@ -1562,7 +1562,7 @@ # Custom icon. # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' # Custom prefix. - # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%248Fin ' + typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%248Fin ' ###############################[ public_ip: public IP address ]############################### # Public IP color. @@ -1657,7 +1657,7 @@ # Current time color. typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%I:%M:%S %p}' + typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%H:%M:%S}' # If set to true, time will update when you hit enter. This way prompts for the past # commands will contain the start times of their commands as opposed to the default # behavior where they contain the end times of their preceding commands. @@ -1665,7 +1665,7 @@ # Custom icon. # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' # Custom prefix. - # typeset -g POWERLEVEL9K_TIME_PREFIX='%248Fat ' + typeset -g POWERLEVEL9K_TIME_PREFIX='%248Fat ' # Example of a user-defined prompt segment. Function prompt_example will be called on every # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or diff --git a/.devcontainer/.zshrc b/.devcontainer/.zshrc index e92ae1ef..170b6cfd 100644 --- a/.devcontainer/.zshrc +++ b/.devcontainer/.zshrc @@ -77,7 +77,7 @@ ZSH_THEME="powerlevel10k/powerlevel10k" # Custom plugins may be added to $ZSH_CUSTOM/plugins/ # Example format: plugins=(rails git textmate ruby lighthouse) # Add wisely, as too many plugins slow down shell startup. -plugins=(git) +plugins=(git zsh-autosuggestions) source $ZSH/oh-my-zsh.sh @@ -108,11 +108,12 @@ source $ZSH/oh-my-zsh.sh # alias ohmyzsh="mate ~/.oh-my-zsh" DISABLE_AUTO_UPDATE=true DISABLE_UPDATE_PROMPT=true -ZSH_THEME="powerlevel10k/powerlevel10k" - -# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. -[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh +POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true +source /home/node/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh # bun export BUN_INSTALL="$HOME/.bun" -export PATH=$BUN_INSTALL/bin:$PATH \ No newline at end of file +export PATH=$BUN_INSTALL/bin:$PATH + +# To customize prompt, run `p10k configure` or edit ~/.p10k.zsh. +[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 9a82d553..f48b8325 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -12,7 +12,5 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ RUN su node -c "npm install -g npm@latest" RUN su node -c "npm install -g prisma" -RUN /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - # Install bun RUN /bin/bash -c "curl -fsSL https://bun.sh/install | bash" \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 5040dfe1..a388e25a 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -33,11 +33,11 @@ }, // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "./scripts/install-zsh10k.sh && ./scripts/install-bun.sh && ./scripts/install-brew.sh && npm install", + "postCreateCommand": "bash ./scripts/install/install.sh", // Configure tool-specific properties. "customizations": { - "postCreateCommand": "./scripts/install-zsh10k.sh && ./scripts/install-bun.sh && ./scripts/install-brew.sh && npm install", + "postCreateCommand": "bash ./scripts/install/install.sh", "vscode": { "extensions": [ "formulahendry.auto-rename-tag", diff --git a/.git-hooks/commit-msg b/.git-hooks/commit-msg new file mode 100755 index 00000000..0ea01d05 --- /dev/null +++ b/.git-hooks/commit-msg @@ -0,0 +1,6 @@ +#!/bin/sh + +# fix for windows systems +PATH="/c/Program Files/nodejs:$HOME/AppData/Roaming/npm/:$PATH" + +git-conventional-commits commit-msg-hook "$1" \ No newline at end of file diff --git a/.github/workflows/nextjs_bundle_analysis.yml b/.github/workflows/nextjs_bundle_analysis.yml index b1a54ad7..357b0524 100644 --- a/.github/workflows/nextjs_bundle_analysis.yml +++ b/.github/workflows/nextjs_bundle_analysis.yml @@ -24,7 +24,7 @@ jobs: analyze: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install Node.js uses: actions/setup-node@v3 @@ -118,14 +118,14 @@ jobs: body-includes: "" - name: Create Comment - uses: peter-evans/create-or-update-comment@v2 + uses: peter-evans/create-or-update-comment@v3 if: success() && github.event.number && steps.fc.outputs.comment-id == 0 with: issue-number: ${{ github.event.number }} body: ${{ steps.get-comment-body.outputs.body }} - name: Update Comment - uses: peter-evans/create-or-update-comment@v2 + uses: peter-evans/create-or-update-comment@v3 if: success() && github.event.number && steps.fc.outputs.comment-id != 0 with: issue-number: ${{ github.event.number }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cbce7f8e..f20ddd7f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,5 +33,4 @@ jobs: - name: Release env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} run: npx semantic-release diff --git a/.gitignore b/.gitignore index e5e1ef75..35460ae5 100644 --- a/.gitignore +++ b/.gitignore @@ -24,7 +24,6 @@ yarn-error.log* .pnpm-debug.log* # local env files -.env .env.development.local .env.test.local .env.production.local diff --git a/README.md b/README.md index 0bd5982a..95a0665a 100644 --- a/README.md +++ b/README.md @@ -105,13 +105,6 @@ npm run dev 6. Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. -7. This project uses a git hook to enforce [conventional commits](https://github.com/qoomon/git-conventional-commits). To install the git hook, run the following command in the root directory of the project: - -```sh -brew install pre-commit -pre-commit install -t commit-msg -``` - ## 🚀 Deployment Easily deploy your Next.js app with [Vercel](https://vercel.com/new) by clicking the button below: diff --git a/bun.lockb b/bun.lockb deleted file mode 100755 index 3ba08894..00000000 Binary files a/bun.lockb and /dev/null differ diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 459e4325..91600a6c 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -2,7 +2,8 @@ version: "3.8" services: app: - image: #{DOCKER_DEPLOY_APP_IMAGE}# + image: DOCKER_DEPLOY_APP_IMAGE + container_name: #{PROJECT_NAME}#_app restart: unless-stopped logging: driver: "json-file" @@ -14,7 +15,8 @@ services: - "3000:3000" crons: - image: #{DOCKER_DEPLOY_CRONS_IMAGE}# + image: DOCKER_DEPLOY_CRONS_IMAGE + container_name: #{PROJECT_NAME}#_crons restart: unless-stopped logging: driver: "json-file" @@ -25,6 +27,7 @@ services: db: image: postgres:latest + container_name: #{PROJECT_NAME}#_db restart: unless-stopped volumes: - postgres-data:/var/lib/postgresql/data @@ -42,6 +45,7 @@ services: redis: restart: unless-stopped + container_name: #{PROJECT_NAME}#_redis image: redis:latest command: /bin/sh -c "redis-server --requirepass ${REDIS_PASSWORD}" logging: diff --git a/package-lock.json b/package-lock.json index 13dc10c1..1ab4238b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,13 +13,13 @@ "@hookform/resolvers": "^3.2.0", "@next-auth/prisma-adapter": "^1.0.7", "@next/bundle-analyzer": "^13.4.13", - "@prisma/client": "^5.1.1", + "@prisma/client": "^5.3.1", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.5", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-dropdown-menu": "^2.0.5", "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.6", "@semantic-release/changelog": "^6.0.3", @@ -28,30 +28,29 @@ "@semantic-release/github": "^9.0.4", "@semantic-release/npm": "^11.0.0", "@semantic-release/release-notes-generator": "^12.0.0", - "@t3-oss/env-nextjs": "^0.6.0", + "@t3-oss/env-nextjs": "^0.7.0", "@tanstack/react-query": "^4.32.6", "@testing-library/user-event": "^14.4.3", - "@trpc/client": "^10.38.2", - "@trpc/react-query": "^10.38.2", - "@trpc/server": "^10.38.2", + "@trpc/client": "^10.38.5", + "@trpc/react-query": "^10.38.5", + "@trpc/server": "^10.38.5", "bcryptjs": "^2.4.3", "class-variance-authority": "^0.7.0", "cli-spinner": "^0.2.10", "client-only": "^0.0.1", "clsx": "^2.0.0", "concurrently": "^8.2.1", - "cron": "^2.4.3", + "cron": "^3.0.0", "crypto-js": "^4.1.1", "dotenv": "^16.3.1", "ioredis": "^5.3.2", - "lucide-react": "^0.279.0", + "lucide-react": "^0.287.0", "negotiator": "^0.6.3", "next": "^13.4.19", "next-auth": "^4.23.1", "next-compose-plugins": "^2.2.1", "next-themes": "^0.2.1", "nodemailer": "^6.9.5", - "prisma": "^5.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", @@ -59,7 +58,7 @@ "request-ip": "^3.3.0", "server-only": "^0.0.1", "sharp": "^0.32.5", - "superjson": "^1.13.1", + "superjson": "^2.0.0", "tailwind-merge": "^1.14.0", "tailwindcss-animate": "^1.0.6", "ua-parser-js": "^1.0.35", @@ -81,14 +80,14 @@ "@types/nodemailer": "^6.4.10", "@types/react": "^18.2.19", "@types/react-dom": "^18.2.7", - "@types/request-ip": "^0.0.38", + "@types/request-ip": "^0.0.39", "@types/ua-parser-js": "^0.7.36", "@typescript-eslint/eslint-plugin": "^6.3.0", "@typescript-eslint/parser": "^6.3.0", "autoprefixer": "^10.4.15", "babel-plugin-styled-components": "^2.1.4", "cross-env": "^7.0.3", - "eslint": "8.49.0", + "eslint": "8.51.0", "eslint-config-next": "^13.4.13", "eslint-config-prettier": "^9.0.0", "eslint-config-react-app": "^7.0.1", @@ -97,6 +96,7 @@ "eslint-plugin-tailwindcss": "^3.13.0", "eslint-plugin-unused-imports": "^3.0.0", "fetch-mock": "^9.11.0", + "git-conventional-commits": "^2.6.5", "isomorphic-fetch": "^3.0.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.7.0", @@ -105,6 +105,7 @@ "postinstall-postinstall": "^2.1.0", "prettier": "3.0.3", "prettier-plugin-tailwindcss": "^0.5.4", + "prisma": "^5.3.1", "semantic-release": "^22.0.0", "tailwindcss": "^3.3.3", "ts-jest": "^29.1.1", @@ -231,9 +232,9 @@ } }, "node_modules/@babel/core": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.0.tgz", - "integrity": "sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", + "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", @@ -241,10 +242,10 @@ "@babel/generator": "^7.23.0", "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.0", + "@babel/helpers": "^7.23.2", "@babel/parser": "^7.23.0", "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.0", + "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -613,13 +614,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", - "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", "dev": true, "dependencies": { "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.0", + "@babel/traverse": "^7.23.2", "@babel/types": "^7.23.0" }, "engines": { @@ -2240,9 +2241,9 @@ } }, "node_modules/@babel/traverse": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", - "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.22.13", @@ -2780,9 +2781,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -2831,9 +2832,9 @@ } }, "node_modules/@hookform/resolvers": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.3.1.tgz", - "integrity": "sha512-K7KCKRKjymxIB90nHDQ7b9nli474ru99ZbqxiqDAWYsYhOsU3/4qLxW91y+1n04ic13ajjZ66L3aXbNef8PELQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.3.2.tgz", + "integrity": "sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA==", "peerDependencies": { "react-hook-form": "^7.0.0" } @@ -3636,22 +3637,22 @@ } }, "node_modules/@next/bundle-analyzer": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.5.3.tgz", - "integrity": "sha512-AUHl9hu/0SNo2TCu9awOGY5hJdQHTPThYbjKk3rmjL04GfYAotn5i5pFQGqe209mbCxtu+QnvMEHLXU4GdFi1Q==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/bundle-analyzer/-/bundle-analyzer-13.5.4.tgz", + "integrity": "sha512-2vgmkuSKyTiyI7NorL+zYerxQRvzmSGbCDr2/kVrbKX28a4UNhbYn8/cQW8z6pvx0EncEFpd0GCUA5r9aRLhJg==", "dependencies": { "webpack-bundle-analyzer": "4.7.0" } }, "node_modules/@next/env": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.3.tgz", - "integrity": "sha512-X4te86vsbjsB7iO4usY9jLPtZ827Mbx+WcwNBGUOIuswuTAKQtzsuoxc/6KLxCMvogKG795MhrR1LDhYgDvasg==" + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-13.5.4.tgz", + "integrity": "sha512-LGegJkMvRNw90WWphGJ3RMHMVplYcOfRWf2Be3td3sUa+1AaxmsYyANsA+znrGCBjXJNi4XAQlSoEfUxs/4kIQ==" }, "node_modules/@next/eslint-plugin-next": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.3.tgz", - "integrity": "sha512-lbZOoEjzSuTtpk9UgV9rOmxYw+PsSfNR+00mZcInqooiDMZ1u+RqT1YQYLsEZPW1kumZoQe5+exkCBtZ2xn0uw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.5.4.tgz", + "integrity": "sha512-vI94U+D7RNgX6XypSyjeFrOzxGlZyxOplU0dVE5norIfZGn/LDjJYPHdvdsR5vN1eRtl6PDAsOHmycFEOljK5A==", "dev": true, "dependencies": { "glob": "7.1.7" @@ -3678,9 +3679,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.3.tgz", - "integrity": "sha512-6hiYNJxJmyYvvKGrVThzo4nTcqvqUTA/JvKim7Auaj33NexDqSNwN5YrrQu+QhZJCIpv2tULSHt+lf+rUflLSw==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.4.tgz", + "integrity": "sha512-Df8SHuXgF1p+aonBMcDPEsaahNo2TCwuie7VXED4FVyECvdXfRT9unapm54NssV9tF3OQFKBFOdlje4T43VO0w==", "cpu": [ "arm64" ], @@ -3693,9 +3694,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.3.tgz", - "integrity": "sha512-UpBKxu2ob9scbpJyEq/xPgpdrgBgN3aLYlxyGqlYX5/KnwpJpFuIHU2lx8upQQ7L+MEmz+fA1XSgesoK92ppwQ==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.4.tgz", + "integrity": "sha512-siPuUwO45PnNRMeZnSa8n/Lye5ZX93IJom9wQRB5DEOdFrw0JjOMu1GINB8jAEdwa7Vdyn1oJ2xGNaQpdQQ9Pw==", "cpu": [ "x64" ], @@ -3708,9 +3709,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.3.tgz", - "integrity": "sha512-5AzM7Yx1Ky+oLY6pHs7tjONTF22JirDPd5Jw/3/NazJ73uGB05NqhGhB4SbeCchg7SlVYVBeRMrMSZwJwq/xoA==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.4.tgz", + "integrity": "sha512-l/k/fvRP/zmB2jkFMfefmFkyZbDkYW0mRM/LB+tH5u9pB98WsHXC0WvDHlGCYp3CH/jlkJPL7gN8nkTQVrQ/2w==", "cpu": [ "arm64" ], @@ -3723,9 +3724,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.3.tgz", - "integrity": "sha512-A/C1shbyUhj7wRtokmn73eBksjTM7fFQoY2v/0rTM5wehpkjQRLOXI8WJsag2uLhnZ4ii5OzR1rFPwoD9cvOgA==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.4.tgz", + "integrity": "sha512-YYGb7SlLkI+XqfQa8VPErljb7k9nUnhhRrVaOdfJNCaQnHBcvbT7cx/UjDQLdleJcfyg1Hkn5YSSIeVfjgmkTg==", "cpu": [ "arm64" ], @@ -3738,9 +3739,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.3.tgz", - "integrity": "sha512-FubPuw/Boz8tKkk+5eOuDHOpk36F80rbgxlx4+xty/U71e3wZZxVYHfZXmf0IRToBn1Crb8WvLM9OYj/Ur815g==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.4.tgz", + "integrity": "sha512-uE61vyUSClnCH18YHjA8tE1prr/PBFlBFhxBZis4XBRJoR+txAky5d7gGNUIbQ8sZZ7LVkSVgm/5Fc7mwXmRAg==", "cpu": [ "x64" ], @@ -3753,9 +3754,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.3.tgz", - "integrity": "sha512-DPw8nFuM1uEpbX47tM3wiXIR0Qa+atSzs9Q3peY1urkhofx44o7E1svnq+a5Q0r8lAcssLrwiM+OyJJgV/oj7g==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.4.tgz", + "integrity": "sha512-qVEKFYML/GvJSy9CfYqAdUexA6M5AklYcQCW+8JECmkQHGoPxCf04iMh7CPR7wkHyWWK+XLt4Ja7hhsPJtSnhg==", "cpu": [ "x64" ], @@ -3768,9 +3769,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.3.tgz", - "integrity": "sha512-zBPSP8cHL51Gub/YV8UUePW7AVGukp2D8JU93IHbVDu2qmhFAn9LWXiOOLKplZQKxnIPUkJTQAJDCWBWU4UWUA==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.4.tgz", + "integrity": "sha512-mDSQfqxAlfpeZOLPxLymZkX0hYF3juN57W6vFHTvwKlnHfmh12Pt7hPIRLYIShk8uYRsKPtMTth/EzpwRI+u8w==", "cpu": [ "arm64" ], @@ -3783,9 +3784,9 @@ } }, "node_modules/@next/swc-win32-ia32-msvc": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.3.tgz", - "integrity": "sha512-ONcL/lYyGUj4W37D4I2I450SZtSenmFAvapkJQNIJhrPMhzDU/AdfLkW98NvH1D2+7FXwe7yclf3+B7v28uzBQ==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.4.tgz", + "integrity": "sha512-aoqAT2XIekIWoriwzOmGFAvTtVY5O7JjV21giozBTP5c6uZhpvTWRbmHXbmsjZqY4HnEZQRXWkSAppsIBweKqw==", "cpu": [ "ia32" ], @@ -3798,9 +3799,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.3.tgz", - "integrity": "sha512-2Vz2tYWaLqJvLcWbbTlJ5k9AN6JD7a5CN2pAeIzpbecK8ZF/yobA39cXtv6e+Z8c5UJuVOmaTldEAIxvsIux/Q==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.4.tgz", + "integrity": "sha512-cyRvlAxwlddlqeB9xtPSfNSCRy8BOa4wtMo0IuI9P7Y0XT2qpDrpFKRyZ7kUngZis59mPVla5k8X1oOJ8RxDYg==", "cpu": [ "x64" ], @@ -4145,12 +4146,12 @@ "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" }, "node_modules/@prisma/client": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.3.1.tgz", - "integrity": "sha512-ArOKjHwdFZIe1cGU56oIfy7wRuTn0FfZjGuU/AjgEBOQh+4rDkB6nF+AGHP8KaVpkBIiHGPQh3IpwQ3xDMdO0Q==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.4.2.tgz", + "integrity": "sha512-2xsPaz4EaMKj1WS9iW6MlPhmbqtBsXAOeVttSePp8vTFTtvzh2hZbDgswwBdSCgPzmmwF+tLB259QzggvCmJqA==", "hasInstallScript": true, "dependencies": { - "@prisma/engines-version": "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59" + "@prisma/engines-version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574" }, "engines": { "node": ">=16.13" @@ -4165,15 +4166,16 @@ } }, "node_modules/@prisma/engines": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.3.1.tgz", - "integrity": "sha512-6QkILNyfeeN67BNEPEtkgh3Xo2tm6D7V+UhrkBbRHqKw9CTaz/vvTP/ROwYSP/3JT2MtIutZm/EnhxUiuOPVDA==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.4.2.tgz", + "integrity": "sha512-fqeucJ3LH0e1eyFdT0zRx+oETLancu5+n4lhiYECyEz6H2RDskPJHJYHkVc0LhkU4Uv7fuEnppKU3nVKNzMh8g==", + "devOptional": true, "hasInstallScript": true }, "node_modules/@prisma/engines-version": { - "version": "5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.3.1-2.61e140623197a131c2a6189271ffee05a7aa9a59.tgz", - "integrity": "sha512-y5qbUi3ql2Xg7XraqcXEdMHh0MocBfnBzDn5GbV1xk23S3Mq8MGs+VjacTNiBh3dtEdUERCrUUG7Z3QaJ+h79w==" + "version": "5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.4.1-2.ac9d7041ed77bcc8a8dbd2ab6616b39013829574.tgz", + "integrity": "sha512-wvupDL4AA1vf4TQNANg7kR7y98ITqPsk6aacfBxZKtrJKRIsWjURHkZCGcQliHdqCiW/hGreO6d6ZuSv9MhdAA==" }, "node_modules/@radix-ui/number": { "version": "1.0.1", @@ -4399,81 +4401,6 @@ } } }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-direction": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz", @@ -4492,9 +4419,9 @@ } }, "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz", - "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/primitive": "1.0.1", @@ -4565,9 +4492,9 @@ } }, "node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz", - "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/react-compose-refs": "1.0.1", @@ -4670,59 +4597,7 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-focus-scope": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", - "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-popper": { + "node_modules/@radix-ui/react-popper": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", @@ -4754,7 +4629,7 @@ } } }, - "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-portal": { + "node_modules/@radix-ui/react-portal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", @@ -4777,61 +4652,6 @@ } } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz", - "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-portal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz", - "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-presence": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", @@ -4911,9 +4731,9 @@ } }, "node_modules/@radix-ui/react-select": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz", - "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.0.0.tgz", + "integrity": "sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==", "dependencies": { "@babel/runtime": "^7.13.10", "@radix-ui/number": "1.0.1", @@ -4922,12 +4742,12 @@ "@radix-ui/react-compose-refs": "1.0.1", "@radix-ui/react-context": "1.0.1", "@radix-ui/react-direction": "1.0.1", - "@radix-ui/react-dismissable-layer": "1.0.4", + "@radix-ui/react-dismissable-layer": "1.0.5", "@radix-ui/react-focus-guards": "1.0.1", - "@radix-ui/react-focus-scope": "1.0.3", + "@radix-ui/react-focus-scope": "1.0.4", "@radix-ui/react-id": "1.0.1", - "@radix-ui/react-popper": "1.1.2", - "@radix-ui/react-portal": "1.0.3", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", "@radix-ui/react-primitive": "1.0.3", "@radix-ui/react-slot": "1.0.2", "@radix-ui/react-use-callback-ref": "1.0.1", @@ -5005,88 +4825,6 @@ } } }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", - "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/primitive": "1.0.1", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-escape-keydown": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-popper": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", - "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.0.3", - "@radix-ui/react-compose-refs": "1.0.1", - "@radix-ui/react-context": "1.0.1", - "@radix-ui/react-primitive": "1.0.3", - "@radix-ui/react-use-callback-ref": "1.0.1", - "@radix-ui/react-use-layout-effect": "1.0.1", - "@radix-ui/react-use-rect": "1.0.1", - "@radix-ui/react-use-size": "1.0.1", - "@radix-ui/rect": "1.0.1" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-portal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", - "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", - "dependencies": { - "@babel/runtime": "^7.13.10", - "@radix-ui/react-primitive": "1.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, "node_modules/@radix-ui/react-use-callback-ref": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", @@ -5314,9 +5052,9 @@ } }, "node_modules/@semantic-release/github": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.1.0.tgz", - "integrity": "sha512-RKhS43OpNnQr9rA9Z72EbG8wM/UmWoCpop2z6G++ulRu7t8MuYS2v6TR2SoOFhcDPa2wY91v5VPouCWtDjz4+Q==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-9.2.1.tgz", + "integrity": "sha512-fEn9uOe6jwWR6ro2Wh6YNBCBuZ5lRi8Myz+1j3KDTSt8OuUGlpVM4lFac/0bDrql2NOKrIEAMGCfWb9WMIdzIg==", "dependencies": { "@octokit/core": "^5.0.0", "@octokit/plugin-paginate-rest": "^9.0.0", @@ -5913,41 +5651,51 @@ } }, "node_modules/@t3-oss/env-core": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@t3-oss/env-core/-/env-core-0.6.1.tgz", - "integrity": "sha512-KQD7qEDJtkWIWWmTVjNvk0wnHpkvAQ6CRbUxbWMFNG/fiosBQDQvtRpBNu6USxBscJCoC4z6y7P9MN52/mLOzw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@t3-oss/env-core/-/env-core-0.7.1.tgz", + "integrity": "sha512-3+SQt39OlmSaRLqYVFv8uRm1BpFepM5TIiMytRqO9cjH+wB77o6BIJdeyM5h5U4qLBMEzOJWCY4MBaU/rLwbYw==", "peerDependencies": { "typescript": ">=4.7.2", "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@t3-oss/env-nextjs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@t3-oss/env-nextjs/-/env-nextjs-0.6.1.tgz", - "integrity": "sha512-z1dIC++Vxj9kmzX5nSPfcrCSkszy3dTEPC4Ssx7Ap5AqR3c2Qa7S0xf8axn6coy7D/vCXDAAnHYnCMDhtcY3SQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@t3-oss/env-nextjs/-/env-nextjs-0.7.1.tgz", + "integrity": "sha512-tQDbNLGCOvKGi+JoGuJ/CJInJI7/kLWJqtgGppAKS7ZFLdVOqZYR/uRjxlXOWPnxmUKF8VswOAsq7fXUpNZDhA==", "dependencies": { - "@t3-oss/env-core": "0.6.1" + "@t3-oss/env-core": "0.7.1" }, "peerDependencies": { "typescript": ">=4.7.2", "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@tanstack/query-core": { - "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.35.3.tgz", - "integrity": "sha512-PS+WEjd9wzKTyNjjQymvcOe1yg8f3wYc6mD+vb6CKyZAKvu4sIJwryfqfBULITKCla7P9C4l5e9RXePHvZOZeQ==", + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.36.1.tgz", + "integrity": "sha512-DJSilV5+ytBP1FbFcEJovv4rnnm/CokuVvrBEtW/Va9DvuJ3HksbXUJEpI0aV1KtuL4ZoO9AVE6PyNLzF7tLeA==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "4.35.3", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.35.3.tgz", - "integrity": "sha512-UgTPioip/rGG3EQilXfA2j4BJkhEQsR+KAbF+KIuvQ7j4MkgnTCJF01SfRpIRNtQTlEfz/+IL7+jP8WA8bFbsw==", + "version": "4.36.1", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.36.1.tgz", + "integrity": "sha512-y7ySVHFyyQblPl3J3eQBWpXZkliroki3ARnBKsdJchlgt7yJLRDUcf4B8soufgiYt3pEQIkBWBx1N9/ZPIeUWw==", "dependencies": { - "@tanstack/query-core": "4.35.3", + "@tanstack/query-core": "4.36.1", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -6035,12 +5783,12 @@ } }, "node_modules/@testing-library/jest-dom": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.3.tgz", - "integrity": "sha512-YzpjRHoCBWPzpPNtg6gnhasqtE/5O4qz8WCwDEaxtfnPO6gkaLrnuXusrGSPyhIGPezr1HM7ZH0CFaUTY9PJEQ==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.1.4.tgz", + "integrity": "sha512-wpoYrCYwSZ5/AxcrjLxJmCU6I5QAJXslEeSiMQqaWmP2Kzpd1LvF/qxmAIW2qposULGWq2gw30GgVNFLSc2Jnw==", "dev": true, "dependencies": { - "@adobe/css-tools": "^4.3.0", + "@adobe/css-tools": "^4.3.1", "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", @@ -6170,35 +5918,35 @@ "dev": true }, "node_modules/@trpc/client": { - "version": "10.38.4", - "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.38.4.tgz", - "integrity": "sha512-svpZ9Iq9cnn+XfXQZF8PMt1YxAtNYeGiKZ/pGpcume7RqJrra/kWwU41gbax8d/cAg3YKUgNft9dZFKMYtXuYw==", + "version": "10.40.0", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.40.0.tgz", + "integrity": "sha512-bT6BcdWjj0KzGQiimE6rB2tIaRYX0Ear4Gthb5szN/c01wrP0yC1Fbz2uCcm/QTVAwu4Lve5M+YjPoEaTHG6lg==", "funding": [ "https://trpc.io/sponsor" ], "peerDependencies": { - "@trpc/server": "10.38.4" + "@trpc/server": "10.40.0" } }, "node_modules/@trpc/react-query": { - "version": "10.38.4", - "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.38.4.tgz", - "integrity": "sha512-wEreUn9E+ZMKn/oRWlhHzmSgG5SG9WpmE1F27PPjn3I0S92aYRQvVsmV43v2OAL1VUYP2aHLk7gXx2luKLLRyw==", + "version": "10.40.0", + "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.40.0.tgz", + "integrity": "sha512-DpJrV3lmYNo9xtPtcg49lfh9CUFap3ZivjhlSmfe4QPf7H6xBjAE+ml4OdJ0RmKvSTFvbLSOiNdB1k5O8zIdzQ==", "funding": [ "https://trpc.io/sponsor" ], "peerDependencies": { "@tanstack/react-query": "^4.18.0", - "@trpc/client": "10.38.4", - "@trpc/server": "10.38.4", + "@trpc/client": "10.40.0", + "@trpc/server": "10.40.0", "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "node_modules/@trpc/server": { - "version": "10.38.4", - "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.38.4.tgz", - "integrity": "sha512-xSMTwnKA/Unxu5fbAkQ7cApHeWj1rTEA3XgrGDcPHn03fmeIidIKxronM46N46ZF4CCexey4JWzu89XxA16uIA==", + "version": "10.40.0", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.40.0.tgz", + "integrity": "sha512-49SUOMWzSZtu5+OdrADmJD+u+sjSE0qj1cWgYk2FY4jLkPJunLuNRuhzM7aOeBhiUjyfhg2YTfur8FN1WBmvEw==", "funding": [ "https://trpc.io/sponsor" ] @@ -6434,10 +6182,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.7.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", - "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", - "devOptional": true + "version": "20.8.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.6.tgz", + "integrity": "sha512-eWO4K2Ji70QzKUqRy6oyJWUeB7+g2cRagT3T/nxYibYcT4y2BDL8lqolRXjTHmkZCdJfIPaY73KbJAZmcryxTQ==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.25.1" + } }, "node_modules/@types/nodemailer": { "version": "6.4.11", @@ -6466,9 +6217,9 @@ "devOptional": true }, "node_modules/@types/react": { - "version": "18.2.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.23.tgz", - "integrity": "sha512-qHLW6n1q2+7KyBEYnrZpcsAmU/iiCh9WGCKgXvMxx89+TYdJWRjZohVIo9XTcoLhfX3+/hP0Pbulu3bCZQ9PSA==", + "version": "18.2.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.28.tgz", + "integrity": "sha512-ad4aa/RaaJS3hyGz0BGegdnSRXQBkd1CCYDCdNjBPg90UUpLgo+WlJqb9fMYUxtehmzF3PJaTWqRZjko6BRzBg==", "devOptional": true, "dependencies": { "@types/prop-types": "*", @@ -6477,18 +6228,18 @@ } }, "node_modules/@types/react-dom": { - "version": "18.2.7", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.7.tgz", - "integrity": "sha512-GRaAEriuT4zp9N4p1i8BDBYmEyfo+xQ3yHjJU4eiK5NDa1RmUZG+unZABUTK4/Ox/M+GaHwb6Ow8rUITrtjszA==", + "version": "18.2.13", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.13.tgz", + "integrity": "sha512-eJIUv7rPP+EC45uNYp/ThhSpE16k22VJUknt5OLoH9tbXoi8bMhwLf5xRuWMywamNbWzhrSmU7IBJfPup1+3fw==", "devOptional": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/request-ip": { - "version": "0.0.38", - "resolved": "https://registry.npmjs.org/@types/request-ip/-/request-ip-0.0.38.tgz", - "integrity": "sha512-1yeq8UuK/tUBqLXRY24gjeFvrSNaGNcOcZLQjHlnuw8iu+qE/vTQ64TUcLWorr607NKLfFakdoYEXXHXrLLKCw==", + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/request-ip/-/request-ip-0.0.39.tgz", + "integrity": "sha512-2vZI+q4ToHvm6Qspi6G+S1f8+dWL23ZnCaauSS4i6LPxR4V//+O44l472aCG5rZtuAQfODihIWWN8z1UK2bOIA==", "dev": true, "dependencies": { "@types/node": "*" @@ -6547,16 +6298,16 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.3.tgz", - "integrity": "sha512-vntq452UHNltxsaaN+L9WyuMch8bMd9CqJ3zhzTPXXidwbf5mqqKCVXEuvRZUqLJSTLeWE65lQwyXsRGnXkCTA==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz", + "integrity": "sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/type-utils": "6.7.3", - "@typescript-eslint/utils": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/type-utils": "6.7.5", + "@typescript-eslint/utils": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -6809,15 +6560,15 @@ "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.3.tgz", - "integrity": "sha512-TlutE+iep2o7R8Lf+yoer3zU6/0EAUc8QIBB3GYBc1KGz4c4TRm83xwXUZVPlZ6YCLss4r77jbu6j3sendJoiQ==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", + "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", "debug": "^4.3.4" }, "engines": { @@ -6837,13 +6588,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.3.tgz", - "integrity": "sha512-wOlo0QnEou9cHO2TdkJmzF7DFGvAKEnB82PuPNHpT8ZKKaZu6Bm63ugOTn9fXNJtvuDPanBc78lGUGGytJoVzQ==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", + "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3" + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6854,13 +6605,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.3.tgz", - "integrity": "sha512-Fc68K0aTDrKIBvLnKTZ5Pf3MXK495YErrbHb1R6aTpfK5OdSFj0rVN7ib6Tx6ePrZ2gsjLqr0s98NG7l96KSQw==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz", + "integrity": "sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.3", - "@typescript-eslint/utils": "6.7.3", + "@typescript-eslint/typescript-estree": "6.7.5", + "@typescript-eslint/utils": "6.7.5", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -6881,9 +6632,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.3.tgz", - "integrity": "sha512-4g+de6roB2NFcfkZb439tigpAMnvEIg3rIjWQ+EM7IBaYt/CdJt6em9BJ4h4UpdgaBWdmx2iWsafHTrqmgIPNw==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", + "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -6894,13 +6645,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.3.tgz", - "integrity": "sha512-YLQ3tJoS4VxLFYHTw21oe1/vIZPRqAO91z6Uv0Ss2BKm/Ag7/RVQBcXTGcXhgJMdA4U+HrKuY5gWlJlvoaKZ5g==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", + "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/visitor-keys": "6.7.3", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/visitor-keys": "6.7.5", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -6974,17 +6725,17 @@ "dev": true }, "node_modules/@typescript-eslint/utils": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.3.tgz", - "integrity": "sha512-vzLkVder21GpWRrmSR9JxGZ5+ibIUSudXlW52qeKpzUEQhRSmyZiVDDj3crAth7+5tmN1ulvgKaCU2f/bPRCzg==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", + "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.3", - "@typescript-eslint/types": "6.7.3", - "@typescript-eslint/typescript-estree": "6.7.3", + "@typescript-eslint/scope-manager": "6.7.5", + "@typescript-eslint/types": "6.7.5", + "@typescript-eslint/typescript-estree": "6.7.5", "semver": "^7.5.4" }, "engines": { @@ -7032,12 +6783,12 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.3.tgz", - "integrity": "sha512-HEVXkU9IB+nk9o63CeICMHxFWbHWr3E1mpilIQBe9+7L/lH97rleFLVtYsfnWB+JVMaiFnEaxvknvmIzX+CqVg==", + "version": "6.7.5", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", + "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.3", + "@typescript-eslint/types": "6.7.5", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -7049,26 +6800,26 @@ } }, "node_modules/@vitest/expect": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.5.tgz", - "integrity": "sha512-/3RBIV9XEH+nRpRMqDJBufKIOQaYUH2X6bt0rKSCW0MfKhXFLYsR5ivHifeajRSTsln0FwJbitxLKHSQz/Xwkw==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", "dev": true, "dependencies": { - "@vitest/spy": "0.34.5", - "@vitest/utils": "0.34.5", - "chai": "^4.3.7" + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.5.tgz", - "integrity": "sha512-RDEE3ViVvl7jFSCbnBRyYuu23XxmvRTSZWW6W4M7eC5dOsK75d5LIf6uhE5Fqf809DQ1+9ICZZNxhIolWHU4og==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.5", + "@vitest/utils": "0.34.6", "p-limit": "^4.0.0", "pathe": "^1.1.1" }, @@ -7104,9 +6855,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.5.tgz", - "integrity": "sha512-+ikwSbhu6z2yOdtKmk/aeoDZ9QPm2g/ZO5rXT58RR9Vmu/kB2MamyDSx77dctqdZfP3Diqv4mbc/yw2kPT8rmA==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", "dev": true, "dependencies": { "magic-string": "^0.30.1", @@ -7150,9 +6901,9 @@ "dev": true }, "node_modules/@vitest/spy": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.5.tgz", - "integrity": "sha512-epsicsfhvBjRjCMOC/3k00mP/TBGQy8/P0DxOFiWyLt55gnZ99dqCfCiAsKO17BWVjn4eZRIjKvcqNmSz8gvmg==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", "dev": true, "dependencies": { "tinyspy": "^2.1.1" @@ -7162,9 +6913,9 @@ } }, "node_modules/@vitest/utils": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.5.tgz", - "integrity": "sha512-ur6CmmYQoeHMwmGb0v+qwkwN3yopZuZyf4xt1DBBSGBed8Hf9Gmbm/5dEWqgpLPdRx6Av6jcWXrjcKfkTzg/pw==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", "dev": true, "dependencies": { "diff-sequences": "^29.4.3", @@ -8208,18 +7959,18 @@ } }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -8245,10 +7996,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -8849,9 +8603,9 @@ "devOptional": true }, "node_modules/cron": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/cron/-/cron-2.4.4.tgz", - "integrity": "sha512-MHlPImXJj3K7x7lyUHjtKEOl69CSlTOWxS89jiFgNkzXfvhVjhMz/nc7/EIfN9vgooZp8XTtXJ1FREdmbyXOiQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/cron/-/cron-3.1.1.tgz", + "integrity": "sha512-P8rDShXt2IZa16KwuYpbd1w7NjU4BnXeUEfkesBXT36JXhUsQ1P6i6ctsi5H82FQmR4tn/MOz05aB/3vn6dSkA==", "dependencies": { "@types/luxon": "~3.3.0", "luxon": "~3.3.0" @@ -9910,15 +9664,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.51.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -9964,12 +9718,12 @@ } }, "node_modules/eslint-config-next": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.3.tgz", - "integrity": "sha512-VN2qbCpq2DMWgs7SVF8KTmc8bVaWz3s4nmcFqRLs7PNBt5AXejOhJuZ4zg2sCEHOvz5RvqdwLeI++NSCV6qHVg==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.5.4.tgz", + "integrity": "sha512-FzQGIj4UEszRX7fcRSJK6L1LrDiVZvDFW320VVntVKh3BSU8Fb9kpaoxQx0cdFgf3MQXdeSbrCXJ/5Z/NndDkQ==", "dev": true, "dependencies": { - "@next/eslint-plugin-next": "13.5.3", + "@next/eslint-plugin-next": "13.5.4", "@rushstack/eslint-patch": "^1.3.3", "@typescript-eslint/parser": "^5.4.2 || ^6.0.0", "eslint-import-resolver-node": "^0.3.6", @@ -10919,9 +10673,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -11457,9 +11211,9 @@ } }, "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, "engines": { "node": "*" @@ -11535,6 +11289,28 @@ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, + "node_modules/git-conventional-commits": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/git-conventional-commits/-/git-conventional-commits-2.6.5.tgz", + "integrity": "sha512-HbtKUnZ3CciI8CVUcnGOXb/bKN0cuXZLjHie/JxlIaCkHr0l38kUtfewoRACp+SJirOzjBtejAwoaQ4hStHfLg==", + "dev": true, + "dependencies": { + "yaml": "^2.1.3", + "yargs": "^17.6.2" + }, + "bin": { + "git-conventional-commits": "cli.js" + } + }, + "node_modules/git-conventional-commits/node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, "node_modules/git-log-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", @@ -14917,9 +14693,9 @@ } }, "node_modules/lucide-react": { - "version": "0.279.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.279.0.tgz", - "integrity": "sha512-LJ8g66+Bxc3t3x9vKTeK3wn3xucrOQGfJ9ou9GsBwCt2offsrT2BB90XrTrIzE1noYYDe2O8jZaRHi6sAHXNxw==", + "version": "0.287.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.287.0.tgz", + "integrity": "sha512-auxP2bTGiMoELzX+6ItTeNzLmhGd/O+PHBsrXV2YwPXYCxarIFJhiMOSzFT9a1GWeYPSZtnWdLr79IVXr/5JqQ==", "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0" } @@ -15264,18 +15040,17 @@ "integrity": "sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==" }, "node_modules/next": { - "version": "13.5.3", - "resolved": "https://registry.npmjs.org/next/-/next-13.5.3.tgz", - "integrity": "sha512-4Nt4HRLYDW/yRpJ/QR2t1v63UOMS55A38dnWv3UDOWGezuY0ZyFO1ABNbD7mulVzs9qVhgy2+ppjdsANpKP1mg==", + "version": "13.5.4", + "resolved": "https://registry.npmjs.org/next/-/next-13.5.4.tgz", + "integrity": "sha512-+93un5S779gho8y9ASQhb/bTkQF17FNQOtXLKAj3lsNgltEcF0C5PMLLncDmH+8X1EnJH1kbqAERa29nRXqhjA==", "dependencies": { - "@next/env": "13.5.3", + "@next/env": "13.5.4", "@swc/helpers": "0.5.2", "busboy": "1.6.0", "caniuse-lite": "^1.0.30001406", - "postcss": "8.4.14", + "postcss": "8.4.31", "styled-jsx": "5.1.1", - "watchpack": "2.4.0", - "zod": "3.21.4" + "watchpack": "2.4.0" }, "bin": { "next": "dist/bin/next" @@ -15284,15 +15059,15 @@ "node": ">=16.14.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "13.5.3", - "@next/swc-darwin-x64": "13.5.3", - "@next/swc-linux-arm64-gnu": "13.5.3", - "@next/swc-linux-arm64-musl": "13.5.3", - "@next/swc-linux-x64-gnu": "13.5.3", - "@next/swc-linux-x64-musl": "13.5.3", - "@next/swc-win32-arm64-msvc": "13.5.3", - "@next/swc-win32-ia32-msvc": "13.5.3", - "@next/swc-win32-x64-msvc": "13.5.3" + "@next/swc-darwin-arm64": "13.5.4", + "@next/swc-darwin-x64": "13.5.4", + "@next/swc-linux-arm64-gnu": "13.5.4", + "@next/swc-linux-arm64-musl": "13.5.4", + "@next/swc-linux-x64-gnu": "13.5.4", + "@next/swc-linux-x64-musl": "13.5.4", + "@next/swc-win32-arm64-msvc": "13.5.4", + "@next/swc-win32-ia32-msvc": "13.5.4", + "@next/swc-win32-x64-msvc": "13.5.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", @@ -15310,9 +15085,9 @@ } }, "node_modules/next-auth": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.23.1.tgz", - "integrity": "sha512-mL083z8KgRtlrIV6CDca2H1kduWJuK/3pTS0Fe2og15KOm4v2kkLGdSDfc2g+019aEBrJUT0pPW2Xx42ImN1WA==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.23.2.tgz", + "integrity": "sha512-VRmInu0r/yZNFQheDFeOKtiugu3bt90Po3owAQDnFQ3YLQFmUKgFjcE2+3L0ny5jsJpBXaKbm7j7W2QTc6Ye2A==", "dependencies": { "@babel/runtime": "^7.20.13", "@panva/hkdf": "^1.0.2", @@ -15351,37 +15126,6 @@ "react-dom": "*" } }, - "node_modules/next/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/next/node_modules/zod": { - "version": "3.21.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz", - "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/node-abi": { "version": "3.47.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", @@ -15494,9 +15238,9 @@ "dev": true }, "node_modules/nodemailer": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz", - "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==", + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.6.tgz", + "integrity": "sha512-s7pDtWwe5fLMkQUhw8TkWB/wnZ7SRdd9HRZslq/s24hlZvBP3j32N/ETLmnqTpmj4xoBZL9fOWyCIZ7r2HORHg==", "engines": { "node": ">=6.0.0" } @@ -19370,9 +19114,9 @@ } }, "node_modules/postcss": { - "version": "8.4.30", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.30.tgz", - "integrity": "sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -19622,9 +19366,9 @@ } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.4.tgz", - "integrity": "sha512-QZzzB1bID6qPsKHTeA9qPo1APmmxfFrA5DD3LQ+vbTmAnY40eJI7t9Q1ocqel2EKMWNPLJqdTDWZj1hKYgqSgg==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.6.tgz", + "integrity": "sha512-2Xgb+GQlkPAUCFi3sV+NOYcSI5XgduvDBL2Zt/hwJudeKXkyvRS65c38SB0yb9UB40+1rL83I6m0RtlOQ8eHdg==", "dev": true, "engines": { "node": ">=14.21.3" @@ -19718,12 +19462,13 @@ } }, "node_modules/prisma": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.3.1.tgz", - "integrity": "sha512-Wp2msQIlMPHe+5k5Od6xnsI/WNG7UJGgFUJgqv/ygc7kOECZapcSz/iU4NIEzISs3H1W9sFLjAPbg/gOqqtB7A==", + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.4.2.tgz", + "integrity": "sha512-GDMZwZy7mysB2oXU+angQqJ90iaPFdD0rHaZNkn+dio5NRkGLmMqmXs31//tg/qXT3iB0cTQwnGGQNuirhSTZg==", + "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "5.3.1" + "@prisma/engines": "5.4.2" }, "bin": { "prisma": "build/index.js" @@ -19898,9 +19643,9 @@ } }, "node_modules/react-hook-form": { - "version": "7.46.2", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.46.2.tgz", - "integrity": "sha512-x1DWmHQchV7x2Rq9l99M/cQHC8JGchAnw9Z0uTz5KrPa0bTl/Inm1NR7ceOARfIrkNuQNAhuSuZPYa6k7QYn3Q==", + "version": "7.47.0", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.47.0.tgz", + "integrity": "sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg==", "engines": { "node": ">=12.22.0" }, @@ -21752,14 +21497,14 @@ } }, "node_modules/superjson": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-1.13.1.tgz", - "integrity": "sha512-AVH2eknm9DEd3qvxM4Sq+LTCkSXE2ssfh1t11MHMXyYXFQyQ1HLgVvV+guLTsaQnJU3gnaVo34TohHPulY/wLg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.0.0.tgz", + "integrity": "sha512-W3n+NJ7TFjaLle8ihIIvsr/bbuKpnxeatsyjmhy7iSkom+/cshaHziCQAWXrHGWJVQSQFDOuES6C3nSEvcbrQg==", "dependencies": { "copy-anything": "^3.0.2" }, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/supports-color": { @@ -22456,6 +22201,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -22519,6 +22265,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/undici-types": { + "version": "5.25.3", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", + "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", + "devOptional": true + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -22807,9 +22559,9 @@ } }, "node_modules/vite-node": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.5.tgz", - "integrity": "sha512-RNZ+DwbCvDoI5CbCSQSyRyzDTfFvFauvMs6Yq4ObJROKlIKuat1KgSX/Ako5rlDMfVCyMcpMRMTkJBxd6z8YRA==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", "dev": true, "dependencies": { "cac": "^6.7.14", @@ -22830,23 +22582,23 @@ } }, "node_modules/vitest": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.5.tgz", - "integrity": "sha512-CPI68mmnr2DThSB3frSuE5RLm9wo5wU4fbDrDwWQQB1CWgq9jQVoQwnQSzYAjdoBOPoH2UtXpOgHVge/uScfZg==", + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", "dev": true, "dependencies": { "@types/chai": "^4.3.5", "@types/chai-subset": "^1.3.3", "@types/node": "*", - "@vitest/expect": "0.34.5", - "@vitest/runner": "0.34.5", - "@vitest/snapshot": "0.34.5", - "@vitest/spy": "0.34.5", - "@vitest/utils": "0.34.5", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", "acorn": "^8.9.0", "acorn-walk": "^8.2.0", "cac": "^6.7.14", - "chai": "^4.3.7", + "chai": "^4.3.10", "debug": "^4.3.4", "local-pkg": "^0.4.3", "magic-string": "^0.30.1", @@ -22857,7 +22609,7 @@ "tinybench": "^2.5.0", "tinypool": "^0.7.0", "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.5", + "vite-node": "0.34.6", "why-is-node-running": "^2.2.2" }, "bin": { @@ -23342,9 +23094,9 @@ } }, "node_modules/zod": { - "version": "3.22.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", - "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index ca667b13..95b126af 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "test": "cross-env FORCE_COLOR=1 jest --passWithNoTests", "format": "prettier --write \"**/*.{ts,tsx,md}\"", "postinstall": "npx patch-package && prisma generate", - "preinstall": "npx only-allow npm", + "preinstall": "npx -y only-allow-many npm", "seed": "NODE_ENV=development prisma db seed", "depcheck": "cd scripts && npm i && npm run depcheck", "full-sub-package-setup": "npm run sub-package:scripts", @@ -30,13 +30,13 @@ "@hookform/resolvers": "^3.2.0", "@next-auth/prisma-adapter": "^1.0.7", "@next/bundle-analyzer": "^13.4.13", - "@prisma/client": "^5.1.1", + "@prisma/client": "^5.3.1", "@radix-ui/react-accordion": "^1.1.2", "@radix-ui/react-alert-dialog": "^1.0.5", "@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-dropdown-menu": "^2.0.5", "@radix-ui/react-label": "^2.0.2", - "@radix-ui/react-select": "^1.2.2", + "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-tooltip": "^1.0.6", "@semantic-release/changelog": "^6.0.3", @@ -45,30 +45,29 @@ "@semantic-release/github": "^9.0.4", "@semantic-release/npm": "^11.0.0", "@semantic-release/release-notes-generator": "^12.0.0", - "@t3-oss/env-nextjs": "^0.6.0", + "@t3-oss/env-nextjs": "^0.7.0", "@tanstack/react-query": "^4.32.6", "@testing-library/user-event": "^14.4.3", - "@trpc/client": "^10.38.2", - "@trpc/react-query": "^10.38.2", - "@trpc/server": "^10.38.2", + "@trpc/client": "^10.38.5", + "@trpc/react-query": "^10.38.5", + "@trpc/server": "^10.38.5", "bcryptjs": "^2.4.3", "class-variance-authority": "^0.7.0", "cli-spinner": "^0.2.10", "client-only": "^0.0.1", "clsx": "^2.0.0", "concurrently": "^8.2.1", - "cron": "^2.4.3", + "cron": "^3.0.0", "crypto-js": "^4.1.1", "dotenv": "^16.3.1", "ioredis": "^5.3.2", - "lucide-react": "^0.279.0", + "lucide-react": "^0.287.0", "negotiator": "^0.6.3", "next": "^13.4.19", "next-auth": "^4.23.1", "next-compose-plugins": "^2.2.1", "next-themes": "^0.2.1", "nodemailer": "^6.9.5", - "prisma": "^5.1.1", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hook-form": "^7.45.4", @@ -76,7 +75,7 @@ "request-ip": "^3.3.0", "server-only": "^0.0.1", "sharp": "^0.32.5", - "superjson": "^1.13.1", + "superjson": "^2.0.0", "tailwind-merge": "^1.14.0", "tailwindcss-animate": "^1.0.6", "ua-parser-js": "^1.0.35", @@ -98,14 +97,14 @@ "@types/nodemailer": "^6.4.10", "@types/react": "^18.2.19", "@types/react-dom": "^18.2.7", - "@types/request-ip": "^0.0.38", + "@types/request-ip": "^0.0.39", "@types/ua-parser-js": "^0.7.36", "@typescript-eslint/eslint-plugin": "^6.3.0", "@typescript-eslint/parser": "^6.3.0", "autoprefixer": "^10.4.15", "babel-plugin-styled-components": "^2.1.4", "cross-env": "^7.0.3", - "eslint": "8.49.0", + "eslint": "8.51.0", "eslint-config-next": "^13.4.13", "eslint-config-prettier": "^9.0.0", "eslint-config-react-app": "^7.0.1", @@ -114,6 +113,7 @@ "eslint-plugin-tailwindcss": "^3.13.0", "eslint-plugin-unused-imports": "^3.0.0", "fetch-mock": "^9.11.0", + "git-conventional-commits": "^2.6.5", "isomorphic-fetch": "^3.0.0", "jest": "^29.6.2", "jest-environment-jsdom": "^29.7.0", @@ -122,6 +122,7 @@ "postinstall-postinstall": "^2.1.0", "prettier": "3.0.3", "prettier-plugin-tailwindcss": "^0.5.4", + "prisma": "^5.3.1", "semantic-release": "^22.0.0", "tailwindcss": "^3.3.3", "ts-jest": "^29.1.1", diff --git a/prisma/migrations/20230926113456_sp/migration.sql b/prisma/migrations/20230926113456_sp/migration.sql deleted file mode 100644 index 9133ba09..00000000 --- a/prisma/migrations/20230926113456_sp/migration.sql +++ /dev/null @@ -1,16 +0,0 @@ -create function user_has_password_auto_update() returns trigger -language plpgsql as $$ -begin - if new."password" is not null then - new."hasPassword" := true; - end if; - - return new; -end; -$$; - -create trigger "user_has_password_autoupdate" -before insert or update -on "User" -for each row -execute procedure user_has_password_auto_update(); \ No newline at end of file diff --git a/prisma/migrations/20230926113455_init/migration.sql b/prisma/migrations/20231011155324_init/migration.sql similarity index 100% rename from prisma/migrations/20230926113455_init/migration.sql rename to prisma/migrations/20231011155324_init/migration.sql diff --git a/prisma/seed.ts b/prisma/seed.ts index 6064203f..9ac8256c 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -53,6 +53,7 @@ async function main() { email: env.AUTH_ADMIN_EMAIL as string, password: await hash(env.AUTH_ADMIN_PASSWORD ?? "", 12), role: rolesAsObject.admin, + username: "admin", emailVerified: new Date(), }, }) diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 00000000..e69de29b diff --git a/scripts/bun.lockb b/scripts/bun.lockb deleted file mode 100755 index 74cea1d4..00000000 Binary files a/scripts/bun.lockb and /dev/null differ diff --git a/scripts/complete-initialisation.ts b/scripts/complete-initialisation.ts index f7c8c615..e46b5bcb 100644 --- a/scripts/complete-initialisation.ts +++ b/scripts/complete-initialisation.ts @@ -7,7 +7,7 @@ const __dirname = url.fileURLToPath(new URL(".", import.meta.url)) const rootPath = path.join(__dirname, "..") export const completeInitialisation = async () => { - await fs.unlink(path.join(rootPath, "scripts", ".init-todo")) + await fs.unlink(path.join(rootPath, "scripts", ".init-todo")).catch(() => {}) console.log("\n") console.log(chalk.yellow("*".repeat(50))) console.log(chalk.green("Project initialized!")) diff --git a/scripts/init.ts b/scripts/init.ts index 1254a438..c963bf84 100644 --- a/scripts/init.ts +++ b/scripts/init.ts @@ -1,13 +1,18 @@ import chalk from "chalk" +import { config } from "dotenv" import * as fs from "fs/promises" import { exit } from "node:process" import * as path from "path" import * as url from "url" +import { completeInitialisation } from "./complete-initialisation" +import { replaceTokens } from "./replace-tokens" import { runtime } from "./runtime" const __dirname = url.fileURLToPath(new URL(".", import.meta.url)) const rootPath = path.join(__dirname, "..") +config({ path: path.join(rootPath, ".env") }) + async function main() { const alreadyInitialized = await fs.access(path.join(rootPath, "scripts", ".init-todo")).catch(() => false) if (alreadyInitialized) { @@ -15,16 +20,17 @@ async function main() { exit(1) } - // console.log(chalk.green("Welcome to the init script!")) - // console.log(chalk.blue(' Starting the "replace tokens" script...')) - // await replaceTokens() - // console.log(chalk.green("Done!")) + console.log(chalk.green("Welcome to the init script!")) + console.log(chalk.blue(' Starting the "replace tokens" script...')) + await replaceTokens() + console.log(chalk.green("Done!")) console.log(chalk.blue(' Starting the "runtime" script...')) await runtime() console.log(chalk.green("Done!")) - // await completeInitialisation() + if (process.env.SKIP_INIT_CHECK !== "true") await completeInitialisation() + else console.log(chalk.yellow("Skipping completeInitialisation()")) exit(0) } diff --git a/scripts/install-brew.sh b/scripts/install-brew.sh deleted file mode 100755 index d4a94f88..00000000 --- a/scripts/install-brew.sh +++ /dev/null @@ -1,10 +0,0 @@ -#! /bin/sh -echo "Installing brew... 🚀" -sudo chown -R $(whoami) /home/linuxbrew/.linuxbrew -(echo; echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"') >> /home/$USER/.bashrc -eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" -brew install gcc - -echo "Installing pre-commit... 🚀" -brew install pre-commit -pre-commit install -t commit-msg \ No newline at end of file diff --git a/scripts/install-zsh10k.sh b/scripts/install-zsh10k.sh deleted file mode 100755 index 431289a7..00000000 --- a/scripts/install-zsh10k.sh +++ /dev/null @@ -1,11 +0,0 @@ -#! /bin/sh -# ZSH powerlevel10k -echo "Installing ZSH powerlevel10k... 🚀" -git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k -sed -i 's/ZSH_THEME=.*/ZSH_THEME="powerlevel10k\/powerlevel10k"/g' ${ZDOTDIR:-$HOME}/.zshrc -cp .devcontainer/.p10k.zsh ${ZDOTDIR:-$HOME}/.p10k.zsh -cp .devcontainer/.zshrc ${ZDOTDIR:-$HOME}/.zshrc -echo "" >> ~/.bashrc -echo "if [ -t 1 ]; then" >> ~/.bashrc -echo "exec zsh" >> ~/.bashrc -echo "fi" >> ~/.bashrc \ No newline at end of file diff --git a/scripts/install-bun.sh b/scripts/install/install-bun.sh similarity index 84% rename from scripts/install-bun.sh rename to scripts/install/install-bun.sh index 25106212..5518a3c3 100755 --- a/scripts/install-bun.sh +++ b/scripts/install/install-bun.sh @@ -1,5 +1,3 @@ -#! /bin/zsh - echo "Installing bun... 🚀" curl -fsSL https://bun.sh/install | bash @@ -7,4 +5,4 @@ echo "# bun" >> ~/.zshrc echo "export BUN_INSTALL=\"\$HOME/.bun\"" >> ~/.zshrc echo "export PATH=\$BUN_INSTALL/bin:\$PATH" >> ~/.zshrc -source /home/node/.zshrc \ No newline at end of file +echo "Done! 🎉" diff --git a/scripts/install/install-git-hooks.sh b/scripts/install/install-git-hooks.sh new file mode 100755 index 00000000..2f68bea9 --- /dev/null +++ b/scripts/install/install-git-hooks.sh @@ -0,0 +1,4 @@ +echo "Installing git hooks... 🚀" +npm install --global git-conventional-commits +git config core.hooksPath .git-hooks +echo "Done! 🎉" diff --git a/scripts/install/install-zsh10k.sh b/scripts/install/install-zsh10k.sh new file mode 100755 index 00000000..ee02f3cb --- /dev/null +++ b/scripts/install/install-zsh10k.sh @@ -0,0 +1,18 @@ +# ZSH powerlevel10k +echo "Installing ZSH powerlevel10k... 🚀" +#? Install powerlevel10k +git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k +# sed -i 's/ZSH_THEME=.*/ZSH_THEME="powerlevel10k\/powerlevel10k"/g' ${ZDOTDIR:-$HOME}/.zshrc +# echo '' >> ~/.zshrc +# echo 'POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true' >> ~/.zshrc +cp .devcontainer/.p10k.zsh ${ZDOTDIR:-$HOME}/.p10k.zsh +cp .devcontainer/.zshrc ${ZDOTDIR:-$HOME}/.zshrc + +#? Install zsh syntax highlighting +git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting +echo "source ${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc + +#? Install zsh autosuggestions +git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions + +echo "Done! 🎉" \ No newline at end of file diff --git a/scripts/install/install.sh b/scripts/install/install.sh new file mode 100755 index 00000000..2a627343 --- /dev/null +++ b/scripts/install/install.sh @@ -0,0 +1,9 @@ +echo "🚀 Installing ZSH powerlevel10k..." +./scripts/install/install-zsh10k.sh 1>/dev/null 2>&1 +echo "🔥 Installing bun..." +./scripts/install/install-bun.sh 1>/dev/null 2>&1 +echo "🛠️ Installing git hooks..." +./scripts/install/install-git-hooks.sh 1>/dev/null 2>&1 +echo "📦 Installing dependencies..." +npm install 1>/dev/null 2>&1 +echo "🎉 Installing done!" \ No newline at end of file diff --git a/scripts/is-initialized.ts b/scripts/is-initialized.ts index 334d40c1..0fa4dd3a 100644 --- a/scripts/is-initialized.ts +++ b/scripts/is-initialized.ts @@ -3,6 +3,7 @@ import { config } from "dotenv" import * as fs from "fs/promises" import * as path from "path" import * as url from "url" +import { IRuntime } from "./runtime" const __dirname = url.fileURLToPath(new URL(".", import.meta.url)) const rootPath = path.join(__dirname, "..") @@ -11,9 +12,12 @@ config({ path: path.join(rootPath, ".env") }) if (process.env.SKIP_INIT_CHECK === "true") process.exit(0) try { + const projectInfo = await fs.readFile(path.join(rootPath, "scripts", ".pinfo.json"), "utf8") + const projectInfoJson = JSON.parse(projectInfo) as { runtime: IRuntime } + const currentRuntime = projectInfoJson.runtime await fs.access(path.join(rootPath, "scripts", ".init-todo")) console.log(chalk.red("Project not initialized!")) - console.log(chalk.yellow("Run `npm run init` to initialize the project")) + console.log(chalk.yellow(`Run \`${currentRuntime.npm} run init\` to initialize the project`)) process.exit(1) } catch { // Do nothing diff --git a/scripts/package-lock.json b/scripts/package-lock.json index cc22772d..c0302b52 100644 --- a/scripts/package-lock.json +++ b/scripts/package-lock.json @@ -9,12 +9,10 @@ "version": "1.0.0", "hasInstallScript": true, "dependencies": { + "@types/inquirer": "^9.0.3", "chalk": "^5.3.0", "depcheck": "^1.4.6", "inquirer": "^9.2.11" - }, - "devDependencies": { - "@types/inquirer": "^9.0.3" } }, "node_modules/@babel/code-frame": { @@ -308,10 +306,9 @@ } }, "node_modules/@types/inquirer": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz", - "integrity": "sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==", - "dev": true, + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.4.tgz", + "integrity": "sha512-x8UgutCLm5tsp995aeYB8dlT+sGBCtv0zE43tHvo7OljtlA2Rn4+COyLKe9+YjB20uy0G14y0C9vCD2KtNtyGA==", "dependencies": { "@types/through": "*", "rxjs": "^7.2.0" @@ -325,8 +322,7 @@ "node_modules/@types/node": { "version": "20.7.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.7.0.tgz", - "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==", - "dev": true + "integrity": "sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -337,7 +333,6 @@ "version": "0.0.31", "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.31.tgz", "integrity": "sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==", - "dev": true, "dependencies": { "@types/node": "*" } diff --git a/scripts/package.json b/scripts/package.json index 9396536b..5ffbd923 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -7,15 +7,13 @@ "depcheck": "npx tsx depcheck.ts", "is-initialized": "npx tsx is-initialized.ts", "postinstall": "npx patch-package", - "preinstall": "npx only-allow npm" + "preinstall": "npx -y only-allow-many npm" }, "type": "module", "dependencies": { + "@types/inquirer": "^9.0.3", "chalk": "^5.3.0", "depcheck": "^1.4.6", "inquirer": "^9.2.11" - }, - "devDependencies": { - "@types/inquirer": "^9.0.3" } } diff --git a/scripts/replace-tokens.ts b/scripts/replace-tokens.ts index 8e3b4d2b..f195ede4 100644 --- a/scripts/replace-tokens.ts +++ b/scripts/replace-tokens.ts @@ -3,10 +3,8 @@ * This script is intended to run only once at the beginning of the project */ -import chalk from "chalk" +import inquirer from "inquirer" import * as fs from "fs" -import { stdin as input, stdout as output } from "node:process" -import * as readline from "node:readline/promises" import * as path from "path" import * as url from "url" @@ -15,77 +13,72 @@ const __dirname = url.fileURLToPath(new URL(".", import.meta.url)) const filesToCheck = ["docker/docker-compose.yml"] //? Find all tokens of all the files in the root directory -const findTokens = () => { - const tokens: string[] = [] +const findTokens: () => { + [filePath: string]: string[] +} = () => { + const tokens: { + [filePath: string]: string[] + } = {} filesToCheck.forEach((file) => { const filePath = path.join(__dirname, "..", file) const fileContent = fs.readFileSync(filePath, "utf8") const regex = /#{(.*?)}#/g let match while ((match = regex.exec(fileContent)) !== null) { - tokens.push(match[1]) + if (match.index === regex.lastIndex) regex.lastIndex++ + if ((tokens[filePath] as string[] | undefined) && !tokens[filePath].includes(match[1])) + tokens[filePath].push(match[1]) + else tokens[filePath] = [match[1]] } }) return tokens } -//? Function replace in file -const replace = async (options: { files: string[]; from: RegExp; to: string }) => { - const { files, from, to } = options - const promises: Promise[] = [] - files.forEach((file) => { - const promise = new Promise((resolve, reject) => { - try { - const filePath = path.join(__dirname, "..", file) - const fileContent = fs.readFileSync(filePath, "utf8") - const newFileContent = fileContent.replace(from, to) - fs.writeFileSync(filePath, newFileContent) - resolve() - } catch (error) { - reject(error) - } - }) - promises.push(promise) - }) - return Promise.all(promises).then(() => { - return files - }) -} +export const replaceTokens = async () => { + const tokens = findTokens() -//? Replace a token in files -const replaceToken = async (token: string, value: string) => { - const options = { - files: filesToCheck, - from: new RegExp(`#{${token}}#`, "g"), - to: value, - } - try { - await replace(options) - } catch (error) { - console.error("Error occurred:", error) + const allTokens = Object.values(tokens).flat() + const allTokensValues: { + [token: string]: string + } = {} + let i = 0 + for (const token of allTokens) { + const answers = await inquirer.prompt([ + { + type: "input", + name: token, + message: `What is the value of ${token}?`, + prefix: `🔑 [${i + 1}/${allTokens.length}]`, + }, + ]) + allTokensValues[token] = answers[token] + i++ } -} -export const replaceTokens = async () => { - return new Promise(async (resolve) => { - const tokens = findTokens() - console.log(chalk.blue(`Tokens found: ${tokens.join(", ")}`)) - for (let i = 0; i < tokens.length; i++) { - const token = tokens[i] - //? Ask for the value of the token - const rl = readline.createInterface({ input, output }) - const value = await rl.question(chalk.blue(`Value for the token ${token}: `)) - if (!value) { - console.log(chalk.yellowBright("No value provided, skipping...")) - // throw new Error(`No value provided for the token ${token}`) + //? Replace all tokens in the files + for (const [filePath, fileTokens] of Object.entries(tokens)) { + const fileContent = fs.readFileSync(filePath, "utf8") + let newFileContent = fileContent + for (const token of fileTokens) { + if (!allTokensValues[token]) continue + newFileContent = newFileContent.replaceAll(`#{${token}}#`, allTokensValues[token]) + console.log(`Done for ${filePath}`) + if (token === "PROJECT_NAME") { + //? Replace the project name in the devcontainer.json & package.json + const nameToReplace = "next-boilerplate" + const newProjectName = allTokensValues[token] + const devContainerFile = path.join(__dirname, "..", ".devcontainer/devcontainer.json") + const pJsonFile = path.join(__dirname, "..", "package.json") + const devContainerFileContent = fs.readFileSync(devContainerFile, "utf8") + const pJsonFileContent = fs.readFileSync(pJsonFile, "utf8") + const newDevContainerFileContent = devContainerFileContent.replaceAll(nameToReplace, newProjectName) + const newPJsonFileContent = pJsonFileContent.replaceAll(nameToReplace, newProjectName) + fs.writeFileSync(devContainerFile, newDevContainerFileContent, "utf8") + console.log(`Done for ${devContainerFile}`) + fs.writeFileSync(pJsonFile, newPJsonFileContent, "utf8") + console.log(`Done for ${pJsonFile}`) } - //? Replace the token with the value - if (!value) continue - await replaceToken(token, value) - console.log(chalk.green(`Token ${token} replaced with ${value}`)) - rl.close() } - - resolve() - }) + fs.writeFileSync(filePath, newFileContent, "utf8") + } } diff --git a/scripts/runtime.ts b/scripts/runtime.ts index f7ec4285..88a1f847 100644 --- a/scripts/runtime.ts +++ b/scripts/runtime.ts @@ -1,15 +1,13 @@ import chalk from "chalk" import inquirer from "inquirer" import * as fs from "fs/promises" -// import { stdin as input, stdout as output } from "node:process" -// import * as readline from "node:readline/promises" import * as path from "path" import * as url from "url" const __dirname = url.fileURLToPath(new URL(".", import.meta.url)) const root = path.join(__dirname, "..") -type IRuntime = { +export type IRuntime = { npm: string npx: string } @@ -18,17 +16,29 @@ const basicFiles = [ { path: "package.json", replace: (oldRuntime: IRuntime, newRuntime: IRuntime, content: string) => { - content = content.replaceAll(`${oldRuntime.npx} `, `${newRuntime.npx} `) - content = content.replaceAll(`only-allow ${oldRuntime.npm}`, `only-allow ${newRuntime.npm}`) - return content.replaceAll(`${oldRuntime.npm} `, `${newRuntime.npm} `) + if (oldRuntime.npm === "npm" && newRuntime.npm !== "npm") { + content = content.replaceAll( + `only-allow-many ${oldRuntime.npm}`, + `only-allow-many ${newRuntime.npm} ${oldRuntime.npm}` + ) + } else { + content = content.replaceAll(`only-allow-many ${oldRuntime.npm} npm`, `only-allow-many ${newRuntime.npm}`) + } + return content }, }, { path: "scripts/package.json", replace: (oldRuntime: IRuntime, newRuntime: IRuntime, content: string) => { - content = content.replaceAll(`${oldRuntime.npx} `, `${newRuntime.npx} `) - content = content.replaceAll(`only-allow ${oldRuntime.npm}`, `only-allow ${newRuntime.npm}`) - return content.replaceAll(`${oldRuntime.npm} `, `${newRuntime.npm} `) + if (oldRuntime.npm === "npm" && newRuntime.npm !== "npm") { + content = content.replaceAll( + `only-allow-many ${oldRuntime.npm}`, + `only-allow-many ${newRuntime.npm} ${oldRuntime.npm}` + ) + } else { + content = content.replaceAll(`only-allow-many ${oldRuntime.npm} npm`, `only-allow-many ${newRuntime.npm}`) + } + return content }, }, { @@ -176,6 +186,10 @@ export const runtime = async () => { const newRuntime = res.runtime === "node (npm)" ? { npm: "npm", npx: "npx" } : { npm: "bun", npx: "bunx" } await processBasicFiles(currentRuntime, newRuntime) + //? Delete old node_modules + console.log(chalk.blue(`Deleting old node_modules`)) + await fs.rm(path.join(root, "node_modules"), { recursive: true, force: true }) + //? Save the new runtime projectInfoJson.runtime = newRuntime await fs.writeFile(path.join(root, "scripts", ".pinfo.json"), JSON.stringify(projectInfoJson, null, 2) + "\n", "utf8") diff --git a/src/app/[lang]/(protected)/profile/page.tsx b/src/app/[lang]/(protected)/profile/page.tsx index 17b4d962..de13481d 100644 --- a/src/app/[lang]/(protected)/profile/page.tsx +++ b/src/app/[lang]/(protected)/profile/page.tsx @@ -19,7 +19,7 @@ export default async function Profile({ const session = await getServerSession(nextAuthOptions) return ( -
+
diff --git a/src/assets/.gitkeep b/src/assets/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/src/components/locale-switcher.tsx b/src/components/locale-switcher.tsx index 7f5515ec..80a1582a 100644 --- a/src/components/locale-switcher.tsx +++ b/src/components/locale-switcher.tsx @@ -32,7 +32,7 @@ export default function LocaleSwitcher({ lang }: { lang: Locale }) { setDynamicLocale(value) }} > - + diff --git a/src/components/need-save-popup.tsx b/src/components/need-save-popup.tsx index d0abd0ed..eee3d6b3 100644 --- a/src/components/need-save-popup.tsx +++ b/src/components/need-save-popup.tsx @@ -16,13 +16,13 @@ export type INeedSavePopupProps = { export default function NeedSavePopup({ show, onReset, onSave, text, isSubmitting, dictionary }: INeedSavePopupProps) { return (
{ - resetForm() - }, [resetForm]) - if (form.formState.isDirty && !isNotSensibleInformationsUpdated) { setIsNotSensibleInformationsUpdated(true) } else if (!form.formState.isDirty && isNotSensibleInformationsUpdated) { diff --git a/src/lib/auth/index.ts b/src/lib/auth/index.ts index 07917387..02abea8b 100644 --- a/src/lib/auth/index.ts +++ b/src/lib/auth/index.ts @@ -143,6 +143,11 @@ export const nextAuthOptions: NextAuthOptions & { if ("role" in user) token.role = user.role as string if ("uuid" in user) token.uuid = user.uuid as string if ("emailVerified" in user) token.emailVerified = user.emailVerified as Date + + //* Send verification email if needed + if (user.email && "emailVerified" in user && !user.emailVerified) { + await sendVerificationEmail({ input: { email: user.email, silent: true }, ctx: {} as ITrpcContext }) + } } return token diff --git a/src/lib/rate-limit.ts b/src/lib/rate-limit.ts index d0d77363..6772f188 100644 --- a/src/lib/rate-limit.ts +++ b/src/lib/rate-limit.ts @@ -16,12 +16,16 @@ export const RATE_LIMIT_DURATION = 30 const rateLimiter = async (identifier: string, limit: number, duration: number): Promise => { const key = `rate_limit:${identifier}` const currentCount = await client.get(key) - const count = parseInt(currentCount as string, 10) || 0 + if (currentCount === null) { + client.setex(key, duration, "1") + return { limit, remaining: limit - 1, success: true } + } else { + client.incr(key) + } + const count = currentCount ? parseInt(currentCount, 10) : 1 if (count >= limit) { return { limit, remaining: limit - count, success: false } } - client.incr(key) - client.expire(key, duration) return { limit, remaining: limit - (count + 1), success: true } } diff --git a/src/lib/redis.ts b/src/lib/redis.ts index f20ff956..6a5e32ea 100644 --- a/src/lib/redis.ts +++ b/src/lib/redis.ts @@ -49,15 +49,29 @@ export const redisGetSert = async ( return executeCallback() } -export const redisDelete = async (groupOrKey: string | string[], pipeline?: ChainableCommander) => { +export const redisDelete = async ( + groupOrKey: string | string[], + pipeline?: ChainableCommander, + { + forceExec, + }: { + forceExec?: boolean + } = {} +) => { const redisPipeline = pipeline ?? redis.pipeline() if (Array.isArray(groupOrKey)) { - await Promise.all(groupOrKey.map(async (key) => redisDelete(key, redisPipeline))) + await Promise.all( + groupOrKey.map(async (key) => + redisDelete(key, redisPipeline, { + forceExec: true, + }) + ) + ) return } const keys = await redis.smembers("group_" + groupOrKey) redisPipeline.del(...keys) redisPipeline.del(groupOrKey) - if (!pipeline) await redisPipeline.exec() + if (forceExec || !pipeline) await redisPipeline.exec() } diff --git a/src/lib/trpc/provider.tsx b/src/lib/trpc/provider.tsx index 874701ce..9d99471f 100644 --- a/src/lib/trpc/provider.tsx +++ b/src/lib/trpc/provider.tsx @@ -1,6 +1,6 @@ "use client" import { QueryClient, QueryClientProvider } from "@tanstack/react-query" -import { httpBatchLink } from "@trpc/client" +import { httpBatchLink, loggerLink } from "@trpc/client" import React, { useState } from "react" import SuperJSON from "superjson" import { trpc } from "./client" @@ -12,6 +12,23 @@ export default function TrpcProvider({ children }: { children: React.ReactNode } trpc.createClient({ transformer: SuperJSON, links: [ + // adds pretty logs to your console in development and logs errors in production + loggerLink({ + enabled: (opts) => + (process.env.NODE_ENV === "development" && typeof window !== "undefined") || + (opts.direction === "down" && opts.result instanceof Error), + }), + // splitLink({ + // condition(op) { + // return op.type === "subscription" + // }, + // true: wsLink({ + // client: wsClient, + // }), + // false: httpBatchLink({ + // url: getUrl(), + // }), + // }), httpBatchLink({ url: getUrl(), }), diff --git a/src/middleware.ts b/src/middleware.ts index b05014c9..827b4e1b 100644 --- a/src/middleware.ts +++ b/src/middleware.ts @@ -70,7 +70,6 @@ export function middleware(request: NextRequest) { // The new URL is now /en-US/products const params = new URLSearchParams(request.nextUrl.search) const redirectUrl = new URL(`/${locale}${pathname.startsWith("/") ? "" : "/"}${pathname}?${params}`, request.url) - logger.debug(`redirecting to ${redirectUrl}`) return NextResponse.redirect(redirectUrl) } } diff --git a/tsconfig.json b/tsconfig.json index 7bc76667..1b516742 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -33,7 +33,8 @@ "**/*.mjs", ".next/types/**/*.ts", ".eslintrc.js", - "postcss.config.js" + "postcss.config.js", + "tailwind.config.js" ], "exclude": ["node_modules"] }