diff --git a/.github/actions/pnpm-install/action.yml b/.github/actions/pnpm-install/action.yml
index a85d4b92f..f5594297f 100644
--- a/.github/actions/pnpm-install/action.yml
+++ b/.github/actions/pnpm-install/action.yml
@@ -36,7 +36,7 @@ runs:
id: pnpm-config
shell: bash
run: |
- echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
+ echo "STORE_PATH=$(pnpm store path | tr -d '\n')" >> $GITHUB_OUTPUT
- name: ⚙️ Cache rotation keys
id: cache-rotation
diff --git a/.github/workflows/docker-push.yml b/.github/workflows/docker-push.yml
index 2208e9c47..f9fe7ad0f 100644
--- a/.github/workflows/docker-push.yml
+++ b/.github/workflows/docker-push.yml
@@ -4,6 +4,13 @@ on:
push:
branches:
- develop
+ tags:
+ - 'v*'
+ paths:
+ - 'apps/nestjs-backend/**'
+ - 'apps/nextjs-app/**'
+ - 'packages/core/**'
+ - 'packages/sdk/**'
jobs:
build-push:
@@ -31,6 +38,12 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.PACKAGES_KEY }}
+ - name: Login to Docker Hub registry
+ uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKER_HUB_NAME }}
+ password: ${{ secrets.DOCKER_HUB_AK }}
+
- name: Login to Ali container registry
uses: docker/login-action@v3
with:
@@ -51,11 +64,10 @@ jobs:
images: |
registry.cn-shenzhen.aliyuncs.com/teable/${{ matrix.image }}
ghcr.io/teableio/${{ matrix.image }}
+ docker.io/teableio/${{ matrix.image }}
tags: |
- type=ref,event=branch
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- type=sha
# set latest tag for default branch
type=raw,value=latest,enable={{is_default_branch}}
- name: ⚙️ Set up QEMU
@@ -65,7 +77,7 @@ jobs:
- name: 📦 Build and push
run: |
zx scripts/build-image.mjs --file=dockers/teable/${{ matrix.file }} \
- --cache-from=type=registry,ref=ghcr.io/teableio/${{ matrix.image }}:buildcache \
- --cache-to=type=registry,ref=ghcr.io/teableio/${{ matrix.image }}:buildcache,mode=max \
+ --build-arg="ENABLE_CSP=false" \
--tag="${{ steps.meta.outputs.tags }}" \
+ --platforms="linux/amd64,linux/arm64" \
--push
diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml
index 771984583..7b4e9535b 100644
--- a/.github/workflows/integration-tests.yml
+++ b/.github/workflows/integration-tests.yml
@@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- node-version: [20.x]
+ node-version: [20.9.0]
database-type: [postgres, sqlite]
env:
CI: 1
diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml
index 0df5fd561..c55f391f8 100644
--- a/.github/workflows/linting.yml
+++ b/.github/workflows/linting.yml
@@ -15,7 +15,7 @@ jobs:
strategy:
matrix:
- node-version: [20.x]
+ node-version: [20.9.0]
steps:
- uses: actions/checkout@v4
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index 6480d4830..a48b551e2 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -1,6 +1,9 @@
name: Unit Tests
on:
+ push:
+ branches:
+ - develop
pull_request:
branches:
- develop
@@ -11,13 +14,13 @@ on:
- 'packages/sdk/**'
jobs:
- build:
+ test:
runs-on: ubuntu-latest
name: Unit Tests
strategy:
matrix:
- node-version: [20.x]
+ node-version: [20.9.0]
steps:
- uses: actions/checkout@v4
@@ -41,4 +44,18 @@ jobs:
- name: 🧪 Run Tests
run: |
- pnpm g:test-unit
+ pnpm g:test-unit-cover
+ - name: Coveralls Parallel
+ uses: coverallsapp/github-action@v2
+ with:
+ flag-name: run-${{ join(matrix.*, '-') }}
+ parallel: true
+
+ finish:
+ needs: test
+ runs-on: ubuntu-latest
+ steps:
+ - name: Coveralls Finished
+ uses: coverallsapp/github-action@v2
+ with:
+ parallel-finished: true
diff --git a/.npmrc b/.npmrc
index ef109fbd6..811419d83 100644
--- a/.npmrc
+++ b/.npmrc
@@ -2,7 +2,7 @@ engine-strict=true
strict-peer-dependencies=false
auto-install-peers=true
lockfile=true
+# force use npmjs.org registry
registry=https://registry.npmjs.org/
+use-node-version=20.9.0
save-prefix=''
-# http-proxy=http://127.0.0.1:7890
-# https-proxy=http://127.0.0.1:7890
\ No newline at end of file
diff --git a/.nvmrc b/.nvmrc
deleted file mode 100644
index c946e1df4..000000000
--- a/.nvmrc
+++ /dev/null
@@ -1 +0,0 @@
-v20.9.0
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 5ebf14108..8594be86b 100644
--- a/Makefile
+++ b/Makefile
@@ -56,10 +56,6 @@ else ifeq (docker.restart,$(firstword $(MAKECMDGOALS)))
SERVICE_TARGET = true
else ifeq (docker.up,$(firstword $(MAKECMDGOALS)))
SERVICE_TARGET = true
-else ifeq (docker.build,$(firstword $(MAKECMDGOALS)))
- SERVICE_TARGET = true
-else ifeq (build-nocache,$(firstword $(MAKECMDGOALS)))
- SERVICE_TARGET = true
else ifeq (docker.await,$(firstword $(MAKECMDGOALS)))
SERVICE_TARGET = true
else ifeq (docker.run,$(firstword $(MAKECMDGOALS)))
@@ -141,8 +137,6 @@ ifneq ($(NETWORK_MODE),host)
$(warning ${GREEN}network $(NETWORK_MODE) removed${RESET})
endif
-docker.build:
- $(DOCKER_COMPOSE_ARGS) $(DOCKER_COMPOSE) $(COMPOSE_FILE_ARGS) build --parallel --progress=plain $(SERVICE)
docker.run: docker.create.network
$(DOCKER_COMPOSE_ARGS) $(DOCKER_COMPOSE) $(COMPOSE_FILE_ARGS) run -T --no-deps --rm $(SERVICE) $(SERVICE_ARGS)
@@ -193,6 +187,18 @@ docker.status:
docker.images:
$(DOCKER_COMPOSE_ARGS) $(DOCKER_COMPOSE) $(COMPOSE_FILE_ARGS) images
+
+build.app:
+ @zx --version || pnpm add -g zx; \
+ zx scripts/build-image.mjs --file=dockers/teable/Dockerfile \
+ --tag=teable:develop
+
+build.db-migrate:
+ @zx --version || pnpm add -g zx; \
+ zx scripts/build-image.mjs --file=dockers/teable/Dockerfile.db-migrate \
+ --tag=teable-db-migrate:develop
+
+
sqlite.integration.test:
@export PRISMA_DATABASE_URL='file:../../db/main.db'; \
make sqlite.mode; \
diff --git a/README.md b/README.md
index 91cd06fe8..bf565eb68 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
- Home | Help | Blog | Template | Roadmap | Discord
+ Home | Help | Blog | Template | Roadmap | Discord | Twitter
@@ -53,7 +53,7 @@
## ✨Features
-#### 📊 Spreadsheet-like interface
+#### 📊 Spreadsheet-like Interface
All you want is here
@@ -106,7 +106,7 @@ You own your data, in spite of the cloud
- Bring your own database (coming soon)
-#### ⚡️ Real-time collaboration
+#### ⚡️ Real-time Collaboration
Designed for teams
@@ -114,7 +114,7 @@ Designed for teams
- Seamlessly integrate collaboration member invitation and management
- Perfect permission management mechanism, from table to column level
-#### 🧩 Extensions (coming soon)
+#### 🧩 Extensions (Coming Soon)
Expand infinite possibilities
@@ -122,14 +122,14 @@ Expand infinite possibilities
- Customize your own application with extremely low cost
- Extremely easy-to-use script extensions mode
-#### 🤖 Automation (coming soon)
+#### 🤖 Automation (Coming Soon)
Empower data-driven workflows effortlessly and seamlessly
- Design your workflow with AI or Visual programming
- Super easy to retrieve data from the table
-#### 🧠 Copilot (coming soon)
+#### 🧠 Copilot (Coming Soon)
Native Integrated AI ability
@@ -139,7 +139,7 @@ Native Integrated AI ability
- Chat 2 Action. "After the order is paid and completed, an email notification will be sent to the customer"
- More actions...
-#### 🗄️ Support for multiple databases (coming soon)
+#### 🗄️ Support for Multiple Databases (Coming Soon)
Choose the SQL database you like
@@ -154,9 +154,8 @@ Choose the SQL database you like
```
.
├── apps
-│ ├── electron (desktop, include a electron app )
│ ├── nextjs-app (front-end, include a nextjs app)
-│ └── nestjs-backend (backend, running on server or inside electron app)
+│ └── nestjs-backend (backend, include a nestjs app)
└── packages
├── common-i18n (locales)
├── core (share code and interface)
@@ -168,7 +167,7 @@ Choose the SQL database you like
## Deploy
-### Deploy with docker
+### Deploy With Docker
```sh
cd dockers/examples/standalone/
@@ -177,18 +176,21 @@ docker-compose up -d
for more details, see [dockers/examples](dockers/examples)
-### Deploy with Railway
+### One Click Deployment
+
+These platforms are easy to deploy with one click and come with free credits.
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/template/wada5e?referralCode=rE4BjB)
+[![Deploy on Zeabur](https://zeabur.com/button.svg)](https://zeabur.com/templates/QF8695)
+
+[![Deploy on Sealos](https://raw.githubusercontent.com/labring-actions/templates/main/Deploy-on-Sealos.svg)](https://cloud.sealos.io/?openapp=system-template%3FtemplateName%3Dteable)
+
## Development
#### 1. Initialize
```sh
-# Use `.nvmrc` file to specify node version(Requires pre `nvm` tools)
-nvm install && nvm use
-
# Enabling the Help Management Package Manager
corepack enable
@@ -207,14 +209,14 @@ we currently support `sqlite` and `postgres`, you can switch between them by run
make switch-db-mode
```
-#### 3. Custom environment variables(optional)
+#### 3. Custom Environment Variables(Optional)
```sh
cd apps/nextjs-app
copy .env.development .env.development.local
```
-#### 4. Run dev server
+#### 4. Run Dev Server
you just need to start backend, it will start next server for frontend automatically, file change will be auto reload
@@ -236,7 +238,7 @@ Giving non-techy people the ability to create their software sounds exciting. Bu
- Maintaining systems with complex setups can be hard for developers, especially if these aren't built using common software standards.
- Systems that don't use these standards might need revamping or replacing, costing more in the long run. It might even mean ditching the no-code route and going back to traditional coding.
-#### What we think the future of no-code products look like
+#### What We Think the Future Of No-code Products Look Like
- An interface that anyone can use to build applications easily.
- Easy access to data, letting users grab, move, and reuse their information as they wish.
diff --git a/apps/electron/.gitignore b/apps/electron/.gitignore
deleted file mode 100644
index 895e025e0..000000000
--- a/apps/electron/.gitignore
+++ /dev/null
@@ -1,96 +0,0 @@
-# Logs
-logs
-*.log
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-lerna-debug.log*
-
-# Diagnostic reports (https://nodejs.org/api/report.html)
-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
-
-# Runtime data
-pids
-*.pid
-*.seed
-*.pid.lock
-.DS_Store
-
-# Directory for instrumented libs generated by jscoverage/JSCover
-lib-cov
-
-# Coverage directory used by tools like istanbul
-coverage
-*.lcov
-
-# nyc test coverage
-.nyc_output
-
-# node-waf configuration
-.lock-wscript
-
-# Compiled binary addons (https://nodejs.org/api/addons.html)
-build/Release
-
-# Dependency directories
-node_modules/
-jspm_packages/
-
-# TypeScript v1 declaration files
-typings/
-
-# TypeScript cache
-*.tsbuildinfo
-
-# Optional npm cache directory
-.npm
-
-# Optional eslint cache
-.eslintcache
-
-# Optional REPL history
-.node_repl_history
-
-# Output of 'npm pack'
-*.tgz
-
-# Yarn Integrity file
-.yarn-integrity
-
-# dotenv environment variables file
-.env
-.env.test
-
-# parcel-bundler cache (https://parceljs.org/)
-.cache
-
-# next.js build output
-.next
-
-# nuxt.js build output
-.nuxt
-
-# vuepress build output
-.vuepress/dist
-
-# Serverless directories
-.serverless/
-
-# FuseBox cache
-.fusebox/
-
-# DynamoDB Local files
-.dynamodb/
-
-# Webpack
-.webpack/
-
-# Vite
-.vite/
-
-# Electron-Forge
-out/
-
-server/
-
-.yarn/
\ No newline at end of file
diff --git a/apps/electron/README.md b/apps/electron/README.md
deleted file mode 100644
index 3421e516f..000000000
--- a/apps/electron/README.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# @teable/electron
-
-This is a repository in a monorepo project used to package applications into Electron desktop apps.
-
-## Getting Started
-
-### Install Dependencies
-
-Run the following command in the root directory to install the dependencies:
-
-```
-yarn install
-```
-
-### Development Mode
-
-Run the following command to start the development mode, which loads the local web application in Electron:
-
-```
-yarn start
-```
-
-> tips: Ensure that nest is start.
-
-### Start prepare
-
-Build all nextjs and nestjs dependent packages:
-
-```
-yarn g:build
-```
-
-Run prepare scripts
-
-```
-yarn prepare:server
-```
-
-### Building the App
-
-Run the following command to package the application into an Electron desktop app:
-
-- Build mac:
-
-```
-yarn make:mac
-```
-
-- Build windows:
-
-```
-yarn make:win
-```
-
-The packaged app will be generated in the `out` directory.
-
-Debug build:
-
-```
-yarn package:debug
-```
-
-## Notes
-
-- Make sure you have Node.js and npm installed on your local machine.
-- Packaging the Electron app may take some time, please be patient.
-- If you encounter any issues during the packaging process, check the console output or log files for error information.
-
-## TODO
-
-- [ ] Organize environment variable configuration.
-- [ ] The database file can be initialized to any location.
-- [ ] Optimize packing volume.
diff --git a/apps/electron/forge.config.js b/apps/electron/forge.config.js
deleted file mode 100644
index fefcbedf3..000000000
--- a/apps/electron/forge.config.js
+++ /dev/null
@@ -1,93 +0,0 @@
-const path = require('path');
-
-module.exports = {
- packagerConfig: {
- appId: 'YourAppID',
- name: 'TeableApp',
- osxSign: {},
- icon: 'static/icons/icon',
- ignore: (file) => {
- const isTsOrMap = (p) => /[^/\\]+\.js\.map$/.test(p) || /[^/\\]+\.ts$/.test(p);
- if (!file) return false;
-
- if (file.startsWith('/.vite')) {
- return false;
- }
-
- if (file === '/package.json') {
- return false;
- }
-
- if (file.startsWith('/static')) {
- return false;
- }
-
- if (
- file.startsWith('/server') &&
- !isTsOrMap(file) &&
- !file.startsWith('/server/.yarn') &&
- !file.startsWith('/server/apps/nextjs-app/.next/cache')
- ) {
- return false;
- }
-
- if (file.startsWith('/node_modules') && !isTsOrMap(file)) {
- return false;
- }
-
- return true;
- },
- },
- rebuildConfig: {},
- makers: [
- {
- name: '@electron-forge/maker-zip',
- config: {},
- },
- {
- name: '@electron-forge/maker-squirrel',
- config: {},
- },
- // {
- // name: '@electron-forge/maker-deb',
- // config: {},
- // },
- // {
- // name: '@electron-forge/maker-rpm',
- // config: {},
- // },
- {
- name: '@electron-forge/maker-dmg',
- config: {
- background: path.join(__dirname, 'static', 'background.png'),
- icon: path.join(__dirname, 'static', 'icons', 'icon.icns'),
- },
- },
- ],
- plugins: [
- {
- name: '@electron-forge/plugin-vite',
- config: {
- // `build` can specify multiple entry builds, which can be Main process, Preload scripts, Worker process, etc.
- // If you are familiar with Vite configuration, it will look really familiar.
- build: [
- {
- // `entry` is just an alias for `build.lib.entry` in the corresponding file of `config`.
- entry: 'src/main.js',
- config: 'vite.main.config.mjs',
- },
- {
- entry: 'src/preload.js',
- config: 'vite.preload.config.mjs',
- },
- ],
- renderer: [
- {
- name: 'main_window',
- config: 'vite.renderer.config.mjs',
- },
- ],
- },
- },
- ],
-};
diff --git a/apps/electron/index.html b/apps/electron/index.html
deleted file mode 100644
index 1556a2a95..000000000
--- a/apps/electron/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
- Hello World!
-
-
- 💖 Hello World!
- Welcome to your Electron application.
-
-
-
diff --git a/apps/electron/package.json b/apps/electron/package.json
deleted file mode 100644
index 5f9c937e5..000000000
--- a/apps/electron/package.json
+++ /dev/null
@@ -1,38 +0,0 @@
-{
- "name": "@table-group/electron",
- "productName": "electron-vite",
- "version": "1.0.0",
- "description": "My Electron application description",
- "main": ".vite/build/main.js",
- "scripts": {
- "prepare:server": "rm -rf server && node ./scripts/prepare-server.js",
- "start": "electron-forge start",
- "package": "electron-forge package",
- "package:debug": "electron-forge package && out/TeableApp-darwin-x64/TeableApp.app/Contents/MacOS/TeableApp --enable-logging",
- "make:mac": "electron-forge make --platform=mas --arch=x64",
- "make:win": "electron-forge make --platform=win32 --arch=x64",
- "publish": "electron-forge publish",
- "lint": "echo \"No linting configured\""
- },
- "keywords": [],
- "author": {
- "name": "boris",
- "email": "boris2code@outlook.com"
- },
- "license": "MIT",
- "devDependencies": {
- "@electron-forge/cli": "6.2.1",
- "@electron-forge/maker-deb": "6.2.1",
- "@electron-forge/maker-dmg": "6.2.1",
- "@electron-forge/maker-rpm": "6.2.1",
- "@electron-forge/maker-squirrel": "6.2.1",
- "@electron-forge/maker-zip": "6.2.1",
- "@electron-forge/plugin-auto-unpack-natives": "6.2.1",
- "@electron-forge/plugin-vite": "6.2.1",
- "electron": "25.3.0",
- "is-port-reachable": "3.1.0"
- },
- "dependencies": {
- "electron-squirrel-startup": "1.0.0"
- }
-}
diff --git a/apps/electron/scripts/prepare-server.js b/apps/electron/scripts/prepare-server.js
deleted file mode 100644
index 65ee3481c..000000000
--- a/apps/electron/scripts/prepare-server.js
+++ /dev/null
@@ -1,83 +0,0 @@
-const path = require('path');
-const { execSync } = require('child_process');
-const { copySync, writeFileSync } = require('fs-extra');
-
-const root = path.join(__dirname, '../../../');
-
-// enter project directory
-const serverOutput = 'apps/electron/server';
-
-const packages = [
- {
- path: '',
- files: ['package.json', '.yarnrc.yml', '.yarn/releases', '.yarn/plugins', 'static'],
- },
- {
- path: 'apps/nestjs-backend',
- files: ['package.json', 'dist'],
- },
- {
- path: 'apps/nextjs-app',
- files: ['package.json', '.next', '.env', 'public'],
- },
- {
- path: 'packages/core',
- files: ['package.json', 'dist'],
- },
- {
- path: 'packages/db-main-prisma',
- files: ['package.json', 'dist', 'prisma', '.env'],
- },
- {
- path: 'packages/icons',
- files: ['package.json', 'dist'],
- },
- {
- path: 'packages/openapi',
- files: ['package.json', 'dist'],
- },
- {
- path: 'packages/sdk',
- files: ['package.json', 'dist'],
- },
- {
- path: 'packages/ui-lib',
- files: ['package.json', 'dist'],
- },
- {
- path: 'packages/common-i18n',
- files: ['package.json', 'src'],
- },
-];
-
-function copyPackages() {
- packages.forEach((pkg) => {
- console.log('begin copy...', pkg.path);
- pkg.files.forEach((file) => {
- const src = path.join(root, `${pkg.path}/${file}`);
- const dest = path.join(root, `${serverOutput}/${pkg.path}/${file}`);
- copySync(src, dest);
- });
- console.log('completed ✅');
- });
- console.log('🎉 copy packages success!!!');
-}
-
-function fixPostinstall() {
- packages.forEach((pkg) => {
- const packageJsonPath = path.join(root, serverOutput, pkg.path, 'package.json');
- const packageJson = require(packageJsonPath);
- if (pkg.path.includes('db-main-prisma') || !packageJson?.scripts?.postinstall) {
- return;
- }
- delete packageJson.scripts.postinstall;
-
- writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
- });
-}
-
-copyPackages();
-writeFileSync('server/yarn.lock', '');
-fixPostinstall();
-
-execSync('yarn workspaces focus --production --all', { cwd: 'server/', stdio: 'inherit' });
diff --git a/apps/electron/src/env.js b/apps/electron/src/env.js
deleted file mode 100644
index 75e985e66..000000000
--- a/apps/electron/src/env.js
+++ /dev/null
@@ -1,23 +0,0 @@
-import { getAvailablePort } from './utils';
-const path = require('path');
-
-export const initEnv = async () => {
- const defaultPort = 3000;
-
- process.env.ELECTRON_DEV = Boolean(MAIN_WINDOW_VITE_DEV_SERVER_URL);
-
- if (process.env.ELECTRON_DEV === 'true') {
- process.env.PORT = defaultPort;
- return;
- }
- const port = await getAvailablePort(defaultPort);
- process.env.STATIC_PATH = path.join(__dirname, '../..', 'static');
- process.env.NODE_ENV = 'production';
- process.env.SOCKET_PORT = port;
- process.env.PORT = port;
- process.env.NEXTJS_DIR = path.join(process.resourcesPath, '/app/server/apps/nextjs-app');
- process.env.I18N_LOCALES_PATH = path.join(
- process.resourcesPath,
- '/app/server/packages/common-i18n/src/locales'
- );
-};
diff --git a/apps/electron/src/index.css b/apps/electron/src/index.css
deleted file mode 100644
index 8ed165983..000000000
--- a/apps/electron/src/index.css
+++ /dev/null
@@ -1,6 +0,0 @@
-body {
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
- margin: auto;
- max-width: 38rem;
- padding: 2rem;
-}
diff --git a/apps/electron/src/main.js b/apps/electron/src/main.js
deleted file mode 100644
index 840bbc93f..000000000
--- a/apps/electron/src/main.js
+++ /dev/null
@@ -1,60 +0,0 @@
-const { app, BrowserWindow } = require('electron');
-const path = require('path');
-import { startServer } from './server';
-import { initEnv } from './env';
-
-// Handle creating/removing shortcuts on Windows when installing/uninstalling.
-if (require('electron-squirrel-startup')) {
- app.quit();
-}
-
-const createWindow = async () => {
- await initEnv();
- // Create the browser window.
- const mainWindow = new BrowserWindow({
- width: 800,
- height: 600,
- title: 'TeableApp',
- icon: path.join(process.env.STATIC_PATH, 'icons', 'icon.png'),
- webPreferences: {
- preload: path.join(__dirname, 'preload.js'),
- nodeIntegration: true,
- nodeIntegrationInWorker: true,
- scrollBounce: true,
- },
- });
-
- // and load the index.html of the app.
- mainWindow.loadFile(path.join(process.env.STATIC_PATH, 'loading.html'));
- // Open the DevTools.
- process.env.ELECTRON_DEV === 'true' && mainWindow.webContents.openDevTools();
-
- startServer(mainWindow);
-};
-
-// This method will be called when Electron has finished
-// initialization and is ready to create browser windows.
-// Some APIs can only be used after this event occurs.
-app.on('ready', async () => {
- await createWindow();
-});
-
-// Quit when all windows are closed, except on macOS. There, it's common
-// for applications and their menu bar to stay active until the user quits
-// explicitly with Cmd + Q.
-app.on('window-all-closed', () => {
- if (process.platform !== 'darwin') {
- app.quit();
- }
-});
-
-app.on('activate', async () => {
- // On OS X it's common to re-create a window in the app when the
- // dock icon is clicked and there are no other windows open.
- if (BrowserWindow.getAllWindows().length === 0) {
- await createWindow();
- }
-});
-
-// In this file you can include the rest of your app's specific main process
-// code. You can also put them in separate files and import them here.
diff --git a/apps/electron/src/preload.js b/apps/electron/src/preload.js
deleted file mode 100644
index 5e9d369cc..000000000
--- a/apps/electron/src/preload.js
+++ /dev/null
@@ -1,2 +0,0 @@
-// See the Electron documentation for details on how to use preload scripts:
-// https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts
diff --git a/apps/electron/src/renderer.js b/apps/electron/src/renderer.js
deleted file mode 100644
index 22f238be8..000000000
--- a/apps/electron/src/renderer.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * This file will automatically be loaded by vite and run in the "renderer" context.
- * To learn more about the differences between the "main" and the "renderer" context in
- * Electron, visit:
- *
- * https://electronjs.org/docs/tutorial/application-architecture#main-and-renderer-processes
- *
- * By default, Node.js integration in this file is disabled. When enabling Node.js integration
- * in a renderer process, please be aware of potential security implications. You can read
- * more about security risks here:
- *
- * https://electronjs.org/docs/tutorial/security
- *
- * To enable Node.js integration in this file, open up `main.js` and enable the `nodeIntegration`
- * flag:
- *
- * ```
- * // Create the browser window.
- * mainWindow = new BrowserWindow({
- * width: 800,
- * height: 600,
- * webPreferences: {
- * nodeIntegration: true
- * }
- * });
- * ```
- */
-
-import './index.css';
-
-console.log('👋 This message is being logged by "renderer.js", included via Vite');
diff --git a/apps/electron/src/server.js b/apps/electron/src/server.js
deleted file mode 100644
index 2b5cff311..000000000
--- a/apps/electron/src/server.js
+++ /dev/null
@@ -1,12 +0,0 @@
-const path = require('path');
-
-export const startServer = async (mainWindow) => {
- if (process.env.ELECTRON_DEV === 'true') {
- return;
- }
-
- let p = path.join(process.resourcesPath, '/app/server/apps/nestjs-backend/dist/bootstrap.js');
- const backend = require(p);
- await backend.bootstrap();
- mainWindow.loadURL(`http://localhost:${process.env.PORT}/space`);
-};
diff --git a/apps/electron/src/utils.js b/apps/electron/src/utils.js
deleted file mode 100644
index 575772d02..000000000
--- a/apps/electron/src/utils.js
+++ /dev/null
@@ -1,11 +0,0 @@
-import isPortReachable from 'is-port-reachable';
-
-export async function getAvailablePort(dPort) {
- let port = Number(dPort);
- const host = 'localhost';
- while (await isPortReachable(port, { host })) {
- console.log(`> Fail on http://${host}:${port} Trying on ${port + 1}`);
- port++;
- }
- return port;
-}
diff --git a/apps/electron/static/background.png b/apps/electron/static/background.png
deleted file mode 100644
index 64173937e..000000000
Binary files a/apps/electron/static/background.png and /dev/null differ
diff --git a/apps/electron/static/icons/icon.icns b/apps/electron/static/icons/icon.icns
deleted file mode 100644
index 70db60d7d..000000000
Binary files a/apps/electron/static/icons/icon.icns and /dev/null differ
diff --git a/apps/electron/static/icons/icon.ico b/apps/electron/static/icons/icon.ico
deleted file mode 100644
index b5540dbef..000000000
Binary files a/apps/electron/static/icons/icon.ico and /dev/null differ
diff --git a/apps/electron/static/icons/icon.png b/apps/electron/static/icons/icon.png
deleted file mode 100644
index b5540dbef..000000000
Binary files a/apps/electron/static/icons/icon.png and /dev/null differ
diff --git a/apps/electron/static/loading.html b/apps/electron/static/loading.html
deleted file mode 100644
index 56560f189..000000000
--- a/apps/electron/static/loading.html
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
- Loading
-
-
-
-
-
-
diff --git a/apps/electron/vite.main.config.mjs b/apps/electron/vite.main.config.mjs
deleted file mode 100644
index c93ad0382..000000000
--- a/apps/electron/vite.main.config.mjs
+++ /dev/null
@@ -1,10 +0,0 @@
-import { defineConfig } from 'vite';
-
-// https://vitejs.dev/config
-export default defineConfig({
- resolve: {
- // Some libs that can run in both Web and Node.js, such as `axios`, we need to tell Vite to build them in Node.js.
- browserField: false,
- mainFields: ['module', 'jsnext:main', 'jsnext'],
- },
-});
diff --git a/apps/electron/vite.preload.config.mjs b/apps/electron/vite.preload.config.mjs
deleted file mode 100644
index 690be5b1a..000000000
--- a/apps/electron/vite.preload.config.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-import { defineConfig } from 'vite';
-
-// https://vitejs.dev/config
-export default defineConfig({});
diff --git a/apps/electron/vite.renderer.config.mjs b/apps/electron/vite.renderer.config.mjs
deleted file mode 100644
index 690be5b1a..000000000
--- a/apps/electron/vite.renderer.config.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-import { defineConfig } from 'vite';
-
-// https://vitejs.dev/config
-export default defineConfig({});
diff --git a/apps/electron/yarn.lock b/apps/electron/yarn.lock
deleted file mode 100644
index bb601ee87..000000000
--- a/apps/electron/yarn.lock
+++ /dev/null
@@ -1,5087 +0,0 @@
-# This file is generated by running "yarn install" inside your project.
-# Manual changes might be lost - proceed with caution!
-
-__metadata:
- version: 6
- cacheKey: 8
-
-"@electron-forge/cli@npm:^6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/cli@npm:6.2.1"
- dependencies:
- "@electron-forge/core": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- "@electron/get": ^2.0.0
- chalk: ^4.0.0
- commander: ^4.1.1
- debug: ^4.3.1
- fs-extra: ^10.0.0
- listr2: ^5.0.3
- semver: ^7.2.1
- bin:
- electron-forge: dist/electron-forge.js
- electron-forge-vscode-nix: script/vscode.sh
- electron-forge-vscode-win: script/vscode.cmd
- checksum: d17953906ce330965625bd46ab5a0f09ca3c9243f61d55709f358df2f2cecf508eed32938c15321cea938644245b1e89a266c1856f1f530de0320e8a746c7c13
- languageName: node
- linkType: hard
-
-"@electron-forge/core-utils@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/core-utils@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- "@electron/rebuild": ^3.2.10
- "@malept/cross-spawn-promise": ^2.0.0
- chalk: ^4.0.0
- debug: ^4.3.1
- find-up: ^5.0.0
- fs-extra: ^10.0.0
- log-symbols: ^4.0.0
- semver: ^7.2.1
- yarn-or-npm: ^3.0.1
- checksum: 67ce49e67f4c094311f5a4def1ef029be8332e62b07517d32ce37c5804975b421a0ac97455673452a202fdd821b3c6330b2341f18f63b7ade42648778fec43f3
- languageName: node
- linkType: hard
-
-"@electron-forge/core@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/core@npm:6.2.1"
- dependencies:
- "@electron-forge/core-utils": 6.2.1
- "@electron-forge/maker-base": 6.2.1
- "@electron-forge/plugin-base": 6.2.1
- "@electron-forge/publisher-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- "@electron-forge/template-base": 6.2.1
- "@electron-forge/template-vite": 6.2.1
- "@electron-forge/template-webpack": 6.2.1
- "@electron-forge/template-webpack-typescript": 6.2.1
- "@electron/get": ^2.0.0
- "@electron/rebuild": ^3.2.10
- "@malept/cross-spawn-promise": ^2.0.0
- chalk: ^4.0.0
- debug: ^4.3.1
- electron-packager: ^17.1.1
- fast-glob: ^3.2.7
- filenamify: ^4.1.0
- find-up: ^5.0.0
- fs-extra: ^10.0.0
- got: ^11.8.5
- interpret: ^3.1.1
- listr2: ^5.0.3
- lodash: ^4.17.20
- log-symbols: ^4.0.0
- node-fetch: ^2.6.7
- progress: ^2.0.3
- rechoir: ^0.8.0
- resolve-package: ^1.0.1
- semver: ^7.2.1
- source-map-support: ^0.5.13
- sudo-prompt: ^9.1.1
- username: ^5.1.0
- yarn-or-npm: ^3.0.1
- checksum: c6d9bc103d0a6ebd8aebed36c93e576c375c411f9e31ca66cc5de65f8bad4b204d5fb45511a66724c94528ae999186fe6bd814cc6381d154b8a9feb449cd3aa5
- languageName: node
- linkType: hard
-
-"@electron-forge/maker-base@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/maker-base@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- fs-extra: ^10.0.0
- which: ^2.0.2
- checksum: 0b22f5dce43f3b15088ba2fff660918f4538c7e0d15b803a5df93a4022617d410eaf72e9d0838da5851480d4ca852b9dd4d030d03c4f61e3586c8e58b93e7a11
- languageName: node
- linkType: hard
-
-"@electron-forge/maker-deb@npm:^6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/maker-deb@npm:6.2.1"
- dependencies:
- "@electron-forge/maker-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- electron-installer-debian: ^3.0.0
- dependenciesMeta:
- electron-installer-debian:
- optional: true
- checksum: 1d2e1f4411e16e971fc5828328036dba1258b6ef7377b87af694f359e7c910ca20723285f11250b1ef61593bb30e28457551eff1b8ad26c8fb6ec0c5ac858359
- languageName: node
- linkType: hard
-
-"@electron-forge/maker-dmg@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/maker-dmg@npm:6.2.1"
- dependencies:
- "@electron-forge/maker-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- electron-installer-dmg: ^4.0.0
- fs-extra: ^10.0.0
- dependenciesMeta:
- electron-installer-dmg:
- optional: true
- checksum: 7e00dfa17ac5045f7163bef8836869abc0940e6588641756a5ffea5d93b5c477d93ccb42ef223c2b4a018406466e4a8230663591fff48f1688acf54314e5e366
- languageName: node
- linkType: hard
-
-"@electron-forge/maker-rpm@npm:^6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/maker-rpm@npm:6.2.1"
- dependencies:
- "@electron-forge/maker-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- electron-installer-redhat: ^3.2.0
- dependenciesMeta:
- electron-installer-redhat:
- optional: true
- checksum: 47d5b1f3b94075dc9e7d5e4b73a9bad5411c97c287688b1416fe4982612395500f4fdac164fefe96b4293fa7b49bf41c7211a69c4dddefb61f20f3a345a3d29a
- languageName: node
- linkType: hard
-
-"@electron-forge/maker-squirrel@npm:^6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/maker-squirrel@npm:6.2.1"
- dependencies:
- "@electron-forge/maker-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- electron-winstaller: ^5.0.0
- fs-extra: ^10.0.0
- dependenciesMeta:
- electron-winstaller:
- optional: true
- checksum: 62f496bbeb7bc7690b9b509689ddc467920d12fe2e263064bebf1692fc91b9d68641623dec2b2e0bb3c959f0086681dea64ab53f80a21f875ca2c3c3e1935b99
- languageName: node
- linkType: hard
-
-"@electron-forge/maker-zip@npm:^6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/maker-zip@npm:6.2.1"
- dependencies:
- "@electron-forge/maker-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- cross-zip: ^4.0.0
- fs-extra: ^10.0.0
- got: ^11.8.5
- checksum: d78468fad71895bf794983e9e7f77aaa95c962a3e59e7d40266ab4aa27f23f65ca288ffaa8db025e7b6c108c41108fabbfbdc6c6297a085be50fa9a06d330a66
- languageName: node
- linkType: hard
-
-"@electron-forge/plugin-auto-unpack-natives@npm:^6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/plugin-auto-unpack-natives@npm:6.2.1"
- dependencies:
- "@electron-forge/plugin-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- checksum: dc8b72ce3646f488975f27ce8190ba55dc269ac40dc4fc4f0d92c303177b6092fcc93a8318546fe2246364e5395ce819d1d5466f09910fa8bb820651e73534fd
- languageName: node
- linkType: hard
-
-"@electron-forge/plugin-base@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/plugin-base@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- checksum: 03e3294201c3308d521651ef19e672ec9e4cdb1c34e273bc4451fc7fdc7b917036cf9ad4a21e105ca8082276e5d7477ab8cd4d5bef5fdda9025d12b657c04e26
- languageName: node
- linkType: hard
-
-"@electron-forge/plugin-vite@npm:^6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/plugin-vite@npm:6.2.1"
- dependencies:
- "@electron-forge/core-utils": 6.2.1
- "@electron-forge/plugin-base": 6.2.1
- "@electron-forge/shared-types": 6.2.1
- "@electron-forge/web-multi-logger": 6.2.1
- chalk: ^4.0.0
- debug: ^4.3.1
- vite: ^4.1.1
- checksum: c96b3d759352b39c7d07679192c86f3b2e5005844bad1c43f6e7f9709028bc89c194fdd754b099209ab17a28a510b3a465d8bb77bcda85f101f8d63565a9f006
- languageName: node
- linkType: hard
-
-"@electron-forge/publisher-base@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/publisher-base@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- checksum: 787d11db87b44c89732b373313d597f4b7e555b709e944a998318aaa8f81c65f91459ace79046798c0d2fa5573da02be3c0f45541e55dbf83e09afde32c4d5dc
- languageName: node
- linkType: hard
-
-"@electron-forge/shared-types@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/shared-types@npm:6.2.1"
- dependencies:
- "@electron/rebuild": ^3.2.10
- electron-packager: ^17.1.1
- listr2: ^5.0.3
- checksum: 524c27b9d40f5b085c4a624aa24c97499c47cc632ab2cf17a4de57c52ebdaf59d842231082a7b7549387df958e8e8dd512082c03e504ad56f3c62d600a44619e
- languageName: node
- linkType: hard
-
-"@electron-forge/template-base@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/template-base@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- "@malept/cross-spawn-promise": ^2.0.0
- debug: ^4.3.1
- fs-extra: ^10.0.0
- username: ^5.1.0
- checksum: 3f826cd48bfdf91b1b8c85ece81d689f9e37d83c247851c4bbfba4adbaf5da87dca72c8c329b4cd64e408067161eca45ef929c5f617b5297c7a7bc25fc79057a
- languageName: node
- linkType: hard
-
-"@electron-forge/template-vite@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/template-vite@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- "@electron-forge/template-base": 6.2.1
- fs-extra: ^10.0.0
- checksum: 878b90b71f05956be7df253d890af4753bbe2043c62b08fa2c0ddcc0dd706921a1c57899b11bbb0ea4f86e4c71f245b171d7e9b484b2842638d6d09294d23d62
- languageName: node
- linkType: hard
-
-"@electron-forge/template-webpack-typescript@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/template-webpack-typescript@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- "@electron-forge/template-base": 6.2.1
- fs-extra: ^10.0.0
- checksum: 0770b9730a15e0ded37a951e1859f588d8390af9c34600895125bae34536c407e39c0c31ba76a1f2c49c7639d8fbd26d64293e54a2870b75e16cdb196ec9e08e
- languageName: node
- linkType: hard
-
-"@electron-forge/template-webpack@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/template-webpack@npm:6.2.1"
- dependencies:
- "@electron-forge/shared-types": 6.2.1
- "@electron-forge/template-base": 6.2.1
- fs-extra: ^10.0.0
- checksum: 67de5c342e458a3d2dceb3413d05085919efa8a0767c31c1c3024c5298962f8fcd4c32f062a236aab75d0147d593173fdc9fc33ef5bb07d0c14716e3e93592a6
- languageName: node
- linkType: hard
-
-"@electron-forge/web-multi-logger@npm:6.2.1":
- version: 6.2.1
- resolution: "@electron-forge/web-multi-logger@npm:6.2.1"
- dependencies:
- express: ^4.17.1
- express-ws: ^5.0.2
- xterm: ^4.9.0
- xterm-addon-fit: ^0.5.0
- xterm-addon-search: ^0.8.0
- checksum: 81d952c96d06e8773254769f7f5caf41ec35f6e7fd1d8ee76dfa133023fa5e12602582c9d7a8441daafe3011eba25d32bad671d8a21285c48997dbd2487ab287
- languageName: node
- linkType: hard
-
-"@electron/asar@npm:^3.2.1":
- version: 3.2.4
- resolution: "@electron/asar@npm:3.2.4"
- dependencies:
- chromium-pickle-js: ^0.2.0
- commander: ^5.0.0
- glob: ^7.1.6
- minimatch: ^3.0.4
- bin:
- asar: bin/asar.js
- checksum: 06e3e8fe7c894f7e7727410af5a9957ec77088f775b22441acf4ef718a9e6642a4dc1672f77ee1ce325fc367c8d59ac1e02f7db07869c8ced8a00132a3b54643
- languageName: node
- linkType: hard
-
-"@electron/get@npm:^2.0.0":
- version: 2.0.2
- resolution: "@electron/get@npm:2.0.2"
- dependencies:
- debug: ^4.1.1
- env-paths: ^2.2.0
- fs-extra: ^8.1.0
- global-agent: ^3.0.0
- got: ^11.8.5
- progress: ^2.0.3
- semver: ^6.2.0
- sumchecker: ^3.0.1
- dependenciesMeta:
- global-agent:
- optional: true
- checksum: 900845cc0b31b54761fc9b0ada2dea1e999e59aacc48999d53903bcb7c9a0a7356b5fe736cf610b2a56c5a21f5a3c0e083b2ed2b7e52c36a4d0f420d4b5ec268
- languageName: node
- linkType: hard
-
-"@electron/notarize@npm:^1.2.3":
- version: 1.2.4
- resolution: "@electron/notarize@npm:1.2.4"
- dependencies:
- debug: ^4.1.1
- fs-extra: ^9.0.1
- checksum: 3aa19fb247f9297b96a25f1a082f552e0c78a726ddfc98de9cdd4e4b092fc36fe07d680b762dd5a2bceda97b1044d3a0e6d9eadc5022f7c329a1fcf081133c9b
- languageName: node
- linkType: hard
-
-"@electron/osx-sign@npm:^1.0.1":
- version: 1.0.4
- resolution: "@electron/osx-sign@npm:1.0.4"
- dependencies:
- compare-version: ^0.1.2
- debug: ^4.3.4
- fs-extra: ^10.0.0
- isbinaryfile: ^4.0.8
- minimist: ^1.2.6
- plist: ^3.0.5
- bin:
- electron-osx-flat: bin/electron-osx-flat.js
- electron-osx-sign: bin/electron-osx-sign.js
- checksum: 0d7382922eabd06ee53b538e15050c7662773ba3fd07cc51ee86f5ec63872685c3b6c8678c967afe7efbee1b393d555fb5553137f7a76af514b30d102568d63e
- languageName: node
- linkType: hard
-
-"@electron/rebuild@npm:^3.2.10":
- version: 3.2.13
- resolution: "@electron/rebuild@npm:3.2.13"
- dependencies:
- "@malept/cross-spawn-promise": ^2.0.0
- chalk: ^4.0.0
- debug: ^4.1.1
- detect-libc: ^2.0.1
- fs-extra: ^10.0.0
- got: ^11.7.0
- node-abi: ^3.0.0
- node-api-version: ^0.1.4
- node-gyp: ^9.0.0
- ora: ^5.1.0
- semver: ^7.3.5
- tar: ^6.0.5
- yargs: ^17.0.1
- bin:
- electron-rebuild: lib/cli.js
- checksum: 79ce6323fa95cab75dc1edb52540c8dd367db9ab084ca94fefde1a46699139b3cee3f5449b7b3b5b9b529887d9f3fabe1689a738351b716e3090e636296c3b1b
- languageName: node
- linkType: hard
-
-"@electron/universal@npm:^1.3.2":
- version: 1.4.1
- resolution: "@electron/universal@npm:1.4.1"
- dependencies:
- "@electron/asar": ^3.2.1
- "@malept/cross-spawn-promise": ^1.1.0
- debug: ^4.3.1
- dir-compare: ^3.0.0
- fs-extra: ^9.0.1
- minimatch: ^3.0.4
- plist: ^3.0.4
- checksum: 257f3a25a4f940ccbe601a0f3a2a925a28657bc3c5fc46018980b771825834665d184e5ce75cfa0b8639525a0bdbb7f0bc02e69e2d4fb044add64638db4d48a4
- languageName: node
- linkType: hard
-
-"@esbuild/android-arm64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/android-arm64@npm:0.18.14"
- conditions: os=android & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/android-arm@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/android-arm@npm:0.18.14"
- conditions: os=android & cpu=arm
- languageName: node
- linkType: hard
-
-"@esbuild/android-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/android-x64@npm:0.18.14"
- conditions: os=android & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/darwin-arm64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/darwin-arm64@npm:0.18.14"
- conditions: os=darwin & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/darwin-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/darwin-x64@npm:0.18.14"
- conditions: os=darwin & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/freebsd-arm64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/freebsd-arm64@npm:0.18.14"
- conditions: os=freebsd & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/freebsd-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/freebsd-x64@npm:0.18.14"
- conditions: os=freebsd & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-arm64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-arm64@npm:0.18.14"
- conditions: os=linux & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-arm@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-arm@npm:0.18.14"
- conditions: os=linux & cpu=arm
- languageName: node
- linkType: hard
-
-"@esbuild/linux-ia32@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-ia32@npm:0.18.14"
- conditions: os=linux & cpu=ia32
- languageName: node
- linkType: hard
-
-"@esbuild/linux-loong64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-loong64@npm:0.18.14"
- conditions: os=linux & cpu=loong64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-mips64el@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-mips64el@npm:0.18.14"
- conditions: os=linux & cpu=mips64el
- languageName: node
- linkType: hard
-
-"@esbuild/linux-ppc64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-ppc64@npm:0.18.14"
- conditions: os=linux & cpu=ppc64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-riscv64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-riscv64@npm:0.18.14"
- conditions: os=linux & cpu=riscv64
- languageName: node
- linkType: hard
-
-"@esbuild/linux-s390x@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-s390x@npm:0.18.14"
- conditions: os=linux & cpu=s390x
- languageName: node
- linkType: hard
-
-"@esbuild/linux-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/linux-x64@npm:0.18.14"
- conditions: os=linux & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/netbsd-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/netbsd-x64@npm:0.18.14"
- conditions: os=netbsd & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/openbsd-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/openbsd-x64@npm:0.18.14"
- conditions: os=openbsd & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/sunos-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/sunos-x64@npm:0.18.14"
- conditions: os=sunos & cpu=x64
- languageName: node
- linkType: hard
-
-"@esbuild/win32-arm64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/win32-arm64@npm:0.18.14"
- conditions: os=win32 & cpu=arm64
- languageName: node
- linkType: hard
-
-"@esbuild/win32-ia32@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/win32-ia32@npm:0.18.14"
- conditions: os=win32 & cpu=ia32
- languageName: node
- linkType: hard
-
-"@esbuild/win32-x64@npm:0.18.14":
- version: 0.18.14
- resolution: "@esbuild/win32-x64@npm:0.18.14"
- conditions: os=win32 & cpu=x64
- languageName: node
- linkType: hard
-
-"@isaacs/cliui@npm:^8.0.2":
- version: 8.0.2
- resolution: "@isaacs/cliui@npm:8.0.2"
- dependencies:
- string-width: ^5.1.2
- string-width-cjs: "npm:string-width@^4.2.0"
- strip-ansi: ^7.0.1
- strip-ansi-cjs: "npm:strip-ansi@^6.0.1"
- wrap-ansi: ^8.1.0
- wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0"
- checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb
- languageName: node
- linkType: hard
-
-"@malept/cross-spawn-promise@npm:^1.0.0, @malept/cross-spawn-promise@npm:^1.1.0":
- version: 1.1.1
- resolution: "@malept/cross-spawn-promise@npm:1.1.1"
- dependencies:
- cross-spawn: ^7.0.1
- checksum: 1aa468f9ff3aa59dbaa720731ddf9c1928228b6844358d8821b86628953e0608420e88c6366d85af35acad73b1addaa472026a1836ad3fec34813eb38b2bd25a
- languageName: node
- linkType: hard
-
-"@malept/cross-spawn-promise@npm:^2.0.0":
- version: 2.0.0
- resolution: "@malept/cross-spawn-promise@npm:2.0.0"
- dependencies:
- cross-spawn: ^7.0.1
- checksum: 9016a6674842c161b6949d7876e655874ca2d7f6a4fd88a73147d2abde0dcb3981c5dd9714e721e40f92e953ba16e18d7ee3fc94e8b1aae9b5922c582cd320da
- languageName: node
- linkType: hard
-
-"@nodelib/fs.scandir@npm:2.1.5":
- version: 2.1.5
- resolution: "@nodelib/fs.scandir@npm:2.1.5"
- dependencies:
- "@nodelib/fs.stat": 2.0.5
- run-parallel: ^1.1.9
- checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59
- languageName: node
- linkType: hard
-
-"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2":
- version: 2.0.5
- resolution: "@nodelib/fs.stat@npm:2.0.5"
- checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0
- languageName: node
- linkType: hard
-
-"@nodelib/fs.walk@npm:^1.2.3":
- version: 1.2.8
- resolution: "@nodelib/fs.walk@npm:1.2.8"
- dependencies:
- "@nodelib/fs.scandir": 2.1.5
- fastq: ^1.6.0
- checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53
- languageName: node
- linkType: hard
-
-"@npmcli/fs@npm:^3.1.0":
- version: 3.1.0
- resolution: "@npmcli/fs@npm:3.1.0"
- dependencies:
- semver: ^7.3.5
- checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e
- languageName: node
- linkType: hard
-
-"@pkgjs/parseargs@npm:^0.11.0":
- version: 0.11.0
- resolution: "@pkgjs/parseargs@npm:0.11.0"
- checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f
- languageName: node
- linkType: hard
-
-"@sindresorhus/is@npm:^4.0.0":
- version: 4.6.0
- resolution: "@sindresorhus/is@npm:4.6.0"
- checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2
- languageName: node
- linkType: hard
-
-"@szmarczak/http-timer@npm:^4.0.5":
- version: 4.0.6
- resolution: "@szmarczak/http-timer@npm:4.0.6"
- dependencies:
- defer-to-connect: ^2.0.0
- checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95
- languageName: node
- linkType: hard
-
-"@table-group/electron@workspace:.":
- version: 0.0.0-use.local
- resolution: "@table-group/electron@workspace:."
- dependencies:
- "@electron-forge/cli": ^6.2.1
- "@electron-forge/maker-deb": ^6.2.1
- "@electron-forge/maker-dmg": 6.2.1
- "@electron-forge/maker-rpm": ^6.2.1
- "@electron-forge/maker-squirrel": ^6.2.1
- "@electron-forge/maker-zip": ^6.2.1
- "@electron-forge/plugin-auto-unpack-natives": ^6.2.1
- "@electron-forge/plugin-vite": ^6.2.1
- electron: 25.3.0
- electron-squirrel-startup: 1.0.0
- is-port-reachable: 3.1.0
- languageName: unknown
- linkType: soft
-
-"@tootallnate/once@npm:2":
- version: 2.0.0
- resolution: "@tootallnate/once@npm:2.0.0"
- checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8
- languageName: node
- linkType: hard
-
-"@types/cacheable-request@npm:^6.0.1":
- version: 6.0.3
- resolution: "@types/cacheable-request@npm:6.0.3"
- dependencies:
- "@types/http-cache-semantics": "*"
- "@types/keyv": ^3.1.4
- "@types/node": "*"
- "@types/responselike": ^1.0.0
- checksum: d9b26403fe65ce6b0cb3720b7030104c352bcb37e4fac2a7089a25a97de59c355fa08940658751f2f347a8512aa9d18fdb66ab3ade835975b2f454f2d5befbd9
- languageName: node
- linkType: hard
-
-"@types/fs-extra@npm:^9.0.1":
- version: 9.0.13
- resolution: "@types/fs-extra@npm:9.0.13"
- dependencies:
- "@types/node": "*"
- checksum: add79e212acd5ac76b97b9045834e03a7996aef60a814185e0459088fd290519a3c1620865d588fa36c4498bf614210d2a703af5cf80aa1dbc125db78f6edac3
- languageName: node
- linkType: hard
-
-"@types/glob@npm:^7.1.1":
- version: 7.2.0
- resolution: "@types/glob@npm:7.2.0"
- dependencies:
- "@types/minimatch": "*"
- "@types/node": "*"
- checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19
- languageName: node
- linkType: hard
-
-"@types/http-cache-semantics@npm:*":
- version: 4.0.1
- resolution: "@types/http-cache-semantics@npm:4.0.1"
- checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9
- languageName: node
- linkType: hard
-
-"@types/keyv@npm:^3.1.4":
- version: 3.1.4
- resolution: "@types/keyv@npm:3.1.4"
- dependencies:
- "@types/node": "*"
- checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d
- languageName: node
- linkType: hard
-
-"@types/minimatch@npm:*":
- version: 5.1.2
- resolution: "@types/minimatch@npm:5.1.2"
- checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8
- languageName: node
- linkType: hard
-
-"@types/node@npm:*":
- version: 20.4.2
- resolution: "@types/node@npm:20.4.2"
- checksum: 99e544ea7560d51f01f95627fc40394c24a13da8f041121a0da13e4ef0a2aa332932eaf9a5e8d0e30d1c07106e96a183be392cbba62e8cf0bf6a085d5c0f4149
- languageName: node
- linkType: hard
-
-"@types/node@npm:^18.11.18":
- version: 18.16.19
- resolution: "@types/node@npm:18.16.19"
- checksum: 63c31f09616508aa7135380a4c79470a897b75f9ff3a70eb069e534dfabdec3f32fb0f9df5939127f1086614d980ddea0fa5e8cc29a49103c4f74cd687618aaf
- languageName: node
- linkType: hard
-
-"@types/responselike@npm:^1.0.0":
- version: 1.0.0
- resolution: "@types/responselike@npm:1.0.0"
- dependencies:
- "@types/node": "*"
- checksum: e99fc7cc6265407987b30deda54c1c24bb1478803faf6037557a774b2f034c5b097ffd65847daa87e82a61a250d919f35c3588654b0fdaa816906650f596d1b0
- languageName: node
- linkType: hard
-
-"@types/yauzl@npm:^2.9.1":
- version: 2.10.0
- resolution: "@types/yauzl@npm:2.10.0"
- dependencies:
- "@types/node": "*"
- checksum: 55d27ae5d346ea260e40121675c24e112ef0247649073848e5d4e03182713ae4ec8142b98f61a1c6cbe7d3b72fa99bbadb65d8b01873e5e605cdc30f1ff70ef2
- languageName: node
- linkType: hard
-
-"@xmldom/xmldom@npm:^0.8.8":
- version: 0.8.10
- resolution: "@xmldom/xmldom@npm:0.8.10"
- checksum: 4c136aec31fb3b49aaa53b6fcbfe524d02a1dc0d8e17ee35bd3bf35e9ce1344560481cd1efd086ad1a4821541482528672306d5e37cdbd187f33d7fadd3e2cf0
- languageName: node
- linkType: hard
-
-"abbrev@npm:^1.0.0":
- version: 1.1.1
- resolution: "abbrev@npm:1.1.1"
- checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17
- languageName: node
- linkType: hard
-
-"accepts@npm:~1.3.8":
- version: 1.3.8
- resolution: "accepts@npm:1.3.8"
- dependencies:
- mime-types: ~2.1.34
- negotiator: 0.6.3
- checksum: 50c43d32e7b50285ebe84b613ee4a3aa426715a7d131b65b786e2ead0fd76b6b60091b9916d3478a75f11f162628a2139991b6c03ab3f1d9ab7c86075dc8eab4
- languageName: node
- linkType: hard
-
-"agent-base@npm:6, agent-base@npm:^6.0.2":
- version: 6.0.2
- resolution: "agent-base@npm:6.0.2"
- dependencies:
- debug: 4
- checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d
- languageName: node
- linkType: hard
-
-"agentkeepalive@npm:^4.2.1":
- version: 4.3.0
- resolution: "agentkeepalive@npm:4.3.0"
- dependencies:
- debug: ^4.1.0
- depd: ^2.0.0
- humanize-ms: ^1.2.1
- checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260
- languageName: node
- linkType: hard
-
-"aggregate-error@npm:^3.0.0":
- version: 3.1.0
- resolution: "aggregate-error@npm:3.1.0"
- dependencies:
- clean-stack: ^2.0.0
- indent-string: ^4.0.0
- checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79
- languageName: node
- linkType: hard
-
-"ansi-escapes@npm:^4.3.0":
- version: 4.3.2
- resolution: "ansi-escapes@npm:4.3.2"
- dependencies:
- type-fest: ^0.21.3
- checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815
- languageName: node
- linkType: hard
-
-"ansi-regex@npm:^5.0.1":
- version: 5.0.1
- resolution: "ansi-regex@npm:5.0.1"
- checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
- languageName: node
- linkType: hard
-
-"ansi-regex@npm:^6.0.1":
- version: 6.0.1
- resolution: "ansi-regex@npm:6.0.1"
- checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169
- languageName: node
- linkType: hard
-
-"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0":
- version: 4.3.0
- resolution: "ansi-styles@npm:4.3.0"
- dependencies:
- color-convert: ^2.0.1
- checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4
- languageName: node
- linkType: hard
-
-"ansi-styles@npm:^6.1.0":
- version: 6.2.1
- resolution: "ansi-styles@npm:6.2.1"
- checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9
- languageName: node
- linkType: hard
-
-"appdmg@npm:^0.6.4":
- version: 0.6.6
- resolution: "appdmg@npm:0.6.6"
- dependencies:
- async: ^1.4.2
- ds-store: ^0.1.5
- execa: ^1.0.0
- fs-temp: ^1.0.0
- fs-xattr: ^0.3.0
- image-size: ^0.7.4
- is-my-json-valid: ^2.20.0
- minimist: ^1.1.3
- parse-color: ^1.0.0
- path-exists: ^4.0.0
- repeat-string: ^1.5.4
- bin:
- appdmg: bin/appdmg.js
- conditions: os=darwin
- languageName: node
- linkType: hard
-
-"aproba@npm:^1.0.3 || ^2.0.0":
- version: 2.0.0
- resolution: "aproba@npm:2.0.0"
- checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24
- languageName: node
- linkType: hard
-
-"are-we-there-yet@npm:^3.0.0":
- version: 3.0.1
- resolution: "are-we-there-yet@npm:3.0.1"
- dependencies:
- delegates: ^1.0.0
- readable-stream: ^3.6.0
- checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83
- languageName: node
- linkType: hard
-
-"array-flatten@npm:1.1.1":
- version: 1.1.1
- resolution: "array-flatten@npm:1.1.1"
- checksum: a9925bf3512d9dce202112965de90c222cd59a4fbfce68a0951d25d965cf44642931f40aac72309c41f12df19afa010ecadceb07cfff9ccc1621e99d89ab5f3b
- languageName: node
- linkType: hard
-
-"asar@npm:^3.0.0":
- version: 3.2.0
- resolution: "asar@npm:3.2.0"
- dependencies:
- "@types/glob": ^7.1.1
- chromium-pickle-js: ^0.2.0
- commander: ^5.0.0
- glob: ^7.1.6
- minimatch: ^3.0.4
- dependenciesMeta:
- "@types/glob":
- optional: true
- bin:
- asar: bin/asar.js
- checksum: f7d30b45970b053252ac124230bf319459d0728d7f6dedbe2f765cd2a83792d5a716d2c3f2861ceda69372b401f335e1f46460335169eadd0e91a0904a4f5a15
- languageName: node
- linkType: hard
-
-"astral-regex@npm:^2.0.0":
- version: 2.0.0
- resolution: "astral-regex@npm:2.0.0"
- checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766
- languageName: node
- linkType: hard
-
-"async@npm:^1.4.2":
- version: 1.5.2
- resolution: "async@npm:1.5.2"
- checksum: fe5d6214d8f15bd51eee5ae8ec5079b228b86d2d595f47b16369dec2e11b3ff75a567bb5f70d12d79006665fbbb7ee0a7ec0e388524eefd454ecbe651c124ebd
- languageName: node
- linkType: hard
-
-"at-least-node@npm:^1.0.0":
- version: 1.0.0
- resolution: "at-least-node@npm:1.0.0"
- checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e
- languageName: node
- linkType: hard
-
-"author-regex@npm:^1.0.0":
- version: 1.0.0
- resolution: "author-regex@npm:1.0.0"
- checksum: 9ad8bffb02978c7a53cbe0b0ff55988fa9f4429797b2c3783f0964df6ee198663285d7f0f3f981766a8c4fe91633ba62582244c1b54d50096007a0fe115b6898
- languageName: node
- linkType: hard
-
-"balanced-match@npm:^1.0.0":
- version: 1.0.2
- resolution: "balanced-match@npm:1.0.2"
- checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65
- languageName: node
- linkType: hard
-
-"base32-encode@npm:^0.1.0 || ^1.0.0":
- version: 1.2.0
- resolution: "base32-encode@npm:1.2.0"
- dependencies:
- to-data-view: ^1.1.0
- checksum: b8df667599d50b2c9fca206fcab9bf6500d2e980b14da204eb7de5ce978c99e4874e8138d109bd88d5bca1bfb5ae83926bca37b084d2c9842f8acb12b4b839d9
- languageName: node
- linkType: hard
-
-"base64-js@npm:^1.3.1, base64-js@npm:^1.5.1":
- version: 1.5.1
- resolution: "base64-js@npm:1.5.1"
- checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005
- languageName: node
- linkType: hard
-
-"bl@npm:^4.1.0":
- version: 4.1.0
- resolution: "bl@npm:4.1.0"
- dependencies:
- buffer: ^5.5.0
- inherits: ^2.0.4
- readable-stream: ^3.4.0
- checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662
- languageName: node
- linkType: hard
-
-"bluebird@npm:^3.1.1":
- version: 3.7.2
- resolution: "bluebird@npm:3.7.2"
- checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef
- languageName: node
- linkType: hard
-
-"body-parser@npm:1.20.1":
- version: 1.20.1
- resolution: "body-parser@npm:1.20.1"
- dependencies:
- bytes: 3.1.2
- content-type: ~1.0.4
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.11.0
- raw-body: 2.5.1
- type-is: ~1.6.18
- unpipe: 1.0.0
- checksum: f1050dbac3bede6a78f0b87947a8d548ce43f91ccc718a50dd774f3c81f2d8b04693e52acf62659fad23101827dd318da1fb1363444ff9a8482b886a3e4a5266
- languageName: node
- linkType: hard
-
-"boolean@npm:^3.0.1":
- version: 3.2.0
- resolution: "boolean@npm:3.2.0"
- checksum: fb29535b8bf710ef45279677a86d14f5185d604557204abd2ca5fa3fb2a5c80e04d695c8dbf13ab269991977a79bb6c04b048220a6b2a3849853faa94f4a7d77
- languageName: node
- linkType: hard
-
-"bplist-creator@npm:~0.0.3":
- version: 0.0.8
- resolution: "bplist-creator@npm:0.0.8"
- dependencies:
- stream-buffers: ~2.2.0
- checksum: 7a98c7fb3c1b505a0667abd0f8c976bc01c4437fbb52cb902076a3aea3523e8d44111e21a4228c4c3b307d1c4a727968ed02bd91daf0aea7efed5081db92fb95
- languageName: node
- linkType: hard
-
-"brace-expansion@npm:^1.1.7":
- version: 1.1.11
- resolution: "brace-expansion@npm:1.1.11"
- dependencies:
- balanced-match: ^1.0.0
- concat-map: 0.0.1
- checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07
- languageName: node
- linkType: hard
-
-"brace-expansion@npm:^2.0.1":
- version: 2.0.1
- resolution: "brace-expansion@npm:2.0.1"
- dependencies:
- balanced-match: ^1.0.0
- checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1
- languageName: node
- linkType: hard
-
-"braces@npm:^3.0.2":
- version: 3.0.2
- resolution: "braces@npm:3.0.2"
- dependencies:
- fill-range: ^7.0.1
- checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459
- languageName: node
- linkType: hard
-
-"buffer-crc32@npm:~0.2.3":
- version: 0.2.13
- resolution: "buffer-crc32@npm:0.2.13"
- checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c
- languageName: node
- linkType: hard
-
-"buffer-equal@npm:^1.0.0":
- version: 1.0.1
- resolution: "buffer-equal@npm:1.0.1"
- checksum: 6ead0f976726c4e2fb6f2e82419983f4a99cbf2cca1f1e107e16c23c4d91d9046c732dd29b63fc6ac194354f74fa107e8e94946ef2527812d83cde1d5a006309
- languageName: node
- linkType: hard
-
-"buffer-from@npm:^1.0.0":
- version: 1.1.2
- resolution: "buffer-from@npm:1.1.2"
- checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb
- languageName: node
- linkType: hard
-
-"buffer@npm:^5.5.0":
- version: 5.7.1
- resolution: "buffer@npm:5.7.1"
- dependencies:
- base64-js: ^1.3.1
- ieee754: ^1.1.13
- checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84
- languageName: node
- linkType: hard
-
-"bytes@npm:3.1.2":
- version: 3.1.2
- resolution: "bytes@npm:3.1.2"
- checksum: e4bcd3948d289c5127591fbedf10c0b639ccbf00243504e4e127374a15c3bc8eed0d28d4aaab08ff6f1cf2abc0cce6ba3085ed32f4f90e82a5683ce0014e1b6e
- languageName: node
- linkType: hard
-
-"cacache@npm:^17.0.0":
- version: 17.1.3
- resolution: "cacache@npm:17.1.3"
- dependencies:
- "@npmcli/fs": ^3.1.0
- fs-minipass: ^3.0.0
- glob: ^10.2.2
- lru-cache: ^7.7.1
- minipass: ^5.0.0
- minipass-collect: ^1.0.2
- minipass-flush: ^1.0.5
- minipass-pipeline: ^1.2.4
- p-map: ^4.0.0
- ssri: ^10.0.0
- tar: ^6.1.11
- unique-filename: ^3.0.0
- checksum: 385756781e1e21af089160d89d7462b7ed9883c978e848c7075b90b73cb823680e66092d61513050164588387d2ca87dd6d910e28d64bc13a9ac82cd8580c796
- languageName: node
- linkType: hard
-
-"cacheable-lookup@npm:^5.0.3":
- version: 5.0.4
- resolution: "cacheable-lookup@npm:5.0.4"
- checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d
- languageName: node
- linkType: hard
-
-"cacheable-request@npm:^7.0.2":
- version: 7.0.4
- resolution: "cacheable-request@npm:7.0.4"
- dependencies:
- clone-response: ^1.0.2
- get-stream: ^5.1.0
- http-cache-semantics: ^4.0.0
- keyv: ^4.0.0
- lowercase-keys: ^2.0.0
- normalize-url: ^6.0.1
- responselike: ^2.0.0
- checksum: 0de9df773fd4e7dd9bd118959878f8f2163867e2e1ab3575ffbecbe6e75e80513dd0c68ba30005e5e5a7b377cc6162bbc00ab1db019bb4e9cb3c2f3f7a6f1ee4
- languageName: node
- linkType: hard
-
-"call-bind@npm:^1.0.0":
- version: 1.0.2
- resolution: "call-bind@npm:1.0.2"
- dependencies:
- function-bind: ^1.1.1
- get-intrinsic: ^1.0.2
- checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0
- languageName: node
- linkType: hard
-
-"camelcase@npm:^5.0.0":
- version: 5.3.1
- resolution: "camelcase@npm:5.3.1"
- checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b
- languageName: node
- linkType: hard
-
-"chalk@npm:^4.0.0, chalk@npm:^4.1.0":
- version: 4.1.2
- resolution: "chalk@npm:4.1.2"
- dependencies:
- ansi-styles: ^4.1.0
- supports-color: ^7.1.0
- checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc
- languageName: node
- linkType: hard
-
-"chownr@npm:^2.0.0":
- version: 2.0.0
- resolution: "chownr@npm:2.0.0"
- checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f
- languageName: node
- linkType: hard
-
-"chromium-pickle-js@npm:^0.2.0":
- version: 0.2.0
- resolution: "chromium-pickle-js@npm:0.2.0"
- checksum: 5ccacc538b0a1ecf3484c8fb3327eae129ceee858db0f64eb0a5ff87bda096a418d0d3e6f6e0967c6334d336a2c7463f7b683ec0e1cafbe736907fa2ee2f58ca
- languageName: node
- linkType: hard
-
-"clean-stack@npm:^2.0.0":
- version: 2.2.0
- resolution: "clean-stack@npm:2.2.0"
- checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68
- languageName: node
- linkType: hard
-
-"cli-cursor@npm:^3.1.0":
- version: 3.1.0
- resolution: "cli-cursor@npm:3.1.0"
- dependencies:
- restore-cursor: ^3.1.0
- checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29
- languageName: node
- linkType: hard
-
-"cli-spinners@npm:^2.5.0":
- version: 2.9.0
- resolution: "cli-spinners@npm:2.9.0"
- checksum: a9c56e1f44457d4a9f4f535364e729cb8726198efa9e98990cfd9eda9e220dfa4ba12f92808d1be5e29029cdfead781db82dc8549b97b31c907d55f96aa9b0e2
- languageName: node
- linkType: hard
-
-"cli-truncate@npm:^2.1.0":
- version: 2.1.0
- resolution: "cli-truncate@npm:2.1.0"
- dependencies:
- slice-ansi: ^3.0.0
- string-width: ^4.2.0
- checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d
- languageName: node
- linkType: hard
-
-"cliui@npm:^6.0.0":
- version: 6.0.0
- resolution: "cliui@npm:6.0.0"
- dependencies:
- string-width: ^4.2.0
- strip-ansi: ^6.0.0
- wrap-ansi: ^6.2.0
- checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42
- languageName: node
- linkType: hard
-
-"cliui@npm:^7.0.2":
- version: 7.0.4
- resolution: "cliui@npm:7.0.4"
- dependencies:
- string-width: ^4.2.0
- strip-ansi: ^6.0.0
- wrap-ansi: ^7.0.0
- checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f
- languageName: node
- linkType: hard
-
-"cliui@npm:^8.0.1":
- version: 8.0.1
- resolution: "cliui@npm:8.0.1"
- dependencies:
- string-width: ^4.2.0
- strip-ansi: ^6.0.1
- wrap-ansi: ^7.0.0
- checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56
- languageName: node
- linkType: hard
-
-"clone-response@npm:^1.0.2":
- version: 1.0.3
- resolution: "clone-response@npm:1.0.3"
- dependencies:
- mimic-response: ^1.0.0
- checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e
- languageName: node
- linkType: hard
-
-"clone@npm:^1.0.2":
- version: 1.0.4
- resolution: "clone@npm:1.0.4"
- checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd
- languageName: node
- linkType: hard
-
-"color-convert@npm:^2.0.1":
- version: 2.0.1
- resolution: "color-convert@npm:2.0.1"
- dependencies:
- color-name: ~1.1.4
- checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
- languageName: node
- linkType: hard
-
-"color-convert@npm:~0.5.0":
- version: 0.5.3
- resolution: "color-convert@npm:0.5.3"
- checksum: 1074989a2c216d0171a397b870a0d698ef802ab3f9ece72b35bd92c4d20aeab31f222ea525dd5d3fad175a3f256a750eadd14ab882caed0089efc1cb7ba74086
- languageName: node
- linkType: hard
-
-"color-name@npm:~1.1.4":
- version: 1.1.4
- resolution: "color-name@npm:1.1.4"
- checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
- languageName: node
- linkType: hard
-
-"color-support@npm:^1.1.3":
- version: 1.1.3
- resolution: "color-support@npm:1.1.3"
- bin:
- color-support: bin.js
- checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b
- languageName: node
- linkType: hard
-
-"colorette@npm:^2.0.19":
- version: 2.0.20
- resolution: "colorette@npm:2.0.20"
- checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d
- languageName: node
- linkType: hard
-
-"commander@npm:^4.1.1":
- version: 4.1.1
- resolution: "commander@npm:4.1.1"
- checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977
- languageName: node
- linkType: hard
-
-"commander@npm:^5.0.0":
- version: 5.1.0
- resolution: "commander@npm:5.1.0"
- checksum: 0b7fec1712fbcc6230fcb161d8d73b4730fa91a21dc089515489402ad78810547683f058e2a9835929c212fead1d6a6ade70db28bbb03edbc2829a9ab7d69447
- languageName: node
- linkType: hard
-
-"compare-version@npm:^0.1.2":
- version: 0.1.2
- resolution: "compare-version@npm:0.1.2"
- checksum: 0ceaf50b5f912c8eb8eeca19375e617209d200abebd771e9306510166462e6f91ad764f33f210a3058ee27c83f2f001a7a4ca32f509da2d207d0143a3438a020
- languageName: node
- linkType: hard
-
-"concat-map@npm:0.0.1":
- version: 0.0.1
- resolution: "concat-map@npm:0.0.1"
- checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af
- languageName: node
- linkType: hard
-
-"console-control-strings@npm:^1.1.0":
- version: 1.1.0
- resolution: "console-control-strings@npm:1.1.0"
- checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed
- languageName: node
- linkType: hard
-
-"content-disposition@npm:0.5.4":
- version: 0.5.4
- resolution: "content-disposition@npm:0.5.4"
- dependencies:
- safe-buffer: 5.2.1
- checksum: afb9d545e296a5171d7574fcad634b2fdf698875f4006a9dd04a3e1333880c5c0c98d47b560d01216fb6505a54a2ba6a843ee3a02ec86d7e911e8315255f56c3
- languageName: node
- linkType: hard
-
-"content-type@npm:~1.0.4":
- version: 1.0.5
- resolution: "content-type@npm:1.0.5"
- checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766
- languageName: node
- linkType: hard
-
-"cookie-signature@npm:1.0.6":
- version: 1.0.6
- resolution: "cookie-signature@npm:1.0.6"
- checksum: f4e1b0a98a27a0e6e66fd7ea4e4e9d8e038f624058371bf4499cfcd8f3980be9a121486995202ba3fca74fbed93a407d6d54d43a43f96fd28d0bd7a06761591a
- languageName: node
- linkType: hard
-
-"cookie@npm:0.5.0":
- version: 0.5.0
- resolution: "cookie@npm:0.5.0"
- checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180
- languageName: node
- linkType: hard
-
-"cross-spawn-windows-exe@npm:^1.1.0, cross-spawn-windows-exe@npm:^1.2.0":
- version: 1.2.0
- resolution: "cross-spawn-windows-exe@npm:1.2.0"
- dependencies:
- "@malept/cross-spawn-promise": ^1.1.0
- is-wsl: ^2.2.0
- which: ^2.0.2
- checksum: 57662e8fb24b53f39330aa405e5bbce874dc5cc61fcf212031def1c6fbb1aa62f5635dcacb942d6165e97460984c16b0a57ee223b4c8492f4b92147c77bc573f
- languageName: node
- linkType: hard
-
-"cross-spawn@npm:^6.0.0, cross-spawn@npm:^6.0.5":
- version: 6.0.5
- resolution: "cross-spawn@npm:6.0.5"
- dependencies:
- nice-try: ^1.0.4
- path-key: ^2.0.1
- semver: ^5.5.0
- shebang-command: ^1.2.0
- which: ^1.2.9
- checksum: f893bb0d96cd3d5751d04e67145bdddf25f99449531a72e82dcbbd42796bbc8268c1076c6b3ea51d4d455839902804b94bc45dfb37ecbb32ea8e54a6741c3ab9
- languageName: node
- linkType: hard
-
-"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.1":
- version: 7.0.3
- resolution: "cross-spawn@npm:7.0.3"
- dependencies:
- path-key: ^3.1.0
- shebang-command: ^2.0.0
- which: ^2.0.1
- checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52
- languageName: node
- linkType: hard
-
-"cross-zip@npm:^4.0.0":
- version: 4.0.0
- resolution: "cross-zip@npm:4.0.0"
- checksum: 055291adb4b18e69f9883b54a3c38acbfd8d810190d16966242f9b1795c8bb682b03e3a8633839cee574b1ce83ed2eec8079e3ab72ada38c0bae8d89ab9a42c3
- languageName: node
- linkType: hard
-
-"debug@npm:2.6.9, debug@npm:^2.2.0":
- version: 2.6.9
- resolution: "debug@npm:2.6.9"
- dependencies:
- ms: 2.0.0
- checksum: d2f51589ca66df60bf36e1fa6e4386b318c3f1e06772280eea5b1ae9fd3d05e9c2b7fd8a7d862457d00853c75b00451aa2d7459b924629ee385287a650f58fe6
- languageName: node
- linkType: hard
-
-"debug@npm:4, debug@npm:^4.0.1, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4":
- version: 4.3.4
- resolution: "debug@npm:4.3.4"
- dependencies:
- ms: 2.1.2
- peerDependenciesMeta:
- supports-color:
- optional: true
- checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708
- languageName: node
- linkType: hard
-
-"debug@npm:^3.1.0":
- version: 3.2.7
- resolution: "debug@npm:3.2.7"
- dependencies:
- ms: ^2.1.1
- checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c
- languageName: node
- linkType: hard
-
-"decamelize@npm:^1.2.0":
- version: 1.2.0
- resolution: "decamelize@npm:1.2.0"
- checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa
- languageName: node
- linkType: hard
-
-"decompress-response@npm:^6.0.0":
- version: 6.0.0
- resolution: "decompress-response@npm:6.0.0"
- dependencies:
- mimic-response: ^3.1.0
- checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812
- languageName: node
- linkType: hard
-
-"defaults@npm:^1.0.3":
- version: 1.0.4
- resolution: "defaults@npm:1.0.4"
- dependencies:
- clone: ^1.0.2
- checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a
- languageName: node
- linkType: hard
-
-"defer-to-connect@npm:^2.0.0":
- version: 2.0.1
- resolution: "defer-to-connect@npm:2.0.1"
- checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b
- languageName: node
- linkType: hard
-
-"define-properties@npm:^1.1.3":
- version: 1.2.0
- resolution: "define-properties@npm:1.2.0"
- dependencies:
- has-property-descriptors: ^1.0.0
- object-keys: ^1.1.1
- checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6
- languageName: node
- linkType: hard
-
-"delegates@npm:^1.0.0":
- version: 1.0.0
- resolution: "delegates@npm:1.0.0"
- checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd
- languageName: node
- linkType: hard
-
-"depd@npm:2.0.0, depd@npm:^2.0.0":
- version: 2.0.0
- resolution: "depd@npm:2.0.0"
- checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a
- languageName: node
- linkType: hard
-
-"destroy@npm:1.2.0":
- version: 1.2.0
- resolution: "destroy@npm:1.2.0"
- checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38
- languageName: node
- linkType: hard
-
-"detect-libc@npm:^2.0.1":
- version: 2.0.2
- resolution: "detect-libc@npm:2.0.2"
- checksum: 2b2cd3649b83d576f4be7cc37eb3b1815c79969c8b1a03a40a4d55d83bc74d010753485753448eacb98784abf22f7dbd3911fd3b60e29fda28fed2d1a997944d
- languageName: node
- linkType: hard
-
-"detect-node@npm:^2.0.4":
- version: 2.1.0
- resolution: "detect-node@npm:2.1.0"
- checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e
- languageName: node
- linkType: hard
-
-"dir-compare@npm:^3.0.0":
- version: 3.3.0
- resolution: "dir-compare@npm:3.3.0"
- dependencies:
- buffer-equal: ^1.0.0
- minimatch: ^3.0.4
- checksum: 05e7381509b17cb4e6791bd9569c12ce4267f44b1ee36594946ed895ed7ad24da9285130dc42af3a60707d58c76307bb3a1cbae2acd0a9cce8c74664e6a26828
- languageName: node
- linkType: hard
-
-"ds-store@npm:^0.1.5":
- version: 0.1.6
- resolution: "ds-store@npm:0.1.6"
- dependencies:
- bplist-creator: ~0.0.3
- macos-alias: ~0.2.5
- tn1150: ^0.1.0
- checksum: b574fdd92d8008e6e089ca958a9d186e4cca2b69131004ccc958a06fcea0a1079b6efd0693a74ad7f85b1f5df69edbfb81896eaef1644e1d23c506f9740c0945
- languageName: node
- linkType: hard
-
-"eastasianwidth@npm:^0.2.0":
- version: 0.2.0
- resolution: "eastasianwidth@npm:0.2.0"
- checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed
- languageName: node
- linkType: hard
-
-"ee-first@npm:1.1.1":
- version: 1.1.1
- resolution: "ee-first@npm:1.1.1"
- checksum: 1b4cac778d64ce3b582a7e26b218afe07e207a0f9bfe13cc7395a6d307849cfe361e65033c3251e00c27dd060cab43014c2d6b2647676135e18b77d2d05b3f4f
- languageName: node
- linkType: hard
-
-"electron-installer-common@npm:^0.10.2":
- version: 0.10.3
- resolution: "electron-installer-common@npm:0.10.3"
- dependencies:
- "@malept/cross-spawn-promise": ^1.0.0
- "@types/fs-extra": ^9.0.1
- asar: ^3.0.0
- debug: ^4.1.1
- fs-extra: ^9.0.0
- glob: ^7.1.4
- lodash: ^4.17.15
- parse-author: ^2.0.0
- semver: ^7.1.1
- tmp-promise: ^3.0.2
- dependenciesMeta:
- "@types/fs-extra":
- optional: true
- checksum: c441c1fc1e8d57428b872cccf82e9748183588224fcdaf90189fa38f735311c7e4ebeb4c02d6b9e9901a3922f89b9c426e8be543359b44e2d12251be026f1ded
- languageName: node
- linkType: hard
-
-"electron-installer-debian@npm:^3.0.0":
- version: 3.1.0
- resolution: "electron-installer-debian@npm:3.1.0"
- dependencies:
- "@malept/cross-spawn-promise": ^1.0.0
- debug: ^4.1.1
- electron-installer-common: ^0.10.2
- fs-extra: ^9.0.0
- get-folder-size: ^2.0.1
- lodash: ^4.17.4
- word-wrap: ^1.2.3
- yargs: ^15.0.1
- bin:
- electron-installer-debian: src/cli.js
- conditions: (os=darwin | os=linux)
- languageName: node
- linkType: hard
-
-"electron-installer-dmg@npm:^4.0.0":
- version: 4.0.0
- resolution: "electron-installer-dmg@npm:4.0.0"
- dependencies:
- appdmg: ^0.6.4
- debug: ^4.3.2
- minimist: ^1.1.1
- dependenciesMeta:
- appdmg:
- optional: true
- bin:
- electron-installer-dmg: bin/electron-installer-dmg.js
- checksum: 59006b5a560bf08096d970a44b429c218cb3b0c99144d8f276a354af66312c6cb215b177e4411a833013754a0033c28b2c2dadf5cd2b1dfee7c8b6b6dbdc9dae
- languageName: node
- linkType: hard
-
-"electron-installer-redhat@npm:^3.2.0":
- version: 3.4.0
- resolution: "electron-installer-redhat@npm:3.4.0"
- dependencies:
- "@malept/cross-spawn-promise": ^1.0.0
- debug: ^4.1.1
- electron-installer-common: ^0.10.2
- fs-extra: ^9.0.0
- lodash: ^4.17.15
- word-wrap: ^1.2.3
- yargs: ^16.0.2
- bin:
- electron-installer-redhat: src/cli.js
- conditions: (os=darwin | os=linux)
- languageName: node
- linkType: hard
-
-"electron-packager@npm:^17.1.1":
- version: 17.1.1
- resolution: "electron-packager@npm:17.1.1"
- dependencies:
- "@electron/asar": ^3.2.1
- "@electron/get": ^2.0.0
- "@electron/notarize": ^1.2.3
- "@electron/osx-sign": ^1.0.1
- "@electron/universal": ^1.3.2
- cross-spawn-windows-exe: ^1.2.0
- debug: ^4.0.1
- extract-zip: ^2.0.0
- filenamify: ^4.1.0
- fs-extra: ^10.1.0
- galactus: ^0.2.1
- get-package-info: ^1.0.0
- junk: ^3.1.0
- parse-author: ^2.0.0
- plist: ^3.0.0
- rcedit: ^3.0.1
- resolve: ^1.1.6
- semver: ^7.1.3
- yargs-parser: ^21.1.1
- bin:
- electron-packager: bin/electron-packager.js
- checksum: db59ef057c47e1e2bb4b3c701a767aedef80893472d78e33ab73dd7dcf8bb77f6d5c80fe8d6f8afcd5a36bb5efe6a05f8fc425acb366f7871ad362cd6aefd9d5
- languageName: node
- linkType: hard
-
-"electron-squirrel-startup@npm:1.0.0":
- version: 1.0.0
- resolution: "electron-squirrel-startup@npm:1.0.0"
- dependencies:
- debug: ^2.2.0
- checksum: a1f658e326bd0f5c24aec95fd9a94a2e2b8b645adbd421465829f32719d15e85d6469d9369914c3b766d61e71eebb9f6725057b7fafa78adbcc5d6d3ce5d7a22
- languageName: node
- linkType: hard
-
-"electron-winstaller@npm:^5.0.0":
- version: 5.1.0
- resolution: "electron-winstaller@npm:5.1.0"
- dependencies:
- "@electron/asar": ^3.2.1
- debug: ^4.1.1
- fs-extra: ^7.0.1
- lodash.template: ^4.2.2
- temp: ^0.9.0
- checksum: a283b1ee0b0355a54602c807dcf55e7cef92b79ddd08de8ec1e0913ca0c976ed0c03ec651fb0cc69ff86d6a21f2caef7d6992b83c03af772cc03ddf17fd68151
- languageName: node
- linkType: hard
-
-"electron@npm:25.3.0":
- version: 25.3.0
- resolution: "electron@npm:25.3.0"
- dependencies:
- "@electron/get": ^2.0.0
- "@types/node": ^18.11.18
- extract-zip: ^2.0.1
- bin:
- electron: cli.js
- checksum: 60817fe35c71dd1c3a764b0f8eb99fbbd7a0ba2dde1f715d5ebdc75b27eefba7f98e2e3ba79c90f43f0c37931c9a4e78b9f1bc72e1a28772dfbe2cd85edc79bb
- languageName: node
- linkType: hard
-
-"emoji-regex@npm:^8.0.0":
- version: 8.0.0
- resolution: "emoji-regex@npm:8.0.0"
- checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192
- languageName: node
- linkType: hard
-
-"emoji-regex@npm:^9.2.2":
- version: 9.2.2
- resolution: "emoji-regex@npm:9.2.2"
- checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601
- languageName: node
- linkType: hard
-
-"encode-utf8@npm:^1.0.3":
- version: 1.0.3
- resolution: "encode-utf8@npm:1.0.3"
- checksum: 550224bf2a104b1d355458c8a82e9b4ea07f9fc78387bc3a49c151b940ad26473de8dc9e121eefc4e84561cb0b46de1e4cd2bc766f72ee145e9ea9541482817f
- languageName: node
- linkType: hard
-
-"encodeurl@npm:~1.0.2":
- version: 1.0.2
- resolution: "encodeurl@npm:1.0.2"
- checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c
- languageName: node
- linkType: hard
-
-"encoding@npm:^0.1.13":
- version: 0.1.13
- resolution: "encoding@npm:0.1.13"
- dependencies:
- iconv-lite: ^0.6.2
- checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f
- languageName: node
- linkType: hard
-
-"end-of-stream@npm:^1.1.0":
- version: 1.4.4
- resolution: "end-of-stream@npm:1.4.4"
- dependencies:
- once: ^1.4.0
- checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b
- languageName: node
- linkType: hard
-
-"env-paths@npm:^2.2.0":
- version: 2.2.1
- resolution: "env-paths@npm:2.2.1"
- checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e
- languageName: node
- linkType: hard
-
-"err-code@npm:^2.0.2":
- version: 2.0.3
- resolution: "err-code@npm:2.0.3"
- checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54
- languageName: node
- linkType: hard
-
-"error-ex@npm:^1.2.0":
- version: 1.3.2
- resolution: "error-ex@npm:1.3.2"
- dependencies:
- is-arrayish: ^0.2.1
- checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001
- languageName: node
- linkType: hard
-
-"es6-error@npm:^4.1.1":
- version: 4.1.1
- resolution: "es6-error@npm:4.1.1"
- checksum: ae41332a51ec1323da6bbc5d75b7803ccdeddfae17c41b6166ebbafc8e8beb7a7b80b884b7fab1cc80df485860ac3c59d78605e860bb4f8cd816b3d6ade0d010
- languageName: node
- linkType: hard
-
-"esbuild@npm:^0.18.10":
- version: 0.18.14
- resolution: "esbuild@npm:0.18.14"
- dependencies:
- "@esbuild/android-arm": 0.18.14
- "@esbuild/android-arm64": 0.18.14
- "@esbuild/android-x64": 0.18.14
- "@esbuild/darwin-arm64": 0.18.14
- "@esbuild/darwin-x64": 0.18.14
- "@esbuild/freebsd-arm64": 0.18.14
- "@esbuild/freebsd-x64": 0.18.14
- "@esbuild/linux-arm": 0.18.14
- "@esbuild/linux-arm64": 0.18.14
- "@esbuild/linux-ia32": 0.18.14
- "@esbuild/linux-loong64": 0.18.14
- "@esbuild/linux-mips64el": 0.18.14
- "@esbuild/linux-ppc64": 0.18.14
- "@esbuild/linux-riscv64": 0.18.14
- "@esbuild/linux-s390x": 0.18.14
- "@esbuild/linux-x64": 0.18.14
- "@esbuild/netbsd-x64": 0.18.14
- "@esbuild/openbsd-x64": 0.18.14
- "@esbuild/sunos-x64": 0.18.14
- "@esbuild/win32-arm64": 0.18.14
- "@esbuild/win32-ia32": 0.18.14
- "@esbuild/win32-x64": 0.18.14
- dependenciesMeta:
- "@esbuild/android-arm":
- optional: true
- "@esbuild/android-arm64":
- optional: true
- "@esbuild/android-x64":
- optional: true
- "@esbuild/darwin-arm64":
- optional: true
- "@esbuild/darwin-x64":
- optional: true
- "@esbuild/freebsd-arm64":
- optional: true
- "@esbuild/freebsd-x64":
- optional: true
- "@esbuild/linux-arm":
- optional: true
- "@esbuild/linux-arm64":
- optional: true
- "@esbuild/linux-ia32":
- optional: true
- "@esbuild/linux-loong64":
- optional: true
- "@esbuild/linux-mips64el":
- optional: true
- "@esbuild/linux-ppc64":
- optional: true
- "@esbuild/linux-riscv64":
- optional: true
- "@esbuild/linux-s390x":
- optional: true
- "@esbuild/linux-x64":
- optional: true
- "@esbuild/netbsd-x64":
- optional: true
- "@esbuild/openbsd-x64":
- optional: true
- "@esbuild/sunos-x64":
- optional: true
- "@esbuild/win32-arm64":
- optional: true
- "@esbuild/win32-ia32":
- optional: true
- "@esbuild/win32-x64":
- optional: true
- bin:
- esbuild: bin/esbuild
- checksum: 1e07d4c269262a9c31f8c23e6d8d891e3ad3b62851b6c35651088d8e19a1be3f49fd09580be3154ba8253da1646f50099e78435dad4e38a14527721038785f77
- languageName: node
- linkType: hard
-
-"escalade@npm:^3.1.1":
- version: 3.1.1
- resolution: "escalade@npm:3.1.1"
- checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133
- languageName: node
- linkType: hard
-
-"escape-html@npm:~1.0.3":
- version: 1.0.3
- resolution: "escape-html@npm:1.0.3"
- checksum: 6213ca9ae00d0ab8bccb6d8d4e0a98e76237b2410302cf7df70aaa6591d509a2a37ce8998008cbecae8fc8ffaadf3fb0229535e6a145f3ce0b211d060decbb24
- languageName: node
- linkType: hard
-
-"escape-string-regexp@npm:^1.0.2":
- version: 1.0.5
- resolution: "escape-string-regexp@npm:1.0.5"
- checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410
- languageName: node
- linkType: hard
-
-"escape-string-regexp@npm:^4.0.0":
- version: 4.0.0
- resolution: "escape-string-regexp@npm:4.0.0"
- checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5
- languageName: node
- linkType: hard
-
-"etag@npm:~1.8.1":
- version: 1.8.1
- resolution: "etag@npm:1.8.1"
- checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff
- languageName: node
- linkType: hard
-
-"execa@npm:^1.0.0":
- version: 1.0.0
- resolution: "execa@npm:1.0.0"
- dependencies:
- cross-spawn: ^6.0.0
- get-stream: ^4.0.0
- is-stream: ^1.1.0
- npm-run-path: ^2.0.0
- p-finally: ^1.0.0
- signal-exit: ^3.0.0
- strip-eof: ^1.0.0
- checksum: ddf1342c1c7d02dd93b41364cd847640f6163350d9439071abf70bf4ceb1b9b2b2e37f54babb1d8dc1df8e0d8def32d0e81e74a2e62c3e1d70c303eb4c306bc4
- languageName: node
- linkType: hard
-
-"expand-tilde@npm:^2.0.0, expand-tilde@npm:^2.0.2":
- version: 2.0.2
- resolution: "expand-tilde@npm:2.0.2"
- dependencies:
- homedir-polyfill: ^1.0.1
- checksum: 2efe6ed407d229981b1b6ceb552438fbc9e5c7d6a6751ad6ced3e0aa5cf12f0b299da695e90d6c2ac79191b5c53c613e508f7149e4573abfbb540698ddb7301a
- languageName: node
- linkType: hard
-
-"exponential-backoff@npm:^3.1.1":
- version: 3.1.1
- resolution: "exponential-backoff@npm:3.1.1"
- checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48
- languageName: node
- linkType: hard
-
-"express-ws@npm:^5.0.2":
- version: 5.0.2
- resolution: "express-ws@npm:5.0.2"
- dependencies:
- ws: ^7.4.6
- peerDependencies:
- express: ^4.0.0 || ^5.0.0-alpha.1
- checksum: a7134c51b6a630a369bbc7e06b6fad9ec174d535dd76c990ea6285e6cb08abad408ddb1162ba347ec5725fc483ae9f035f2eecb22ea91f3ecebff05772f62f0b
- languageName: node
- linkType: hard
-
-"express@npm:^4.17.1":
- version: 4.18.2
- resolution: "express@npm:4.18.2"
- dependencies:
- accepts: ~1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.1
- content-disposition: 0.5.4
- content-type: ~1.0.4
- cookie: 0.5.0
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: ~1.0.2
- escape-html: ~1.0.3
- etag: ~1.8.1
- finalhandler: 1.2.0
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.1
- methods: ~1.1.2
- on-finished: 2.4.1
- parseurl: ~1.3.3
- path-to-regexp: 0.1.7
- proxy-addr: ~2.0.7
- qs: 6.11.0
- range-parser: ~1.2.1
- safe-buffer: 5.2.1
- send: 0.18.0
- serve-static: 1.15.0
- setprototypeof: 1.2.0
- statuses: 2.0.1
- type-is: ~1.6.18
- utils-merge: 1.0.1
- vary: ~1.1.2
- checksum: 3c4b9b076879442f6b968fe53d85d9f1eeacbb4f4c41e5f16cc36d77ce39a2b0d81b3f250514982110d815b2f7173f5561367f9110fcc541f9371948e8c8b037
- languageName: node
- linkType: hard
-
-"extract-zip@npm:^2.0.0, extract-zip@npm:^2.0.1":
- version: 2.0.1
- resolution: "extract-zip@npm:2.0.1"
- dependencies:
- "@types/yauzl": ^2.9.1
- debug: ^4.1.1
- get-stream: ^5.1.0
- yauzl: ^2.10.0
- dependenciesMeta:
- "@types/yauzl":
- optional: true
- bin:
- extract-zip: cli.js
- checksum: 8cbda9debdd6d6980819cc69734d874ddd71051c9fe5bde1ef307ebcedfe949ba57b004894b585f758b7c9eeeea0e3d87f2dda89b7d25320459c2c9643ebb635
- languageName: node
- linkType: hard
-
-"fast-glob@npm:^3.2.7":
- version: 3.3.0
- resolution: "fast-glob@npm:3.3.0"
- dependencies:
- "@nodelib/fs.stat": ^2.0.2
- "@nodelib/fs.walk": ^1.2.3
- glob-parent: ^5.1.2
- merge2: ^1.3.0
- micromatch: ^4.0.4
- checksum: 20df62be28eb5426fe8e40e0d05601a63b1daceb7c3d87534afcad91bdcf1e4b1743cf2d5247d6e225b120b46df0b9053a032b2691ba34ee121e033acd81f547
- languageName: node
- linkType: hard
-
-"fastq@npm:^1.6.0":
- version: 1.15.0
- resolution: "fastq@npm:1.15.0"
- dependencies:
- reusify: ^1.0.4
- checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a
- languageName: node
- linkType: hard
-
-"fd-slicer@npm:~1.1.0":
- version: 1.1.0
- resolution: "fd-slicer@npm:1.1.0"
- dependencies:
- pend: ~1.2.0
- checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2
- languageName: node
- linkType: hard
-
-"filename-reserved-regex@npm:^2.0.0":
- version: 2.0.0
- resolution: "filename-reserved-regex@npm:2.0.0"
- checksum: 323a0020fd7f243238ffccab9d728cbc5f3a13c84b2c10e01efb09b8324561d7a51776be76f36603c734d4f69145c39a5d12492bf6142a28b50d7f90bd6190bc
- languageName: node
- linkType: hard
-
-"filenamify@npm:^4.1.0":
- version: 4.3.0
- resolution: "filenamify@npm:4.3.0"
- dependencies:
- filename-reserved-regex: ^2.0.0
- strip-outer: ^1.0.1
- trim-repeated: ^1.0.0
- checksum: 5b71a7ff8e958c8621957e6fbf7872024126d3b5da50f59b1634af3343ba1a69d4cc15cfe4ca4bbfa7c959ad4d98614ee51e6f1d9fa7326eef8ceda2da8cd74e
- languageName: node
- linkType: hard
-
-"fill-range@npm:^7.0.1":
- version: 7.0.1
- resolution: "fill-range@npm:7.0.1"
- dependencies:
- to-regex-range: ^5.0.1
- checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917
- languageName: node
- linkType: hard
-
-"finalhandler@npm:1.2.0":
- version: 1.2.0
- resolution: "finalhandler@npm:1.2.0"
- dependencies:
- debug: 2.6.9
- encodeurl: ~1.0.2
- escape-html: ~1.0.3
- on-finished: 2.4.1
- parseurl: ~1.3.3
- statuses: 2.0.1
- unpipe: ~1.0.0
- checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716
- languageName: node
- linkType: hard
-
-"find-up@npm:^2.0.0":
- version: 2.1.0
- resolution: "find-up@npm:2.1.0"
- dependencies:
- locate-path: ^2.0.0
- checksum: 43284fe4da09f89011f08e3c32cd38401e786b19226ea440b75386c1b12a4cb738c94969808d53a84f564ede22f732c8409e3cfc3f7fb5b5c32378ad0bbf28bd
- languageName: node
- linkType: hard
-
-"find-up@npm:^4.0.0, find-up@npm:^4.1.0":
- version: 4.1.0
- resolution: "find-up@npm:4.1.0"
- dependencies:
- locate-path: ^5.0.0
- path-exists: ^4.0.0
- checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844
- languageName: node
- linkType: hard
-
-"find-up@npm:^5.0.0":
- version: 5.0.0
- resolution: "find-up@npm:5.0.0"
- dependencies:
- locate-path: ^6.0.0
- path-exists: ^4.0.0
- checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095
- languageName: node
- linkType: hard
-
-"flora-colossus@npm:^1.0.0":
- version: 1.0.1
- resolution: "flora-colossus@npm:1.0.1"
- dependencies:
- debug: ^4.1.1
- fs-extra: ^7.0.0
- checksum: c3d0387aee84a4f95564c6eb0b38a5925226f8561c309ddea49984db5ae19eaa95f08b6b0005bcae062cceea01dcd837968341dc24855e0c3f53479a5ed6854c
- languageName: node
- linkType: hard
-
-"fmix@npm:^0.1.0":
- version: 0.1.0
- resolution: "fmix@npm:0.1.0"
- dependencies:
- imul: ^1.0.0
- checksum: c465344d4f169eaf10d45c33949a1e7a633f09dba2ac7063ce8ae8be743df5979d708f7f24900163589f047f5194ac5fc2476177ce31175e8805adfa7b8fb7a4
- languageName: node
- linkType: hard
-
-"foreground-child@npm:^3.1.0":
- version: 3.1.1
- resolution: "foreground-child@npm:3.1.1"
- dependencies:
- cross-spawn: ^7.0.0
- signal-exit: ^4.0.1
- checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5
- languageName: node
- linkType: hard
-
-"forwarded@npm:0.2.0":
- version: 0.2.0
- resolution: "forwarded@npm:0.2.0"
- checksum: fd27e2394d8887ebd16a66ffc889dc983fbbd797d5d3f01087c020283c0f019a7d05ee85669383d8e0d216b116d720fc0cef2f6e9b7eb9f4c90c6e0bc7fd28e6
- languageName: node
- linkType: hard
-
-"fresh@npm:0.5.2":
- version: 0.5.2
- resolution: "fresh@npm:0.5.2"
- checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346
- languageName: node
- linkType: hard
-
-"fs-extra@npm:^10.0.0, fs-extra@npm:^10.1.0":
- version: 10.1.0
- resolution: "fs-extra@npm:10.1.0"
- dependencies:
- graceful-fs: ^4.2.0
- jsonfile: ^6.0.1
- universalify: ^2.0.0
- checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50
- languageName: node
- linkType: hard
-
-"fs-extra@npm:^4.0.0":
- version: 4.0.3
- resolution: "fs-extra@npm:4.0.3"
- dependencies:
- graceful-fs: ^4.1.2
- jsonfile: ^4.0.0
- universalify: ^0.1.0
- checksum: c5ae3c7043ad7187128e619c0371da01b58694c1ffa02c36fb3f5b459925d9c27c3cb1e095d9df0a34a85ca993d8b8ff6f6ecef868fd5ebb243548afa7fc0936
- languageName: node
- linkType: hard
-
-"fs-extra@npm:^7.0.0, fs-extra@npm:^7.0.1":
- version: 7.0.1
- resolution: "fs-extra@npm:7.0.1"
- dependencies:
- graceful-fs: ^4.1.2
- jsonfile: ^4.0.0
- universalify: ^0.1.0
- checksum: 141b9dccb23b66a66cefdd81f4cda959ff89282b1d721b98cea19ba08db3dcbe6f862f28841f3cf24bb299e0b7e6c42303908f65093cb7e201708e86ea5a8dcf
- languageName: node
- linkType: hard
-
-"fs-extra@npm:^8.1.0":
- version: 8.1.0
- resolution: "fs-extra@npm:8.1.0"
- dependencies:
- graceful-fs: ^4.2.0
- jsonfile: ^4.0.0
- universalify: ^0.1.0
- checksum: bf44f0e6cea59d5ce071bba4c43ca76d216f89e402dc6285c128abc0902e9b8525135aa808adad72c9d5d218e9f4bcc63962815529ff2f684ad532172a284880
- languageName: node
- linkType: hard
-
-"fs-extra@npm:^9.0.0, fs-extra@npm:^9.0.1":
- version: 9.1.0
- resolution: "fs-extra@npm:9.1.0"
- dependencies:
- at-least-node: ^1.0.0
- graceful-fs: ^4.2.0
- jsonfile: ^6.0.1
- universalify: ^2.0.0
- checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20
- languageName: node
- linkType: hard
-
-"fs-minipass@npm:^2.0.0":
- version: 2.1.0
- resolution: "fs-minipass@npm:2.1.0"
- dependencies:
- minipass: ^3.0.0
- checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1
- languageName: node
- linkType: hard
-
-"fs-minipass@npm:^3.0.0":
- version: 3.0.2
- resolution: "fs-minipass@npm:3.0.2"
- dependencies:
- minipass: ^5.0.0
- checksum: e9cc0e1f2d01c6f6f62f567aee59530aba65c6c7b2ae88c5027bc34c711ebcfcfaefd0caf254afa6adfe7d1fba16bc2537508a6235196bac7276747d078aef0a
- languageName: node
- linkType: hard
-
-"fs-temp@npm:^1.0.0":
- version: 1.2.1
- resolution: "fs-temp@npm:1.2.1"
- dependencies:
- random-path: ^0.1.0
- checksum: 64d1b96c7adc172a0fbe6116f425f3588ac585dc7011524174e539df7794a4ca81874bb1c8ee74a47991cc35b7dc036f5bf880074844b2165027042b346b38d9
- languageName: node
- linkType: hard
-
-"fs-xattr@npm:^0.3.0":
- version: 0.3.1
- resolution: "fs-xattr@npm:0.3.1"
- dependencies:
- node-gyp: latest
- conditions: "!os=win32"
- languageName: node
- linkType: hard
-
-"fs.realpath@npm:^1.0.0":
- version: 1.0.0
- resolution: "fs.realpath@npm:1.0.0"
- checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0
- languageName: node
- linkType: hard
-
-"fsevents@npm:~2.3.2":
- version: 2.3.2
- resolution: "fsevents@npm:2.3.2"
- dependencies:
- node-gyp: latest
- checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f
- conditions: os=darwin
- languageName: node
- linkType: hard
-
-"fsevents@patch:fsevents@~2.3.2#~builtin":
- version: 2.3.2
- resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1"
- dependencies:
- node-gyp: latest
- conditions: os=darwin
- languageName: node
- linkType: hard
-
-"function-bind@npm:^1.1.1":
- version: 1.1.1
- resolution: "function-bind@npm:1.1.1"
- checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a
- languageName: node
- linkType: hard
-
-"galactus@npm:^0.2.1":
- version: 0.2.1
- resolution: "galactus@npm:0.2.1"
- dependencies:
- debug: ^3.1.0
- flora-colossus: ^1.0.0
- fs-extra: ^4.0.0
- checksum: c026c180ea7bd5a80c3e493a561e30973fcbc9b05dbf036b9143d8fbfdfac81d969159f319c3d7088217e59a8b74389aa1d55217062ffbd793dc952c85d2bc97
- languageName: node
- linkType: hard
-
-"gar@npm:^1.0.4":
- version: 1.0.4
- resolution: "gar@npm:1.0.4"
- checksum: 6b1010b5c17056526298734bfa08716f111cd023394dbe32496841e2f7b0dfe9e742b8ddb56103c0867f2ae80f5f069262916e5398ac982467be4da240ba7bb9
- languageName: node
- linkType: hard
-
-"gauge@npm:^4.0.3":
- version: 4.0.4
- resolution: "gauge@npm:4.0.4"
- dependencies:
- aproba: ^1.0.3 || ^2.0.0
- color-support: ^1.1.3
- console-control-strings: ^1.1.0
- has-unicode: ^2.0.1
- signal-exit: ^3.0.7
- string-width: ^4.2.3
- strip-ansi: ^6.0.1
- wide-align: ^1.1.5
- checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d
- languageName: node
- linkType: hard
-
-"generate-function@npm:^2.0.0":
- version: 2.3.1
- resolution: "generate-function@npm:2.3.1"
- dependencies:
- is-property: ^1.0.2
- checksum: 652f083de206ead2bae4caf9c7eeb465e8d98c0b8ed2a29c6afc538cef0785b5c6eea10548f1e13cc586d3afd796c13c830c2cb3dc612ec2457b2aadda5f57c9
- languageName: node
- linkType: hard
-
-"generate-object-property@npm:^1.1.0":
- version: 1.2.0
- resolution: "generate-object-property@npm:1.2.0"
- dependencies:
- is-property: ^1.0.0
- checksum: 5141ca5fd545f0aabd24fd13f9f3ecf9cfea2255db00d46e282d65141d691d560c70b6361c3c0c4982f86f600361925bfd4773e0350c66d0210e6129ae553a09
- languageName: node
- linkType: hard
-
-"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5":
- version: 2.0.5
- resolution: "get-caller-file@npm:2.0.5"
- checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9
- languageName: node
- linkType: hard
-
-"get-folder-size@npm:^2.0.1":
- version: 2.0.1
- resolution: "get-folder-size@npm:2.0.1"
- dependencies:
- gar: ^1.0.4
- tiny-each-async: 2.0.3
- bin:
- get-folder-size: bin/get-folder-size
- checksum: f6bc0fe8dda84aa15ca2170ffbeefde99870e6f6cfc807bd6eb035163b53c3266e41be66ea34b181a296a535dd976d7f26eff2bbaf6d1d6e8833d6634032549a
- languageName: node
- linkType: hard
-
-"get-installed-path@npm:^2.0.3":
- version: 2.1.1
- resolution: "get-installed-path@npm:2.1.1"
- dependencies:
- global-modules: 1.0.0
- checksum: 7b07d8279a5e3629378ddf4d310653dfa478b74ace43b90e93954455085231946e6f97e7870a5b92d4fa3e45b423b8aebcae652dee742b01a797f54f1c1e90a9
- languageName: node
- linkType: hard
-
-"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1":
- version: 1.2.1
- resolution: "get-intrinsic@npm:1.2.1"
- dependencies:
- function-bind: ^1.1.1
- has: ^1.0.3
- has-proto: ^1.0.1
- has-symbols: ^1.0.3
- checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f
- languageName: node
- linkType: hard
-
-"get-package-info@npm:^1.0.0":
- version: 1.0.0
- resolution: "get-package-info@npm:1.0.0"
- dependencies:
- bluebird: ^3.1.1
- debug: ^2.2.0
- lodash.get: ^4.0.0
- read-pkg-up: ^2.0.0
- checksum: 6b2c99d9eaf7adbd7fa246fdcf1b20fc5171d2be661e042dc1bf851cdb028955640745c88f2f92463477cba9030240fad05619ddc874bc99f9c021921e892462
- languageName: node
- linkType: hard
-
-"get-stream@npm:^4.0.0":
- version: 4.1.0
- resolution: "get-stream@npm:4.1.0"
- dependencies:
- pump: ^3.0.0
- checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73
- languageName: node
- linkType: hard
-
-"get-stream@npm:^5.1.0":
- version: 5.2.0
- resolution: "get-stream@npm:5.2.0"
- dependencies:
- pump: ^3.0.0
- checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12
- languageName: node
- linkType: hard
-
-"glob-parent@npm:^5.1.2":
- version: 5.1.2
- resolution: "glob-parent@npm:5.1.2"
- dependencies:
- is-glob: ^4.0.1
- checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
- languageName: node
- linkType: hard
-
-"glob@npm:^10.2.2":
- version: 10.3.3
- resolution: "glob@npm:10.3.3"
- dependencies:
- foreground-child: ^3.1.0
- jackspeak: ^2.0.3
- minimatch: ^9.0.1
- minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
- path-scurry: ^1.10.1
- bin:
- glob: dist/cjs/src/bin.js
- checksum: 29190d3291f422da0cb40b77a72fc8d2c51a36524e99b8bf412548b7676a6627489528b57250429612b6eec2e6fe7826d328451d3e694a9d15e575389308ec53
- languageName: node
- linkType: hard
-
-"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6":
- version: 7.2.3
- resolution: "glob@npm:7.2.3"
- dependencies:
- fs.realpath: ^1.0.0
- inflight: ^1.0.4
- inherits: 2
- minimatch: ^3.1.1
- once: ^1.3.0
- path-is-absolute: ^1.0.0
- checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133
- languageName: node
- linkType: hard
-
-"global-agent@npm:^3.0.0":
- version: 3.0.0
- resolution: "global-agent@npm:3.0.0"
- dependencies:
- boolean: ^3.0.1
- es6-error: ^4.1.1
- matcher: ^3.0.0
- roarr: ^2.15.3
- semver: ^7.3.2
- serialize-error: ^7.0.1
- checksum: 75074d80733b4bd5386c47f5df028e798018025beac0ab310e9908c72bf5639e408203e7bca0130d5ee01b5f4abc6d34385d96a9f950ea5fe1979bb431c808f7
- languageName: node
- linkType: hard
-
-"global-modules@npm:1.0.0, global-modules@npm:^1.0.0":
- version: 1.0.0
- resolution: "global-modules@npm:1.0.0"
- dependencies:
- global-prefix: ^1.0.1
- is-windows: ^1.0.1
- resolve-dir: ^1.0.0
- checksum: 10be68796c1e1abc1e2ba87ec4ea507f5629873b119ab0cd29c07284ef2b930f1402d10df01beccb7391dedd9cd479611dd6a24311c71be58937beaf18edf85e
- languageName: node
- linkType: hard
-
-"global-prefix@npm:^1.0.1":
- version: 1.0.2
- resolution: "global-prefix@npm:1.0.2"
- dependencies:
- expand-tilde: ^2.0.2
- homedir-polyfill: ^1.0.1
- ini: ^1.3.4
- is-windows: ^1.0.1
- which: ^1.2.14
- checksum: 061b43470fe498271bcd514e7746e8a8535032b17ab9570517014ae27d700ff0dca749f76bbde13ba384d185be4310d8ba5712cb0e74f7d54d59390db63dd9a0
- languageName: node
- linkType: hard
-
-"globalthis@npm:^1.0.1":
- version: 1.0.3
- resolution: "globalthis@npm:1.0.3"
- dependencies:
- define-properties: ^1.1.3
- checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998
- languageName: node
- linkType: hard
-
-"got@npm:^11.7.0, got@npm:^11.8.5":
- version: 11.8.6
- resolution: "got@npm:11.8.6"
- dependencies:
- "@sindresorhus/is": ^4.0.0
- "@szmarczak/http-timer": ^4.0.5
- "@types/cacheable-request": ^6.0.1
- "@types/responselike": ^1.0.0
- cacheable-lookup: ^5.0.3
- cacheable-request: ^7.0.2
- decompress-response: ^6.0.0
- http2-wrapper: ^1.0.0-beta.5.2
- lowercase-keys: ^2.0.0
- p-cancelable: ^2.0.0
- responselike: ^2.0.0
- checksum: bbc783578a8d5030c8164ef7f57ce41b5ad7db2ed13371e1944bef157eeca5a7475530e07c0aaa71610d7085474d0d96222c9f4268d41db333a17e39b463f45d
- languageName: node
- linkType: hard
-
-"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6":
- version: 4.2.11
- resolution: "graceful-fs@npm:4.2.11"
- checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7
- languageName: node
- linkType: hard
-
-"has-flag@npm:^4.0.0":
- version: 4.0.0
- resolution: "has-flag@npm:4.0.0"
- checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad
- languageName: node
- linkType: hard
-
-"has-property-descriptors@npm:^1.0.0":
- version: 1.0.0
- resolution: "has-property-descriptors@npm:1.0.0"
- dependencies:
- get-intrinsic: ^1.1.1
- checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb
- languageName: node
- linkType: hard
-
-"has-proto@npm:^1.0.1":
- version: 1.0.1
- resolution: "has-proto@npm:1.0.1"
- checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e
- languageName: node
- linkType: hard
-
-"has-symbols@npm:^1.0.3":
- version: 1.0.3
- resolution: "has-symbols@npm:1.0.3"
- checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410
- languageName: node
- linkType: hard
-
-"has-unicode@npm:^2.0.1":
- version: 2.0.1
- resolution: "has-unicode@npm:2.0.1"
- checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400
- languageName: node
- linkType: hard
-
-"has@npm:^1.0.3":
- version: 1.0.3
- resolution: "has@npm:1.0.3"
- dependencies:
- function-bind: ^1.1.1
- checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792
- languageName: node
- linkType: hard
-
-"homedir-polyfill@npm:^1.0.1":
- version: 1.0.3
- resolution: "homedir-polyfill@npm:1.0.3"
- dependencies:
- parse-passwd: ^1.0.0
- checksum: 18dd4db87052c6a2179d1813adea0c4bfcfa4f9996f0e226fefb29eb3d548e564350fa28ec46b0bf1fbc0a1d2d6922ceceb80093115ea45ff8842a4990139250
- languageName: node
- linkType: hard
-
-"hosted-git-info@npm:^2.1.4":
- version: 2.8.9
- resolution: "hosted-git-info@npm:2.8.9"
- checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd
- languageName: node
- linkType: hard
-
-"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.1":
- version: 4.1.1
- resolution: "http-cache-semantics@npm:4.1.1"
- checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236
- languageName: node
- linkType: hard
-
-"http-errors@npm:2.0.0":
- version: 2.0.0
- resolution: "http-errors@npm:2.0.0"
- dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.1
- toidentifier: 1.0.1
- checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920
- languageName: node
- linkType: hard
-
-"http-proxy-agent@npm:^5.0.0":
- version: 5.0.0
- resolution: "http-proxy-agent@npm:5.0.0"
- dependencies:
- "@tootallnate/once": 2
- agent-base: 6
- debug: 4
- checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786
- languageName: node
- linkType: hard
-
-"http2-wrapper@npm:^1.0.0-beta.5.2":
- version: 1.0.3
- resolution: "http2-wrapper@npm:1.0.3"
- dependencies:
- quick-lru: ^5.1.1
- resolve-alpn: ^1.0.0
- checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e
- languageName: node
- linkType: hard
-
-"https-proxy-agent@npm:^5.0.0":
- version: 5.0.1
- resolution: "https-proxy-agent@npm:5.0.1"
- dependencies:
- agent-base: 6
- debug: 4
- checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765
- languageName: node
- linkType: hard
-
-"humanize-ms@npm:^1.2.1":
- version: 1.2.1
- resolution: "humanize-ms@npm:1.2.1"
- dependencies:
- ms: ^2.0.0
- checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16
- languageName: node
- linkType: hard
-
-"iconv-lite@npm:0.4.24":
- version: 0.4.24
- resolution: "iconv-lite@npm:0.4.24"
- dependencies:
- safer-buffer: ">= 2.1.2 < 3"
- checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6
- languageName: node
- linkType: hard
-
-"iconv-lite@npm:^0.6.2":
- version: 0.6.3
- resolution: "iconv-lite@npm:0.6.3"
- dependencies:
- safer-buffer: ">= 2.1.2 < 3.0.0"
- checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf
- languageName: node
- linkType: hard
-
-"ieee754@npm:^1.1.13":
- version: 1.2.1
- resolution: "ieee754@npm:1.2.1"
- checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e
- languageName: node
- linkType: hard
-
-"image-size@npm:^0.7.4":
- version: 0.7.5
- resolution: "image-size@npm:0.7.5"
- bin:
- image-size: bin/image-size.js
- checksum: f88860c9d9b5c8ad00d3de9d6f5ba105bda5a5024bfb6b90559a075a4b838ed4f5d3cba14edf0f18fe5d75df596a172b52feca43848e11c34f31f4df2c88a011
- languageName: node
- linkType: hard
-
-"imul@npm:^1.0.0":
- version: 1.0.1
- resolution: "imul@npm:1.0.1"
- checksum: 6c2af3d5f09e2135e14d565a2c108412b825b221eb2c881f9130467f2adccf7ae201773ae8bcf1be169e2d090567a1fdfa9cf20d3b7da7b9cecb95b920ff3e52
- languageName: node
- linkType: hard
-
-"imurmurhash@npm:^0.1.4":
- version: 0.1.4
- resolution: "imurmurhash@npm:0.1.4"
- checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7
- languageName: node
- linkType: hard
-
-"indent-string@npm:^4.0.0":
- version: 4.0.0
- resolution: "indent-string@npm:4.0.0"
- checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612
- languageName: node
- linkType: hard
-
-"inflight@npm:^1.0.4":
- version: 1.0.6
- resolution: "inflight@npm:1.0.6"
- dependencies:
- once: ^1.3.0
- wrappy: 1
- checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd
- languageName: node
- linkType: hard
-
-"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.3, inherits@npm:^2.0.4":
- version: 2.0.4
- resolution: "inherits@npm:2.0.4"
- checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
- languageName: node
- linkType: hard
-
-"ini@npm:^1.3.4":
- version: 1.3.8
- resolution: "ini@npm:1.3.8"
- checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3
- languageName: node
- linkType: hard
-
-"interpret@npm:^3.1.1":
- version: 3.1.1
- resolution: "interpret@npm:3.1.1"
- checksum: 35cebcf48c7351130437596d9ab8c8fe131ce4038da4561e6d665f25640e0034702a031cf7e3a5cea60ac7ac548bf17465e0571ede126f3d3a6933152171ac82
- languageName: node
- linkType: hard
-
-"ip@npm:^2.0.0":
- version: 2.0.0
- resolution: "ip@npm:2.0.0"
- checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349
- languageName: node
- linkType: hard
-
-"ipaddr.js@npm:1.9.1":
- version: 1.9.1
- resolution: "ipaddr.js@npm:1.9.1"
- checksum: f88d3825981486f5a1942414c8d77dd6674dd71c065adcfa46f578d677edcb99fda25af42675cb59db492fdf427b34a5abfcde3982da11a8fd83a500b41cfe77
- languageName: node
- linkType: hard
-
-"is-arrayish@npm:^0.2.1":
- version: 0.2.1
- resolution: "is-arrayish@npm:0.2.1"
- checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f
- languageName: node
- linkType: hard
-
-"is-core-module@npm:^2.12.0":
- version: 2.12.1
- resolution: "is-core-module@npm:2.12.1"
- dependencies:
- has: ^1.0.3
- checksum: f04ea30533b5e62764e7b2e049d3157dc0abd95ef44275b32489ea2081176ac9746ffb1cdb107445cf1ff0e0dfcad522726ca27c27ece64dadf3795428b8e468
- languageName: node
- linkType: hard
-
-"is-docker@npm:^2.0.0":
- version: 2.2.1
- resolution: "is-docker@npm:2.2.1"
- bin:
- is-docker: cli.js
- checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56
- languageName: node
- linkType: hard
-
-"is-extglob@npm:^2.1.1":
- version: 2.1.1
- resolution: "is-extglob@npm:2.1.1"
- checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85
- languageName: node
- linkType: hard
-
-"is-fullwidth-code-point@npm:^3.0.0":
- version: 3.0.0
- resolution: "is-fullwidth-code-point@npm:3.0.0"
- checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348
- languageName: node
- linkType: hard
-
-"is-glob@npm:^4.0.1":
- version: 4.0.3
- resolution: "is-glob@npm:4.0.3"
- dependencies:
- is-extglob: ^2.1.1
- checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4
- languageName: node
- linkType: hard
-
-"is-interactive@npm:^1.0.0":
- version: 1.0.0
- resolution: "is-interactive@npm:1.0.0"
- checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9
- languageName: node
- linkType: hard
-
-"is-lambda@npm:^1.0.1":
- version: 1.0.1
- resolution: "is-lambda@npm:1.0.1"
- checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35
- languageName: node
- linkType: hard
-
-"is-my-ip-valid@npm:^1.0.0":
- version: 1.0.1
- resolution: "is-my-ip-valid@npm:1.0.1"
- checksum: 0a50180a9c0842503a2199ca0ba03888069e7c093f71236c65632e9b0f496ea57536856e1ad3d1635010cb5959c551496ea84cfc56088a8e7879fe30b9d71943
- languageName: node
- linkType: hard
-
-"is-my-json-valid@npm:^2.20.0":
- version: 2.20.6
- resolution: "is-my-json-valid@npm:2.20.6"
- dependencies:
- generate-function: ^2.0.0
- generate-object-property: ^1.1.0
- is-my-ip-valid: ^1.0.0
- jsonpointer: ^5.0.0
- xtend: ^4.0.0
- checksum: d3519e18e6a0f4c777d5a2027b5c80d05abd0949179b94795bd2aa6c54e8f44c23b8789cb7d44332015b86cfd73dca57331e7fa53202b28e40aa4620e7f61166
- languageName: node
- linkType: hard
-
-"is-number@npm:^7.0.0":
- version: 7.0.0
- resolution: "is-number@npm:7.0.0"
- checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a
- languageName: node
- linkType: hard
-
-"is-port-reachable@npm:3.1.0":
- version: 3.1.0
- resolution: "is-port-reachable@npm:3.1.0"
- checksum: ce0c872addfe1722a3f1ec6923b9b88b5a370041a10317e1bd76bd62c616feb52c8a6f473e35e7bcf208db22fb5f138433a3a1cd889d95a1f798dbc7a9dc63cf
- languageName: node
- linkType: hard
-
-"is-property@npm:^1.0.0, is-property@npm:^1.0.2":
- version: 1.0.2
- resolution: "is-property@npm:1.0.2"
- checksum: 33b661a3690bcc88f7e47bb0a21b9e3187e76a317541ea7ec5e8096d954f441b77a46d8930c785f7fbf4ef8dfd624c25495221e026e50f74c9048fe501773be5
- languageName: node
- linkType: hard
-
-"is-stream@npm:^1.1.0":
- version: 1.1.0
- resolution: "is-stream@npm:1.1.0"
- checksum: 063c6bec9d5647aa6d42108d4c59723d2bd4ae42135a2d4db6eadbd49b7ea05b750fd69d279e5c7c45cf9da753ad2c00d8978be354d65aa9f6bb434969c6a2ae
- languageName: node
- linkType: hard
-
-"is-unicode-supported@npm:^0.1.0":
- version: 0.1.0
- resolution: "is-unicode-supported@npm:0.1.0"
- checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52
- languageName: node
- linkType: hard
-
-"is-windows@npm:^1.0.1":
- version: 1.0.2
- resolution: "is-windows@npm:1.0.2"
- checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7
- languageName: node
- linkType: hard
-
-"is-wsl@npm:^2.2.0":
- version: 2.2.0
- resolution: "is-wsl@npm:2.2.0"
- dependencies:
- is-docker: ^2.0.0
- checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8
- languageName: node
- linkType: hard
-
-"isbinaryfile@npm:^4.0.8":
- version: 4.0.10
- resolution: "isbinaryfile@npm:4.0.10"
- checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686
- languageName: node
- linkType: hard
-
-"isexe@npm:^2.0.0":
- version: 2.0.0
- resolution: "isexe@npm:2.0.0"
- checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62
- languageName: node
- linkType: hard
-
-"jackspeak@npm:^2.0.3":
- version: 2.2.1
- resolution: "jackspeak@npm:2.2.1"
- dependencies:
- "@isaacs/cliui": ^8.0.2
- "@pkgjs/parseargs": ^0.11.0
- dependenciesMeta:
- "@pkgjs/parseargs":
- optional: true
- checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df
- languageName: node
- linkType: hard
-
-"json-buffer@npm:3.0.1":
- version: 3.0.1
- resolution: "json-buffer@npm:3.0.1"
- checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581
- languageName: node
- linkType: hard
-
-"json-stringify-safe@npm:^5.0.1":
- version: 5.0.1
- resolution: "json-stringify-safe@npm:5.0.1"
- checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee
- languageName: node
- linkType: hard
-
-"jsonfile@npm:^4.0.0":
- version: 4.0.0
- resolution: "jsonfile@npm:4.0.0"
- dependencies:
- graceful-fs: ^4.1.6
- dependenciesMeta:
- graceful-fs:
- optional: true
- checksum: 6447d6224f0d31623eef9b51185af03ac328a7553efcee30fa423d98a9e276ca08db87d71e17f2310b0263fd3ffa6c2a90a6308367f661dc21580f9469897c9e
- languageName: node
- linkType: hard
-
-"jsonfile@npm:^6.0.1":
- version: 6.1.0
- resolution: "jsonfile@npm:6.1.0"
- dependencies:
- graceful-fs: ^4.1.6
- universalify: ^2.0.0
- dependenciesMeta:
- graceful-fs:
- optional: true
- checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354
- languageName: node
- linkType: hard
-
-"jsonpointer@npm:^5.0.0":
- version: 5.0.1
- resolution: "jsonpointer@npm:5.0.1"
- checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c
- languageName: node
- linkType: hard
-
-"junk@npm:^3.1.0":
- version: 3.1.0
- resolution: "junk@npm:3.1.0"
- checksum: 6c4d68e8f8bc25b546baed802cd0e7be6a971e92f1e885c92cbfe98946d5690b961a32f8e7909e77765d3204c3e556d13c17f73e31697ffae1db07a58b9e68c0
- languageName: node
- linkType: hard
-
-"keyv@npm:^4.0.0":
- version: 4.5.3
- resolution: "keyv@npm:4.5.3"
- dependencies:
- json-buffer: 3.0.1
- checksum: 3ffb4d5b72b6b4b4af443bbb75ca2526b23c750fccb5ac4c267c6116888b4b65681015c2833cb20d26cf3e6e32dac6b988c77f7f022e1a571b7d90f1442257da
- languageName: node
- linkType: hard
-
-"listr2@npm:^5.0.3":
- version: 5.0.8
- resolution: "listr2@npm:5.0.8"
- dependencies:
- cli-truncate: ^2.1.0
- colorette: ^2.0.19
- log-update: ^4.0.0
- p-map: ^4.0.0
- rfdc: ^1.3.0
- rxjs: ^7.8.0
- through: ^2.3.8
- wrap-ansi: ^7.0.0
- peerDependencies:
- enquirer: ">= 2.3.0 < 3"
- peerDependenciesMeta:
- enquirer:
- optional: true
- checksum: 8be9f5632627c4df0dc33f452c98d415a49e5f1614650d3cab1b103c33e95f2a7a0e9f3e1e5de00d51bf0b4179acd8ff11b25be77dbe097cf3773c05e728d46c
- languageName: node
- linkType: hard
-
-"load-json-file@npm:^2.0.0":
- version: 2.0.0
- resolution: "load-json-file@npm:2.0.0"
- dependencies:
- graceful-fs: ^4.1.2
- parse-json: ^2.2.0
- pify: ^2.0.0
- strip-bom: ^3.0.0
- checksum: 7f212bbf08a8c9aab087ead07aa220d1f43d83ec1c4e475a00a8d9bf3014eb29ebe901db8554627dcfb70184c274d05b7379f1e9678fe8297ae74dc495212049
- languageName: node
- linkType: hard
-
-"locate-path@npm:^2.0.0":
- version: 2.0.0
- resolution: "locate-path@npm:2.0.0"
- dependencies:
- p-locate: ^2.0.0
- path-exists: ^3.0.0
- checksum: 02d581edbbbb0fa292e28d96b7de36b5b62c2fa8b5a7e82638ebb33afa74284acf022d3b1e9ae10e3ffb7658fbc49163fcd5e76e7d1baaa7801c3e05a81da755
- languageName: node
- linkType: hard
-
-"locate-path@npm:^5.0.0":
- version: 5.0.0
- resolution: "locate-path@npm:5.0.0"
- dependencies:
- p-locate: ^4.1.0
- checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30
- languageName: node
- linkType: hard
-
-"locate-path@npm:^6.0.0":
- version: 6.0.0
- resolution: "locate-path@npm:6.0.0"
- dependencies:
- p-locate: ^5.0.0
- checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a
- languageName: node
- linkType: hard
-
-"lodash._reinterpolate@npm:^3.0.0":
- version: 3.0.0
- resolution: "lodash._reinterpolate@npm:3.0.0"
- checksum: 06d2d5f33169604fa5e9f27b6067ed9fb85d51a84202a656901e5ffb63b426781a601508466f039c720af111b0c685d12f1a5c14ff8df5d5f27e491e562784b2
- languageName: node
- linkType: hard
-
-"lodash.get@npm:^4.0.0":
- version: 4.4.2
- resolution: "lodash.get@npm:4.4.2"
- checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545
- languageName: node
- linkType: hard
-
-"lodash.template@npm:^4.2.2":
- version: 4.5.0
- resolution: "lodash.template@npm:4.5.0"
- dependencies:
- lodash._reinterpolate: ^3.0.0
- lodash.templatesettings: ^4.0.0
- checksum: ca64e5f07b6646c9d3dbc0fe3aaa995cb227c4918abd1cef7a9024cd9c924f2fa389a0ec4296aa6634667e029bc81d4bbdb8efbfde11df76d66085e6c529b450
- languageName: node
- linkType: hard
-
-"lodash.templatesettings@npm:^4.0.0":
- version: 4.2.0
- resolution: "lodash.templatesettings@npm:4.2.0"
- dependencies:
- lodash._reinterpolate: ^3.0.0
- checksum: 863e025478b092997e11a04e9d9e735875eeff1ffcd6c61742aa8272e3c2cddc89ce795eb9726c4e74cef5991f722897ff37df7738a125895f23fc7d12a7bb59
- languageName: node
- linkType: hard
-
-"lodash@npm:^4.17.15, lodash@npm:^4.17.20, lodash@npm:^4.17.4":
- version: 4.17.21
- resolution: "lodash@npm:4.17.21"
- checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
- languageName: node
- linkType: hard
-
-"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0":
- version: 4.1.0
- resolution: "log-symbols@npm:4.1.0"
- dependencies:
- chalk: ^4.1.0
- is-unicode-supported: ^0.1.0
- checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74
- languageName: node
- linkType: hard
-
-"log-update@npm:^4.0.0":
- version: 4.0.0
- resolution: "log-update@npm:4.0.0"
- dependencies:
- ansi-escapes: ^4.3.0
- cli-cursor: ^3.1.0
- slice-ansi: ^4.0.0
- wrap-ansi: ^6.2.0
- checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2
- languageName: node
- linkType: hard
-
-"lowercase-keys@npm:^2.0.0":
- version: 2.0.0
- resolution: "lowercase-keys@npm:2.0.0"
- checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23
- languageName: node
- linkType: hard
-
-"lru-cache@npm:^6.0.0":
- version: 6.0.0
- resolution: "lru-cache@npm:6.0.0"
- dependencies:
- yallist: ^4.0.0
- checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297
- languageName: node
- linkType: hard
-
-"lru-cache@npm:^7.7.1":
- version: 7.18.3
- resolution: "lru-cache@npm:7.18.3"
- checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356
- languageName: node
- linkType: hard
-
-"lru-cache@npm:^9.1.1 || ^10.0.0":
- version: 10.0.0
- resolution: "lru-cache@npm:10.0.0"
- checksum: 18f101675fe283bc09cda0ef1e3cc83781aeb8373b439f086f758d1d91b28730950db785999cd060d3c825a8571c03073e8c14512b6655af2188d623031baf50
- languageName: node
- linkType: hard
-
-"macos-alias@npm:~0.2.5":
- version: 0.2.11
- resolution: "macos-alias@npm:0.2.11"
- dependencies:
- nan: ^2.4.0
- node-gyp: latest
- conditions: os=darwin
- languageName: node
- linkType: hard
-
-"make-fetch-happen@npm:^11.0.3":
- version: 11.1.1
- resolution: "make-fetch-happen@npm:11.1.1"
- dependencies:
- agentkeepalive: ^4.2.1
- cacache: ^17.0.0
- http-cache-semantics: ^4.1.1
- http-proxy-agent: ^5.0.0
- https-proxy-agent: ^5.0.0
- is-lambda: ^1.0.1
- lru-cache: ^7.7.1
- minipass: ^5.0.0
- minipass-fetch: ^3.0.0
- minipass-flush: ^1.0.5
- minipass-pipeline: ^1.2.4
- negotiator: ^0.6.3
- promise-retry: ^2.0.1
- socks-proxy-agent: ^7.0.0
- ssri: ^10.0.0
- checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540
- languageName: node
- linkType: hard
-
-"map-age-cleaner@npm:^0.1.1":
- version: 0.1.3
- resolution: "map-age-cleaner@npm:0.1.3"
- dependencies:
- p-defer: ^1.0.0
- checksum: cb2804a5bcb3cbdfe4b59066ea6d19f5e7c8c196cd55795ea4c28f792b192e4c442426ae52524e5e1acbccf393d3bddacefc3d41f803e66453f6c4eda3650bc1
- languageName: node
- linkType: hard
-
-"matcher@npm:^3.0.0":
- version: 3.0.0
- resolution: "matcher@npm:3.0.0"
- dependencies:
- escape-string-regexp: ^4.0.0
- checksum: 8bee1a7ab7609c2c21d9c9254b6785fa708eadf289032b556d57a34e98fcd4c537659a004dafee6ce80ab157099e645c199dc52678dff1e7fb0a6684e0da4dbe
- languageName: node
- linkType: hard
-
-"media-typer@npm:0.3.0":
- version: 0.3.0
- resolution: "media-typer@npm:0.3.0"
- checksum: af1b38516c28ec95d6b0826f6c8f276c58aec391f76be42aa07646b4e39d317723e869700933ca6995b056db4b09a78c92d5440dc23657e6764be5d28874bba1
- languageName: node
- linkType: hard
-
-"mem@npm:^4.3.0":
- version: 4.3.0
- resolution: "mem@npm:4.3.0"
- dependencies:
- map-age-cleaner: ^0.1.1
- mimic-fn: ^2.0.0
- p-is-promise: ^2.0.0
- checksum: cf488608e5d59c6cb68004b70de317222d4be9f857fd535dfa6a108e04f40821479c080bc763c417b1030569d303538c59d441280078cfce07fefd1c523f98ef
- languageName: node
- linkType: hard
-
-"merge-descriptors@npm:1.0.1":
- version: 1.0.1
- resolution: "merge-descriptors@npm:1.0.1"
- checksum: 5abc259d2ae25bb06d19ce2b94a21632583c74e2a9109ee1ba7fd147aa7362b380d971e0251069f8b3eb7d48c21ac839e21fa177b335e82c76ec172e30c31a26
- languageName: node
- linkType: hard
-
-"merge2@npm:^1.3.0":
- version: 1.4.1
- resolution: "merge2@npm:1.4.1"
- checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2
- languageName: node
- linkType: hard
-
-"methods@npm:~1.1.2":
- version: 1.1.2
- resolution: "methods@npm:1.1.2"
- checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a
- languageName: node
- linkType: hard
-
-"micromatch@npm:^4.0.4":
- version: 4.0.5
- resolution: "micromatch@npm:4.0.5"
- dependencies:
- braces: ^3.0.2
- picomatch: ^2.3.1
- checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc
- languageName: node
- linkType: hard
-
-"mime-db@npm:1.52.0":
- version: 1.52.0
- resolution: "mime-db@npm:1.52.0"
- checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f
- languageName: node
- linkType: hard
-
-"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34":
- version: 2.1.35
- resolution: "mime-types@npm:2.1.35"
- dependencies:
- mime-db: 1.52.0
- checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836
- languageName: node
- linkType: hard
-
-"mime@npm:1.6.0":
- version: 1.6.0
- resolution: "mime@npm:1.6.0"
- bin:
- mime: cli.js
- checksum: fef25e39263e6d207580bdc629f8872a3f9772c923c7f8c7e793175cee22777bbe8bba95e5d509a40aaa292d8974514ce634ae35769faa45f22d17edda5e8557
- languageName: node
- linkType: hard
-
-"mimic-fn@npm:^2.0.0, mimic-fn@npm:^2.1.0":
- version: 2.1.0
- resolution: "mimic-fn@npm:2.1.0"
- checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a
- languageName: node
- linkType: hard
-
-"mimic-response@npm:^1.0.0":
- version: 1.0.1
- resolution: "mimic-response@npm:1.0.1"
- checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823
- languageName: node
- linkType: hard
-
-"mimic-response@npm:^3.1.0":
- version: 3.1.0
- resolution: "mimic-response@npm:3.1.0"
- checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867
- languageName: node
- linkType: hard
-
-"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1":
- version: 3.1.2
- resolution: "minimatch@npm:3.1.2"
- dependencies:
- brace-expansion: ^1.1.7
- checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a
- languageName: node
- linkType: hard
-
-"minimatch@npm:^9.0.1":
- version: 9.0.3
- resolution: "minimatch@npm:9.0.3"
- dependencies:
- brace-expansion: ^2.0.1
- checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5
- languageName: node
- linkType: hard
-
-"minimist@npm:^1.1.1, minimist@npm:^1.1.3, minimist@npm:^1.2.6":
- version: 1.2.8
- resolution: "minimist@npm:1.2.8"
- checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0
- languageName: node
- linkType: hard
-
-"minipass-collect@npm:^1.0.2":
- version: 1.0.2
- resolution: "minipass-collect@npm:1.0.2"
- dependencies:
- minipass: ^3.0.0
- checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10
- languageName: node
- linkType: hard
-
-"minipass-fetch@npm:^3.0.0":
- version: 3.0.3
- resolution: "minipass-fetch@npm:3.0.3"
- dependencies:
- encoding: ^0.1.13
- minipass: ^5.0.0
- minipass-sized: ^1.0.3
- minizlib: ^2.1.2
- dependenciesMeta:
- encoding:
- optional: true
- checksum: af5ab2552a16fcf505d35fd7ffb84b57f4a0eeb269e6e1d9a2a75824dda48b36e527083250b7cca4a4def21d9544e2ade441e4730e233c0bc2133f6abda31e18
- languageName: node
- linkType: hard
-
-"minipass-flush@npm:^1.0.5":
- version: 1.0.5
- resolution: "minipass-flush@npm:1.0.5"
- dependencies:
- minipass: ^3.0.0
- checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf
- languageName: node
- linkType: hard
-
-"minipass-pipeline@npm:^1.2.4":
- version: 1.2.4
- resolution: "minipass-pipeline@npm:1.2.4"
- dependencies:
- minipass: ^3.0.0
- checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b
- languageName: node
- linkType: hard
-
-"minipass-sized@npm:^1.0.3":
- version: 1.0.3
- resolution: "minipass-sized@npm:1.0.3"
- dependencies:
- minipass: ^3.0.0
- checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60
- languageName: node
- linkType: hard
-
-"minipass@npm:^3.0.0":
- version: 3.3.6
- resolution: "minipass@npm:3.3.6"
- dependencies:
- yallist: ^4.0.0
- checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48
- languageName: node
- linkType: hard
-
-"minipass@npm:^5.0.0":
- version: 5.0.0
- resolution: "minipass@npm:5.0.0"
- checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea
- languageName: node
- linkType: hard
-
-"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0":
- version: 7.0.2
- resolution: "minipass@npm:7.0.2"
- checksum: 46776de732eb7cef2c7404a15fb28c41f5c54a22be50d47b03c605bf21f5c18d61a173c0a20b49a97e7a65f78d887245066410642551e45fffe04e9ac9e325bc
- languageName: node
- linkType: hard
-
-"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
- version: 2.1.2
- resolution: "minizlib@npm:2.1.2"
- dependencies:
- minipass: ^3.0.0
- yallist: ^4.0.0
- checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3
- languageName: node
- linkType: hard
-
-"mkdirp@npm:^0.5.1":
- version: 0.5.6
- resolution: "mkdirp@npm:0.5.6"
- dependencies:
- minimist: ^1.2.6
- bin:
- mkdirp: bin/cmd.js
- checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2
- languageName: node
- linkType: hard
-
-"mkdirp@npm:^1.0.3":
- version: 1.0.4
- resolution: "mkdirp@npm:1.0.4"
- bin:
- mkdirp: bin/cmd.js
- checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f
- languageName: node
- linkType: hard
-
-"ms@npm:2.0.0":
- version: 2.0.0
- resolution: "ms@npm:2.0.0"
- checksum: 0e6a22b8b746d2e0b65a430519934fefd41b6db0682e3477c10f60c76e947c4c0ad06f63ffdf1d78d335f83edee8c0aa928aa66a36c7cd95b69b26f468d527f4
- languageName: node
- linkType: hard
-
-"ms@npm:2.1.2":
- version: 2.1.2
- resolution: "ms@npm:2.1.2"
- checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f
- languageName: node
- linkType: hard
-
-"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1":
- version: 2.1.3
- resolution: "ms@npm:2.1.3"
- checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
- languageName: node
- linkType: hard
-
-"murmur-32@npm:^0.1.0 || ^0.2.0":
- version: 0.2.0
- resolution: "murmur-32@npm:0.2.0"
- dependencies:
- encode-utf8: ^1.0.3
- fmix: ^0.1.0
- imul: ^1.0.0
- checksum: 664f19319c23b2910bd6b4d79e072c910168b157c26bf4507c78f0c7a259cb6f6233fb04eca7d02b271491a8f87660d5c4619f35f7411d9ab10fca715fa93f7c
- languageName: node
- linkType: hard
-
-"nan@npm:^2.4.0":
- version: 2.17.0
- resolution: "nan@npm:2.17.0"
- dependencies:
- node-gyp: latest
- checksum: ec609aeaf7e68b76592a3ba96b372aa7f5df5b056c1e37410b0f1deefbab5a57a922061e2c5b369bae9c7c6b5e6eecf4ad2dac8833a1a7d3a751e0a7c7f849ed
- languageName: node
- linkType: hard
-
-"nanoid@npm:^3.3.6":
- version: 3.3.6
- resolution: "nanoid@npm:3.3.6"
- bin:
- nanoid: bin/nanoid.cjs
- checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3
- languageName: node
- linkType: hard
-
-"negotiator@npm:0.6.3, negotiator@npm:^0.6.3":
- version: 0.6.3
- resolution: "negotiator@npm:0.6.3"
- checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9
- languageName: node
- linkType: hard
-
-"nice-try@npm:^1.0.4":
- version: 1.0.5
- resolution: "nice-try@npm:1.0.5"
- checksum: 0b4af3b5bb5d86c289f7a026303d192a7eb4417231fe47245c460baeabae7277bcd8fd9c728fb6bd62c30b3e15cd6620373e2cf33353b095d8b403d3e8a15aff
- languageName: node
- linkType: hard
-
-"node-abi@npm:^3.0.0":
- version: 3.45.0
- resolution: "node-abi@npm:3.45.0"
- dependencies:
- semver: ^7.3.5
- checksum: 18c4305d7de5f1132741a2a66ba652941518210d02c9268702abe97ce1c166db468b4fc3e85fff04b9c19218c2e47f4e295f9a46422dc834932f4e11443400cd
- languageName: node
- linkType: hard
-
-"node-api-version@npm:^0.1.4":
- version: 0.1.4
- resolution: "node-api-version@npm:0.1.4"
- dependencies:
- semver: ^7.3.5
- checksum: e652a9502a6b62bda01d6134be30195f9d8b3ba75190a4190c76e7ed4f12a410cdc7ec301f878aff11dafc14bc7d9c4fc81f88c1e174c8fb970b7b33eb978b98
- languageName: node
- linkType: hard
-
-"node-fetch@npm:^2.6.7":
- version: 2.6.12
- resolution: "node-fetch@npm:2.6.12"
- dependencies:
- whatwg-url: ^5.0.0
- peerDependencies:
- encoding: ^0.1.0
- peerDependenciesMeta:
- encoding:
- optional: true
- checksum: 3bc1655203d47ee8e313c0d96664b9673a3d4dd8002740318e9d27d14ef306693a4b2ef8d6525775056fd912a19e23f3ac0d7111ad8925877b7567b29a625592
- languageName: node
- linkType: hard
-
-"node-gyp@npm:^9.0.0, node-gyp@npm:latest":
- version: 9.4.0
- resolution: "node-gyp@npm:9.4.0"
- dependencies:
- env-paths: ^2.2.0
- exponential-backoff: ^3.1.1
- glob: ^7.1.4
- graceful-fs: ^4.2.6
- make-fetch-happen: ^11.0.3
- nopt: ^6.0.0
- npmlog: ^6.0.0
- rimraf: ^3.0.2
- semver: ^7.3.5
- tar: ^6.1.2
- which: ^2.0.2
- bin:
- node-gyp: bin/node-gyp.js
- checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99
- languageName: node
- linkType: hard
-
-"nopt@npm:^6.0.0":
- version: 6.0.0
- resolution: "nopt@npm:6.0.0"
- dependencies:
- abbrev: ^1.0.0
- bin:
- nopt: bin/nopt.js
- checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac
- languageName: node
- linkType: hard
-
-"normalize-package-data@npm:^2.3.2":
- version: 2.5.0
- resolution: "normalize-package-data@npm:2.5.0"
- dependencies:
- hosted-git-info: ^2.1.4
- resolve: ^1.10.0
- semver: 2 || 3 || 4 || 5
- validate-npm-package-license: ^3.0.1
- checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499
- languageName: node
- linkType: hard
-
-"normalize-url@npm:^6.0.1":
- version: 6.1.0
- resolution: "normalize-url@npm:6.1.0"
- checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50
- languageName: node
- linkType: hard
-
-"npm-run-path@npm:^2.0.0":
- version: 2.0.2
- resolution: "npm-run-path@npm:2.0.2"
- dependencies:
- path-key: ^2.0.0
- checksum: acd5ad81648ba4588ba5a8effb1d98d2b339d31be16826a118d50f182a134ac523172101b82eab1d01cb4c2ba358e857d54cfafd8163a1ffe7bd52100b741125
- languageName: node
- linkType: hard
-
-"npmlog@npm:^6.0.0":
- version: 6.0.2
- resolution: "npmlog@npm:6.0.2"
- dependencies:
- are-we-there-yet: ^3.0.0
- console-control-strings: ^1.1.0
- gauge: ^4.0.3
- set-blocking: ^2.0.0
- checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a
- languageName: node
- linkType: hard
-
-"object-inspect@npm:^1.9.0":
- version: 1.12.3
- resolution: "object-inspect@npm:1.12.3"
- checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db
- languageName: node
- linkType: hard
-
-"object-keys@npm:^1.1.1":
- version: 1.1.1
- resolution: "object-keys@npm:1.1.1"
- checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a
- languageName: node
- linkType: hard
-
-"on-finished@npm:2.4.1":
- version: 2.4.1
- resolution: "on-finished@npm:2.4.1"
- dependencies:
- ee-first: 1.1.1
- checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0
- languageName: node
- linkType: hard
-
-"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0":
- version: 1.4.0
- resolution: "once@npm:1.4.0"
- dependencies:
- wrappy: 1
- checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68
- languageName: node
- linkType: hard
-
-"onetime@npm:^5.1.0":
- version: 5.1.2
- resolution: "onetime@npm:5.1.2"
- dependencies:
- mimic-fn: ^2.1.0
- checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34
- languageName: node
- linkType: hard
-
-"ora@npm:^5.1.0":
- version: 5.4.1
- resolution: "ora@npm:5.4.1"
- dependencies:
- bl: ^4.1.0
- chalk: ^4.1.0
- cli-cursor: ^3.1.0
- cli-spinners: ^2.5.0
- is-interactive: ^1.0.0
- is-unicode-supported: ^0.1.0
- log-symbols: ^4.1.0
- strip-ansi: ^6.0.0
- wcwidth: ^1.0.1
- checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63
- languageName: node
- linkType: hard
-
-"p-cancelable@npm:^2.0.0":
- version: 2.1.1
- resolution: "p-cancelable@npm:2.1.1"
- checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf
- languageName: node
- linkType: hard
-
-"p-defer@npm:^1.0.0":
- version: 1.0.0
- resolution: "p-defer@npm:1.0.0"
- checksum: 4271b935c27987e7b6f229e5de4cdd335d808465604644cb7b4c4c95bef266735859a93b16415af8a41fd663ee9e3b97a1a2023ca9def613dba1bad2a0da0c7b
- languageName: node
- linkType: hard
-
-"p-finally@npm:^1.0.0":
- version: 1.0.0
- resolution: "p-finally@npm:1.0.0"
- checksum: 93a654c53dc805dd5b5891bab16eb0ea46db8f66c4bfd99336ae929323b1af2b70a8b0654f8f1eae924b2b73d037031366d645f1fd18b3d30cbd15950cc4b1d4
- languageName: node
- linkType: hard
-
-"p-is-promise@npm:^2.0.0":
- version: 2.1.0
- resolution: "p-is-promise@npm:2.1.0"
- checksum: c9a8248c8b5e306475a5d55ce7808dbce4d4da2e3d69526e4991a391a7809bfd6cfdadd9bf04f1c96a3db366c93d9a0f5ee81d949e7b1684c4e0f61f747199ef
- languageName: node
- linkType: hard
-
-"p-limit@npm:^1.1.0":
- version: 1.3.0
- resolution: "p-limit@npm:1.3.0"
- dependencies:
- p-try: ^1.0.0
- checksum: 281c1c0b8c82e1ac9f81acd72a2e35d402bf572e09721ce5520164e9de07d8274451378a3470707179ad13240535558f4b277f02405ad752e08c7d5b0d54fbfd
- languageName: node
- linkType: hard
-
-"p-limit@npm:^2.2.0":
- version: 2.3.0
- resolution: "p-limit@npm:2.3.0"
- dependencies:
- p-try: ^2.0.0
- checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1
- languageName: node
- linkType: hard
-
-"p-limit@npm:^3.0.2":
- version: 3.1.0
- resolution: "p-limit@npm:3.1.0"
- dependencies:
- yocto-queue: ^0.1.0
- checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360
- languageName: node
- linkType: hard
-
-"p-locate@npm:^2.0.0":
- version: 2.0.0
- resolution: "p-locate@npm:2.0.0"
- dependencies:
- p-limit: ^1.1.0
- checksum: e2dceb9b49b96d5513d90f715780f6f4972f46987dc32a0e18bc6c3fc74a1a5d73ec5f81b1398af5e58b99ea1ad03fd41e9181c01fa81b4af2833958696e3081
- languageName: node
- linkType: hard
-
-"p-locate@npm:^4.1.0":
- version: 4.1.0
- resolution: "p-locate@npm:4.1.0"
- dependencies:
- p-limit: ^2.2.0
- checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870
- languageName: node
- linkType: hard
-
-"p-locate@npm:^5.0.0":
- version: 5.0.0
- resolution: "p-locate@npm:5.0.0"
- dependencies:
- p-limit: ^3.0.2
- checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3
- languageName: node
- linkType: hard
-
-"p-map@npm:^4.0.0":
- version: 4.0.0
- resolution: "p-map@npm:4.0.0"
- dependencies:
- aggregate-error: ^3.0.0
- checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c
- languageName: node
- linkType: hard
-
-"p-try@npm:^1.0.0":
- version: 1.0.0
- resolution: "p-try@npm:1.0.0"
- checksum: 3b5303f77eb7722144154288bfd96f799f8ff3e2b2b39330efe38db5dd359e4fb27012464cd85cb0a76e9b7edd1b443568cb3192c22e7cffc34989df0bafd605
- languageName: node
- linkType: hard
-
-"p-try@npm:^2.0.0":
- version: 2.2.0
- resolution: "p-try@npm:2.2.0"
- checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae
- languageName: node
- linkType: hard
-
-"parse-author@npm:^2.0.0":
- version: 2.0.0
- resolution: "parse-author@npm:2.0.0"
- dependencies:
- author-regex: ^1.0.0
- checksum: 066ad615de7dbc3c4293eaaf66a65ea81f8e75e2cffcaf9dd3bcdd4dc4cfff1baa3c85bb3adbedfbed2ddee3298ef4e25ef51b524e91d5a5815d8d9598d31367
- languageName: node
- linkType: hard
-
-"parse-color@npm:^1.0.0":
- version: 1.0.0
- resolution: "parse-color@npm:1.0.0"
- dependencies:
- color-convert: ~0.5.0
- checksum: 0e6e1821eacb4cd21dff380eceafa229052fe22b9951a891c7cac6080a681f29cb2ac50050398ae6cba089cde87f640bcaf8439bf16d468de029691275c175ef
- languageName: node
- linkType: hard
-
-"parse-json@npm:^2.2.0":
- version: 2.2.0
- resolution: "parse-json@npm:2.2.0"
- dependencies:
- error-ex: ^1.2.0
- checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca
- languageName: node
- linkType: hard
-
-"parse-passwd@npm:^1.0.0":
- version: 1.0.0
- resolution: "parse-passwd@npm:1.0.0"
- checksum: 4e55e0231d58f828a41d0f1da2bf2ff7bcef8f4cb6146e69d16ce499190de58b06199e6bd9b17fbf0d4d8aef9052099cdf8c4f13a6294b1a522e8e958073066e
- languageName: node
- linkType: hard
-
-"parseurl@npm:~1.3.3":
- version: 1.3.3
- resolution: "parseurl@npm:1.3.3"
- checksum: 407cee8e0a3a4c5cd472559bca8b6a45b82c124e9a4703302326e9ab60fc1081442ada4e02628efef1eb16197ddc7f8822f5a91fd7d7c86b51f530aedb17dfa2
- languageName: node
- linkType: hard
-
-"path-exists@npm:^3.0.0":
- version: 3.0.0
- resolution: "path-exists@npm:3.0.0"
- checksum: 96e92643aa34b4b28d0de1cd2eba52a1c5313a90c6542d03f62750d82480e20bfa62bc865d5cfc6165f5fcd5aeb0851043c40a39be5989646f223300021bae0a
- languageName: node
- linkType: hard
-
-"path-exists@npm:^4.0.0":
- version: 4.0.0
- resolution: "path-exists@npm:4.0.0"
- checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1
- languageName: node
- linkType: hard
-
-"path-is-absolute@npm:^1.0.0":
- version: 1.0.1
- resolution: "path-is-absolute@npm:1.0.1"
- checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8
- languageName: node
- linkType: hard
-
-"path-key@npm:^2.0.0, path-key@npm:^2.0.1":
- version: 2.0.1
- resolution: "path-key@npm:2.0.1"
- checksum: f7ab0ad42fe3fb8c7f11d0c4f849871e28fbd8e1add65c370e422512fc5887097b9cf34d09c1747d45c942a8c1e26468d6356e2df3f740bf177ab8ca7301ebfd
- languageName: node
- linkType: hard
-
-"path-key@npm:^3.1.0":
- version: 3.1.1
- resolution: "path-key@npm:3.1.1"
- checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020
- languageName: node
- linkType: hard
-
-"path-parse@npm:^1.0.7":
- version: 1.0.7
- resolution: "path-parse@npm:1.0.7"
- checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
- languageName: node
- linkType: hard
-
-"path-scurry@npm:^1.10.1":
- version: 1.10.1
- resolution: "path-scurry@npm:1.10.1"
- dependencies:
- lru-cache: ^9.1.1 || ^10.0.0
- minipass: ^5.0.0 || ^6.0.2 || ^7.0.0
- checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90
- languageName: node
- linkType: hard
-
-"path-to-regexp@npm:0.1.7":
- version: 0.1.7
- resolution: "path-to-regexp@npm:0.1.7"
- checksum: 69a14ea24db543e8b0f4353305c5eac6907917031340e5a8b37df688e52accd09e3cebfe1660b70d76b6bd89152f52183f28c74813dbf454ba1a01c82a38abce
- languageName: node
- linkType: hard
-
-"path-type@npm:^2.0.0":
- version: 2.0.0
- resolution: "path-type@npm:2.0.0"
- dependencies:
- pify: ^2.0.0
- checksum: 749dc0c32d4ebe409da155a0022f9be3d08e6fd276adb3dfa27cb2486519ab2aa277d1453b3fde050831e0787e07b0885a75653fefcc82d883753c5b91121b1c
- languageName: node
- linkType: hard
-
-"pend@npm:~1.2.0":
- version: 1.2.0
- resolution: "pend@npm:1.2.0"
- checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d
- languageName: node
- linkType: hard
-
-"picocolors@npm:^1.0.0":
- version: 1.0.0
- resolution: "picocolors@npm:1.0.0"
- checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981
- languageName: node
- linkType: hard
-
-"picomatch@npm:^2.3.1":
- version: 2.3.1
- resolution: "picomatch@npm:2.3.1"
- checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
- languageName: node
- linkType: hard
-
-"pify@npm:^2.0.0":
- version: 2.3.0
- resolution: "pify@npm:2.3.0"
- checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba
- languageName: node
- linkType: hard
-
-"pkg-dir@npm:^4.2.0":
- version: 4.2.0
- resolution: "pkg-dir@npm:4.2.0"
- dependencies:
- find-up: ^4.0.0
- checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6
- languageName: node
- linkType: hard
-
-"plist@npm:^3.0.0, plist@npm:^3.0.4, plist@npm:^3.0.5":
- version: 3.1.0
- resolution: "plist@npm:3.1.0"
- dependencies:
- "@xmldom/xmldom": ^0.8.8
- base64-js: ^1.5.1
- xmlbuilder: ^15.1.1
- checksum: c8ea013da8646d4c50dff82f9be39488054621cc229957621bb00add42b5d4ce3657cf58d4b10c50f7dea1a81118f825838f838baeb4e6f17fab453ecf91d424
- languageName: node
- linkType: hard
-
-"postcss@npm:^8.4.25":
- version: 8.4.26
- resolution: "postcss@npm:8.4.26"
- dependencies:
- nanoid: ^3.3.6
- picocolors: ^1.0.0
- source-map-js: ^1.0.2
- checksum: 1cf08ee10d58cbe98f94bf12ac49a5e5ed1588507d333d2642aacc24369ca987274e1f60ff4cbf0081f70d2ab18a5cd3a4a273f188d835b8e7f3ba381b184e57
- languageName: node
- linkType: hard
-
-"progress@npm:^2.0.3":
- version: 2.0.3
- resolution: "progress@npm:2.0.3"
- checksum: f67403fe7b34912148d9252cb7481266a354bd99ce82c835f79070643bb3c6583d10dbcfda4d41e04bbc1d8437e9af0fb1e1f2135727878f5308682a579429b7
- languageName: node
- linkType: hard
-
-"promise-retry@npm:^2.0.1":
- version: 2.0.1
- resolution: "promise-retry@npm:2.0.1"
- dependencies:
- err-code: ^2.0.2
- retry: ^0.12.0
- checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429
- languageName: node
- linkType: hard
-
-"proxy-addr@npm:~2.0.7":
- version: 2.0.7
- resolution: "proxy-addr@npm:2.0.7"
- dependencies:
- forwarded: 0.2.0
- ipaddr.js: 1.9.1
- checksum: 29c6990ce9364648255454842f06f8c46fcd124d3e6d7c5066df44662de63cdc0bad032e9bf5a3d653ff72141cc7b6019873d685708ac8210c30458ad99f2b74
- languageName: node
- linkType: hard
-
-"pump@npm:^3.0.0":
- version: 3.0.0
- resolution: "pump@npm:3.0.0"
- dependencies:
- end-of-stream: ^1.1.0
- once: ^1.3.1
- checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9
- languageName: node
- linkType: hard
-
-"qs@npm:6.11.0":
- version: 6.11.0
- resolution: "qs@npm:6.11.0"
- dependencies:
- side-channel: ^1.0.4
- checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297
- languageName: node
- linkType: hard
-
-"queue-microtask@npm:^1.2.2":
- version: 1.2.3
- resolution: "queue-microtask@npm:1.2.3"
- checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4
- languageName: node
- linkType: hard
-
-"quick-lru@npm:^5.1.1":
- version: 5.1.1
- resolution: "quick-lru@npm:5.1.1"
- checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed
- languageName: node
- linkType: hard
-
-"random-path@npm:^0.1.0":
- version: 0.1.2
- resolution: "random-path@npm:0.1.2"
- dependencies:
- base32-encode: ^0.1.0 || ^1.0.0
- murmur-32: ^0.1.0 || ^0.2.0
- checksum: 9fe83df7705e7c7707feba280433f1dd3937dfd6feccc85e1f5fad1e5f84930777a64faa871f4ced4c7825fdfeb5f727f70fc808d81914c02e4c914bac177a34
- languageName: node
- linkType: hard
-
-"range-parser@npm:~1.2.1":
- version: 1.2.1
- resolution: "range-parser@npm:1.2.1"
- checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9
- languageName: node
- linkType: hard
-
-"raw-body@npm:2.5.1":
- version: 2.5.1
- resolution: "raw-body@npm:2.5.1"
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
- checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e
- languageName: node
- linkType: hard
-
-"rcedit@npm:^3.0.1":
- version: 3.0.1
- resolution: "rcedit@npm:3.0.1"
- dependencies:
- cross-spawn-windows-exe: ^1.1.0
- checksum: 73332443aa9e5c70bcd4e8a2f5195f5591a03ef08bf1fe477c116f2525e0d525ced0ad5c32c23dcadc27550aec297559e1f944676f833d25d549c7d27b95e165
- languageName: node
- linkType: hard
-
-"read-pkg-up@npm:^2.0.0":
- version: 2.0.0
- resolution: "read-pkg-up@npm:2.0.0"
- dependencies:
- find-up: ^2.0.0
- read-pkg: ^2.0.0
- checksum: 22f9026fb72219ecd165f94f589461c70a88461dc7ea0d439a310ef2a5271ff176a4df4e5edfad087d8ac89b8553945eb209476b671e8ed081c990f30fc40b27
- languageName: node
- linkType: hard
-
-"read-pkg@npm:^2.0.0":
- version: 2.0.0
- resolution: "read-pkg@npm:2.0.0"
- dependencies:
- load-json-file: ^2.0.0
- normalize-package-data: ^2.3.2
- path-type: ^2.0.0
- checksum: 85c5bf35f2d96acdd756151ba83251831bb2b1040b7d96adce70b2cb119b5320417f34876de0929f2d06c67f3df33ef4636427df3533913876f9ef2487a6f48f
- languageName: node
- linkType: hard
-
-"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0":
- version: 3.6.2
- resolution: "readable-stream@npm:3.6.2"
- dependencies:
- inherits: ^2.0.3
- string_decoder: ^1.1.1
- util-deprecate: ^1.0.1
- checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d
- languageName: node
- linkType: hard
-
-"rechoir@npm:^0.8.0":
- version: 0.8.0
- resolution: "rechoir@npm:0.8.0"
- dependencies:
- resolve: ^1.20.0
- checksum: ad3caed8afdefbc33fbc30e6d22b86c35b3d51c2005546f4e79bcc03c074df804b3640ad18945e6bef9ed12caedc035655ec1082f64a5e94c849ff939dc0a788
- languageName: node
- linkType: hard
-
-"repeat-string@npm:^1.5.4":
- version: 1.6.1
- resolution: "repeat-string@npm:1.6.1"
- checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0
- languageName: node
- linkType: hard
-
-"require-directory@npm:^2.1.1":
- version: 2.1.1
- resolution: "require-directory@npm:2.1.1"
- checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80
- languageName: node
- linkType: hard
-
-"require-main-filename@npm:^2.0.0":
- version: 2.0.0
- resolution: "require-main-filename@npm:2.0.0"
- checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7
- languageName: node
- linkType: hard
-
-"resolve-alpn@npm:^1.0.0":
- version: 1.2.1
- resolution: "resolve-alpn@npm:1.2.1"
- checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0
- languageName: node
- linkType: hard
-
-"resolve-dir@npm:^1.0.0":
- version: 1.0.1
- resolution: "resolve-dir@npm:1.0.1"
- dependencies:
- expand-tilde: ^2.0.0
- global-modules: ^1.0.0
- checksum: ef736b8ed60d6645c3b573da17d329bfb50ec4e1d6c5ffd6df49e3497acef9226f9810ea6823b8ece1560e01dcb13f77a9f6180d4f242d00cc9a8f4de909c65c
- languageName: node
- linkType: hard
-
-"resolve-package@npm:^1.0.1":
- version: 1.0.1
- resolution: "resolve-package@npm:1.0.1"
- dependencies:
- get-installed-path: ^2.0.3
- checksum: ce89b69e58171ccbf5ea05afdcf42ae7ebd98e210472a2bee194750796d480d98703a773abb4dab1a685346ef91210c2aa6dbc5cfda1bdcd71b1b8cc43ef0627
- languageName: node
- linkType: hard
-
-"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.20.0":
- version: 1.22.3
- resolution: "resolve@npm:1.22.3"
- dependencies:
- is-core-module: ^2.12.0
- path-parse: ^1.0.7
- supports-preserve-symlinks-flag: ^1.0.0
- bin:
- resolve: bin/resolve
- checksum: fb834b81348428cb545ff1b828a72ea28feb5a97c026a1cf40aa1008352c72811ff4d4e71f2035273dc536dcfcae20c13604ba6283c612d70fa0b6e44519c374
- languageName: node
- linkType: hard
-
-"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin":
- version: 1.22.3
- resolution: "resolve@patch:resolve@npm%3A1.22.3#~builtin::version=1.22.3&hash=c3c19d"
- dependencies:
- is-core-module: ^2.12.0
- path-parse: ^1.0.7
- supports-preserve-symlinks-flag: ^1.0.0
- bin:
- resolve: bin/resolve
- checksum: ad59734723b596d0891321c951592ed9015a77ce84907f89c9d9307dd0c06e11a67906a3e628c4cae143d3e44898603478af0ddeb2bba3f229a9373efe342665
- languageName: node
- linkType: hard
-
-"responselike@npm:^2.0.0":
- version: 2.0.1
- resolution: "responselike@npm:2.0.1"
- dependencies:
- lowercase-keys: ^2.0.0
- checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a
- languageName: node
- linkType: hard
-
-"restore-cursor@npm:^3.1.0":
- version: 3.1.0
- resolution: "restore-cursor@npm:3.1.0"
- dependencies:
- onetime: ^5.1.0
- signal-exit: ^3.0.2
- checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630
- languageName: node
- linkType: hard
-
-"retry@npm:^0.12.0":
- version: 0.12.0
- resolution: "retry@npm:0.12.0"
- checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c
- languageName: node
- linkType: hard
-
-"reusify@npm:^1.0.4":
- version: 1.0.4
- resolution: "reusify@npm:1.0.4"
- checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc
- languageName: node
- linkType: hard
-
-"rfdc@npm:^1.3.0":
- version: 1.3.0
- resolution: "rfdc@npm:1.3.0"
- checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32
- languageName: node
- linkType: hard
-
-"rimraf@npm:^3.0.0, rimraf@npm:^3.0.2":
- version: 3.0.2
- resolution: "rimraf@npm:3.0.2"
- dependencies:
- glob: ^7.1.3
- bin:
- rimraf: bin.js
- checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0
- languageName: node
- linkType: hard
-
-"rimraf@npm:~2.6.2":
- version: 2.6.3
- resolution: "rimraf@npm:2.6.3"
- dependencies:
- glob: ^7.1.3
- bin:
- rimraf: ./bin.js
- checksum: 3ea587b981a19016297edb96d1ffe48af7e6af69660e3b371dbfc73722a73a0b0e9be5c88089fbeeb866c389c1098e07f64929c7414290504b855f54f901ab10
- languageName: node
- linkType: hard
-
-"roarr@npm:^2.15.3":
- version: 2.15.4
- resolution: "roarr@npm:2.15.4"
- dependencies:
- boolean: ^3.0.1
- detect-node: ^2.0.4
- globalthis: ^1.0.1
- json-stringify-safe: ^5.0.1
- semver-compare: ^1.0.0
- sprintf-js: ^1.1.2
- checksum: 682e28d5491e3ae99728a35ba188f4f0ccb6347dbd492f95dc9f4bfdfe8ee63d8203ad234766ee2db88c8d7a300714304976eb095ce5c9366fe586c03a21586c
- languageName: node
- linkType: hard
-
-"rollup@npm:^3.25.2":
- version: 3.26.3
- resolution: "rollup@npm:3.26.3"
- dependencies:
- fsevents: ~2.3.2
- dependenciesMeta:
- fsevents:
- optional: true
- bin:
- rollup: dist/bin/rollup
- checksum: e6a765b2b7af709170344cc804392936613e06b6bdab46a04d264368d154bdadaaaf77de39e6e656bf728a060d7b4867d81e2464d791c0f37dd5b21aa9c7a6df
- languageName: node
- linkType: hard
-
-"run-parallel@npm:^1.1.9":
- version: 1.2.0
- resolution: "run-parallel@npm:1.2.0"
- dependencies:
- queue-microtask: ^1.2.2
- checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d
- languageName: node
- linkType: hard
-
-"rxjs@npm:^7.8.0":
- version: 7.8.1
- resolution: "rxjs@npm:7.8.1"
- dependencies:
- tslib: ^2.1.0
- checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119
- languageName: node
- linkType: hard
-
-"safe-buffer@npm:5.2.1, safe-buffer@npm:~5.2.0":
- version: 5.2.1
- resolution: "safe-buffer@npm:5.2.1"
- checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
- languageName: node
- linkType: hard
-
-"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0":
- version: 2.1.2
- resolution: "safer-buffer@npm:2.1.2"
- checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
- languageName: node
- linkType: hard
-
-"semver-compare@npm:^1.0.0":
- version: 1.0.0
- resolution: "semver-compare@npm:1.0.0"
- checksum: dd1d7e2909744cf2cf71864ac718efc990297f9de2913b68e41a214319e70174b1d1793ac16e31183b128c2b9812541300cb324db8168e6cf6b570703b171c68
- languageName: node
- linkType: hard
-
-"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0":
- version: 5.7.2
- resolution: "semver@npm:5.7.2"
- bin:
- semver: bin/semver
- checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686
- languageName: node
- linkType: hard
-
-"semver@npm:^6.2.0":
- version: 6.3.1
- resolution: "semver@npm:6.3.1"
- bin:
- semver: bin/semver.js
- checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2
- languageName: node
- linkType: hard
-
-"semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.2.1, semver@npm:^7.3.2, semver@npm:^7.3.5":
- version: 7.5.4
- resolution: "semver@npm:7.5.4"
- dependencies:
- lru-cache: ^6.0.0
- bin:
- semver: bin/semver.js
- checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3
- languageName: node
- linkType: hard
-
-"send@npm:0.18.0":
- version: 0.18.0
- resolution: "send@npm:0.18.0"
- dependencies:
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- encodeurl: ~1.0.2
- escape-html: ~1.0.3
- etag: ~1.8.1
- fresh: 0.5.2
- http-errors: 2.0.0
- mime: 1.6.0
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: ~1.2.1
- statuses: 2.0.1
- checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8
- languageName: node
- linkType: hard
-
-"serialize-error@npm:^7.0.1":
- version: 7.0.1
- resolution: "serialize-error@npm:7.0.1"
- dependencies:
- type-fest: ^0.13.1
- checksum: e0aba4dca2fc9fe74ae1baf38dbd99190e1945445a241ba646290f2176cdb2032281a76443b02ccf0caf30da5657d510746506368889a593b9835a497fc0732e
- languageName: node
- linkType: hard
-
-"serve-static@npm:1.15.0":
- version: 1.15.0
- resolution: "serve-static@npm:1.15.0"
- dependencies:
- encodeurl: ~1.0.2
- escape-html: ~1.0.3
- parseurl: ~1.3.3
- send: 0.18.0
- checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d
- languageName: node
- linkType: hard
-
-"set-blocking@npm:^2.0.0":
- version: 2.0.0
- resolution: "set-blocking@npm:2.0.0"
- checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02
- languageName: node
- linkType: hard
-
-"setprototypeof@npm:1.2.0":
- version: 1.2.0
- resolution: "setprototypeof@npm:1.2.0"
- checksum: be18cbbf70e7d8097c97f713a2e76edf84e87299b40d085c6bf8b65314e994cc15e2e317727342fa6996e38e1f52c59720b53fe621e2eb593a6847bf0356db89
- languageName: node
- linkType: hard
-
-"shebang-command@npm:^1.2.0":
- version: 1.2.0
- resolution: "shebang-command@npm:1.2.0"
- dependencies:
- shebang-regex: ^1.0.0
- checksum: 9eed1750301e622961ba5d588af2212505e96770ec376a37ab678f965795e995ade7ed44910f5d3d3cb5e10165a1847f52d3348c64e146b8be922f7707958908
- languageName: node
- linkType: hard
-
-"shebang-command@npm:^2.0.0":
- version: 2.0.0
- resolution: "shebang-command@npm:2.0.0"
- dependencies:
- shebang-regex: ^3.0.0
- checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa
- languageName: node
- linkType: hard
-
-"shebang-regex@npm:^1.0.0":
- version: 1.0.0
- resolution: "shebang-regex@npm:1.0.0"
- checksum: 404c5a752cd40f94591dfd9346da40a735a05139dac890ffc229afba610854d8799aaa52f87f7e0c94c5007f2c6af55bdcaeb584b56691926c5eaf41dc8f1372
- languageName: node
- linkType: hard
-
-"shebang-regex@npm:^3.0.0":
- version: 3.0.0
- resolution: "shebang-regex@npm:3.0.0"
- checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222
- languageName: node
- linkType: hard
-
-"side-channel@npm:^1.0.4":
- version: 1.0.4
- resolution: "side-channel@npm:1.0.4"
- dependencies:
- call-bind: ^1.0.0
- get-intrinsic: ^1.0.2
- object-inspect: ^1.9.0
- checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245
- languageName: node
- linkType: hard
-
-"signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7":
- version: 3.0.7
- resolution: "signal-exit@npm:3.0.7"
- checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318
- languageName: node
- linkType: hard
-
-"signal-exit@npm:^4.0.1":
- version: 4.0.2
- resolution: "signal-exit@npm:4.0.2"
- checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31
- languageName: node
- linkType: hard
-
-"slice-ansi@npm:^3.0.0":
- version: 3.0.0
- resolution: "slice-ansi@npm:3.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- astral-regex: ^2.0.0
- is-fullwidth-code-point: ^3.0.0
- checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24
- languageName: node
- linkType: hard
-
-"slice-ansi@npm:^4.0.0":
- version: 4.0.0
- resolution: "slice-ansi@npm:4.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- astral-regex: ^2.0.0
- is-fullwidth-code-point: ^3.0.0
- checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756
- languageName: node
- linkType: hard
-
-"smart-buffer@npm:^4.2.0":
- version: 4.2.0
- resolution: "smart-buffer@npm:4.2.0"
- checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b
- languageName: node
- linkType: hard
-
-"socks-proxy-agent@npm:^7.0.0":
- version: 7.0.0
- resolution: "socks-proxy-agent@npm:7.0.0"
- dependencies:
- agent-base: ^6.0.2
- debug: ^4.3.3
- socks: ^2.6.2
- checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846
- languageName: node
- linkType: hard
-
-"socks@npm:^2.6.2":
- version: 2.7.1
- resolution: "socks@npm:2.7.1"
- dependencies:
- ip: ^2.0.0
- smart-buffer: ^4.2.0
- checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748
- languageName: node
- linkType: hard
-
-"source-map-js@npm:^1.0.2":
- version: 1.0.2
- resolution: "source-map-js@npm:1.0.2"
- checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c
- languageName: node
- linkType: hard
-
-"source-map-support@npm:^0.5.13":
- version: 0.5.21
- resolution: "source-map-support@npm:0.5.21"
- dependencies:
- buffer-from: ^1.0.0
- source-map: ^0.6.0
- checksum: 43e98d700d79af1d36f859bdb7318e601dfc918c7ba2e98456118ebc4c4872b327773e5a1df09b0524e9e5063bb18f0934538eace60cca2710d1fa687645d137
- languageName: node
- linkType: hard
-
-"source-map@npm:^0.6.0":
- version: 0.6.1
- resolution: "source-map@npm:0.6.1"
- checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2
- languageName: node
- linkType: hard
-
-"spdx-correct@npm:^3.0.0":
- version: 3.2.0
- resolution: "spdx-correct@npm:3.2.0"
- dependencies:
- spdx-expression-parse: ^3.0.0
- spdx-license-ids: ^3.0.0
- checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2
- languageName: node
- linkType: hard
-
-"spdx-exceptions@npm:^2.1.0":
- version: 2.3.0
- resolution: "spdx-exceptions@npm:2.3.0"
- checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0
- languageName: node
- linkType: hard
-
-"spdx-expression-parse@npm:^3.0.0":
- version: 3.0.1
- resolution: "spdx-expression-parse@npm:3.0.1"
- dependencies:
- spdx-exceptions: ^2.1.0
- spdx-license-ids: ^3.0.0
- checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde
- languageName: node
- linkType: hard
-
-"spdx-license-ids@npm:^3.0.0":
- version: 3.0.13
- resolution: "spdx-license-ids@npm:3.0.13"
- checksum: 3469d85c65f3245a279fa11afc250c3dca96e9e847f2f79d57f466940c5bb8495da08a542646086d499b7f24a74b8d0b42f3fc0f95d50ff99af1f599f6360ad7
- languageName: node
- linkType: hard
-
-"sprintf-js@npm:^1.1.2":
- version: 1.1.2
- resolution: "sprintf-js@npm:1.1.2"
- checksum: d4bb46464632b335e5faed381bd331157e0af64915a98ede833452663bc672823db49d7531c32d58798e85236581fb7342fd0270531ffc8f914e186187bf1c90
- languageName: node
- linkType: hard
-
-"ssri@npm:^10.0.0":
- version: 10.0.4
- resolution: "ssri@npm:10.0.4"
- dependencies:
- minipass: ^5.0.0
- checksum: fb14da9f8a72b04eab163eb13a9dda11d5962cd2317f85457c4e0b575e9a6e0e3a6a87b5bf122c75cb36565830cd5f263fb457571bf6f1587eb5f95d095d6165
- languageName: node
- linkType: hard
-
-"statuses@npm:2.0.1":
- version: 2.0.1
- resolution: "statuses@npm:2.0.1"
- checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb
- languageName: node
- linkType: hard
-
-"stream-buffers@npm:~2.2.0":
- version: 2.2.0
- resolution: "stream-buffers@npm:2.2.0"
- checksum: 4587d9e8f050d689fb38b4295e73408401b16de8edecc12026c6f4ae92956705ecfd995ae3845d7fa3ebf19502d5754df9143d91447fd881d86e518f43882c1c
- languageName: node
- linkType: hard
-
-"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3":
- version: 4.2.3
- resolution: "string-width@npm:4.2.3"
- dependencies:
- emoji-regex: ^8.0.0
- is-fullwidth-code-point: ^3.0.0
- strip-ansi: ^6.0.1
- checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
- languageName: node
- linkType: hard
-
-"string-width@npm:^5.0.1, string-width@npm:^5.1.2":
- version: 5.1.2
- resolution: "string-width@npm:5.1.2"
- dependencies:
- eastasianwidth: ^0.2.0
- emoji-regex: ^9.2.2
- strip-ansi: ^7.0.1
- checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193
- languageName: node
- linkType: hard
-
-"string_decoder@npm:^1.1.1":
- version: 1.3.0
- resolution: "string_decoder@npm:1.3.0"
- dependencies:
- safe-buffer: ~5.2.0
- checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56
- languageName: node
- linkType: hard
-
-"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1":
- version: 6.0.1
- resolution: "strip-ansi@npm:6.0.1"
- dependencies:
- ansi-regex: ^5.0.1
- checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
- languageName: node
- linkType: hard
-
-"strip-ansi@npm:^7.0.1":
- version: 7.1.0
- resolution: "strip-ansi@npm:7.1.0"
- dependencies:
- ansi-regex: ^6.0.1
- checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d
- languageName: node
- linkType: hard
-
-"strip-bom@npm:^3.0.0":
- version: 3.0.0
- resolution: "strip-bom@npm:3.0.0"
- checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b
- languageName: node
- linkType: hard
-
-"strip-eof@npm:^1.0.0":
- version: 1.0.0
- resolution: "strip-eof@npm:1.0.0"
- checksum: 40bc8ddd7e072f8ba0c2d6d05267b4e0a4800898c3435b5fb5f5a21e6e47dfaff18467e7aa0d1844bb5d6274c3097246595841fbfeb317e541974ee992cac506
- languageName: node
- linkType: hard
-
-"strip-outer@npm:^1.0.1":
- version: 1.0.1
- resolution: "strip-outer@npm:1.0.1"
- dependencies:
- escape-string-regexp: ^1.0.2
- checksum: f8d65d33ca2b49aabc66bb41d689dda7b8b9959d320e3a40a2ef4d7079ff2f67ffb72db43f179f48dbf9495c2e33742863feab7a584d180fa62505439162c191
- languageName: node
- linkType: hard
-
-"sudo-prompt@npm:^9.1.1":
- version: 9.2.1
- resolution: "sudo-prompt@npm:9.2.1"
- checksum: 50a29eec2f264f2b78d891452a64112d839a30bffbff4ec065dba4af691a35b23cdb8f9107d413e25c1a9f1925644a19994c00602495cab033d53f585fdfd665
- languageName: node
- linkType: hard
-
-"sumchecker@npm:^3.0.1":
- version: 3.0.1
- resolution: "sumchecker@npm:3.0.1"
- dependencies:
- debug: ^4.1.0
- checksum: 31ba7a62c889236b5b07f75b5c250d481158a1ca061b8f234fca0457bdbe48a20e5011c12c715343dc577e111463dc3d9e721b98015a445a2a88c35e0c9f0f91
- languageName: node
- linkType: hard
-
-"supports-color@npm:^7.1.0":
- version: 7.2.0
- resolution: "supports-color@npm:7.2.0"
- dependencies:
- has-flag: ^4.0.0
- checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a
- languageName: node
- linkType: hard
-
-"supports-preserve-symlinks-flag@npm:^1.0.0":
- version: 1.0.0
- resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
- checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae
- languageName: node
- linkType: hard
-
-"tar@npm:^6.0.5, tar@npm:^6.1.11, tar@npm:^6.1.2":
- version: 6.1.15
- resolution: "tar@npm:6.1.15"
- dependencies:
- chownr: ^2.0.0
- fs-minipass: ^2.0.0
- minipass: ^5.0.0
- minizlib: ^2.1.1
- mkdirp: ^1.0.3
- yallist: ^4.0.0
- checksum: f23832fceeba7578bf31907aac744ae21e74a66f4a17a9e94507acf460e48f6db598c7023882db33bab75b80e027c21f276d405e4a0322d58f51c7088d428268
- languageName: node
- linkType: hard
-
-"temp@npm:^0.9.0":
- version: 0.9.4
- resolution: "temp@npm:0.9.4"
- dependencies:
- mkdirp: ^0.5.1
- rimraf: ~2.6.2
- checksum: 8709d4d63278bd309ca0e49e80a268308dea543a949e71acd427b3314cd9417da9a2cc73425dd9c21c6780334dbffd67e05e7be5aaa73e9affe8479afc6f20e3
- languageName: node
- linkType: hard
-
-"through@npm:^2.3.8":
- version: 2.3.8
- resolution: "through@npm:2.3.8"
- checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd
- languageName: node
- linkType: hard
-
-"tiny-each-async@npm:2.0.3":
- version: 2.0.3
- resolution: "tiny-each-async@npm:2.0.3"
- checksum: 363511e6dd1dd9eadee4809d8a3485783f24579ae464c7b0768bb48047e6eaae3360cfe72b2ba345523d1d4033b5542129771c320bfb756abcf4918824511624
- languageName: node
- linkType: hard
-
-"tmp-promise@npm:^3.0.2":
- version: 3.0.3
- resolution: "tmp-promise@npm:3.0.3"
- dependencies:
- tmp: ^0.2.0
- checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c
- languageName: node
- linkType: hard
-
-"tmp@npm:^0.2.0":
- version: 0.2.1
- resolution: "tmp@npm:0.2.1"
- dependencies:
- rimraf: ^3.0.0
- checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e
- languageName: node
- linkType: hard
-
-"tn1150@npm:^0.1.0":
- version: 0.1.0
- resolution: "tn1150@npm:0.1.0"
- dependencies:
- unorm: ^1.4.1
- checksum: 525b996bd02aacb77db951c6cedc59262fc737749a9a26b6ec2c120426196f92fe796ba161382499401f9ffc2652455a21467e8d8142cb352a5017c3f1292e97
- languageName: node
- linkType: hard
-
-"to-data-view@npm:^1.1.0":
- version: 1.1.0
- resolution: "to-data-view@npm:1.1.0"
- checksum: 53bf818cf7ed4b481568085cfed5528b268efe1e95d0b90c2a45031de9cf40de91600771c046924348fdedbedb54f655f98e7bf1c51041ba06f0ec3f2fd53dc6
- languageName: node
- linkType: hard
-
-"to-regex-range@npm:^5.0.1":
- version: 5.0.1
- resolution: "to-regex-range@npm:5.0.1"
- dependencies:
- is-number: ^7.0.0
- checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed
- languageName: node
- linkType: hard
-
-"toidentifier@npm:1.0.1":
- version: 1.0.1
- resolution: "toidentifier@npm:1.0.1"
- checksum: 952c29e2a85d7123239b5cfdd889a0dde47ab0497f0913d70588f19c53f7e0b5327c95f4651e413c74b785147f9637b17410ac8c846d5d4a20a5a33eb6dc3a45
- languageName: node
- linkType: hard
-
-"tr46@npm:~0.0.3":
- version: 0.0.3
- resolution: "tr46@npm:0.0.3"
- checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3
- languageName: node
- linkType: hard
-
-"trim-repeated@npm:^1.0.0":
- version: 1.0.0
- resolution: "trim-repeated@npm:1.0.0"
- dependencies:
- escape-string-regexp: ^1.0.2
- checksum: e25c235305b82c43f1d64a67a71226c406b00281755e4c2c4f3b1d0b09c687a535dd3c4483327f949f28bb89dc400a0bc5e5b749054f4b99f49ebfe48ba36496
- languageName: node
- linkType: hard
-
-"tslib@npm:^2.1.0":
- version: 2.6.0
- resolution: "tslib@npm:2.6.0"
- checksum: c01066038f950016a18106ddeca4649b4d76caa76ec5a31e2a26e10586a59fceb4ee45e96719bf6c715648e7c14085a81fee5c62f7e9ebee68e77a5396e5538f
- languageName: node
- linkType: hard
-
-"type-fest@npm:^0.13.1":
- version: 0.13.1
- resolution: "type-fest@npm:0.13.1"
- checksum: e6bf2e3c449f27d4ef5d56faf8b86feafbc3aec3025fc9a5fbe2db0a2587c44714521f9c30d8516a833c8c506d6263f5cc11267522b10c6ccdb6cc55b0a9d1c4
- languageName: node
- linkType: hard
-
-"type-fest@npm:^0.21.3":
- version: 0.21.3
- resolution: "type-fest@npm:0.21.3"
- checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0
- languageName: node
- linkType: hard
-
-"type-is@npm:~1.6.18":
- version: 1.6.18
- resolution: "type-is@npm:1.6.18"
- dependencies:
- media-typer: 0.3.0
- mime-types: ~2.1.24
- checksum: 2c8e47675d55f8b4e404bcf529abdf5036c537a04c2b20177bcf78c9e3c1da69da3942b1346e6edb09e823228c0ee656ef0e033765ec39a70d496ef601a0c657
- languageName: node
- linkType: hard
-
-"unique-filename@npm:^3.0.0":
- version: 3.0.0
- resolution: "unique-filename@npm:3.0.0"
- dependencies:
- unique-slug: ^4.0.0
- checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df
- languageName: node
- linkType: hard
-
-"unique-slug@npm:^4.0.0":
- version: 4.0.0
- resolution: "unique-slug@npm:4.0.0"
- dependencies:
- imurmurhash: ^0.1.4
- checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15
- languageName: node
- linkType: hard
-
-"universalify@npm:^0.1.0":
- version: 0.1.2
- resolution: "universalify@npm:0.1.2"
- checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff
- languageName: node
- linkType: hard
-
-"universalify@npm:^2.0.0":
- version: 2.0.0
- resolution: "universalify@npm:2.0.0"
- checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44
- languageName: node
- linkType: hard
-
-"unorm@npm:^1.4.1":
- version: 1.6.0
- resolution: "unorm@npm:1.6.0"
- checksum: 9a86546256a45f855b6cfe719086785d6aada94f63778cecdecece8d814ac26af76cb6da70130da0a08b8803bbf0986e56c7ec4249038198f3de02607fffd811
- languageName: node
- linkType: hard
-
-"unpipe@npm:1.0.0, unpipe@npm:~1.0.0":
- version: 1.0.0
- resolution: "unpipe@npm:1.0.0"
- checksum: 4fa18d8d8d977c55cb09715385c203197105e10a6d220087ec819f50cb68870f02942244f1017565484237f1f8c5d3cd413631b1ae104d3096f24fdfde1b4aa2
- languageName: node
- linkType: hard
-
-"username@npm:^5.1.0":
- version: 5.1.0
- resolution: "username@npm:5.1.0"
- dependencies:
- execa: ^1.0.0
- mem: ^4.3.0
- checksum: 455c3b2103c164c867c263696fa3bc9a4066a3941d2d5d04bb51d9e092874af075c08311d50c9fc4685d75b3dcad43dd42d3ac1a775340f473042797dce86edb
- languageName: node
- linkType: hard
-
-"util-deprecate@npm:^1.0.1":
- version: 1.0.2
- resolution: "util-deprecate@npm:1.0.2"
- checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2
- languageName: node
- linkType: hard
-
-"utils-merge@npm:1.0.1":
- version: 1.0.1
- resolution: "utils-merge@npm:1.0.1"
- checksum: c81095493225ecfc28add49c106ca4f09cdf56bc66731aa8dabc2edbbccb1e1bfe2de6a115e5c6a380d3ea166d1636410b62ef216bb07b3feb1cfde1d95d5080
- languageName: node
- linkType: hard
-
-"validate-npm-package-license@npm:^3.0.1":
- version: 3.0.4
- resolution: "validate-npm-package-license@npm:3.0.4"
- dependencies:
- spdx-correct: ^3.0.0
- spdx-expression-parse: ^3.0.0
- checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad
- languageName: node
- linkType: hard
-
-"vary@npm:~1.1.2":
- version: 1.1.2
- resolution: "vary@npm:1.1.2"
- checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b
- languageName: node
- linkType: hard
-
-"vite@npm:^4.1.1":
- version: 4.4.4
- resolution: "vite@npm:4.4.4"
- dependencies:
- esbuild: ^0.18.10
- fsevents: ~2.3.2
- postcss: ^8.4.25
- rollup: ^3.25.2
- peerDependencies:
- "@types/node": ">= 14"
- less: "*"
- lightningcss: ^1.21.0
- sass: "*"
- stylus: "*"
- sugarss: "*"
- terser: ^5.4.0
- dependenciesMeta:
- fsevents:
- optional: true
- peerDependenciesMeta:
- "@types/node":
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- bin:
- vite: bin/vite.js
- checksum: 51c208e53680fa46f7166e49b037625ae43d507f85f1fd3da7e290263bccb77d5f8c466fe82746285927620afeeff949ac3b8e1b6a7b4fe7bfe11419729256b4
- languageName: node
- linkType: hard
-
-"wcwidth@npm:^1.0.1":
- version: 1.0.1
- resolution: "wcwidth@npm:1.0.1"
- dependencies:
- defaults: ^1.0.3
- checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c
- languageName: node
- linkType: hard
-
-"webidl-conversions@npm:^3.0.0":
- version: 3.0.1
- resolution: "webidl-conversions@npm:3.0.1"
- checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c
- languageName: node
- linkType: hard
-
-"whatwg-url@npm:^5.0.0":
- version: 5.0.0
- resolution: "whatwg-url@npm:5.0.0"
- dependencies:
- tr46: ~0.0.3
- webidl-conversions: ^3.0.0
- checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c
- languageName: node
- linkType: hard
-
-"which-module@npm:^2.0.0":
- version: 2.0.1
- resolution: "which-module@npm:2.0.1"
- checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be
- languageName: node
- linkType: hard
-
-"which@npm:^1.2.14, which@npm:^1.2.9":
- version: 1.3.1
- resolution: "which@npm:1.3.1"
- dependencies:
- isexe: ^2.0.0
- bin:
- which: ./bin/which
- checksum: f2e185c6242244b8426c9df1510e86629192d93c1a986a7d2a591f2c24869e7ffd03d6dac07ca863b2e4c06f59a4cc9916c585b72ee9fa1aa609d0124df15e04
- languageName: node
- linkType: hard
-
-"which@npm:^2.0.1, which@npm:^2.0.2":
- version: 2.0.2
- resolution: "which@npm:2.0.2"
- dependencies:
- isexe: ^2.0.0
- bin:
- node-which: ./bin/node-which
- checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1
- languageName: node
- linkType: hard
-
-"wide-align@npm:^1.1.5":
- version: 1.1.5
- resolution: "wide-align@npm:1.1.5"
- dependencies:
- string-width: ^1.0.2 || 2 || 3 || 4
- checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3
- languageName: node
- linkType: hard
-
-"word-wrap@npm:^1.2.3":
- version: 1.2.4
- resolution: "word-wrap@npm:1.2.4"
- checksum: 8f1f2e0a397c0e074ca225ba9f67baa23f99293bc064e31355d426ae91b8b3f6b5f6c1fc9ae5e9141178bb362d563f55e62fd8d5c31f2a77e3ade56cb3e35bd1
- languageName: node
- linkType: hard
-
-"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0":
- version: 7.0.0
- resolution: "wrap-ansi@npm:7.0.0"
- dependencies:
- ansi-styles: ^4.0.0
- string-width: ^4.1.0
- strip-ansi: ^6.0.0
- checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b
- languageName: node
- linkType: hard
-
-"wrap-ansi@npm:^6.2.0":
- version: 6.2.0
- resolution: "wrap-ansi@npm:6.2.0"
- dependencies:
- ansi-styles: ^4.0.0
- string-width: ^4.1.0
- strip-ansi: ^6.0.0
- checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a
- languageName: node
- linkType: hard
-
-"wrap-ansi@npm:^8.1.0":
- version: 8.1.0
- resolution: "wrap-ansi@npm:8.1.0"
- dependencies:
- ansi-styles: ^6.1.0
- string-width: ^5.0.1
- strip-ansi: ^7.0.1
- checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238
- languageName: node
- linkType: hard
-
-"wrappy@npm:1":
- version: 1.0.2
- resolution: "wrappy@npm:1.0.2"
- checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5
- languageName: node
- linkType: hard
-
-"ws@npm:^7.4.6":
- version: 7.5.9
- resolution: "ws@npm:7.5.9"
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138
- languageName: node
- linkType: hard
-
-"xmlbuilder@npm:^15.1.1":
- version: 15.1.1
- resolution: "xmlbuilder@npm:15.1.1"
- checksum: 14f7302402e28d1f32823583d121594a9dca36408d40320b33f598bd589ca5163a352d076489c9c64d2dc1da19a790926a07bf4191275330d4de2b0d85bb1843
- languageName: node
- linkType: hard
-
-"xtend@npm:^4.0.0":
- version: 4.0.2
- resolution: "xtend@npm:4.0.2"
- checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a
- languageName: node
- linkType: hard
-
-"xterm-addon-fit@npm:^0.5.0":
- version: 0.5.0
- resolution: "xterm-addon-fit@npm:0.5.0"
- peerDependencies:
- xterm: ^4.0.0
- checksum: 884d9f360893335c87e4514beeda2af6dbebf38a89b8518f1126d9c4611aefc1598b750bb43a953b79fdf1179c40d70c77a9169ae10f07e0abbbdb39b919b33f
- languageName: node
- linkType: hard
-
-"xterm-addon-search@npm:^0.8.0":
- version: 0.8.2
- resolution: "xterm-addon-search@npm:0.8.2"
- peerDependencies:
- xterm: ^4.0.0
- checksum: cb5fa8a551354d98d81c3f4792a43150670be119a0bf10fdff6727ee80ba2524682371f828bb175bd71075ca45989805560754bb22a30ed87d59725b7910cf1c
- languageName: node
- linkType: hard
-
-"xterm@npm:^4.9.0":
- version: 4.19.0
- resolution: "xterm@npm:4.19.0"
- checksum: 4385e08d6f1e26d0db295ba55f0ed9c304686a72c2cfdd32502cf59de23ae9c93434d469fc3735f44375602f209f767a1ba643a86be6f8e0f1cf7e5bfdccde87
- languageName: node
- linkType: hard
-
-"y18n@npm:^4.0.0":
- version: 4.0.3
- resolution: "y18n@npm:4.0.3"
- checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4
- languageName: node
- linkType: hard
-
-"y18n@npm:^5.0.5":
- version: 5.0.8
- resolution: "y18n@npm:5.0.8"
- checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30
- languageName: node
- linkType: hard
-
-"yallist@npm:^4.0.0":
- version: 4.0.0
- resolution: "yallist@npm:4.0.0"
- checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
- languageName: node
- linkType: hard
-
-"yargs-parser@npm:^18.1.2":
- version: 18.1.3
- resolution: "yargs-parser@npm:18.1.3"
- dependencies:
- camelcase: ^5.0.0
- decamelize: ^1.2.0
- checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9
- languageName: node
- linkType: hard
-
-"yargs-parser@npm:^20.2.2":
- version: 20.2.9
- resolution: "yargs-parser@npm:20.2.9"
- checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3
- languageName: node
- linkType: hard
-
-"yargs-parser@npm:^21.1.1":
- version: 21.1.1
- resolution: "yargs-parser@npm:21.1.1"
- checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c
- languageName: node
- linkType: hard
-
-"yargs@npm:^15.0.1":
- version: 15.4.1
- resolution: "yargs@npm:15.4.1"
- dependencies:
- cliui: ^6.0.0
- decamelize: ^1.2.0
- find-up: ^4.1.0
- get-caller-file: ^2.0.1
- require-directory: ^2.1.1
- require-main-filename: ^2.0.0
- set-blocking: ^2.0.0
- string-width: ^4.2.0
- which-module: ^2.0.0
- y18n: ^4.0.0
- yargs-parser: ^18.1.2
- checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373
- languageName: node
- linkType: hard
-
-"yargs@npm:^16.0.2":
- version: 16.2.0
- resolution: "yargs@npm:16.2.0"
- dependencies:
- cliui: ^7.0.2
- escalade: ^3.1.1
- get-caller-file: ^2.0.5
- require-directory: ^2.1.1
- string-width: ^4.2.0
- y18n: ^5.0.5
- yargs-parser: ^20.2.2
- checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59
- languageName: node
- linkType: hard
-
-"yargs@npm:^17.0.1":
- version: 17.7.2
- resolution: "yargs@npm:17.7.2"
- dependencies:
- cliui: ^8.0.1
- escalade: ^3.1.1
- get-caller-file: ^2.0.5
- require-directory: ^2.1.1
- string-width: ^4.2.3
- y18n: ^5.0.5
- yargs-parser: ^21.1.1
- checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a
- languageName: node
- linkType: hard
-
-"yarn-or-npm@npm:^3.0.1":
- version: 3.0.1
- resolution: "yarn-or-npm@npm:3.0.1"
- dependencies:
- cross-spawn: ^6.0.5
- pkg-dir: ^4.2.0
- bin:
- yarn-or-npm: bin/index.js
- yon: bin/index.js
- checksum: 94421b4315520075b4db6c09b6284064c047058d8bbe2663cdd4269491e5f7ea5d2e68eeaa0182a760a8757479cef665b7040a8c9ddb48a3da52587a8b712b27
- languageName: node
- linkType: hard
-
-"yauzl@npm:^2.10.0":
- version: 2.10.0
- resolution: "yauzl@npm:2.10.0"
- dependencies:
- buffer-crc32: ~0.2.3
- fd-slicer: ~1.1.0
- checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b
- languageName: node
- linkType: hard
-
-"yocto-queue@npm:^0.1.0":
- version: 0.1.0
- resolution: "yocto-queue@npm:0.1.0"
- checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700
- languageName: node
- linkType: hard
diff --git a/apps/nestjs-backend/.gitignore b/apps/nestjs-backend/.gitignore
index e746b599b..6d63fc39f 100644
--- a/apps/nestjs-backend/.gitignore
+++ b/apps/nestjs-backend/.gitignore
@@ -1,3 +1,12 @@
+# build
build
dist
-.temporary/*
\ No newline at end of file
+
+# testing
+/coverage
+
+# misc
+.DS_Store
+*.pem
+.assets
+.temporary
\ No newline at end of file
diff --git a/apps/nestjs-backend/package.json b/apps/nestjs-backend/package.json
index e9ca478a8..a7b2ed4e9 100644
--- a/apps/nestjs-backend/package.json
+++ b/apps/nestjs-backend/package.json
@@ -40,7 +40,7 @@
"check-size": "size-limit --highlight-less",
"test": "run-s test-unit test-e2e",
"test-unit": "vitest run --silent --bail 1",
- "test-cov": "vitest run --coverage",
+ "test-unit-cover": "pnpm test-unit --coverage",
"pre-test-e2e": "cross-env NODE_ENV=test pnpm -F @teable/db-main-prisma prisma-db-seed -- --e2e",
"test-e2e": "pnpm pre-test-e2e && vitest run --config ./vitest-e2e.config.ts --silent --bail 1",
"typecheck": "tsc --project ./tsconfig.json --noEmit",
@@ -51,7 +51,7 @@
"devDependencies": {
"@faker-js/faker": "8.4.1",
"@nestjs/cli": "10.3.2",
- "@nestjs/testing": "10.3.3",
+ "@nestjs/testing": "10.3.4",
"@teable/eslint-config-bases": "workspace:^",
"@types/bcrypt": "5.0.2",
"@types/cookie": "0.6.0",
@@ -60,7 +60,7 @@
"@types/express": "4.17.21",
"@types/express-session": "1.18.0",
"@types/fs-extra": "11.0.4",
- "@types/lodash": "4.14.202",
+ "@types/lodash": "4.17.0",
"@types/markdown-it": "13.0.7",
"@types/mime-types": "2.1.4",
"@types/ms": "0.7.34",
@@ -69,11 +69,14 @@
"@types/node-fetch": "2.6.11",
"@types/nodemailer": "6.4.14",
"@types/passport": "1.0.16",
+ "@types/passport-github2": "1.2.9",
+ "@types/passport-google-oauth20": "2.0.14",
"@types/passport-jwt": "4.0.1",
"@types/passport-local": "1.0.38",
"@types/pause": "0.1.3",
"@types/sharedb": "3.3.10",
"@types/ws": "8.5.10",
+ "@vitest/coverage-v8": "1.4.0",
"copy-webpack-plugin": "12.0.2",
"cross-env": "7.0.3",
"dotenv-flow": "4.1.0",
@@ -91,8 +94,8 @@
"ts-node": "10.9.2",
"typescript": "5.4.2",
"unplugin-swc": "1.4.4",
- "vite-tsconfig-paths": "4.3.1",
- "vitest": "1.3.1",
+ "vite-tsconfig-paths": "4.3.2",
+ "vitest": "1.4.0",
"vitest-mock-extended": "1.3.1",
"webpack": "5.90.2"
},
@@ -101,28 +104,28 @@
"@keyv/sqlite": "3.6.7",
"@nestjs-modules/mailer": "1.11.2",
"@nestjs/axios": "3.0.2",
- "@nestjs/common": "10.3.3",
+ "@nestjs/common": "10.3.4",
"@nestjs/config": "3.2.0",
- "@nestjs/core": "10.3.3",
+ "@nestjs/core": "10.3.4",
"@nestjs/event-emitter": "2.0.4",
"@nestjs/jwt": "10.2.0",
"@nestjs/passport": "10.0.3",
- "@nestjs/platform-express": "10.3.3",
- "@nestjs/platform-ws": "10.3.3",
+ "@nestjs/platform-express": "10.3.4",
+ "@nestjs/platform-ws": "10.3.4",
"@nestjs/swagger": "7.3.0",
"@nestjs/terminus": "10.2.3",
- "@nestjs/websockets": "10.3.3",
+ "@nestjs/websockets": "10.3.4",
"@opentelemetry/api": "1.8.0",
"@opentelemetry/context-async-hooks": "1.22.0",
"@opentelemetry/exporter-trace-otlp-proto": "0.49.1",
- "@opentelemetry/instrumentation-express": "0.36.0",
+ "@opentelemetry/instrumentation-express": "0.36.1",
"@opentelemetry/instrumentation-http": "0.49.1",
"@opentelemetry/instrumentation-pino": "0.36.0",
"@opentelemetry/resources": "1.22.0",
"@opentelemetry/sdk-node": "0.49.1",
"@opentelemetry/semantic-conventions": "1.22.0",
- "@prisma/client": "5.10.2",
- "@prisma/instrumentation": "5.10.2",
+ "@prisma/client": "5.11.0",
+ "@prisma/instrumentation": "5.11.0",
"@teable/common-i18n": "workspace:^",
"@teable/core": "workspace:^",
"@teable/db-main-prisma": "workspace:^",
@@ -130,7 +133,7 @@
"@teamwork/websocket-json-stream": "2.0.0",
"@types/papaparse": "5.3.14",
"ajv": "8.12.0",
- "axios": "1.6.7",
+ "axios": "1.6.8",
"bcrypt": "5.1.1",
"class-transformer": "0.5.1",
"class-validator": "0.14.1",
@@ -150,7 +153,7 @@
"keyv": "4.5.4",
"knex": "3.1.0",
"lodash": "4.17.21",
- "markdown-it": "14.0.0",
+ "markdown-it": "14.1.0",
"markdown-it-sanitizer": "0.4.3",
"mime-types": "2.1.35",
"minio": "7.1.3",
@@ -158,14 +161,16 @@
"multer": "1.4.5-lts.1",
"nanoid": "3.3.7",
"nest-knexjs": "0.0.21",
- "nestjs-cls": "4.2.0",
+ "nestjs-cls": "4.2.1",
"nestjs-pino": "4.0.0",
"nestjs-redoc": "2.2.2",
"next": "14.1.3",
"node-fetch": "2.7.0",
- "nodemailer": "6.9.11",
+ "nodemailer": "6.9.12",
"papaparse": "5.4.1",
"passport": "0.7.0",
+ "passport-github2": "0.1.12",
+ "passport-google-oauth20": "2.0.0",
"passport-jwt": "4.0.1",
"passport-local": "1.0.0",
"pause": "0.1.0",
@@ -179,6 +184,7 @@
"transliteration": "2.3.5",
"ts-pattern": "5.0.8",
"ws": "8.16.0",
+ "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz",
"zod": "3.22.4",
"zod-validation-error": "3.0.3"
}
diff --git a/apps/nestjs-backend/src/cache/types.ts b/apps/nestjs-backend/src/cache/types.ts
index fb93ac80c..ef1fa3bcf 100644
--- a/apps/nestjs-backend/src/cache/types.ts
+++ b/apps/nestjs-backend/src/cache/types.ts
@@ -9,6 +9,8 @@ export interface ICacheStore {
[key: `auth:session-store:${string}`]: ISessionData;
[key: `auth:session-user:${string}`]: Record;
[key: `auth:session-expire:${string}`]: boolean;
+ [key: `oauth2:${string}`]: IOauth2State;
+ [key: `reset-password-email:${string}`]: IResetPasswordEmailCache;
}
export interface IAttachmentSignatureCache {
@@ -33,3 +35,11 @@ export interface IAttachmentPreviewCache {
url: string;
expiresIn: number;
}
+
+export interface IOauth2State {
+ redirectUri?: string;
+}
+
+export interface IResetPasswordEmailCache {
+ userId: string;
+}
diff --git a/apps/nestjs-backend/src/configs/auth.config.ts b/apps/nestjs-backend/src/configs/auth.config.ts
index 51e3c7b19..198daf44e 100644
--- a/apps/nestjs-backend/src/configs/auth.config.ts
+++ b/apps/nestjs-backend/src/configs/auth.config.ts
@@ -22,6 +22,17 @@ export const authConfig = registerAs('auth', () => ({
iv: process.env.BACKEND_ACCESS_TOKEN_ENCRYPTION_IV ?? 'i0vKGXBWkzyAoGf4',
},
},
+ resetPasswordEmailExpiresIn: process.env.BACKEND_RESET_PASSWORD_EMAIL_EXPIRES_IN ?? '30m',
+ socialAuthProviders: process.env.SOCIAL_AUTH_PROVIDERS?.split(',') ?? [],
+ github: {
+ clientID: process.env.BACKEND_GITHUB_CLIENT_ID,
+ clientSecret: process.env.BACKEND_GITHUB_CLIENT_SECRET,
+ },
+ google: {
+ clientID: process.env.BACKEND_GOOGLE_CLIENT_ID,
+ clientSecret: process.env.BACKEND_GOOGLE_CLIENT_SECRET,
+ callbackURL: process.env.BACKEND_GOOGLE_CALLBACK_URL,
+ },
}));
export const AuthConfig = () => Inject(authConfig.KEY);
diff --git a/apps/nestjs-backend/src/configs/base.config.ts b/apps/nestjs-backend/src/configs/base.config.ts
index 8de8a85f5..e7e404cc3 100644
--- a/apps/nestjs-backend/src/configs/base.config.ts
+++ b/apps/nestjs-backend/src/configs/base.config.ts
@@ -9,7 +9,7 @@ export const baseConfig = registerAs('base', () => ({
assetPrefix: process.env.ASSET_PREFIX ?? process.env.PUBLIC_ORIGIN!,
storagePrefix: process.env.STORAGE_PREFIX ?? process.env.PUBLIC_ORIGIN!,
secretKey: process.env.SECRET_KEY ?? 'defaultSecretKey',
- publicDatabaseAddress: process.env.PUBLIC_DATABASE_ADDRESS,
+ publicDatabaseProxy: process.env.PUBLIC_DATABASE_PROXY,
defaultMaxBaseDBConnections: Number(process.env.DEFAULT_MAX_BASE_DB_CONNECTIONS ?? 3),
templateSpaceId: process.env.TEMPLATE_SPACE_ID,
}));
diff --git a/apps/nestjs-backend/src/configs/env.validation.schema.ts b/apps/nestjs-backend/src/configs/env.validation.schema.ts
index 9c7eb5b04..7006ae99a 100644
--- a/apps/nestjs-backend/src/configs/env.validation.schema.ts
+++ b/apps/nestjs-backend/src/configs/env.validation.schema.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/naming-convention */
import Joi from 'joi';
export const envValidationSchema = Joi.object({
@@ -37,4 +38,23 @@ export const envValidationSchema = Joi.object({
.pattern(/^(redis:\/\/|rediss:\/\/)/)
.message('Cache `redis` the URI must start with the protocol `redis://` or `rediss://`'),
}),
+ // github auth
+ BACKEND_GITHUB_CLIENT_ID: Joi.when('SOCIAL_AUTH_PROVIDERS', {
+ is: Joi.string()
+ .regex(/(^|,)(github)(,|$)/)
+ .required(),
+ then: Joi.string().required().messages({
+ 'any.required':
+ 'The `BACKEND_GITHUB_CLIENT_ID` is required when `SOCIAL_AUTH_PROVIDERS` includes `github`',
+ }),
+ }),
+ BACKEND_GITHUB_CLIENT_SECRET: Joi.when('SOCIAL_AUTH_PROVIDERS', {
+ is: Joi.string()
+ .regex(/(^|,)(github)(,|$)/)
+ .required(),
+ then: Joi.string().required().messages({
+ 'any.required':
+ 'The `BACKEND_GITHUB_CLIENT_SECRET` is required when `SOCIAL_AUTH_PROVIDERS` includes `github`',
+ }),
+ }),
});
diff --git a/apps/nestjs-backend/src/configs/threshold.config.ts b/apps/nestjs-backend/src/configs/threshold.config.ts
index 39d30018a..f300c4c68 100644
--- a/apps/nestjs-backend/src/configs/threshold.config.ts
+++ b/apps/nestjs-backend/src/configs/threshold.config.ts
@@ -5,13 +5,14 @@ import { registerAs } from '@nestjs/config';
export const thresholdConfig = registerAs('threshold', () => ({
maxCopyCells: Number(process.env.MAX_COPY_CELLS ?? 50_000),
- maxResetCells: Number(process.env.MAX_RESET_CELLS ?? 10_000),
- maxPasteCells: Number(process.env.MAX_PASTE_CELLS ?? 10_000),
+ maxResetCells: Number(process.env.MAX_RESET_CELLS ?? 50_000),
+ maxPasteCells: Number(process.env.MAX_PASTE_CELLS ?? 50_000),
maxReadRows: Number(process.env.MAX_READ_ROWS ?? 10_000),
maxDeleteRows: Number(process.env.MAX_DELETE_ROWS ?? 1_000),
maxSyncUpdateCells: Number(process.env.MAX_SYNC_UPDATE_CELLS ?? 10_000),
maxGroupPoints: Number(process.env.MAX_GROUP_POINTS ?? 5_000),
calcChunkSize: Number(process.env.CALC_CHUNK_SIZE ?? 1_000),
+ maxFreeRowLimit: Number(process.env.MAX_FREE_ROW_LIMIT ?? 0),
estimateCalcCelPerMs: Number(process.env.ESTIMATE_CALC_CEL_PER_MS ?? 3),
bigTransactionTimeout: Number(
process.env.BIG_TRANSACTION_TIMEOUT ?? 10 * 60 * 1000 /* 10 mins */
diff --git a/apps/nestjs-backend/src/db-provider/db.provider.interface.ts b/apps/nestjs-backend/src/db-provider/db.provider.interface.ts
index e1db427bf..de7c73377 100644
--- a/apps/nestjs-backend/src/db-provider/db.provider.interface.ts
+++ b/apps/nestjs-backend/src/db-provider/db.provider.interface.ts
@@ -1,4 +1,5 @@
import type { DriverClient, IAggregationField, IFilter, ISortItem } from '@teable/core';
+import type { Prisma } from '@teable/db-main-prisma';
import type { Knex } from 'knex';
import type { IFieldInstance } from '../features/field/model/factory';
import type { SchemaType } from '../features/field/util';
@@ -29,13 +30,19 @@ export interface IDbProvider {
dropTable(tableName: string): string;
- renameColumnName(tableName: string, oldName: string, newName: string): string[];
+ renameColumn(tableName: string, oldName: string, newName: string): string[];
dropColumn(tableName: string, columnName: string): string[];
// sql response format: { name: string }[], name for columnName.
columnInfo(tableName: string): string;
+ checkColumnExist(
+ tableName: string,
+ columnName: string,
+ prisma: Prisma.TransactionClient
+ ): Promise;
+
dropColumnAndIndex(tableName: string, columnName: string, indexName: string): string[];
modifyColumnSchema(tableName: string, columnName: string, schemaType: SchemaType): string[];
diff --git a/apps/nestjs-backend/src/db-provider/postgres.provider.ts b/apps/nestjs-backend/src/db-provider/postgres.provider.ts
index a82fb9972..50d9e8c18 100644
--- a/apps/nestjs-backend/src/db-provider/postgres.provider.ts
+++ b/apps/nestjs-backend/src/db-provider/postgres.provider.ts
@@ -1,6 +1,7 @@
import { Logger } from '@nestjs/common';
import type { IAggregationField, IFilter, ISortItem } from '@teable/core';
import { DriverClient } from '@teable/core';
+import type { PrismaClient } from '@teable/db-main-prisma';
import type { Knex } from 'knex';
import type { IFieldInstance } from '../features/field/model/factory';
import type { SchemaType } from '../features/field/util';
@@ -42,11 +43,26 @@ export class PostgresProvider implements IDbProvider {
}
dropTable(tableName: string): string {
+ return this.knex.raw('DROP TABLE ??', [tableName]).toQuery();
+ }
+
+ async checkColumnExist(
+ tableName: string,
+ columnName: string,
+ prisma: PrismaClient
+ ): Promise {
const [schemaName, dbTableName] = this.splitTableName(tableName);
- return this.knex.raw('DROP TABLE ??.??', [schemaName, dbTableName]).toQuery();
+ const sql = this.knex
+ .raw(
+ 'SELECT EXISTS (SELECT FROM information_schema.columns WHERE table_schema = ? AND table_name = ? AND column_name = ?) AS exists',
+ [schemaName, dbTableName, columnName]
+ )
+ .toQuery();
+ const res = await prisma.$queryRawUnsafe<{ exists: boolean }[]>(sql);
+ return res[0].exists;
}
- renameColumnName(tableName: string, oldName: string, newName: string): string[] {
+ renameColumn(tableName: string, oldName: string, newName: string): string[] {
return this.knex.schema
.alterTable(tableName, (table) => {
table.renameColumn(oldName, newName);
diff --git a/apps/nestjs-backend/src/db-provider/sqlite.provider.ts b/apps/nestjs-backend/src/db-provider/sqlite.provider.ts
index bfbfa4c00..99846ef03 100644
--- a/apps/nestjs-backend/src/db-provider/sqlite.provider.ts
+++ b/apps/nestjs-backend/src/db-provider/sqlite.provider.ts
@@ -2,6 +2,7 @@
import { Logger } from '@nestjs/common';
import type { IAggregationField, IFilter, ISortItem } from '@teable/core';
import { DriverClient } from '@teable/core';
+import type { PrismaClient } from '@teable/db-main-prisma';
import type { Knex } from 'knex';
import type { IFieldInstance } from '../features/field/model/factory';
import type { SchemaType } from '../features/field/util';
@@ -41,7 +42,17 @@ export class SqliteProvider implements IDbProvider {
return this.knex.raw('DROP TABLE ??', [tableName]).toQuery();
}
- renameColumnName(tableName: string, oldName: string, newName: string): string[] {
+ async checkColumnExist(
+ tableName: string,
+ columnName: string,
+ prisma: PrismaClient
+ ): Promise {
+ const sql = this.columnInfo(tableName);
+ const columns = await prisma.$queryRawUnsafe<{ name: string }[]>(sql);
+ return columns.some((column) => column.name === columnName);
+ }
+
+ renameColumn(tableName: string, oldName: string, newName: string): string[] {
return [
this.knex
.raw('ALTER TABLE ?? RENAME COLUMN ?? TO ??', [tableName, oldName, newName])
diff --git a/apps/nestjs-backend/src/event-emitter/events/table/record.event.ts b/apps/nestjs-backend/src/event-emitter/events/table/record.event.ts
index d86960490..0bd1c5ded 100644
--- a/apps/nestjs-backend/src/event-emitter/events/table/record.event.ts
+++ b/apps/nestjs-backend/src/event-emitter/events/table/record.event.ts
@@ -6,10 +6,7 @@ import { Events } from '../event.enum';
import type { IChangeValue } from '../op-event';
import { OpEvent } from '../op-event';
-export type IChangeRecord = Record<
- keyof Pick,
- Record
-> & {
+export type IChangeRecord = Record, Record> & {
id: string;
};
diff --git a/apps/nestjs-backend/src/features/attachments/attachments-table.service.spec.ts b/apps/nestjs-backend/src/features/attachments/attachments-table.service.spec.ts
index 34279a13b..95895477a 100644
--- a/apps/nestjs-backend/src/features/attachments/attachments-table.service.spec.ts
+++ b/apps/nestjs-backend/src/features/attachments/attachments-table.service.spec.ts
@@ -94,12 +94,10 @@ describe('AttachmentsService', () => {
const records: IRecord[] = [
{
id: 'record1',
- recordOrder: {},
fields: {},
},
{
id: 'record2',
- recordOrder: {},
fields: {
field1: mockAttachmentCellValue,
},
@@ -129,7 +127,6 @@ describe('AttachmentsService', () => {
oldValue: null,
},
},
- recordOrder: {},
},
];
@@ -176,7 +173,6 @@ describe('AttachmentsService', () => {
oldValue: mockOldAttachmentCellValue.slice(0, 1),
},
},
- recordOrder: {},
},
{
id: 'record2',
@@ -186,7 +182,6 @@ describe('AttachmentsService', () => {
oldValue: mockOldAttachmentCellValue.slice(1),
},
},
- recordOrder: {},
},
];
diff --git a/apps/nestjs-backend/src/features/attachments/plugins/adapter.ts b/apps/nestjs-backend/src/features/attachments/plugins/adapter.ts
index dda337bdb..dab575977 100644
--- a/apps/nestjs-backend/src/features/attachments/plugins/adapter.ts
+++ b/apps/nestjs-backend/src/features/attachments/plugins/adapter.ts
@@ -1,3 +1,4 @@
+import type { Readable as ReadableStream } from 'node:stream';
import { BadRequestException } from '@nestjs/common';
import { UploadType } from '@teable/openapi';
import { storageConfig } from '../../../configs/storage';
@@ -16,7 +17,7 @@ export default abstract class StorageAdapter {
}
};
- static readonly getDir = (type: UploadType) => {
+ static readonly getDir = (type: UploadType): string => {
switch (type) {
case UploadType.Table:
return 'table';
@@ -79,7 +80,7 @@ export default abstract class StorageAdapter {
path: string,
filePath: string,
metadata: Record
- ): Promise;
+ ): Promise<{ hash: string; url: string }>;
/**
* uploadFile with file stream
@@ -91,7 +92,7 @@ export default abstract class StorageAdapter {
abstract uploadFile(
bucket: string,
path: string,
- stream: Buffer,
+ stream: Buffer | ReadableStream,
metadata?: Record
- ): Promise;
+ ): Promise<{ hash: string; url: string }>;
}
diff --git a/apps/nestjs-backend/src/features/attachments/plugins/local.ts b/apps/nestjs-backend/src/features/attachments/plugins/local.ts
index 4cd9111e8..089511817 100644
--- a/apps/nestjs-backend/src/features/attachments/plugins/local.ts
+++ b/apps/nestjs-backend/src/features/attachments/plugins/local.ts
@@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/naming-convention */
import { createReadStream, createWriteStream } from 'fs';
-import { join, resolve, dirname } from 'path';
+import { type Readable as ReadableStream } from 'node:stream';
+import { join, resolve } from 'path';
import { BadRequestException, Injectable } from '@nestjs/common';
import { getRandomString } from '@teable/core';
import type { Request } from 'express';
@@ -8,6 +9,7 @@ import * as fse from 'fs-extra';
import sharp from 'sharp';
import { CacheService } from '../../../cache/cache.service';
import { IStorageConfig, StorageConfig } from '../../../configs/storage';
+import { FileUtils } from '../../../utils';
import { Encryptor } from '../../../utils/encryptor';
import { getFullStorageUrl } from '../../../utils/full-storage-url';
import { second } from '../../../utils/second';
@@ -229,22 +231,46 @@ export class LocalStorage implements StorageAdapter {
filePath: string,
_metadata: Record
) {
- this.save(filePath, join(bucket, path));
- return join(this.readPath, bucket, path);
+ const hash = await FileUtils.getHash(filePath);
+ await this.save(filePath, join(bucket, path));
+ return {
+ hash,
+ url: join(this.readPath, bucket, path),
+ };
}
async uploadFile(
bucket: string,
path: string,
- stream: Buffer,
+ stream: Buffer | ReadableStream,
_metadata?: Record
- ): Promise {
- const distPath = resolve(this.storageDir);
- const newFilePath = resolve(distPath, join(bucket, path));
-
- await fse.ensureDir(dirname(newFilePath));
-
- await fse.writeFile(newFilePath, stream);
- return join(this.readPath, bucket, path);
+ ) {
+ const name = getRandomString(12);
+ const temPath = resolve(this.temporaryDir, name);
+ if (stream instanceof Buffer) {
+ await fse.writeFile(temPath, stream);
+ } else {
+ await new Promise((resolve, reject) => {
+ const writer = createWriteStream(temPath);
+ stream.pipe(writer);
+ stream.on('end', function () {
+ writer.end();
+ writer.close();
+ resolve();
+ });
+ stream.on('error', (err) => {
+ writer.end();
+ writer.close();
+ this.deleteFile(path);
+ reject(err);
+ });
+ });
+ }
+ const hash = await FileUtils.getHash(temPath);
+ await this.save(temPath, join(bucket, path));
+ return {
+ hash,
+ url: join(this.readPath, bucket, path),
+ };
}
}
diff --git a/apps/nestjs-backend/src/features/attachments/plugins/minio.ts b/apps/nestjs-backend/src/features/attachments/plugins/minio.ts
index 62264c8d6..c9f9300de 100644
--- a/apps/nestjs-backend/src/features/attachments/plugins/minio.ts
+++ b/apps/nestjs-backend/src/features/attachments/plugins/minio.ts
@@ -1,4 +1,5 @@
/* eslint-disable @typescript-eslint/naming-convention */
+import type { Readable as ReadableStream } from 'node:stream';
import { join } from 'path';
import { BadRequestException, Injectable } from '@nestjs/common';
import { getRandomString } from '@teable/core';
@@ -101,17 +102,23 @@ export class MinioStorage implements StorageAdapter {
filePath: string,
metadata: Record
) {
- await this.minioClient.fPutObject(bucket, path, filePath, metadata);
- return `/${bucket}/${path}`;
+ const { etag: hash } = await this.minioClient.fPutObject(bucket, path, filePath, metadata);
+ return {
+ hash,
+ url: `/${bucket}/${path}`,
+ };
}
async uploadFile(
bucket: string,
path: string,
- stream: Buffer,
+ stream: Buffer | ReadableStream,
metadata?: Record
- ): Promise {
- await this.minioClient.putObject(bucket, path, stream, metadata);
- return `/${bucket}/${path}`;
+ ) {
+ const { etag: hash } = await this.minioClient.putObject(bucket, path, stream, metadata);
+ return {
+ hash,
+ url: `/${bucket}/${path}`,
+ };
}
}
diff --git a/apps/nestjs-backend/src/features/auth/auth.controller.ts b/apps/nestjs-backend/src/features/auth/auth.controller.ts
index 60bc89bad..3b53d709c 100644
--- a/apps/nestjs-backend/src/features/auth/auth.controller.ts
+++ b/apps/nestjs-backend/src/features/auth/auth.controller.ts
@@ -1,5 +1,16 @@
import { Body, Controller, Get, HttpCode, Patch, Post, Req, Res, UseGuards } from '@nestjs/common';
-import { IChangePasswordRo, ISignup, changePasswordRoSchema, signupSchema } from '@teable/openapi';
+import {
+ IAddPasswordRo,
+ IChangePasswordRo,
+ IResetPasswordRo,
+ ISendResetPasswordEmailRo,
+ ISignup,
+ addPasswordRoSchema,
+ changePasswordRoSchema,
+ resetPasswordRoSchema,
+ sendResetPasswordEmailRoSchema,
+ signupSchema,
+} from '@teable/openapi';
import { Response, Request } from 'express';
import { AUTH_SESSION_COOKIE_NAME } from '../../const';
import { ZodValidationPipe } from '../../zod.validation.pipe';
@@ -57,4 +68,23 @@ export class AuthController {
await this.authService.signout(req);
res.clearCookie(AUTH_SESSION_COOKIE_NAME);
}
+
+ @Post('/send-reset-password-email')
+ @Public()
+ async sendResetPasswordEmail(
+ @Body(new ZodValidationPipe(sendResetPasswordEmailRoSchema)) body: ISendResetPasswordEmailRo
+ ) {
+ return this.authService.sendResetPasswordEmail(body.email);
+ }
+
+ @Post('/reset-password')
+ @Public()
+ async resetPassword(@Body(new ZodValidationPipe(resetPasswordRoSchema)) body: IResetPasswordRo) {
+ return this.authService.resetPassword(body.code, body.password);
+ }
+
+ @Post('/add-password')
+ async addPassword(@Body(new ZodValidationPipe(addPasswordRoSchema)) body: IAddPasswordRo) {
+ return this.authService.addPassword(body.password);
+ }
}
diff --git a/apps/nestjs-backend/src/features/auth/auth.module.ts b/apps/nestjs-backend/src/features/auth/auth.module.ts
index 87fa34977..4021acd17 100644
--- a/apps/nestjs-backend/src/features/auth/auth.module.ts
+++ b/apps/nestjs-backend/src/features/auth/auth.module.ts
@@ -9,6 +9,7 @@ import { AuthGuard } from './guard/auth.guard';
import { SessionStoreService } from './session/session-store.service';
import { SessionModule } from './session/session.module';
import { SessionSerializer } from './session/session.serializer';
+import { SocialModule } from './social/social.module';
import { AccessTokenStrategy } from './strategies/access-token.strategy';
import { LocalStrategy } from './strategies/local.strategy';
import { SessionStrategy } from './strategies/session.strategy';
@@ -19,6 +20,7 @@ import { SessionStrategy } from './strategies/session.strategy';
PassportModule.register({ session: true }),
SessionModule,
AccessTokenModule,
+ SocialModule,
],
providers: [
AuthService,
diff --git a/apps/nestjs-backend/src/features/auth/auth.service.ts b/apps/nestjs-backend/src/features/auth/auth.service.ts
index 3c4681b41..7551b3a74 100644
--- a/apps/nestjs-backend/src/features/auth/auth.service.ts
+++ b/apps/nestjs-backend/src/features/auth/auth.service.ts
@@ -1,16 +1,15 @@
-import {
- BadRequestException,
- HttpException,
- HttpStatus,
- Injectable,
- InternalServerErrorException,
-} from '@nestjs/common';
-import { generateUserId } from '@teable/core';
+import { BadRequestException, HttpException, HttpStatus, Injectable } from '@nestjs/common';
+import { generateUserId, getRandomString } from '@teable/core';
import { PrismaService } from '@teable/db-main-prisma';
import type { IChangePasswordRo } from '@teable/openapi';
import * as bcrypt from 'bcrypt';
import { ClsService } from 'nestjs-cls';
+import { CacheService } from '../../cache/cache.service';
+import { AuthConfig, type IAuthConfig } from '../../configs/auth.config';
+import { MailConfig, type IMailConfig } from '../../configs/mail.config';
import type { IClsStore } from '../../types/cls';
+import { second } from '../../utils/second';
+import { MailSenderService } from '../mail-sender/mail-sender.service';
import { UserService } from '../user/user.service';
import { SessionStoreService } from './session/session-store.service';
@@ -20,7 +19,11 @@ export class AuthService {
private readonly prismaService: PrismaService,
private readonly userService: UserService,
private readonly cls: ClsService,
- private readonly sessionStoreService: SessionStoreService
+ private readonly sessionStoreService: SessionStoreService,
+ private readonly mailSenderService: MailSenderService,
+ private readonly cacheService: CacheService,
+ @AuthConfig() private readonly authConfig: IAuthConfig,
+ @MailConfig() private readonly mailConfig: IMailConfig
) {}
private async encodePassword(password: string) {
@@ -38,13 +41,21 @@ export class AuthService {
return _hashPassword === hashPassword;
}
+ private async getUserByIdOrThrow(userId: string) {
+ const user = await this.userService.getUserById(userId);
+ if (!user) {
+ throw new BadRequestException('User not found');
+ }
+ return user;
+ }
+
async validateUserByEmail(email: string, pass: string) {
const user = await this.userService.getUserByEmail(email);
- if (user) {
- const { password, salt, ...result } = user;
- return (await this.comparePassword(pass, password, salt)) ? result : null;
+ if (!user) {
+ throw new BadRequestException(`${email} not registered`);
}
- return null;
+ const { password, salt, ...result } = user;
+ return (await this.comparePassword(pass, password, salt)) ? { ...result, password } : null;
}
async signup(email: string, password: string) {
@@ -53,13 +64,15 @@ export class AuthService {
throw new HttpException(`User ${email} is already registered`, HttpStatus.BAD_REQUEST);
}
const { salt, hashPassword } = await this.encodePassword(password);
- return await this.userService.createUser({
- id: generateUserId(),
- name: email.split('@')[0],
- email,
- salt,
- password: hashPassword,
- lastSignTime: new Date().toISOString(),
+ return await this.prismaService.$tx(async () => {
+ return await this.userService.createUser({
+ id: generateUserId(),
+ name: email.split('@')[0],
+ email,
+ salt,
+ password: hashPassword,
+ lastSignTime: new Date().toISOString(),
+ });
});
}
@@ -78,10 +91,8 @@ export class AuthService {
async changePassword({ password, newPassword }: IChangePasswordRo) {
const userId = this.cls.get('user.id');
- const user = await this.userService.getUserById(userId);
- if (!user) {
- throw new InternalServerErrorException('User not found');
- }
+ const user = await this.getUserByIdOrThrow(userId);
+
const { password: currentHashPassword, salt } = user;
if (!(await this.comparePassword(password, currentHashPassword, salt))) {
throw new BadRequestException('Password is incorrect');
@@ -104,4 +115,62 @@ export class AuthService {
data: { lastSignTime: new Date().toISOString() },
});
}
+
+ async sendResetPasswordEmail(email: string) {
+ const user = await this.userService.getUserByEmail(email);
+ if (!user) {
+ throw new BadRequestException('Email is not registered');
+ }
+ const resetPasswordCode = getRandomString(30);
+
+ const url = `${this.mailConfig.origin}/auth/reset-password?code=${resetPasswordCode}`;
+ const resetPasswordEmailOptions = this.mailSenderService.resetPasswordEmailOptions({
+ name: user.name,
+ email: user.email,
+ resetPasswordUrl: url,
+ });
+ await this.mailSenderService.sendMail({
+ to: user.email,
+ ...resetPasswordEmailOptions,
+ });
+ await this.cacheService.set(
+ `reset-password-email:${resetPasswordCode}`,
+ { userId: user.id },
+ second(this.authConfig.resetPasswordEmailExpiresIn)
+ );
+ }
+
+ async resetPassword(code: string, newPassword: string) {
+ const resetPasswordEmail = await this.cacheService.get(`reset-password-email:${code}`);
+ if (!resetPasswordEmail) {
+ throw new BadRequestException('Token is invalid');
+ }
+ const { userId } = resetPasswordEmail;
+ const { salt, hashPassword } = await this.encodePassword(newPassword);
+ await this.prismaService.txClient().user.update({
+ where: { id: userId, deletedTime: null },
+ data: {
+ password: hashPassword,
+ salt,
+ },
+ });
+ await this.cacheService.del(`reset-password-email:${code}`);
+ }
+
+ async addPassword(newPassword: string) {
+ const userId = this.cls.get('user.id');
+ const user = await this.getUserByIdOrThrow(userId);
+
+ if (user.password) {
+ throw new BadRequestException('Password is already set');
+ }
+ const { salt, hashPassword } = await this.encodePassword(newPassword);
+ await this.prismaService.txClient().user.update({
+ where: { id: userId, deletedTime: null, password: null },
+ data: {
+ password: hashPassword,
+ salt,
+ },
+ });
+ }
}
diff --git a/apps/nestjs-backend/src/features/auth/guard/github.guard.ts b/apps/nestjs-backend/src/features/auth/guard/github.guard.ts
new file mode 100644
index 000000000..854767558
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/guard/github.guard.ts
@@ -0,0 +1,5 @@
+import { Injectable } from '@nestjs/common';
+import { AuthGuard } from '@nestjs/passport';
+
+@Injectable()
+export class GithubGuard extends AuthGuard('github') {}
diff --git a/apps/nestjs-backend/src/features/auth/guard/google.guard.ts b/apps/nestjs-backend/src/features/auth/guard/google.guard.ts
new file mode 100644
index 000000000..df6096776
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/guard/google.guard.ts
@@ -0,0 +1,5 @@
+import { Injectable } from '@nestjs/common';
+import { AuthGuard } from '@nestjs/passport';
+
+@Injectable()
+export class GoogleGuard extends AuthGuard('google') {}
diff --git a/apps/nestjs-backend/src/features/auth/oauth/oauth.store.ts b/apps/nestjs-backend/src/features/auth/oauth/oauth.store.ts
new file mode 100644
index 000000000..5ba364af1
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/oauth/oauth.store.ts
@@ -0,0 +1,39 @@
+import { Injectable } from '@nestjs/common';
+import { getRandomString } from '@teable/core';
+import type { Request } from 'express';
+import { CacheService } from '../../../cache/cache.service';
+import type { IOauth2State } from '../../../cache/types';
+import { second } from '../../../utils/second';
+
+@Injectable()
+export class OauthStoreService {
+ key: string = 'oauth2:';
+
+ constructor(private readonly cacheService: CacheService) {}
+
+ async store(req: Request, callback: (err: unknown, stateId: string) => void) {
+ const random = getRandomString(16);
+ await this.cacheService.set(
+ `oauth2:${random}`,
+ {
+ redirectUri: req.query.redirect_uri as string,
+ },
+ second('12h')
+ );
+ callback(null, random);
+ }
+
+ async verify(
+ _req: unknown,
+ stateId: string,
+ callback: (err: unknown, ok: boolean, state: IOauth2State | string) => void
+ ) {
+ const state = await this.cacheService.get(`oauth2:${stateId}`);
+ if (state) {
+ await this.cacheService.del(`oauth2:${stateId}`);
+ callback(null, true, state);
+ } else {
+ callback(null, false, 'Invalid authorization request state');
+ }
+ }
+}
diff --git a/apps/nestjs-backend/src/features/auth/social/github/github.controller.ts b/apps/nestjs-backend/src/features/auth/social/github/github.controller.ts
new file mode 100644
index 000000000..b857c2f59
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/social/github/github.controller.ts
@@ -0,0 +1,27 @@
+import { Controller, Get, Req, Res, UseGuards } from '@nestjs/common';
+import { Response } from 'express';
+import type { IOauth2State } from '../../../../cache/types';
+import { Public } from '../../decorators/public.decorator';
+import { GithubGuard } from '../../guard/github.guard';
+
+@Controller('api/auth')
+export class GithubController {
+ @Get('/github')
+ @Public()
+ @UseGuards(GithubGuard)
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ async githubAuthenticate() {}
+
+ @Get('/github/callback')
+ @Public()
+ @UseGuards(GithubGuard)
+ async githubCallback(@Req() req: Express.Request, @Res({ passthrough: true }) res: Response) {
+ const user = req.user!;
+ // set cookie, passport login
+ await new Promise((resolve, reject) => {
+ req.login(user, (err) => (err ? reject(err) : resolve()));
+ });
+ const redirectUri = (req.authInfo as { state: IOauth2State })?.state?.redirectUri;
+ return res.redirect(redirectUri || '/');
+ }
+}
diff --git a/apps/nestjs-backend/src/features/auth/social/github/github.module.ts b/apps/nestjs-backend/src/features/auth/social/github/github.module.ts
new file mode 100644
index 000000000..15989d179
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/social/github/github.module.ts
@@ -0,0 +1,13 @@
+import { Module } from '@nestjs/common';
+import { UserModule } from '../../../user/user.module';
+import { OauthStoreService } from '../../oauth/oauth.store';
+import { GithubStrategy } from '../../strategies/github.strategy';
+import { GithubController } from './github.controller';
+
+@Module({
+ imports: [UserModule],
+ providers: [GithubStrategy, OauthStoreService],
+ exports: [],
+ controllers: [GithubController],
+})
+export class GithubModule {}
diff --git a/apps/nestjs-backend/src/features/auth/social/google/google.controller.ts b/apps/nestjs-backend/src/features/auth/social/google/google.controller.ts
new file mode 100644
index 000000000..3ac45eb8e
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/social/google/google.controller.ts
@@ -0,0 +1,27 @@
+import { Controller, Get, Req, Res, UseGuards } from '@nestjs/common';
+import { Response } from 'express';
+import type { IOauth2State } from '../../../../cache/types';
+import { Public } from '../../decorators/public.decorator';
+import { GoogleGuard } from '../../guard/google.guard';
+
+@Controller('api/auth')
+export class GoogleController {
+ @Get('/google')
+ @Public()
+ @UseGuards(GoogleGuard)
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
+ async googleAuthenticate() {}
+
+ @Get('/google/callback')
+ @Public()
+ @UseGuards(GoogleGuard)
+ async googleCallback(@Req() req: Express.Request, @Res({ passthrough: true }) res: Response) {
+ const user = req.user!;
+ // set cookie, passport login
+ await new Promise((resolve, reject) => {
+ req.login(user, (err) => (err ? reject(err) : resolve()));
+ });
+ const redirectUri = (req.authInfo as { state: IOauth2State })?.state?.redirectUri;
+ return res.redirect(redirectUri || '/');
+ }
+}
diff --git a/apps/nestjs-backend/src/features/auth/social/google/google.module.ts b/apps/nestjs-backend/src/features/auth/social/google/google.module.ts
new file mode 100644
index 000000000..72caef1c7
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/social/google/google.module.ts
@@ -0,0 +1,13 @@
+import { Module } from '@nestjs/common';
+import { UserModule } from '../../../user/user.module';
+import { OauthStoreService } from '../../oauth/oauth.store';
+import { GoogleStrategy } from '../../strategies/google.strategy';
+import { GoogleController } from './google.controller';
+
+@Module({
+ imports: [UserModule],
+ providers: [GoogleStrategy, OauthStoreService],
+ exports: [],
+ controllers: [GoogleController],
+})
+export class GoogleModule {}
diff --git a/apps/nestjs-backend/src/features/auth/social/social.module.ts b/apps/nestjs-backend/src/features/auth/social/social.module.ts
new file mode 100644
index 000000000..e6fb3394c
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/social/social.module.ts
@@ -0,0 +1,16 @@
+import { Module } from '@nestjs/common';
+import { ConditionalModule } from '@nestjs/config';
+import { GithubModule } from './github/github.module';
+import { GoogleModule } from './google/google.module';
+
+@Module({
+ imports: [
+ ConditionalModule.registerWhen(GithubModule, (env) => {
+ return Boolean(env.SOCIAL_AUTH_PROVIDERS?.split(',')?.includes('github'));
+ }),
+ ConditionalModule.registerWhen(GoogleModule, (env) => {
+ return Boolean(env.SOCIAL_AUTH_PROVIDERS?.split(',')?.includes('google'));
+ }),
+ ],
+})
+export class SocialModule {}
diff --git a/apps/nestjs-backend/src/features/auth/strategies/github.strategy.ts b/apps/nestjs-backend/src/features/auth/strategies/github.strategy.ts
new file mode 100644
index 000000000..2dbf42acc
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/strategies/github.strategy.ts
@@ -0,0 +1,47 @@
+import { Injectable, UnauthorizedException } from '@nestjs/common';
+import { ConfigType } from '@nestjs/config';
+import { PassportStrategy } from '@nestjs/passport';
+import type { Profile } from 'passport-github2';
+import { Strategy } from 'passport-github2';
+import { AuthConfig } from '../../../configs/auth.config';
+import type { authConfig } from '../../../configs/auth.config';
+import { UserService } from '../../user/user.service';
+import { OauthStoreService } from '../oauth/oauth.store';
+import { pickUserMe } from '../utils';
+
+@Injectable()
+export class GithubStrategy extends PassportStrategy(Strategy, 'github') {
+ constructor(
+ @AuthConfig() readonly config: ConfigType,
+ private usersService: UserService,
+ oauthStoreService: OauthStoreService
+ ) {
+ const { clientID, clientSecret } = config.github;
+ super({
+ clientID,
+ clientSecret,
+ state: true,
+ store: oauthStoreService,
+ });
+ }
+
+ async validate(_accessToken: string, _refreshToken: string, profile: Profile) {
+ const { id, emails, displayName, photos } = profile;
+ const email = emails?.[0].value;
+ if (!email) {
+ throw new UnauthorizedException('No email provided from GitHub');
+ }
+ const user = await this.usersService.findOrCreateUser({
+ name: displayName,
+ email,
+ provider: 'github',
+ providerId: id,
+ type: 'oauth',
+ avatarUrl: photos?.[0].value,
+ });
+ if (!user) {
+ throw new UnauthorizedException('Failed to create user from GitHub profile');
+ }
+ return pickUserMe(user);
+ }
+}
diff --git a/apps/nestjs-backend/src/features/auth/strategies/google.strategy.ts b/apps/nestjs-backend/src/features/auth/strategies/google.strategy.ts
new file mode 100644
index 000000000..8c0674fe2
--- /dev/null
+++ b/apps/nestjs-backend/src/features/auth/strategies/google.strategy.ts
@@ -0,0 +1,49 @@
+import { Injectable, UnauthorizedException } from '@nestjs/common';
+import { ConfigType } from '@nestjs/config';
+import { PassportStrategy } from '@nestjs/passport';
+import type { Profile } from 'passport-google-oauth20';
+import { Strategy } from 'passport-google-oauth20';
+import { AuthConfig } from '../../../configs/auth.config';
+import type { authConfig } from '../../../configs/auth.config';
+import { UserService } from '../../user/user.service';
+import { OauthStoreService } from '../oauth/oauth.store';
+import { pickUserMe } from '../utils';
+
+@Injectable()
+export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
+ constructor(
+ @AuthConfig() readonly config: ConfigType,
+ private usersService: UserService,
+ oauthStoreService: OauthStoreService
+ ) {
+ const { clientID, clientSecret, callbackURL } = config.google;
+ super({
+ clientID,
+ clientSecret,
+ state: true,
+ store: oauthStoreService,
+ scope: ['profile', 'email'],
+ callbackURL,
+ });
+ }
+
+ async validate(_accessToken: string, _refreshToken: string, profile: Profile) {
+ const { id, emails, displayName, photos } = profile;
+ const email = emails?.[0].value;
+ if (!email) {
+ throw new UnauthorizedException('No email provided from Google');
+ }
+ const user = await this.usersService.findOrCreateUser({
+ name: displayName,
+ email,
+ provider: 'google',
+ providerId: id,
+ type: 'oauth',
+ avatarUrl: photos?.[0].value,
+ });
+ if (!user) {
+ throw new UnauthorizedException('Failed to create user from Google profile');
+ }
+ return pickUserMe(user);
+ }
+}
diff --git a/apps/nestjs-backend/src/features/auth/utils.ts b/apps/nestjs-backend/src/features/auth/utils.ts
index 1aebb1595..be2399b82 100644
--- a/apps/nestjs-backend/src/features/auth/utils.ts
+++ b/apps/nestjs-backend/src/features/auth/utils.ts
@@ -1,6 +1,21 @@
import type { Prisma } from '@teable/db-main-prisma';
+import type { IUserMeVo } from '@teable/openapi';
import { pick } from 'lodash';
+import { getFullStorageUrl } from '../../utils/full-storage-url';
-export const pickUserMe = (user: Partial>) => {
- return pick(user, 'id', 'name', 'avatar', 'phone', 'email', 'notifyMeta');
+export const pickUserMe = (
+ user: Pick<
+ Prisma.UserGetPayload,
+ 'id' | 'name' | 'avatar' | 'phone' | 'email' | 'password' | 'notifyMeta'
+ >
+): IUserMeVo => {
+ return {
+ ...pick(user, 'id', 'name', 'phone', 'email'),
+ notifyMeta: typeof user.notifyMeta === 'object' ? user.notifyMeta : JSON.parse(user.notifyMeta),
+ avatar:
+ user.avatar && !user.avatar?.startsWith('http')
+ ? getFullStorageUrl(user.avatar)
+ : user.avatar,
+ hasPassword: user.password !== null,
+ };
};
diff --git a/apps/nestjs-backend/src/features/automation/actions/records/create-record/create-record.spec.ts b/apps/nestjs-backend/src/features/automation/actions/records/create-record/create-record.spec.ts
index e2c33abee..eb154977c 100644
--- a/apps/nestjs-backend/src/features/automation/actions/records/create-record/create-record.spec.ts
+++ b/apps/nestjs-backend/src/features/automation/actions/records/create-record/create-record.spec.ts
@@ -8,7 +8,6 @@ import {
generateBaseId,
generateRecordId,
generateTableId,
- generateViewId,
generateWorkflowActionId,
} from '@teable/core';
import { vi } from 'vitest';
@@ -100,7 +99,6 @@ describe('Create-Record Action Test', () => {
fields: {
fldHrMYez5yIwBdKEiK: 'name: mockName',
},
- recordOrder: { [generateViewId()]: 1 },
},
],
total: 1,
diff --git a/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.spec.ts b/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.spec.ts
index b657c53d4..645f4c3d5 100644
--- a/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.spec.ts
+++ b/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.spec.ts
@@ -94,12 +94,11 @@ describe('Update-Record Action Test', () => {
])
);
- vi.spyOn(recordOpenApiService, 'updateRecordById').mockImplementation(
+ vi.spyOn(recordOpenApiService, 'updateRecord').mockImplementation(
(tableId, recordId, _updateRecordRo) =>
Promise.resolve({
id: recordId,
fields: { [fieldId]: 'update: mockName' },
- recordOrder: { tableId: 1 },
})
);
diff --git a/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.ts b/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.ts
index 2f2033a35..33c7a4f36 100644
--- a/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.ts
+++ b/apps/nestjs-backend/src/features/automation/actions/records/update-record/update-record.ts
@@ -49,7 +49,7 @@ export class UpdateRecord extends ActionCore {
let outPut: IActionResponse;
await this.recordOpenApiService
- .updateRecordById(tableId, recordId, updateData)
+ .updateRecord(tableId, recordId, updateData)
.then((record) => {
outPut = { data: record, status: ActionResponseStatus.OK };
})
diff --git a/apps/nestjs-backend/src/features/base/base-duplicate.service.ts b/apps/nestjs-backend/src/features/base/base-duplicate.service.ts
index ca027623d..d5a16546e 100644
--- a/apps/nestjs-backend/src/features/base/base-duplicate.service.ts
+++ b/apps/nestjs-backend/src/features/base/base-duplicate.service.ts
@@ -270,7 +270,7 @@ export class BaseDuplicateService {
const oldViewId = name.substring(ROW_ORDER_FIELD_PREFIX.length + 1);
const newViewId = old2NewViewIdMap[oldViewId];
if (newViewId) {
- const query = this.dbProvider.renameColumnName(
+ const query = this.dbProvider.renameColumn(
dbTableName,
name,
`${ROW_ORDER_FIELD_PREFIX}_${newViewId}`
diff --git a/apps/nestjs-backend/src/features/base/base.controller.ts b/apps/nestjs-backend/src/features/base/base.controller.ts
index 09a76b2ab..34806fdfc 100644
--- a/apps/nestjs-backend/src/features/base/base.controller.ts
+++ b/apps/nestjs-backend/src/features/base/base.controller.ts
@@ -1,5 +1,5 @@
/* eslint-disable sonarjs/no-duplicate-string */
-import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';
+import { Body, Controller, Delete, Get, Param, Patch, Post, Put } from '@nestjs/common';
import {
createBaseRoSchema,
duplicateBaseRoSchema,
@@ -9,6 +9,8 @@ import {
IDuplicateBaseRo,
createBaseFromTemplateRoSchema,
ICreateBaseFromTemplateRo,
+ updateOrderRoSchema,
+ IUpdateOrderRo,
} from '@teable/openapi';
import type {
ICreateBaseVo,
@@ -56,7 +58,7 @@ export class BaseController {
return await this.baseService.duplicateBase(duplicateBaseRo);
}
- @Post('createFromTemplate')
+ @Post('create-from-template')
@Permissions('base|create')
@ResourceMeta('spaceId', 'body')
@EmitControllerEvent(Events.BASE_CREATE)
@@ -78,6 +80,15 @@ export class BaseController {
return await this.baseService.updateBase(baseId, updateBaseRo);
}
+ @Put(':baseId/order')
+ @Permissions('base|update')
+ async updateOrder(
+ @Param('baseId') baseId: string,
+ @Body(new ZodValidationPipe(updateOrderRoSchema)) updateOrderRo: IUpdateOrderRo
+ ) {
+ return await this.baseService.updateOrder(baseId, updateOrderRo);
+ }
+
@Permissions('base|read')
@Get(':baseId')
async getBaseById(@Param('baseId') baseId: string): Promise {
@@ -86,7 +97,7 @@ export class BaseController {
@Get('access/all')
async getAllBase(): Promise {
- return await this.baseService.getBaseList();
+ return await this.baseService.getAllBaseList();
}
@Delete(':baseId')
diff --git a/apps/nestjs-backend/src/features/base/base.service.ts b/apps/nestjs-backend/src/features/base/base.service.ts
index 11ab1bc4d..d4e18c193 100644
--- a/apps/nestjs-backend/src/features/base/base.service.ts
+++ b/apps/nestjs-backend/src/features/base/base.service.ts
@@ -1,4 +1,4 @@
-import { Injectable, NotFoundException } from '@nestjs/common';
+import { Injectable, Logger, NotFoundException } from '@nestjs/common';
import { generateBaseId } from '@teable/core';
import { PrismaService } from '@teable/db-main-prisma';
import type {
@@ -6,18 +6,22 @@ import type {
ICreateBaseRo,
IDuplicateBaseRo,
IUpdateBaseRo,
+ IUpdateOrderRo,
} from '@teable/openapi';
import { ClsService } from 'nestjs-cls';
import { IThresholdConfig, ThresholdConfig } from '../../configs/threshold.config';
import { InjectDbProvider } from '../../db-provider/db.provider';
import { IDbProvider } from '../../db-provider/db.provider.interface';
import type { IClsStore } from '../../types/cls';
+import { updateOrder } from '../../utils/update-order';
import { PermissionService } from '../auth/permission.service';
import { CollaboratorService } from '../collaborator/collaborator.service';
import { BaseDuplicateService } from './base-duplicate.service';
@Injectable()
export class BaseService {
+ private logger = new Logger(BaseService.name);
+
constructor(
private readonly prismaService: PrismaService,
private readonly cls: ClsService,
@@ -37,7 +41,6 @@ export class BaseService {
select: {
id: true,
name: true,
- order: true,
icon: true,
spaceId: true,
},
@@ -58,7 +61,7 @@ export class BaseService {
};
}
- async getBaseList() {
+ async getAllBaseList() {
const userId = this.cls.get('user.id');
const { spaceIds, baseIds, roleMap } =
await this.collaboratorService.getCollaboratorsBaseAndSpaceArray(userId);
@@ -85,9 +88,7 @@ export class BaseService {
},
],
},
- orderBy: {
- createdTime: 'asc',
- },
+ orderBy: [{ spaceId: 'asc' }, { order: 'asc' }],
});
return baseList.map((base) => ({ ...base, role: roleMap[base.id] || roleMap[base.spaceId] }));
}
@@ -105,8 +106,7 @@ export class BaseService {
const { name, spaceId } = createBaseRo;
return this.prismaService.$transaction(async (prisma) => {
- const order =
- createBaseRo.order == null ? (await this.getMaxOrder(spaceId)) + 1 : createBaseRo.order;
+ const order = (await this.getMaxOrder(spaceId)) + 1;
const base = await prisma.base.create({
data: {
@@ -121,7 +121,6 @@ export class BaseService {
name: true,
icon: true,
spaceId: true,
- order: true,
},
});
@@ -148,7 +147,6 @@ export class BaseService {
id: true,
name: true,
spaceId: true,
- order: true,
},
where: {
id: baseId,
@@ -157,6 +155,73 @@ export class BaseService {
});
}
+ async shuffle(spaceId: string) {
+ const bases = await this.prismaService.base.findMany({
+ where: { spaceId, deletedTime: null },
+ select: { id: true },
+ orderBy: { order: 'asc' },
+ });
+
+ this.logger.log(`lucky base shuffle! ${spaceId}`, 'shuffle');
+
+ await this.prismaService.$tx(async (prisma) => {
+ for (let i = 0; i < bases.length; i++) {
+ const base = bases[i];
+ await prisma.base.update({
+ data: { order: i },
+ where: { id: base.id },
+ });
+ }
+ });
+ }
+
+ async updateOrder(baseId: string, orderRo: IUpdateOrderRo) {
+ const { anchorId, position } = orderRo;
+
+ const base = await this.prismaService.base
+ .findFirstOrThrow({
+ select: { spaceId: true, order: true, id: true },
+ where: { id: baseId, deletedTime: null },
+ })
+ .catch(() => {
+ throw new NotFoundException(`Base ${baseId} not found`);
+ });
+
+ const anchorBase = await this.prismaService.base
+ .findFirstOrThrow({
+ select: { order: true, id: true },
+ where: { spaceId: base.spaceId, id: anchorId, deletedTime: null },
+ })
+ .catch(() => {
+ throw new NotFoundException(`Anchor ${anchorId} not found`);
+ });
+
+ await updateOrder({
+ parentId: base.spaceId,
+ position,
+ item: base,
+ anchorItem: anchorBase,
+ getNextItem: async (whereOrder, align) => {
+ return this.prismaService.base.findFirst({
+ select: { order: true, id: true },
+ where: {
+ spaceId: base.spaceId,
+ deletedTime: null,
+ order: whereOrder,
+ },
+ orderBy: { order: align },
+ });
+ },
+ update: async (_, id, data) => {
+ await this.prismaService.base.update({
+ data: { order: data.newOrder },
+ where: { id },
+ });
+ },
+ shuffle: this.shuffle.bind(this),
+ });
+ }
+
async deleteBase(baseId: string) {
const userId = this.cls.get('user.id');
diff --git a/apps/nestjs-backend/src/features/base/db-connection.service.ts b/apps/nestjs-backend/src/features/base/db-connection.service.ts
index 53ba9bd69..fa5a80918 100644
--- a/apps/nestjs-backend/src/features/base/db-connection.service.ts
+++ b/apps/nestjs-backend/src/features/base/db-connection.service.ts
@@ -117,11 +117,12 @@ export class DbConnectionService {
}
const readOnlyRole = `read_only_role_${baseId}`;
- if (!this.baseConfig.publicDatabaseAddress) {
- throw new NotFoundException('PUBLIC_DATABASE_ADDRESS is not found in env');
+ const publicDatabaseProxy = this.baseConfig.publicDatabaseProxy;
+ if (!publicDatabaseProxy) {
+ throw new NotFoundException('PUBLIC_DATABASE_PROXY is not found in env');
}
- const originDsn = parseDsn(this.baseConfig.publicDatabaseAddress); // Assuming parseDsn is already defined to parse the DSN
+ const { hostname: dbHostProxy, port: dbPortProxy } = new URL(`https://${publicDatabaseProxy}`);
// Check if the base exists and the user is the owner
const base = await this.prismaService.base.findFirst({
@@ -140,12 +141,15 @@ export class DbConnectionService {
const currentConnections = await this.getConnectionCount(readOnlyRole);
+ const databaseUrl = this.configService.getOrThrow('PRISMA_DATABASE_URL');
+ const { db } = parseDsn(databaseUrl);
+
// Construct the DSN for the read-only role
const dsn: IDbConnectionVo['dsn'] = {
driver: DriverClient.Pg,
- host: originDsn.host,
- port: originDsn.port,
- db: originDsn.db,
+ host: dbHostProxy,
+ port: Number(dbPortProxy),
+ db: db,
user: readOnlyRole,
pass: base.schemaPass,
params: {
@@ -181,12 +185,16 @@ export class DbConnectionService {
const readOnlyRole = `read_only_role_${baseId}`;
const schemaName = baseId;
const password = nanoid();
- const databaseUrl = this.baseConfig.publicDatabaseAddress;
- if (!databaseUrl) {
- throw new NotFoundException('PUBLIC_DATABASE_ADDRESS is not found in env');
+ const publicDatabaseProxy = this.baseConfig.publicDatabaseProxy;
+ if (!publicDatabaseProxy) {
+ throw new NotFoundException('PUBLIC_DATABASE_PROXY is not found in env');
}
- const originDsn = parseDsn(databaseUrl);
+ const { hostname: dbHostProxy, port: dbPortProxy } = new URL(
+ `https://${publicDatabaseProxy}`
+ );
+ const databaseUrl = this.configService.getOrThrow('PRISMA_DATABASE_URL');
+ const { db } = parseDsn(databaseUrl);
return this.prismaService.$tx(async (prisma) => {
await prisma.base
@@ -233,9 +241,9 @@ export class DbConnectionService {
const dsn: IDbConnectionVo['dsn'] = {
driver: DriverClient.Pg,
- host: originDsn.host,
- port: originDsn.port,
- db: originDsn.db,
+ host: dbHostProxy,
+ port: Number(dbPortProxy),
+ db: db,
user: readOnlyRole,
pass: password,
params: {
diff --git a/apps/nestjs-backend/src/features/calculation/reference.service.ts b/apps/nestjs-backend/src/features/calculation/reference.service.ts
index a911f5e33..cb3adb130 100644
--- a/apps/nestjs-backend/src/features/calculation/reference.service.ts
+++ b/apps/nestjs-backend/src/features/calculation/reference.service.ts
@@ -5,7 +5,6 @@ import type {
ILinkFieldOptions,
IOtOperation,
IRecord,
- ITinyRecord,
} from '@teable/core';
import { evaluate, FieldType, isMultiValueLink, RecordOpBuilder, Relationship } from '@teable/core';
import { PrismaService } from '@teable/db-main-prisma';
@@ -42,12 +41,12 @@ export interface IGraphItem {
}
export interface IRecordMap {
- [recordId: string]: ITinyRecord;
+ [recordId: string]: IRecord;
}
export interface IRecordItem {
- record: ITinyRecord;
- dependencies?: ITinyRecord[];
+ record: IRecord;
+ dependencies?: IRecord[];
}
export interface IRecordData {
@@ -510,7 +509,7 @@ export class ReferenceService {
field: IFieldInstance,
relationship: Relationship,
lookupField: IFieldInstance,
- record: ITinyRecord,
+ record: IRecord,
lookupValues: unknown
): unknown {
if (field.type !== FieldType.Link && field.type !== FieldType.Rollup) {
@@ -674,7 +673,6 @@ export class ReferenceService {
lastModifiedTime: (raw.__last_modified_time as Date)?.toISOString(),
createdBy: raw.__created_by as string,
lastModifiedBy: raw.__last_modified_by as string,
- recordOrder: {},
};
}
@@ -846,7 +844,7 @@ export class ReferenceService {
recordItemMap:
recordMap &&
Object.values(recordMap).reduce>((pre, record) => {
- let dependencies: ITinyRecord[] | undefined;
+ let dependencies: IRecord[] | undefined;
if (relatedItems) {
const options = field.lookupOptions
? field.lookupOptions
diff --git a/apps/nestjs-backend/src/features/field/field-calculate/field-supplement.service.ts b/apps/nestjs-backend/src/features/field/field-calculate/field-supplement.service.ts
index 9869e8a0e..6d8139469 100644
--- a/apps/nestjs-backend/src/features/field/field-calculate/field-supplement.service.ts
+++ b/apps/nestjs-backend/src/features/field/field-calculate/field-supplement.service.ts
@@ -269,9 +269,13 @@ export class FieldSupplementService {
private async prepareUpdateLinkField(tableId: string, fieldRo: IFieldRo, oldFieldVo: IFieldVo) {
const newOptionsRo = fieldRo.options as ILinkFieldOptionsRo;
const oldOptions = oldFieldVo.options as ILinkFieldOptions;
+ // isOneWay may be undefined or false, so we should convert it to boolean
+ const oldIsOneWay = Boolean(oldOptions.isOneWay);
+ const newIsOneWay = Boolean(newOptionsRo.isOneWay);
if (
oldOptions.foreignTableId === newOptionsRo.foreignTableId &&
- oldOptions.relationship === newOptionsRo.relationship
+ oldOptions.relationship === newOptionsRo.relationship &&
+ oldIsOneWay !== newIsOneWay
) {
return {
...oldFieldVo,
diff --git a/apps/nestjs-backend/src/features/field/field.service.ts b/apps/nestjs-backend/src/features/field/field.service.ts
index 3d5773f58..5e82a0731 100644
--- a/apps/nestjs-backend/src/features/field/field.service.ts
+++ b/apps/nestjs-backend/src/features/field/field.service.ts
@@ -18,7 +18,7 @@ import { InjectModel } from 'nest-knexjs';
import { ClsService } from 'nestjs-cls';
import { InjectDbProvider } from '../../db-provider/db.provider';
import { IDbProvider } from '../../db-provider/db.provider.interface';
-import type { IAdapterService } from '../../share-db/interface';
+import type { IReadonlyAdapterService } from '../../share-db/interface';
import { RawOpType } from '../../share-db/interface';
import type { IClsStore } from '../../types/cls';
import { convertNameToValidCharacter } from '../../utils/name-conversion';
@@ -31,7 +31,7 @@ import { dbType2knexFormat } from './util';
type IOpContext = ISetFieldPropertyOpContext;
@Injectable()
-export class FieldService implements IAdapterService {
+export class FieldService implements IReadonlyAdapterService {
private logger = new Logger(FieldService.name);
constructor(
@@ -160,7 +160,7 @@ export class FieldService implements IAdapterService {
throw new BadRequestException(`Db Field name ${newDbFieldName} already exists in this table`);
}
- const alterTableSql = this.dbProvider.renameColumnName(
+ const alterTableSql = this.dbProvider.renameColumn(
table.dbTableName,
dbFieldName,
newDbFieldName
diff --git a/apps/nestjs-backend/src/features/graph/graph.service.ts b/apps/nestjs-backend/src/features/graph/graph.service.ts
index a5293078f..460760d61 100644
--- a/apps/nestjs-backend/src/features/graph/graph.service.ts
+++ b/apps/nestjs-backend/src/features/graph/graph.service.ts
@@ -1,5 +1,5 @@
import { BadRequestException, Injectable, Logger } from '@nestjs/common';
-import type { IFieldRo, ILinkFieldOptions, ITinyRecord, IConvertFieldRo } from '@teable/core';
+import type { IFieldRo, ILinkFieldOptions, IRecord, IConvertFieldRo } from '@teable/core';
import { FieldType, Relationship } from '@teable/core';
import { PrismaService } from '@teable/db-main-prisma';
import type {
@@ -109,7 +109,7 @@ export class GraphService {
fieldMap: IFieldMap,
tableMap: { [dbTableName: string]: { dbTableName: string; name: string } },
selectedCell: { recordId: string; fieldId: string },
- dbTableName2recordMap: { [dbTableName: string]: Record }
+ dbTableName2recordMap: { [dbTableName: string]: Record }
) {
const nodes: IGraphNode[] = [];
const combos: IGraphCombo[] = [];
diff --git a/apps/nestjs-backend/src/features/import/open-api/import-open-api.service.ts b/apps/nestjs-backend/src/features/import/open-api/import-open-api.service.ts
index cc86c18f1..22ef55ead 100644
--- a/apps/nestjs-backend/src/features/import/open-api/import-open-api.service.ts
+++ b/apps/nestjs-backend/src/features/import/open-api/import-open-api.service.ts
@@ -1,4 +1,4 @@
-import { Injectable } from '@nestjs/common';
+import { Injectable, Logger } from '@nestjs/common';
import { FieldKeyType } from '@teable/core';
import type { IAnalyzeRo, IImportOptionRo } from '@teable/core';
import { RecordOpenApiService } from '../../record/open-api/record-open-api.service';
@@ -8,7 +8,7 @@ import { importerFactory } from './import.class';
@Injectable()
export class ImportOpenApiService {
- // private logger = new Logger(ImportOpenApiService.name);
+ private logger = new Logger(ImportOpenApiService.name);
constructor(
private readonly tableOpenApiService: TableOpenApiService,
private readonly recordOpenApiService: RecordOpenApiService
@@ -16,72 +16,80 @@ export class ImportOpenApiService {
async analyze(analyzeRo: IAnalyzeRo) {
const { attachmentUrl, fileType } = analyzeRo;
+
const importer = importerFactory(fileType, {
url: attachmentUrl,
- fileType,
+ type: fileType,
});
return await importer.genColumns();
}
async createTableFromImport(baseId: string, importRo: IImportOptionRo) {
- // TODO support groups
const { attachmentUrl, fileType, worksheets } = importRo;
- const {
- options: { importData, useFirstRowAsHeader },
- columns: columnInfo,
- name,
- } = worksheets[0];
-
const importer = importerFactory(fileType, {
url: attachmentUrl,
- fileType,
- });
- const fieldsRo = columnInfo.map((col, index) => {
- return {
- ...col,
- isPrimary: index === 0 ? true : null,
- };
+ type: fileType,
});
- // create table with column
- const table = await this.tableOpenApiService.createTable(baseId, {
- name: name || 'import table',
- fields: fieldsRo,
- views: DEFAULT_VIEWS,
- records: [],
- });
- const { fields } = table;
+ const tableResult = [];
+
+ for (const [sheetKey, value] of Object.entries(worksheets)) {
+ const { importData, useFirstRowAsHeader, columns: columnInfo, name } = value;
+ const fieldsRo = columnInfo.map((col, index) => {
+ return {
+ ...col,
+ isPrimary: index === 0 ? true : null,
+ };
+ });
- if (importData) {
- await importer.streamParse(
- {
- skipFirstNLines: useFirstRowAsHeader ? 1 : 0,
- },
- async (result) => {
- // fill data
- const records = result.map((row) => {
- const res: { fields: Record } = {
- fields: {},
- };
- columnInfo.forEach((col, index) => {
- res.fields[fields[index].id] = row[col.sourceColumnIndex];
+ // create table with column
+ const table = await this.tableOpenApiService.createTable(baseId, {
+ name: name,
+ fields: fieldsRo,
+ views: DEFAULT_VIEWS,
+ records: [],
+ });
+
+ tableResult.push(table);
+
+ const { fields } = table;
+
+ if (importData) {
+ importer.parse(
+ {
+ skipFirstNLines: useFirstRowAsHeader ? 1 : 0,
+ key: sheetKey,
+ },
+ async (result) => {
+ const currentResult = result[sheetKey];
+ // fill data
+ const records = currentResult.map((row) => {
+ const res: { fields: Record } = {
+ fields: {},
+ };
+ columnInfo.forEach((col, index) => {
+ res.fields[fields[index].id] = row[col.sourceColumnIndex];
+ });
+ return res;
});
- return res;
- });
- if (records.length === 0) {
- return;
+ if (records.length === 0) {
+ return;
+ }
+ try {
+ await this.recordOpenApiService.multipleCreateRecords(table.id, {
+ fieldKeyType: FieldKeyType.Id,
+ typecast: true,
+ records,
+ });
+ } catch (e) {
+ this.logger.error((e as Error)?.message, 'Import: Records');
+ }
}
- await this.recordOpenApiService.multipleCreateRecords(table.id, {
- fieldKeyType: FieldKeyType.Id,
- typecast: true,
- records,
- });
- }
- );
+ );
+ }
}
-
- return [table];
+ return tableResult;
}
}
diff --git a/apps/nestjs-backend/src/features/import/open-api/import.class.ts b/apps/nestjs-backend/src/features/import/open-api/import.class.ts
index c443ebbd4..44926b9fe 100644
--- a/apps/nestjs-backend/src/features/import/open-api/import.class.ts
+++ b/apps/nestjs-backend/src/features/import/open-api/import.class.ts
@@ -1,101 +1,150 @@
import { BadRequestException } from '@nestjs/common';
-import type { IValidateTypes } from '@teable/core';
+import type { IValidateTypes, IAnalyzeVo } from '@teable/core';
import { getUniqName, FieldType, SUPPORTEDTYPE, importTypeMap } from '@teable/core';
-import { axios } from '@teable/openapi';
-import { zip } from 'lodash';
+import { zip, toString, intersection } from 'lodash';
+import fetch from 'node-fetch';
import Papa from 'papaparse';
+import * as XLSX from 'xlsx';
import type { ZodType } from 'zod';
import z from 'zod';
const validateZodSchemaMap: Record = {
- [FieldType.Checkbox]: z.boolean(),
+ [FieldType.Checkbox]: z.union([z.string(), z.boolean()]).refine((value: unknown) => {
+ if (typeof value === 'boolean') {
+ return true;
+ }
+ if (
+ typeof value === 'string' &&
+ (value.toLowerCase() === 'false' || value.toLowerCase() === 'true')
+ ) {
+ return true;
+ }
+ return false;
+ }),
[FieldType.Date]: z.coerce.date(),
- [FieldType.Number]: z.number(),
+ [FieldType.Number]: z.coerce.number(),
[FieldType.LongText]: z
.string()
.refine((value) => z.string().safeParse(value) && /\n/.test(value)),
[FieldType.SingleLineText]: z.string(),
};
+interface IImportConstructorParams {
+ url: string;
+ type: SUPPORTEDTYPE;
+}
+
+interface IParseResult {
+ [x: string]: unknown[][];
+}
+
export abstract class Importer {
public static CHUNK_SIZE = 1024 * 1024 * 1;
public static DEFAULT_COLUMN_TYPE: IValidateTypes = FieldType.SingleLineText;
- constructor(public config: { url: string }) {}
+ constructor(public config: IImportConstructorParams) {}
- abstract getFile(): unknown;
+ abstract parse(
+ ...args: [options?: unknown, cb?: (chunk: Record) => Promise]
+ ): Promise;
- abstract parse(options?: unknown): Promise;
+ abstract getSupportedFieldTypes(): IValidateTypes[];
- abstract streamParse(
- options: unknown,
- fn: (chunk: Papa.ParseResult['data']) => Promise
- ): void;
+ async getFile() {
+ const { url, type } = this.config;
+ const { body: stream, headers } = await fetch(url);
- abstract getSupportedFieldTypes(): IValidateTypes[];
+ const supportType = importTypeMap[type].accept.split(',');
+
+ const fileFormat = headers
+ .get('content-type')
+ ?.split(';')
+ ?.map((item: string) => item.trim());
+
+ // if (!fileFormat?.length) {
+ // throw new BadRequestException(
+ // `Input url is not a standard document service without right content-type`
+ // );
+ // }
+
+ if (fileFormat?.length && !intersection(fileFormat, supportType).length) {
+ throw new BadRequestException(
+ `File format is not supported, only ${supportType.join(',')} are supported,`
+ );
+ }
+
+ return stream;
+ }
async genColumns() {
const supportTypes = this.getSupportedFieldTypes();
- const columnInfo = (await this.parse()) as string[];
- const zipColumnInfo = zip(...columnInfo);
- const existNames: string[] = [];
- const calculatedColumnHeaders = zipColumnInfo.map((column, index) => {
- let isColumnEmpty = true;
- let validatingFieldTypes = [...supportTypes];
- for (let i = 0; i < column.length; i++) {
- if (validatingFieldTypes.length <= 1) {
- break;
- }
+ const parseResult = await this.parse();
+ const result: IAnalyzeVo['worksheets'] = {};
- // ignore empty value and first row causing first row as header
- if (column[i] === '' || column[i] == null || i === 0) {
- continue;
- }
+ for (const [sheetName, cols] of Object.entries(parseResult)) {
+ const zipColumnInfo = zip(...cols);
+ const existNames: string[] = [];
+ const calculatedColumnHeaders = zipColumnInfo.map((column, index) => {
+ let isColumnEmpty = true;
+ let validatingFieldTypes = [...supportTypes];
+ for (let i = 0; i < column.length; i++) {
+ if (validatingFieldTypes.length <= 1) {
+ break;
+ }
- // when the whole columns aren't empty should flag
- isColumnEmpty = false;
+ // ignore empty value and first row causing first row as header
+ if (column[i] === '' || column[i] == null || i === 0) {
+ continue;
+ }
- // when one of column's value validates long text, then break;
- if (validateZodSchemaMap[FieldType.LongText].safeParse(column[i]).success) {
- validatingFieldTypes = [FieldType.LongText];
- break;
- }
+ // when the whole columns aren't empty should flag
+ isColumnEmpty = false;
- const matchTypes = validatingFieldTypes.filter((type) => {
- const schema = validateZodSchemaMap[type];
- return schema.safeParse(column[i]).success;
- });
+ // when one of column's value validates long text, then break;
+ if (validateZodSchemaMap[FieldType.LongText].safeParse(column[i]).success) {
+ validatingFieldTypes = [FieldType.LongText];
+ break;
+ }
- validatingFieldTypes = matchTypes;
- }
+ const matchTypes = validatingFieldTypes.filter((type) => {
+ const schema = validateZodSchemaMap[type];
+ return schema.safeParse(column[i]).success;
+ });
+
+ validatingFieldTypes = matchTypes;
+ }
- // empty columns should be default type
- validatingFieldTypes = !isColumnEmpty ? validatingFieldTypes : [Importer.DEFAULT_COLUMN_TYPE];
+ // empty columns should be default type
+ validatingFieldTypes = !isColumnEmpty
+ ? validatingFieldTypes
+ : [Importer.DEFAULT_COLUMN_TYPE];
- const name = getUniqName(column?.[0] ?? `Field ${index}`, existNames);
+ const name = getUniqName(toString(column?.[0]) ?? `Field ${index}`, existNames);
- existNames.push(name);
+ existNames.push(name);
- return {
- type: validatingFieldTypes[0] || Importer.DEFAULT_COLUMN_TYPE,
- name: name.toString(),
+ return {
+ type: validatingFieldTypes[0] || Importer.DEFAULT_COLUMN_TYPE,
+ name: name.toString(),
+ };
+ });
+
+ result[sheetName] = {
+ name: sheetName,
+ columns: calculatedColumnHeaders,
};
- });
+ }
+
return {
- worksheets: [
- {
- name: 'import table',
- columns: calculatedColumnHeaders,
- },
- ],
+ worksheets: result,
};
}
}
export class CsvImporter extends Importer {
- public static readonly SUPPORTFILETYPE = ['text/csv'];
public static readonly CHECK_LINES = 5000;
+ public static readonly DEFAULT_SHEETKEY = 'Import Table';
// order make sence
public static readonly SUPPORTEDTYPE: IValidateTypes[] = [
FieldType.Checkbox,
@@ -104,93 +153,138 @@ export class CsvImporter extends Importer {
FieldType.LongText,
FieldType.SingleLineText,
];
- constructor(public config: { url: string; fileType: SUPPORTEDTYPE }) {
- super(config);
- }
getSupportedFieldTypes() {
return CsvImporter.SUPPORTEDTYPE;
}
- async getFile() {
- const { url, fileType } = this.config;
- const { data: stream } = await axios.get(url, {
- responseType: 'stream',
- });
- const fileFormat = stream?.headers?.['content-type']?.split(';')?.[0];
- const supportType = importTypeMap[fileType].acceptHeaders;
+ parse(): Promise;
+ parse(
+ options: Papa.ParseConfig & { skipFirstNLines: number; key: string },
+ cb: (chunk: Record) => Promise
+ ): Promise;
+ async parse(
+ ...args: [
+ options?: Papa.ParseConfig & { skipFirstNLines: number; key: string },
+ cb?: (chunk: Record) => Promise,
+ ]
+ ): Promise {
+ const [options, cb] = args;
+ const stream = await this.getFile();
- if (fileFormat && !supportType.includes(fileFormat)) {
- throw new BadRequestException(
- `File format is not supported, only ${supportType.join(',')} are supported,`
- );
+ // chunk parse
+ if (options && cb) {
+ return new Promise((resolve, reject) => {
+ let isFirst = true;
+ Papa.parse(stream, {
+ download: false,
+ dynamicTyping: true,
+ chunkSize: Importer.CHUNK_SIZE,
+ chunk: (chunk, parser) => {
+ (async () => {
+ const newChunk = [...chunk.data] as unknown[][];
+ if (isFirst && options.skipFirstNLines) {
+ newChunk.splice(0, 1);
+ isFirst = false;
+ }
+ parser.pause();
+ await cb({ [CsvImporter.DEFAULT_SHEETKEY]: newChunk });
+ parser.resume();
+ })();
+ },
+ complete: () => {
+ resolve({});
+ },
+ error: (err) => {
+ reject(err);
+ },
+ });
+ });
+ } else {
+ return new Promise((resolve, reject) => {
+ Papa.parse(stream, {
+ download: false,
+ dynamicTyping: true,
+ preview: CsvImporter.CHECK_LINES,
+ complete: (result) => {
+ resolve({
+ [CsvImporter.DEFAULT_SHEETKEY]: result.data,
+ });
+ },
+ error: (err) => {
+ reject(err);
+ },
+ });
+ });
}
-
- return stream;
}
- async parse(): Promise {
- const stream = await this.getFile();
- const data: Papa.ParseResult['data'] = [];
- return new Promise((resolve, reject) => {
- Papa.parse(stream, {
- download: false,
- dynamicTyping: true,
- preview: CsvImporter.CHECK_LINES,
- chunkSize: Importer.CHUNK_SIZE,
- chunk: (chunk) => {
- data.push(...chunk.data);
- },
- complete: () => {
- resolve(data);
- },
- error: (err) => {
- reject(err);
- },
+}
+
+export class ExcelImporter extends Importer {
+ public static readonly SUPPORTEDTYPE: IValidateTypes[] = [
+ FieldType.Checkbox,
+ FieldType.Number,
+ FieldType.Date,
+ FieldType.SingleLineText,
+ FieldType.LongText,
+ ];
+
+ parse(): Promise;
+ parse(
+ options: { skipFirstNLines: number; key: string },
+ cb: (chunk: Record) => Promise
+ ): Promise;
+
+ async parse(
+ options?: { skipFirstNLines: number; key: string },
+ cb?: (chunk: Record) => Promise
+ ): Promise {
+ const fileSteam = await this.getFile();
+
+ const asyncRs = async (stream: NodeJS.ReadableStream): Promise =>
+ new Promise((res, rej) => {
+ const buffers: Buffer[] = [];
+ stream.on('data', function (data) {
+ buffers.push(data);
+ });
+ stream.on('end', function () {
+ const buf = Buffer.concat(buffers);
+ const workbook = XLSX.read(buf, { dense: true });
+ const result: IParseResult = {};
+ Object.keys(workbook.Sheets).forEach((name) => {
+ result[name] = workbook.Sheets[name]['!data']?.map((item) =>
+ item.map((v) => v.w)
+ ) as unknown[][];
+ });
+ res(result);
+ });
+ stream.on('error', (e) => {
+ rej(e);
+ });
});
- });
+
+ const parseResult = await asyncRs(fileSteam);
+
+ if (options && cb) {
+ const { skipFirstNLines, key } = options;
+ if (skipFirstNLines) {
+ parseResult[key].splice(0, 1);
+ }
+ return await cb(parseResult);
+ }
+
+ return parseResult;
}
- async streamParse(
- options: Papa.ParseConfig & { skipFirstNLines: number },
- cb: (chunk: unknown[][]) => Promise
- ) {
- const stream = await this.getFile();
- return new Promise((resolve, reject) => {
- let isFirst = true;
- Papa.parse(stream, {
- download: false,
- dynamicTyping: true,
- chunkSize: Importer.CHUNK_SIZE,
- chunk: (chunk, parser) => {
- (async () => {
- const newChunk = [...chunk.data] as unknown[][];
- if (isFirst && options.skipFirstNLines) {
- newChunk.splice(0, 1);
- isFirst = false;
- }
- parser.pause();
- await cb(newChunk);
- parser.resume();
- })();
- },
- complete: () => {
- resolve({});
- },
- error: (err) => {
- reject(err);
- },
- });
- });
+ getSupportedFieldTypes() {
+ return CsvImporter.SUPPORTEDTYPE;
}
}
-export const importerFactory = (
- type: SUPPORTEDTYPE,
- config: { url: string; fileType: SUPPORTEDTYPE }
-) => {
+export const importerFactory = (type: SUPPORTEDTYPE, config: IImportConstructorParams) => {
switch (type) {
case SUPPORTEDTYPE.CSV:
return new CsvImporter(config);
case SUPPORTEDTYPE.EXCEL:
- throw new Error('not support');
+ return new ExcelImporter(config);
default:
throw new Error('not support');
}
diff --git a/apps/nestjs-backend/src/features/mail-sender/mail-sender.service.ts b/apps/nestjs-backend/src/features/mail-sender/mail-sender.service.ts
index bf2063066..96e2c7d69 100644
--- a/apps/nestjs-backend/src/features/mail-sender/mail-sender.service.ts
+++ b/apps/nestjs-backend/src/features/mail-sender/mail-sender.service.ts
@@ -30,12 +30,13 @@ export class MailSenderService {
const { name, email, inviteUrl, spaceName } = info;
return {
subject: `${name} (${email}) invited you to their space ${spaceName} - ${this.baseConfig.brandName}`,
- template: 'invite',
+ template: 'normal',
context: {
name,
email,
spaceName,
inviteUrl,
+ partialBody: 'invite',
},
};
}
@@ -56,23 +57,23 @@ export class MailSenderService {
fromUserName,
refRecord: { baseId, tableId, fieldName, tableName, recordIds },
} = info;
- let subject, template;
+ let subject, partialBody;
const refLength = recordIds.length;
const viewRecordUrlPrefix = `${this.mailConfig.origin}/base/${baseId}/${tableId}`;
if (refLength <= 1) {
subject = `${fromUserName} added you to the ${fieldName} field of a record in ${tableName}`;
- template = 'collaborator-cell-tag';
+ partialBody = 'collaborator-cell-tag';
} else {
subject = `${fromUserName} added you to ${refLength} records in ${tableName}`;
- template = 'collaborator-multi-row-tag';
+ partialBody = 'collaborator-multi-row-tag';
}
return {
notifyMessage: subject,
subject: `${subject} - ${this.baseConfig.brandName}`,
- template,
+ template: 'normal',
context: {
notifyId,
fromUserName,
@@ -81,6 +82,21 @@ export class MailSenderService {
fieldName,
recordIds,
viewRecordUrlPrefix,
+ partialBody,
+ },
+ };
+ }
+
+ resetPasswordEmailOptions(info: { name: string; email: string; resetPasswordUrl: string }) {
+ const { name, email, resetPasswordUrl } = info;
+ return {
+ subject: `Reset your password - ${this.baseConfig.brandName}`,
+ template: 'normal',
+ context: {
+ name,
+ email,
+ resetPasswordUrl,
+ partialBody: 'reset-password',
},
};
}
diff --git a/apps/nestjs-backend/src/features/mail-sender/templates/pages/collaborator-cell-tag.hbs b/apps/nestjs-backend/src/features/mail-sender/templates/pages/collaborator-cell-tag.hbs
deleted file mode 100644
index 09844cd26..000000000
--- a/apps/nestjs-backend/src/features/mail-sender/templates/pages/collaborator-cell-tag.hbs
+++ /dev/null
@@ -1,122 +0,0 @@
-
-
-
-
-
- Invitation Email
-
-
-
-
-
-
-
-
- {{> header }}
-
-
-
-
-
- {{fromUserName}} added you to the {{fieldName}} field of a
- record
- in
- {{tableName}} .
-
- View record
-
-
-
-
-
- {{> footer }}
-
-
-
-
-
-
diff --git a/apps/nestjs-backend/src/features/mail-sender/templates/pages/collaborator-multi-row-tag.hbs b/apps/nestjs-backend/src/features/mail-sender/templates/pages/collaborator-multi-row-tag.hbs
deleted file mode 100644
index f3ae48550..000000000
--- a/apps/nestjs-backend/src/features/mail-sender/templates/pages/collaborator-multi-row-tag.hbs
+++ /dev/null
@@ -1,112 +0,0 @@
-
-
-
-
-
- Invitation Email
-
-
-
-
-
-
diff --git a/apps/nestjs-backend/src/features/mail-sender/templates/pages/invite.hbs b/apps/nestjs-backend/src/features/mail-sender/templates/pages/normal.hbs
similarity index 76%
rename from apps/nestjs-backend/src/features/mail-sender/templates/pages/invite.hbs
rename to apps/nestjs-backend/src/features/mail-sender/templates/pages/normal.hbs
index 9058202df..19368ad1a 100644
--- a/apps/nestjs-backend/src/features/mail-sender/templates/pages/invite.hbs
+++ b/apps/nestjs-backend/src/features/mail-sender/templates/pages/normal.hbs
@@ -84,20 +84,8 @@
border="0" cellpadding="0" cellspacing="0">
{{> header }}
-
-
-
-
- Invitation to Collaborate
- {{name}} ({{email}}) has invited you to
- collaborate
- on their space {{spaceName}} .
- Accept
- Invitation
-
-
-
+
+ {{> (lookup . 'partialBody') }}
{{> footer }}
diff --git a/apps/nestjs-backend/src/features/mail-sender/templates/partials/collaborator-cell-tag.hbs b/apps/nestjs-backend/src/features/mail-sender/templates/partials/collaborator-cell-tag.hbs
new file mode 100644
index 000000000..f574cac75
--- /dev/null
+++ b/apps/nestjs-backend/src/features/mail-sender/templates/partials/collaborator-cell-tag.hbs
@@ -0,0 +1,25 @@
+
+
+
+ {{fromUserName}} added you to the {{fieldName}} field of a
+ record
+ in
+ {{tableName}} .
+
+ View record
+
+
+
diff --git a/apps/nestjs-backend/src/features/mail-sender/templates/partials/collaborator-multi-row-tag.hbs b/apps/nestjs-backend/src/features/mail-sender/templates/partials/collaborator-multi-row-tag.hbs
new file mode 100644
index 000000000..9db03778e
--- /dev/null
+++ b/apps/nestjs-backend/src/features/mail-sender/templates/partials/collaborator-multi-row-tag.hbs
@@ -0,0 +1,19 @@
+
+
+
+ {{fromUserName}} added you to {{refLength}} records in
+ {{tableName}} :
+
+ {{#each recordIds}}
+ The {{../fieldName}} field of a record:
+ {{../viewRecordUrlPrefix}}?recordId={{this}}&fromNotify={{../notifyId}}
+
+
+
+ {{/each}}
+
+
diff --git a/apps/nestjs-backend/src/features/mail-sender/templates/partials/invite.hbs b/apps/nestjs-backend/src/features/mail-sender/templates/partials/invite.hbs
new file mode 100644
index 000000000..b3c2ec6ee
--- /dev/null
+++ b/apps/nestjs-backend/src/features/mail-sender/templates/partials/invite.hbs
@@ -0,0 +1,11 @@
+
+
+ Invitation to Collaborate
+ {{name}} ({{email}}) has invited you to
+ collaborate
+ on their space {{spaceName}} .
+ Accept
+ Invitation
+
+
diff --git a/apps/nestjs-backend/src/features/mail-sender/templates/partials/reset-password.hbs b/apps/nestjs-backend/src/features/mail-sender/templates/partials/reset-password.hbs
new file mode 100644
index 000000000..e18da8db5
--- /dev/null
+++ b/apps/nestjs-backend/src/features/mail-sender/templates/partials/reset-password.hbs
@@ -0,0 +1,7 @@
+
+
+ Reset Your Password
+ If you did not request this change, please ignore this email. Otherwise, click the button below to reset your password.
+ Reset Password
+
+
diff --git a/apps/nestjs-backend/src/features/notification/notification.service.ts b/apps/nestjs-backend/src/features/notification/notification.service.ts
index b7822fe6f..976f8f89a 100644
--- a/apps/nestjs-backend/src/features/notification/notification.service.ts
+++ b/apps/nestjs-backend/src/features/notification/notification.service.ts
@@ -202,7 +202,7 @@ export class NotificationService {
case NotificationTypeEnum.CollaboratorMultiRowTag: {
const { baseId, tableId, recordId } = urlMeta || {};
- return `${origin}/base/${baseId}/${tableId}/${recordId ? `default/${recordId}` : ''}`;
+ return `${origin}/base/${baseId}/${tableId}?recordId=${recordId}`;
}
}
}
diff --git a/apps/nestjs-backend/src/features/record/open-api/record-open-api.controller.ts b/apps/nestjs-backend/src/features/record/open-api/record-open-api.controller.ts
index 07cb01492..7a6f2ac3d 100644
--- a/apps/nestjs-backend/src/features/record/open-api/record-open-api.controller.ts
+++ b/apps/nestjs-backend/src/features/record/open-api/record-open-api.controller.ts
@@ -45,12 +45,12 @@ export class RecordOpenApiController {
@Permissions('record|update')
@Patch(':recordId')
- async updateRecordById(
+ async updateRecord(
@Param('tableId') tableId: string,
@Param('recordId') recordId: string,
@Body(new ZodValidationPipe(updateRecordRoSchema)) updateRecordRo: IUpdateRecordRo
): Promise {
- return await this.recordOpenApiService.updateRecordById(tableId, recordId, updateRecordRo);
+ return await this.recordOpenApiService.updateRecord(tableId, recordId, updateRecordRo);
}
@Permissions('record|create')
diff --git a/apps/nestjs-backend/src/features/record/open-api/record-open-api.module.ts b/apps/nestjs-backend/src/features/record/open-api/record-open-api.module.ts
index 0762ef099..573602be7 100644
--- a/apps/nestjs-backend/src/features/record/open-api/record-open-api.module.ts
+++ b/apps/nestjs-backend/src/features/record/open-api/record-open-api.module.ts
@@ -1,13 +1,22 @@
import { Module } from '@nestjs/common';
import { AttachmentsStorageModule } from '../../attachments/attachments-storage.module';
import { FieldCalculateModule } from '../../field/field-calculate/field-calculate.module';
+import { ViewOpenApiModule } from '../../view/open-api/view-open-api.module';
+import { ViewModule } from '../../view/view.module';
import { RecordCalculateModule } from '../record-calculate/record-calculate.module';
import { RecordModule } from '../record.module';
import { RecordOpenApiController } from './record-open-api.controller';
import { RecordOpenApiService } from './record-open-api.service';
@Module({
- imports: [RecordModule, RecordCalculateModule, FieldCalculateModule, AttachmentsStorageModule],
+ imports: [
+ RecordModule,
+ RecordCalculateModule,
+ FieldCalculateModule,
+ AttachmentsStorageModule,
+ ViewModule,
+ ViewOpenApiModule,
+ ],
controllers: [RecordOpenApiController],
providers: [RecordOpenApiService],
exports: [RecordOpenApiService],
diff --git a/apps/nestjs-backend/src/features/record/open-api/record-open-api.service.ts b/apps/nestjs-backend/src/features/record/open-api/record-open-api.service.ts
index 421e8d628..570c4c0a3 100644
--- a/apps/nestjs-backend/src/features/record/open-api/record-open-api.service.ts
+++ b/apps/nestjs-backend/src/features/record/open-api/record-open-api.service.ts
@@ -3,6 +3,7 @@ import type {
ICreateRecordsRo,
ICreateRecordsVo,
IRecord,
+ IRecordInsertOrderRo,
IUpdateRecordRo,
IUpdateRecordsRo,
} from '@teable/core';
@@ -12,6 +13,8 @@ import { forEach, map } from 'lodash';
import { AttachmentsStorageService } from '../../attachments/attachments-storage.service';
import { FieldConvertingService } from '../../field/field-calculate/field-converting.service';
import { createFieldInstanceByRaw } from '../../field/model/factory';
+import { ViewOpenApiService } from '../../view/open-api/view-open-api.service';
+import { ViewService } from '../../view/view.service';
import { RecordCalculateService } from '../record-calculate/record-calculate.service';
import { RecordService } from '../record.service';
import { TypeCastAndValidate } from '../typecast.validate';
@@ -23,7 +26,9 @@ export class RecordOpenApiService {
private readonly prismaService: PrismaService,
private readonly recordService: RecordService,
private readonly fieldConvertingService: FieldConvertingService,
- private readonly attachmentsStorageService: AttachmentsStorageService
+ private readonly attachmentsStorageService: AttachmentsStorageService,
+ private readonly viewService: ViewService,
+ private readonly viewOpenApiService: ViewOpenApiService
) {}
async multipleCreateRecords(
@@ -31,29 +36,58 @@ export class RecordOpenApiService {
createRecordsRo: ICreateRecordsRo
): Promise {
return await this.prismaService.$tx(async () => {
- return await this.createRecords(
- tableId,
- createRecordsRo.records,
- createRecordsRo.fieldKeyType,
- createRecordsRo.typecast
- );
+ return await this.createRecords(tableId, createRecordsRo);
});
}
+ private async getRecordOrderIndexes(
+ tableId: string,
+ orderRo: IRecordInsertOrderRo,
+ recordCount: number
+ ) {
+ const dbTableName = await this.recordService.getDbTableName(tableId);
+
+ const indexField = await this.viewService.getOrCreateViewIndexField(
+ dbTableName,
+ orderRo.viewId
+ );
+ let indexes: number[] = [];
+ await this.viewOpenApiService.updateRecordOrdersInner({
+ tableId,
+ dbTableName,
+ itemLength: recordCount,
+ indexField,
+ orderRo,
+ update: async (result) => {
+ indexes = result;
+ },
+ });
+
+ return indexes;
+ }
+
async createRecords(
tableId: string,
- recordsRo: { id?: string; fields: Record }[],
- fieldKeyType: FieldKeyType = FieldKeyType.Name,
- typecast?: boolean
+ createRecordsRo: ICreateRecordsRo
): Promise {
+ console.log('createRecordsRo', createRecordsRo);
+ const { fieldKeyType = FieldKeyType.Name, records, typecast, order } = createRecordsRo;
const typecastRecords = await this.validateFieldsAndTypecast(
tableId,
- recordsRo,
+ records,
fieldKeyType,
typecast
);
- return await this.recordCalculateService.createRecords(tableId, typecastRecords, fieldKeyType);
+ const indexes = order && (await this.getRecordOrderIndexes(tableId, order, records.length));
+ const orderIndex = indexes ? { viewId: order.viewId, indexes } : undefined;
+
+ return await this.recordCalculateService.createRecords(
+ tableId,
+ typecastRecords,
+ fieldKeyType,
+ orderIndex
+ );
}
async updateRecords(tableId: string, updateRecordsRo: IUpdateRecordsRo) {
@@ -150,7 +184,7 @@ export class RecordOpenApiService {
}));
}
- async updateRecordById(
+ async updateRecord(
tableId: string,
recordId: string,
updateRecordRo: IUpdateRecordRo
diff --git a/apps/nestjs-backend/src/features/record/record-calculate/record-calculate.service.ts b/apps/nestjs-backend/src/features/record/record-calculate/record-calculate.service.ts
index a7fd1ecac..9b6fc8b17 100644
--- a/apps/nestjs-backend/src/features/record/record-calculate/record-calculate.service.ts
+++ b/apps/nestjs-backend/src/features/record/record-calculate/record-calculate.service.ts
@@ -235,9 +235,9 @@ export class RecordCalculateService {
recordsRo: {
id?: string;
fields: Record;
- recordOrder?: Record;
}[],
- fieldKeyType: FieldKeyType = FieldKeyType.Name
+ fieldKeyType: FieldKeyType = FieldKeyType.Name,
+ orderIndex?: { viewId: string; indexes: number[] }
): Promise {
if (recordsRo.length === 0) {
throw new BadRequestException('Create records is empty');
@@ -248,11 +248,10 @@ export class RecordCalculateService {
return RecordOpBuilder.creator.build({
id: recordId,
fields: {},
- recordOrder: record.recordOrder ?? {},
});
});
- await this.recordService.batchCreateRecords(tableId, emptyRecords);
+ await this.recordService.batchCreateRecords(tableId, emptyRecords, orderIndex);
// submit auto fill changes
const plainRecords = await this.appendDefaultValue(
diff --git a/apps/nestjs-backend/src/features/record/record.service.ts b/apps/nestjs-backend/src/features/record/record.service.ts
index e9994fc57..92fa557b9 100644
--- a/apps/nestjs-backend/src/features/record/record.service.ts
+++ b/apps/nestjs-backend/src/features/record/record.service.ts
@@ -17,7 +17,6 @@ import type {
IRecord,
IRecordsVo,
ISetRecordOpContext,
- ISetRecordOrderOpContext,
IShareViewMeta,
ISnapshotBase,
ISortItem,
@@ -42,12 +41,12 @@ import { Knex } from 'knex';
import { keyBy } from 'lodash';
import { InjectModel } from 'nest-knexjs';
import { ClsService } from 'nestjs-cls';
+import { ThresholdConfig, IThresholdConfig } from '../../configs/threshold.config';
import { InjectDbProvider } from '../../db-provider/db.provider';
import { IDbProvider } from '../../db-provider/db.provider.interface';
import type { IAdapterService } from '../../share-db/interface';
import { RawOpType } from '../../share-db/interface';
import type { IClsStore } from '../../types/cls';
-import { getViewOrderFieldName } from '../../utils';
import { Timing } from '../../utils/timing';
import { AttachmentsStorageService } from '../attachments/attachments-storage.service';
import StorageAdapter from '../attachments/plugins/adapter';
@@ -69,53 +68,11 @@ export class RecordService implements IAdapterService {
private readonly batchService: BatchService,
private readonly attachmentStorageService: AttachmentsStorageService,
private readonly cls: ClsService,
+ @InjectModel('CUSTOM_KNEX') private readonly knex: Knex,
@InjectDbProvider() private readonly dbProvider: IDbProvider,
- @InjectModel('CUSTOM_KNEX') private readonly knex: Knex
+ @ThresholdConfig() private readonly thresholdConfig: IThresholdConfig
) {}
- private async getRowOrderFieldNames(tableId: string) {
- // get rowIndexFieldName by select all views, combine field prefix and ids;
- const views = await this.prismaService.txClient().view.findMany({
- where: {
- tableId,
- deletedTime: null,
- },
- select: {
- id: true,
- },
- });
-
- return views.map((view) => `${ROW_ORDER_FIELD_PREFIX}_${view.id}`);
- }
-
- // get fields create by users
- private async getUserFields(tableId: string, createRecordsRo: ICreateRecordsRo) {
- const fieldIdSet = createRecordsRo.records.reduce>((acc, record) => {
- const fieldIds = Object.keys(record.fields);
- fieldIds.forEach((fieldId) => acc.add(fieldId));
- return acc;
- }, new Set());
-
- const userFieldIds = Array.from(fieldIdSet);
-
- const userFields = await this.prismaService.txClient().field.findMany({
- where: {
- tableId,
- id: { in: userFieldIds },
- },
- select: {
- id: true,
- dbFieldName: true,
- },
- });
-
- if (userFields.length !== userFieldIds.length) {
- throw new BadRequestException('some fields not found');
- }
-
- return userFields;
- }
-
private dbRecord2RecordFields(
record: IRecord['fields'],
fields: IFieldInstance[],
@@ -134,7 +91,7 @@ export class RecordService implements IAdapterService {
}, {});
}
- private async getAllRecordCount(dbTableName: string) {
+ async getAllRecordCount(dbTableName: string) {
const sqlNative = this.knex(dbTableName).count({ count: '*' }).toSQL().toNative();
const queryResult = await this.prismaService
@@ -173,51 +130,6 @@ export class RecordService implements IAdapterService {
return dbValueMatrix;
}
- async multipleCreateRecordTransaction(tableId: string, createRecordsRo: ICreateRecordsRo) {
- const { dbTableName } = await this.prismaService.txClient().tableMeta.findUniqueOrThrow({
- where: {
- id: tableId,
- },
- select: {
- dbTableName: true,
- },
- });
-
- const userFields = await this.getUserFields(tableId, createRecordsRo);
- const rowOrderFieldNames = await this.getRowOrderFieldNames(tableId);
-
- const allDbFieldNames = [
- ...userFields.map((field) => field.dbFieldName),
- ...rowOrderFieldNames,
- ...['__id', '__created_time', '__created_by', '__version'],
- ];
-
- const dbValueMatrix = await this.getDbValueMatrix(
- dbTableName,
- userFields,
- rowOrderFieldNames,
- createRecordsRo
- );
-
- const dbFieldSQL = allDbFieldNames.join(', ');
- const dbValuesSQL = dbValueMatrix
- .map((dbValues) => `(${dbValues.map((value) => JSON.stringify(value)).join(', ')})`)
- .join(',\n');
-
- return await this.prismaService.txClient().$executeRawUnsafe(`
- INSERT INTO ${dbTableName} (${dbFieldSQL})
- VALUES
- ${dbValuesSQL};
- `);
- }
-
- // we have to support multiple action, because users will do it in batch
- async multipleCreateRecords(tableId: string, createRecordsRo: ICreateRecordsRo) {
- return await this.prismaService.$tx(async () => {
- return this.multipleCreateRecordTransaction(tableId, createRecordsRo);
- });
- }
-
async getDbTableName(tableId: string) {
const tableMeta = await this.prismaService
.txClient()
@@ -412,6 +324,7 @@ export class RecordService implements IAdapterService {
return {
queryBuilder,
+ dbTableName,
filter,
orderBy,
groupBy,
@@ -419,6 +332,20 @@ export class RecordService implements IAdapterService {
};
}
+ async getBasicOrderIndexField(dbTableName: string, viewId: string | undefined) {
+ const columnName = `${ROW_ORDER_FIELD_PREFIX}_${viewId}`;
+ const exists = await this.dbProvider.checkColumnExist(
+ dbTableName,
+ columnName,
+ this.prismaService.txClient()
+ );
+
+ if (exists) {
+ return columnName;
+ }
+ return '__auto_number';
+ }
+
/**
* Builds a query based on filtering and sorting criteria.
*
@@ -438,10 +365,8 @@ export class RecordService implements IAdapterService {
>
): Promise {
// Prepare the base query builder, filtering conditions, sorting rules, grouping rules and field mapping
- const { queryBuilder, filter, orderBy, groupBy, fieldMap } = await this.prepareQuery(
- tableId,
- query
- );
+ const { dbTableName, queryBuilder, filter, orderBy, groupBy, fieldMap } =
+ await this.prepareQuery(tableId, query);
// Retrieve the current user's ID to build user-related query conditions
const currentUserId = this.cls.get('user.id');
@@ -460,8 +385,10 @@ export class RecordService implements IAdapterService {
.sortQuery(queryBuilder, fieldMap, [...(groupBy ?? []), ...orderBy])
.appendSortBuilder();
+ const basicSortIndex = await this.getBasicOrderIndexField(dbTableName, query.viewId);
+
// view sorting added by default
- queryBuilder.orderBy(getViewOrderFieldName(query.viewId), 'asc');
+ queryBuilder.orderBy(basicSortIndex, 'asc');
this.logger.debug('buildFilterSortQuery: %s', queryBuilder.toQuery());
// If you return `queryBuilder` directly and use `await` to receive it,
@@ -469,21 +396,6 @@ export class RecordService implements IAdapterService {
return { queryBuilder };
}
- async setRecordOrder(
- version: number,
- recordId: string,
- dbTableName: string,
- viewId: string,
- order: number
- ) {
- const sqlNative = this.knex(dbTableName)
- .update({ [getViewOrderFieldName(viewId)]: order, __version: version })
- .where({ __id: recordId })
- .toSQL()
- .toNative();
- return this.prismaService.txClient().$executeRawUnsafe(sqlNative.sql, ...sqlNative.bindings);
- }
-
async setRecord(
version: number,
tableId: string,
@@ -621,8 +533,12 @@ export class RecordService implements IAdapterService {
}
@Timing()
- async batchCreateRecords(tableId: string, records: IRecord[]) {
- const snapshots = await this.createBatch(tableId, records);
+ async batchCreateRecords(
+ tableId: string,
+ records: IRecord[],
+ orderIndex?: { viewId: string; indexes: number[] }
+ ) {
+ const snapshots = await this.createBatch(tableId, records, orderIndex);
const dataList = snapshots.map((snapshot) => ({
docId: snapshot.__id,
@@ -636,8 +552,51 @@ export class RecordService implements IAdapterService {
await this.createBatch(tableId, [snapshot]);
}
- private async createBatch(tableId: string, records: IRecord[]) {
+ async creditCheck(tableId: string) {
+ if (!this.thresholdConfig.maxFreeRowLimit) {
+ return;
+ }
+
+ const table = await this.prismaService.txClient().tableMeta.findFirstOrThrow({
+ where: { id: tableId, deletedTime: null },
+ select: { dbTableName: true, base: { select: { space: { select: { credit: true } } } } },
+ });
+
+ const rowCount = await this.getAllRecordCount(table.dbTableName);
+
+ const maxRowCount =
+ table.base.space.credit == null
+ ? this.thresholdConfig.maxFreeRowLimit
+ : table.base.space.credit;
+
+ if (rowCount >= maxRowCount) {
+ this.logger.log(`Exceed row count: ${maxRowCount}`, 'creditCheck');
+ throw new BadRequestException(
+ `Exceed max row limit: ${maxRowCount}, please contact us to increase the limit`
+ );
+ }
+ }
+
+ private async getAllViewIndexesField(dbTableName: string) {
+ const query = this.dbProvider.columnInfo(dbTableName);
+ const columns = await this.prismaService.txClient().$queryRawUnsafe<{ name: string }[]>(query);
+ return columns
+ .filter((column) => column.name.startsWith(ROW_ORDER_FIELD_PREFIX))
+ .map((column) => column.name)
+ .reduce<{ [viewId: string]: string }>((acc, cur) => {
+ const viewId = cur.substring(ROW_ORDER_FIELD_PREFIX.length + 1);
+ acc[viewId] = cur;
+ return acc;
+ }, {});
+ }
+
+ private async createBatch(
+ tableId: string,
+ records: IRecord[],
+ orderIndex?: { viewId: string; indexes: number[] }
+ ) {
const userId = this.cls.get('user.id');
+ await this.creditCheck(tableId);
const dbTableName = await this.getDbTableName(tableId);
const maxRecordOrder = await this.getMaxRecordOrder(dbTableName);
@@ -647,14 +606,16 @@ export class RecordService implements IAdapterService {
select: { id: true },
});
+ const allViewIndexes = await this.getAllViewIndexesField(dbTableName);
+
const snapshots = records
- .map((snapshot, i) =>
- views.reduce<{ [viewId: string]: number }>((pre, cur) => {
- const viewOrderFieldName = getViewOrderFieldName(cur.id);
- if (snapshot.recordOrder[cur.id] !== undefined) {
- pre[viewOrderFieldName] = snapshot.recordOrder[cur.id];
- } else {
- pre[viewOrderFieldName] = maxRecordOrder + i;
+ .map((_, i) =>
+ views.reduce<{ [viewIndexFieldName: string]: number }>((pre, cur) => {
+ const viewIndexFieldName = allViewIndexes[cur.id];
+ if (cur.id === orderIndex?.viewId) {
+ pre[viewIndexFieldName] = orderIndex.indexes[i];
+ } else if (viewIndexFieldName) {
+ pre[viewIndexFieldName] = maxRecordOrder + i;
}
return pre;
}, {})
@@ -692,7 +653,7 @@ export class RecordService implements IAdapterService {
version: number,
tableId: string,
recordId: string,
- opContexts: (ISetRecordOrderOpContext | ISetRecordOpContext)[]
+ opContexts: ISetRecordOpContext[]
) {
const dbTableName = await this.getDbTableName(tableId);
if (opContexts[0].name === OpName.SetRecord) {
@@ -703,14 +664,6 @@ export class RecordService implements IAdapterService {
recordId,
opContexts as ISetRecordOpContext[]
);
- return;
- }
-
- if (opContexts[0].name === OpName.SetRecordOrder) {
- for (const opContext of opContexts as ISetRecordOrderOpContext[]) {
- const { viewId, newOrder } = opContext;
- await this.setRecordOrder(version, recordId, dbTableName, viewId, newOrder);
- }
}
}
@@ -829,16 +782,8 @@ export class RecordService implements IAdapterService {
const projectionInner = await this.projectionFormPermission(tableId, fieldKeyType, projection);
const dbTableName = await this.getDbTableName(tableId);
- const allViews = await this.prismaService.txClient().view.findMany({
- where: { tableId, deletedTime: null },
- select: { id: true },
- });
- const fieldNameOfViewOrder = allViews.map((view) => getViewOrderFieldName(view.id));
-
const fields = await this.getFieldsByProjection(tableId, projectionInner, fieldKeyType);
- const fieldNames = fields
- .map((f) => f.dbFieldName)
- .concat([...preservedDbFieldNames, ...fieldNameOfViewOrder]);
+ const fieldNames = fields.map((f) => f.dbFieldName).concat(Array.from(preservedDbFieldNames));
const nativeQuery = this.knex(dbTableName)
.select(fieldNames)
@@ -876,13 +821,6 @@ export class RecordService implements IAdapterService {
return recordIdsMap[a.__id] - recordIdsMap[b.__id];
})
.map((record) => {
- const recordOrder = fieldNameOfViewOrder.reduce<{ [viewId: string]: number }>(
- (acc, vFieldName, index) => {
- acc[allViews[index].id] = record[vFieldName] as number;
- return acc;
- },
- {}
- );
const recordFields = this.dbRecord2RecordFields(record, fields, fieldKeyType, cellFormat);
const name = recordFields[primaryField[fieldKeyType]];
return {
@@ -901,7 +839,6 @@ export class RecordService implements IAdapterService {
lastModifiedTime: record.__last_modified_time?.toISOString(),
createdBy: record.__created_by,
lastModifiedBy: record.__last_modified_by || undefined,
- recordOrder,
},
};
});
diff --git a/apps/nestjs-backend/src/features/selection/selection.service.spec.ts b/apps/nestjs-backend/src/features/selection/selection.service.spec.ts
index 6f2d4d801..ff65be25f 100644
--- a/apps/nestjs-backend/src/features/selection/selection.service.spec.ts
+++ b/apps/nestjs-backend/src/features/selection/selection.service.spec.ts
@@ -80,7 +80,6 @@ describe('selectionService', () => {
const mockSelectionCtxRecords = [
{
id: 'record1',
- recordOrder: {},
fields: {
field1: '1',
field2: '2',
@@ -89,7 +88,6 @@ describe('selectionService', () => {
},
{
id: 'record2',
- recordOrder: {},
fields: {
field1: '1',
field2: '2',
@@ -190,10 +188,9 @@ describe('selectionService', () => {
// Verify the multipleCreateRecords call
expect(recordOpenApiService.createRecords).toHaveBeenCalledTimes(1);
- expect(recordOpenApiService.createRecords).toHaveBeenCalledWith(
- tableId,
- Array.from({ length: numRowsToExpand }, () => ({ fields: {} }))
- );
+ expect(recordOpenApiService.createRecords).toHaveBeenCalledWith(tableId, {
+ records: Array.from({ length: numRowsToExpand }, () => ({ fields: {} })),
+ });
// Verify the result
expect(result).toEqual(expectedRecords);
@@ -356,9 +353,9 @@ describe('selectionService', () => {
].map(createFieldInstanceByVo);
const records = [
- { id: 'record1', recordOrder: {}, fields: {} },
- { id: 'record2', recordOrder: {}, fields: {} },
- { id: 'record3', recordOrder: {}, fields: {} },
+ { id: 'record1', fields: {} },
+ { id: 'record2', fields: {} },
+ { id: 'record3', fields: {} },
];
// Execute the method
diff --git a/apps/nestjs-backend/src/features/selection/selection.service.ts b/apps/nestjs-backend/src/features/selection/selection.service.ts
index d3ff8b151..734eeb7ba 100644
--- a/apps/nestjs-backend/src/features/selection/selection.service.ts
+++ b/apps/nestjs-backend/src/features/selection/selection.service.ts
@@ -285,7 +285,7 @@ export class SelectionService {
return [];
}
const records = Array.from({ length: numRowsToExpand }, () => ({ fields: {} }));
- const createdRecords = await this.recordOpenApiService.createRecords(tableId, records);
+ const createdRecords = await this.recordOpenApiService.createRecords(tableId, { records });
return createdRecords.records.map(({ id, fields }) => ({ id, fields }));
}
diff --git a/apps/nestjs-backend/src/features/share/share.service.ts b/apps/nestjs-backend/src/features/share/share.service.ts
index 1bc778184..7f7690c82 100644
--- a/apps/nestjs-backend/src/features/share/share.service.ts
+++ b/apps/nestjs-backend/src/features/share/share.service.ts
@@ -129,7 +129,10 @@ export class ShareService {
const { tableId } = shareInfo;
const { fields } = shareViewFormSubmitRo;
const { records } = await this.prismaService.$tx(async () => {
- return await this.recordOpenApiService.createRecords(tableId, [{ fields }], FieldKeyType.Id);
+ return await this.recordOpenApiService.createRecords(tableId, {
+ records: [{ fields }],
+ fieldKeyType: FieldKeyType.Id,
+ });
});
if (records.length === 0) {
throw new InternalServerErrorException('The number of successful submit records is 0');
diff --git a/apps/nestjs-backend/src/features/space/space.service.ts b/apps/nestjs-backend/src/features/space/space.service.ts
index 59209aef3..61e3cf54c 100644
--- a/apps/nestjs-backend/src/features/space/space.service.ts
+++ b/apps/nestjs-backend/src/features/space/space.service.ts
@@ -170,9 +170,10 @@ export class SpaceService {
deletedTime: null,
},
orderBy: {
- createdTime: 'asc',
+ order: 'asc',
},
});
+
return baseList.map((base) => ({ ...base, role: roleMap[base.id] || roleMap[base.spaceId] }));
}
}
diff --git a/apps/nestjs-backend/src/features/table/open-api/table-open-api.controller.ts b/apps/nestjs-backend/src/features/table/open-api/table-open-api.controller.ts
index d252d42c9..0ab60ad97 100644
--- a/apps/nestjs-backend/src/features/table/open-api/table-open-api.controller.ts
+++ b/apps/nestjs-backend/src/features/table/open-api/table-open-api.controller.ts
@@ -16,12 +16,12 @@ import {
ITableDescriptionRo,
ITableIconRo,
ITableNameRo,
- ITableOrderRo,
+ IUpdateOrderRo,
sqlQuerySchema,
tableDescriptionRoSchema,
tableIconRoSchema,
tableNameRoSchema,
- tableOrderRoSchema,
+ updateOrderRoSchema,
} from '@teable/openapi';
import { ZodValidationPipe } from '../../../zod.validation.pipe';
import { Permissions } from '../../auth/decorators/permissions.decorator';
@@ -111,9 +111,9 @@ export class TableController {
async updateOrder(
@Param('baseId') baseId: string,
@Param('tableId') tableId: string,
- @Body(new ZodValidationPipe(tableOrderRoSchema)) tableOrderRo: ITableOrderRo
+ @Body(new ZodValidationPipe(updateOrderRoSchema)) updateOrderRo: IUpdateOrderRo
) {
- return await this.tableOpenApiService.updateOrder(baseId, tableId, tableOrderRo.order);
+ return await this.tableOpenApiService.updateOrder(baseId, tableId, updateOrderRo);
}
@Post()
diff --git a/apps/nestjs-backend/src/features/table/open-api/table-open-api.service.ts b/apps/nestjs-backend/src/features/table/open-api/table-open-api.service.ts
index a3478baf5..4ab244273 100644
--- a/apps/nestjs-backend/src/features/table/open-api/table-open-api.service.ts
+++ b/apps/nestjs-backend/src/features/table/open-api/table-open-api.service.ts
@@ -14,9 +14,11 @@ import type {
} from '@teable/core';
import { FieldKeyType, FieldType } from '@teable/core';
import { PrismaService } from '@teable/db-main-prisma';
+import type { IUpdateOrderRo } from '@teable/openapi';
import { ThresholdConfig, IThresholdConfig } from '../../../configs/threshold.config';
import { InjectDbProvider } from '../../../db-provider/db.provider';
import { IDbProvider } from '../../../db-provider/db.provider.interface';
+import { updateOrder } from '../../../utils/update-order';
import { LinkService } from '../../calculation/link.service';
import { FieldCreatingService } from '../../field/field-calculate/field-creating.service';
import { FieldSupplementService } from '../../field/field-calculate/field-supplement.service';
@@ -69,7 +71,7 @@ export class TableOpenApiService {
}
private async createRecords(tableId: string, data: ICreateRecordsRo) {
- return this.recordOpenApiService.createRecords(tableId, data.records, data.fieldKeyType);
+ return this.recordOpenApiService.createRecords(tableId, data);
}
private async prepareFields(tableId: string, fieldRos: IFieldRo[]) {
@@ -352,18 +354,70 @@ export class TableOpenApiService {
});
}
- async updateOrder(baseId: string, tableId: string, order: number) {
- const orderExist = await this.prismaService.tableMeta.findFirst({
- where: { baseId, order, deletedTime: null },
+ async shuffle(baseId: string) {
+ const tables = await this.prismaService.tableMeta.findMany({
+ where: { baseId, deletedTime: null },
select: { id: true },
+ orderBy: { order: 'asc' },
});
- if (orderExist) {
- throw new BadRequestException('Table order could not be duplicate');
- }
+ this.logger.log(`lucky table shuffle! ${baseId}`, 'shuffle');
await this.prismaService.$tx(async () => {
- await this.tableService.updateTable(baseId, tableId, { order });
+ for (let i = 0; i < tables.length; i++) {
+ const table = tables[i];
+ await this.tableService.updateTable(baseId, table.id, { order: i });
+ }
+ });
+ }
+
+ async updateOrder(baseId: string, tableId: string, orderRo: IUpdateOrderRo) {
+ const { anchorId, position } = orderRo;
+
+ const table = await this.prismaService.tableMeta
+ .findFirstOrThrow({
+ select: { order: true, id: true },
+ where: { baseId, id: tableId, deletedTime: null },
+ })
+ .catch(() => {
+ throw new NotFoundException(`Table ${tableId} not found`);
+ });
+
+ const anchorTable = await this.prismaService.tableMeta
+ .findFirstOrThrow({
+ select: { order: true, id: true },
+ where: { baseId, id: anchorId, deletedTime: null },
+ })
+ .catch(() => {
+ throw new NotFoundException(`Anchor ${anchorId} not found`);
+ });
+
+ await updateOrder({
+ parentId: baseId,
+ position,
+ item: table,
+ anchorItem: anchorTable,
+ getNextItem: async (whereOrder, align) => {
+ return this.prismaService.tableMeta.findFirst({
+ select: { order: true, id: true },
+ where: {
+ baseId,
+ deletedTime: null,
+ order: whereOrder,
+ },
+ orderBy: { order: align },
+ });
+ },
+ update: async (
+ parentId: string,
+ id: string,
+ data: { newOrder: number; oldOrder: number }
+ ) => {
+ await this.prismaService.$tx(async () => {
+ await this.tableService.updateTable(parentId, id, { order: data.newOrder });
+ });
+ },
+ shuffle: this.shuffle.bind(this),
});
}
}
diff --git a/apps/nestjs-backend/src/features/table/table.service.ts b/apps/nestjs-backend/src/features/table/table.service.ts
index c158d7a7f..5aa496fe6 100644
--- a/apps/nestjs-backend/src/features/table/table.service.ts
+++ b/apps/nestjs-backend/src/features/table/table.service.ts
@@ -2,7 +2,6 @@ import { BadRequestException, Injectable, Logger, NotFoundException } from '@nes
import type {
ICreateTableRo,
IOtOperation,
- ISetTablePropertyOpContext,
ISnapshotBase,
ITableFullVo,
ITableVo,
@@ -14,17 +13,15 @@ import {
getUniqName,
IdPrefix,
nullsToUndefined,
- tablePropertyKeySchema,
} from '@teable/core';
import type { Prisma } from '@teable/db-main-prisma';
import { PrismaService } from '@teable/db-main-prisma';
import { Knex } from 'knex';
import { InjectModel } from 'nest-knexjs';
import { ClsService } from 'nestjs-cls';
-import { fromZodError } from 'zod-validation-error';
import { InjectDbProvider } from '../../db-provider/db.provider';
import { IDbProvider } from '../../db-provider/db.provider.interface';
-import type { IAdapterService } from '../../share-db/interface';
+import type { IReadonlyAdapterService } from '../../share-db/interface';
import { RawOpType } from '../../share-db/interface';
import type { IClsStore } from '../../types/cls';
import { convertNameToValidCharacter } from '../../utils/name-conversion';
@@ -35,7 +32,7 @@ import { RecordService } from '../record/record.service';
import { ViewService } from '../view/view.service';
@Injectable()
-export class TableService implements IAdapterService {
+export class TableService implements IReadonlyAdapterService {
private logger = new Logger(TableService.name);
constructor(
@@ -357,34 +354,6 @@ export class TableService implements IAdapterService {
});
}
- async update(
- version: number,
- baseId: string,
- tableId: string,
- opContexts: ISetTablePropertyOpContext[]
- ) {
- const userId = this.cls.get('user.id');
-
- for (const opContext of opContexts) {
- const { key, newValue } = opContext;
- const result = tablePropertyKeySchema.safeParse({ [key]: newValue });
- if (!result.success) {
- throw new BadRequestException(fromZodError(result.error).message);
- }
-
- // skip undefined value
- const parsedValue = result.data[key];
- if (parsedValue === undefined) {
- continue;
- }
-
- await this.prismaService.txClient().tableMeta.update({
- where: { id: tableId, baseId },
- data: { [key]: parsedValue, version, lastModifiedBy: userId },
- });
- }
- }
-
async getSnapshotBulk(baseId: string, ids: string[]): Promise[]> {
const tables = await this.prismaService.txClient().tableMeta.findMany({
where: { baseId, id: { in: ids }, deletedTime: null },
@@ -403,7 +372,6 @@ export class TableService implements IAdapterService {
...table,
description: table.description ?? undefined,
icon: table.icon ?? undefined,
- order: table.order,
lastModifiedTime: tableTime[i] || table.createdTime.toISOString(),
defaultViewId: tableDefaultViewIds[i],
},
diff --git a/apps/nestjs-backend/src/features/user/user.service.ts b/apps/nestjs-backend/src/features/user/user.service.ts
index 3d221cb62..26d328cde 100644
--- a/apps/nestjs-backend/src/features/user/user.service.ts
+++ b/apps/nestjs-backend/src/features/user/user.service.ts
@@ -1,16 +1,21 @@
+import https from 'https';
import { join } from 'path';
import { Injectable } from '@nestjs/common';
-import { generateSpaceId, minidenticon, SpaceRole } from '@teable/core';
+import {
+ generateAccountId,
+ generateSpaceId,
+ generateUserId,
+ minidenticon,
+ SpaceRole,
+} from '@teable/core';
import type { Prisma } from '@teable/db-main-prisma';
import { PrismaService } from '@teable/db-main-prisma';
import { type ICreateSpaceRo, type IUserNotifyMeta, UploadType } from '@teable/openapi';
import { ClsService } from 'nestjs-cls';
import sharp from 'sharp';
import type { IClsStore } from '../../types/cls';
-import { FileUtils } from '../../utils';
import { getFullStorageUrl } from '../../utils/full-storage-url';
import StorageAdapter from '../attachments/plugins/adapter';
-import { LocalStorage } from '../attachments/plugins/local';
import { InjectStorageAdapter } from '../attachments/plugins/storage';
@Injectable()
@@ -67,7 +72,10 @@ export class UserService {
return space;
}
- async createUser(user: Prisma.UserCreateInput) {
+ async createUser(
+ user: Prisma.UserCreateInput,
+ account?: Omit
+ ) {
// defaults
const defaultNotifyMeta: IUserNotifyMeta = {
email: true,
@@ -75,6 +83,7 @@ export class UserService {
user = {
...user,
+ id: user.id ?? generateUserId(),
notifyMeta: JSON.stringify(defaultNotifyMeta),
};
@@ -85,17 +94,19 @@ export class UserService {
avatar,
};
}
-
// default space created
- return await this.prismaService.$tx(async (prisma) => {
- const newUser = await prisma.user.create({ data: user });
- const { id, name } = newUser;
- await this.cls.runWith(this.cls.get(), async () => {
- this.cls.set('user.id', id);
- await this.createSpaceBySignup({ name: `${name}'s space` });
+ const newUser = await this.prismaService.txClient().user.create({ data: user });
+ const { id, name } = newUser;
+ if (account) {
+ await this.prismaService.txClient().account.create({
+ data: { id: generateAccountId(), ...account, userId: id },
});
- return newUser;
+ }
+ await this.cls.runWith(this.cls.get(), async () => {
+ this.cls.set('user.id', id);
+ await this.createSpaceBySignup({ name: `${name}'s space` });
});
+ return newUser;
}
async updateUserName(id: string, name: string) {
@@ -107,29 +118,19 @@ export class UserService {
});
}
- async updateAvatar(id: string, avatarFile: Express.Multer.File) {
+ async updateAvatar(id: string, avatarFile: { path: string; mimetype: string; size: number }) {
const path = join(StorageAdapter.getDir(UploadType.Avatar), id);
const bucket = StorageAdapter.getBucket(UploadType.Avatar);
- const url = await this.storageAdapter.uploadFileWidthPath(bucket, path, avatarFile.path, {
- // eslint-disable-next-line @typescript-eslint/naming-convention
- 'Content-Type': avatarFile.mimetype,
- });
-
- const { size, mimetype, path: filePath } = avatarFile;
- let hash, width, height;
-
- const storage = this.storageAdapter;
- if (storage instanceof LocalStorage) {
- hash = await FileUtils.getHash(filePath);
- const fileMate = await storage.getFileMate(filePath);
- width = fileMate.width;
- height = fileMate.height;
- } else {
- const objectMeta = await storage.getObjectMeta(bucket, path, id);
- hash = objectMeta.hash;
- width = objectMeta.width;
- height = objectMeta.height;
- }
+ const { hash, url } = await this.storageAdapter.uploadFileWidthPath(
+ bucket,
+ path,
+ avatarFile.path,
+ {
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ 'Content-Type': avatarFile.mimetype,
+ }
+ );
+ const { size, mimetype } = avatarFile;
await this.mountAttachment(id, {
bucket,
@@ -138,8 +139,6 @@ export class UserService {
mimetype,
token: id,
path,
- width,
- height,
});
await this.prismaService.txClient().user.update({
@@ -186,24 +185,95 @@ export class UserService {
.resize(svgSize[0], svgSize[1])
.flatten({ background: '#f0f0f0' })
.png({ quality: 90 });
+ const mimetype = 'image/png';
const { size } = await svgObject.metadata();
const svgBuffer = await svgObject.toBuffer();
- const svgHash = await FileUtils.getHash(svgBuffer);
+
+ const { url, hash } = await this.storageAdapter.uploadFile(bucket, path, svgBuffer, {
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ 'Content-Type': mimetype,
+ });
await this.mountAttachment(id, {
bucket: bucket,
- hash: svgHash,
+ hash: hash,
size: size,
- mimetype: 'image/png',
+ mimetype: mimetype,
token: id,
path: path,
width: svgSize[0],
height: svgSize[1],
});
- return this.storageAdapter.uploadFile(bucket, path, svgBuffer, {
- // eslint-disable-next-line @typescript-eslint/naming-convention
- 'Content-Type': 'image/png',
+ return url;
+ }
+
+ private async uploadAvatarByUrl(userId: string, url: string) {
+ return new Promise((resolve, reject) => {
+ https
+ .get(url, async (stream) => {
+ const contentType = stream?.headers?.['content-type']?.split(';')?.[0];
+ const size = stream?.headers?.['content-length']?.split(';')?.[0];
+ const path = join(StorageAdapter.getDir(UploadType.Avatar), userId);
+ const bucket = StorageAdapter.getBucket(UploadType.Avatar);
+
+ const { url, hash } = await this.storageAdapter.uploadFile(bucket, path, stream, {
+ // eslint-disable-next-line @typescript-eslint/naming-convention
+ 'Content-Type': contentType,
+ });
+
+ await this.mountAttachment(userId, {
+ bucket: bucket,
+ hash: hash,
+ size: size ? parseInt(size) : undefined,
+ mimetype: contentType,
+ token: userId,
+ path: path,
+ });
+ resolve(url);
+ })
+ .on('error', (error) => {
+ reject(error);
+ });
+ });
+ }
+
+ async findOrCreateUser(user: {
+ name: string;
+ email: string;
+ provider: string;
+ providerId: string;
+ type: string;
+ avatarUrl?: string;
+ }) {
+ return this.prismaService.$tx(async () => {
+ const { email, name, provider, providerId, type, avatarUrl } = user;
+ // account exist check
+ const existAccount = await this.prismaService.txClient().account.findFirst({
+ where: { provider, providerId },
+ });
+ if (existAccount) {
+ return await this.getUserById(existAccount.userId);
+ }
+
+ // user exist check
+ const existUser = await this.getUserByEmail(email);
+ if (!existUser) {
+ const userId = generateUserId();
+ let avatar: string | undefined = undefined;
+ if (avatarUrl) {
+ avatar = await this.uploadAvatarByUrl(userId, avatarUrl);
+ }
+ return await this.createUser(
+ { id: userId, email, name, avatar },
+ { provider, providerId, type }
+ );
+ }
+
+ await this.prismaService.txClient().account.create({
+ data: { id: generateAccountId(), provider, providerId, type, userId: existUser.id },
+ });
+ return existUser;
});
}
}
diff --git a/apps/nestjs-backend/src/features/view/model/factory.ts b/apps/nestjs-backend/src/features/view/model/factory.ts
index 7bd4b3b32..b51ce7541 100644
--- a/apps/nestjs-backend/src/features/view/model/factory.ts
+++ b/apps/nestjs-backend/src/features/view/model/factory.ts
@@ -38,7 +38,6 @@ export function createViewVoByRaw(viewRaw: View): IViewVo {
shareId: viewRaw.shareId || undefined,
shareMeta: JSON.parse(viewRaw.shareMeta as string) || undefined,
enableShare: viewRaw.enableShare || undefined,
- order: viewRaw.order,
createdBy: viewRaw.createdBy,
lastModifiedBy: viewRaw.lastModifiedBy || undefined,
createdTime: viewRaw.createdTime.toISOString(),
diff --git a/apps/nestjs-backend/src/features/view/open-api/view-open-api.controller.ts b/apps/nestjs-backend/src/features/view/open-api/view-open-api.controller.ts
index b7b7ba45c..859b0ce73 100644
--- a/apps/nestjs-backend/src/features/view/open-api/view-open-api.controller.ts
+++ b/apps/nestjs-backend/src/features/view/open-api/view-open-api.controller.ts
@@ -14,9 +14,7 @@ import {
viewGroupRoSchema,
} from '@teable/core';
import {
- IViewOrderRo,
viewNameRoSchema,
- viewOrderRoSchema,
IViewNameRo,
viewDescriptionRoSchema,
IViewDescriptionRo,
@@ -26,6 +24,10 @@ import {
IViewSortRo,
viewOptionsRoSchema,
IViewOptionsRo,
+ updateOrderRoSchema,
+ IUpdateOrderRo,
+ updateRecordOrdersRoSchema,
+ IUpdateRecordOrdersRo,
} from '@teable/openapi';
import type { EnableShareViewVo } from '@teable/openapi';
import { ZodValidationPipe } from '../../..//zod.validation.pipe';
@@ -207,12 +209,23 @@ export class ViewOpenApiController {
async updateViewOrder(
@Param('tableId') tableId: string,
@Param('viewId') viewId: string,
- @Body(new ZodValidationPipe(viewOrderRoSchema))
- updateOrderRo: IViewOrderRo
+ @Body(new ZodValidationPipe(updateOrderRoSchema))
+ updateOrderRo: IUpdateOrderRo
): Promise {
return await this.viewOpenApiService.updateViewOrder(tableId, viewId, updateOrderRo);
}
+ @Permissions('view|update')
+ @Put('/:viewId/record-order')
+ async updateRecordOrders(
+ @Param('tableId') tableId: string,
+ @Param('viewId') viewId: string,
+ @Body(new ZodValidationPipe(updateRecordOrdersRoSchema))
+ updateRecordOrdersRo: IUpdateRecordOrdersRo
+ ): Promise {
+ return await this.viewOpenApiService.updateRecordOrders(tableId, viewId, updateRecordOrdersRo);
+ }
+
@Permissions('view|update')
@Post('/:viewId/refresh-share-id')
async refreshShareId(
diff --git a/apps/nestjs-backend/src/features/view/open-api/view-open-api.service.ts b/apps/nestjs-backend/src/features/view/open-api/view-open-api.service.ts
index 7a6423c12..c6a883e36 100644
--- a/apps/nestjs-backend/src/features/view/open-api/view-open-api.service.ts
+++ b/apps/nestjs-backend/src/features/view/open-api/view-open-api.service.ts
@@ -24,10 +24,11 @@ import {
validateOptionsType,
} from '@teable/core';
import { PrismaService } from '@teable/db-main-prisma';
-import type { IViewOrderRo } from '@teable/openapi';
+import type { IUpdateOrderRo, IUpdateRecordOrdersRo } from '@teable/openapi';
import { Knex } from 'knex';
import { InjectModel } from 'nest-knexjs';
import { Timing } from '../../../utils/timing';
+import { updateMultipleOrders, updateOrder } from '../../../utils/update-order';
import { FieldService } from '../../field/field.service';
import { RecordService } from '../../record/record.service';
import { ViewService } from '../view.service';
@@ -64,12 +65,31 @@ export class ViewOpenApiService {
await this.viewService.deleteView(tableId, viewId);
}
+ private updateRecordOrderSql(orderRawSql: string, dbTableName: string, indexField: string) {
+ return this.knex
+ .raw(
+ `
+ UPDATE :dbTableName:
+ SET :indexField: = temp_order.new_order
+ FROM (
+ SELECT __id, ROW_NUMBER() OVER (ORDER BY ${orderRawSql}) AS new_order FROM :dbTableName:
+ ) AS temp_order
+ WHERE :dbTableName:.__id = temp_order.__id AND :dbTableName:.:indexField: != temp_order.new_order;
+ `,
+ {
+ dbTableName,
+ indexField,
+ }
+ )
+ .toQuery();
+ }
+
@Timing()
async manualSort(tableId: string, viewId: string, viewOrderRo: IManualSortRo) {
const { sortObjs } = viewOrderRo;
const dbTableName = await this.recordService.getDbTableName(tableId);
const fields = await this.fieldService.getFieldsByQuery(tableId, { viewId });
- const fieldIndexId = this.viewService.getRowIndexFieldName(viewId);
+ const indexField = await this.viewService.getOrCreateViewIndexField(dbTableName, viewId);
const fieldMap = fields.reduce(
(map, field) => {
@@ -102,23 +122,6 @@ export class ViewOpenApiService {
// ensure order stable
orderRawSql += this.knex.raw(`, ?? ASC`, ['__auto_number']).toQuery();
- const updateRecordsOrderSql = this.knex
- .raw(
- `
- UPDATE :dbTableName:
- SET :fieldIndexId: = temp_order.new_order
- FROM (
- SELECT __id, ROW_NUMBER() OVER (ORDER BY ${orderRawSql}) AS new_order FROM :dbTableName:
- ) AS temp_order
- WHERE :dbTableName:.__id = temp_order.__id AND :dbTableName:.:fieldIndexId: != temp_order.new_order;
- `,
- {
- dbTableName: dbTableName,
- fieldIndexId: fieldIndexId,
- }
- )
- .toQuery();
-
// build ops
const newSort = {
sortObjs: sortObjs,
@@ -126,7 +129,9 @@ export class ViewOpenApiService {
};
await this.prismaService.$tx(async (prisma) => {
- await prisma.$executeRawUnsafe(updateRecordsOrderSql);
+ await prisma.$executeRawUnsafe(
+ this.updateRecordOrderSql(orderRawSql, dbTableName, indexField)
+ );
await this.viewService.updateViewSort(tableId, viewId, newSort);
});
}
@@ -250,37 +255,205 @@ export class ViewOpenApiService {
});
}
- async updateViewOrder(tableId: string, viewId: string, orderRo: IViewOrderRo) {
- const { order } = orderRo;
-
+ /**
+ * shuffle view order
+ */
+ async shuffle(tableId: string) {
const views = await this.prismaService.view.findMany({
- select: { order: true, id: true },
where: { tableId, deletedTime: null },
+ select: { id: true, order: true },
+ orderBy: { order: 'asc' },
});
- const curView = views.find(({ id }) => id === viewId);
+ this.logger.log(`lucky view shuffle! ${tableId}`, 'shuffle');
- if (!curView) {
- throw new BadRequestException('View not found in the table');
- }
+ await this.prismaService.$tx(async () => {
+ for (let i = 0; i < views.length; i++) {
+ const view = views[i];
+ await this.viewService.updateViewByOps(tableId, view.id, [
+ ViewOpBuilder.editor.setViewProperty.build({
+ key: 'order',
+ newValue: i,
+ oldValue: view.order,
+ }),
+ ]);
+ }
+ });
+ }
+
+ async updateViewOrder(tableId: string, viewId: string, orderRo: IUpdateOrderRo) {
+ const { anchorId, position } = orderRo;
- const orders = views.filter(({ id }) => id !== viewId).map(({ order }) => order);
+ const view = await this.prismaService.view
+ .findFirstOrThrow({
+ select: { order: true, id: true },
+ where: { tableId, id: viewId, deletedTime: null },
+ })
+ .catch(() => {
+ throw new NotFoundException(`View ${viewId} not found in the table`);
+ });
- if (orders.includes(order)) {
- // validate repeatability, because of order should be unique key
- throw new BadRequestException('View order could not be duplicate');
+ const anchorView = await this.prismaService.view
+ .findFirstOrThrow({
+ select: { order: true, id: true },
+ where: { tableId, id: anchorId, deletedTime: null },
+ })
+ .catch(() => {
+ throw new NotFoundException(`Anchor ${anchorId} not found in the table`);
+ });
+
+ await updateOrder({
+ parentId: tableId,
+ position,
+ item: view,
+ anchorItem: anchorView,
+ getNextItem: async (whereOrder, align) => {
+ return this.prismaService.view.findFirst({
+ select: { order: true, id: true },
+ where: {
+ tableId,
+ deletedTime: null,
+ order: whereOrder,
+ },
+ orderBy: { order: align },
+ });
+ },
+ update: async (
+ parentId: string,
+ id: string,
+ data: { newOrder: number; oldOrder: number }
+ ) => {
+ const ops = ViewOpBuilder.editor.setViewProperty.build({
+ key: 'order',
+ newValue: data.newOrder,
+ oldValue: data.oldOrder,
+ });
+
+ await this.prismaService.$tx(async () => {
+ await this.viewService.updateViewByOps(parentId, id, [ops]);
+ });
+ },
+ shuffle: this.shuffle.bind(this),
+ });
+ }
+
+ /**
+ * shuffle record order
+ */
+ async shuffleRecords(dbTableName: string, indexField: string) {
+ const recordCount = await this.recordService.getAllRecordCount(dbTableName);
+ if (recordCount > 100_000) {
+ throw new BadRequestException('Not enough gap to move the row here');
}
- const { order: oldOrder } = curView;
+ const sql = this.updateRecordOrderSql(
+ this.knex.raw(`?? ASC`, [indexField]).toQuery(),
+ dbTableName,
+ indexField
+ );
- const ops = ViewOpBuilder.editor.setViewProperty.build({
- key: 'order',
- newValue: order,
- oldValue: oldOrder,
+ await this.prismaService.$executeRawUnsafe(sql);
+ }
+
+ async updateRecordOrdersInner(props: {
+ tableId: string;
+ dbTableName: string;
+ itemLength: number;
+ indexField: string;
+ orderRo: {
+ anchorId: string;
+ position: 'before' | 'after';
+ };
+ update: (indexes: number[]) => Promise;
+ }) {
+ const { tableId, itemLength, dbTableName, indexField, orderRo, update } = props;
+ const { anchorId, position } = orderRo;
+
+ const anchorRecordSql = this.knex(dbTableName)
+ .select({
+ id: '__id',
+ order: indexField,
+ })
+ .where('__id', anchorId)
+ .toQuery();
+
+ const anchorRecord = await this.prismaService
+ .txClient()
+ .$queryRawUnsafe<{ id: string; order: number }[]>(anchorRecordSql)
+ .then((res) => {
+ return res[0];
+ });
+
+ if (!anchorRecord) {
+ throw new NotFoundException(`Anchor ${anchorId} not found in the table`);
+ }
+
+ await updateMultipleOrders({
+ parentId: tableId,
+ position,
+ itemLength,
+ anchorItem: anchorRecord,
+ getNextItem: async (whereOrder, align) => {
+ const nextRecordSql = this.knex(dbTableName)
+ .select({
+ id: '__id',
+ order: indexField,
+ })
+ .where(
+ indexField,
+ whereOrder.lt != null ? '<' : '>',
+ (whereOrder.lt != null ? whereOrder.lt : whereOrder.gt) as number
+ )
+ .orderBy(indexField, align)
+ .limit(1)
+ .toQuery();
+ return this.prismaService
+ .txClient()
+ .$queryRawUnsafe<{ id: string; order: number }[]>(nextRecordSql)
+ .then((res) => {
+ return res[0];
+ });
+ },
+ update,
+ shuffle: async () => {
+ await this.shuffleRecords(dbTableName, indexField);
+ },
});
+ }
- await this.prismaService.$tx(async () => {
- await this.viewService.updateViewByOps(tableId, viewId, [ops]);
+ async updateRecordOrders(tableId: string, viewId: string, orderRo: IUpdateRecordOrdersRo) {
+ const dbTableName = await this.recordService.getDbTableName(tableId);
+
+ const indexField = await this.viewService.getOrCreateViewIndexField(dbTableName, viewId);
+ const recordIds = orderRo.recordIds;
+
+ await this.updateRecordOrdersInner({
+ tableId,
+ dbTableName,
+ itemLength: recordIds.length,
+ indexField,
+ orderRo,
+ update: async (indexes) => {
+ // for notify view update only
+ const ops = ViewOpBuilder.editor.setViewProperty.build({
+ key: 'lastModifiedTime',
+ newValue: new Date().toISOString(),
+ });
+
+ await this.prismaService.$tx(async (prisma) => {
+ await this.viewService.updateViewByOps(tableId, viewId, [ops]);
+ for (let i = 0; i < recordIds.length; i++) {
+ const recordId = recordIds[i];
+ const updateRecordSql = this.knex(dbTableName)
+ .update({
+ [indexField]: indexes[i],
+ })
+ .where('__id', recordId)
+ .toQuery();
+ await prisma.$executeRawUnsafe(updateRecordSql);
+ }
+ });
+ },
});
}
diff --git a/apps/nestjs-backend/src/features/view/view.module.ts b/apps/nestjs-backend/src/features/view/view.module.ts
index f7a096352..6a678ee31 100644
--- a/apps/nestjs-backend/src/features/view/view.module.ts
+++ b/apps/nestjs-backend/src/features/view/view.module.ts
@@ -1,10 +1,11 @@
import { Module } from '@nestjs/common';
+import { DbProvider } from '../../db-provider/db.provider';
import { CalculationModule } from '../calculation/calculation.module';
import { ViewService } from './view.service';
@Module({
imports: [CalculationModule],
- providers: [ViewService],
+ providers: [ViewService, DbProvider],
exports: [ViewService],
})
export class ViewModule {}
diff --git a/apps/nestjs-backend/src/features/view/view.service.ts b/apps/nestjs-backend/src/features/view/view.service.ts
index 009ef9d5a..1dccc20eb 100644
--- a/apps/nestjs-backend/src/features/view/view.service.ts
+++ b/apps/nestjs-backend/src/features/view/view.service.ts
@@ -8,6 +8,7 @@ import type {
IUpdateViewColumnMetaOpContext,
ISetViewPropertyOpContext,
IColumnMeta,
+ IViewPropertyKeys,
} from '@teable/core';
import {
getUniqName,
@@ -15,7 +16,7 @@ import {
generateViewId,
OpName,
ViewOpBuilder,
- viewRoSchema,
+ viewVoSchema,
} from '@teable/core';
import type { Prisma } from '@teable/db-main-prisma';
import { PrismaService } from '@teable/db-main-prisma';
@@ -24,7 +25,9 @@ import { isEmpty, merge } from 'lodash';
import { InjectModel } from 'nest-knexjs';
import { ClsService } from 'nestjs-cls';
import { fromZodError } from 'zod-validation-error';
-import type { IAdapterService } from '../../share-db/interface';
+import { InjectDbProvider } from '../../db-provider/db.provider';
+import { IDbProvider } from '../../db-provider/db.provider.interface';
+import type { IReadonlyAdapterService } from '../../share-db/interface';
import { RawOpType } from '../../share-db/interface';
import type { IClsStore } from '../../types/cls';
import { BatchService } from '../calculation/batch.service';
@@ -34,12 +37,13 @@ import { createViewInstanceByRaw, createViewVoByRaw } from './model/factory';
type IViewOpContext = IUpdateViewColumnMetaOpContext | ISetViewPropertyOpContext;
@Injectable()
-export class ViewService implements IAdapterService {
+export class ViewService implements IReadonlyAdapterService {
constructor(
private readonly cls: ClsService,
private readonly batchService: BatchService,
private readonly prismaService: PrismaService,
- @InjectModel('CUSTOM_KNEX') private readonly knex: Knex
+ @InjectModel('CUSTOM_KNEX') private readonly knex: Knex,
+ @InjectDbProvider() private readonly dbProvider: IDbProvider
) {}
getRowIndexFieldName(viewId: string) {
@@ -54,20 +58,75 @@ export class ViewService implements IAdapterService {
const viewRaws = await this.prismaService.txClient().view.findMany({
where: { tableId, deletedTime: null },
select: { name: true, order: true },
+ orderBy: { order: 'asc' },
});
- let { name, order } = viewRo;
+ let { name } = viewRo;
const names = viewRaws.map((view) => view.name);
name = getUniqName(name ?? 'New view', names);
- if (order == null) {
- const maxOrder = viewRaws[viewRaws.length - 1]?.order;
- order = maxOrder == null ? 0 : maxOrder + 1;
- }
+ const maxOrder = viewRaws[viewRaws.length - 1]?.order;
+ const order = maxOrder == null ? 0 : maxOrder + 1;
+
return { name, order };
}
+ async existIndex(dbTableName: string, viewId: string) {
+ const columnName = this.getRowIndexFieldName(viewId);
+ const exists = await this.dbProvider.checkColumnExist(
+ dbTableName,
+ columnName,
+ this.prismaService.txClient()
+ );
+
+ if (exists) {
+ return columnName;
+ }
+ }
+
+ async createViewIndexField(dbTableName: string, viewId: string) {
+ const prisma = this.prismaService.txClient();
+
+ const rowIndexFieldName = this.getRowIndexFieldName(viewId);
+
+ // add a field for maintain row order number
+ const addRowIndexColumnSql = this.knex.schema
+ .alterTable(dbTableName, (table) => {
+ table.double(rowIndexFieldName);
+ })
+ .toQuery();
+ await prisma.$executeRawUnsafe(addRowIndexColumnSql);
+
+ // fill initial order for every record, with auto increment integer
+ const updateRowIndexSql = this.knex(dbTableName)
+ .update({
+ [rowIndexFieldName]: this.knex.ref('__auto_number'),
+ })
+ .toQuery();
+ await prisma.$executeRawUnsafe(updateRowIndexSql);
+
+ // create index
+ const createRowIndexSQL = this.knex.schema
+ .alterTable(dbTableName, (table) => {
+ table.index(rowIndexFieldName, this.getRowIndexFieldIndexName(viewId));
+ })
+ .toQuery();
+ await prisma.$executeRawUnsafe(createRowIndexSQL);
+ console.log('addRowIndexColumnSql', addRowIndexColumnSql);
+ console.log('createViewIndexField', createRowIndexSQL);
+ return rowIndexFieldName;
+ }
+
+ async getOrCreateViewIndexField(dbTableName: string, viewId: string) {
+ const indexFieldName = await this.existIndex(dbTableName, viewId);
+ console.log('exits', indexFieldName);
+ if (indexFieldName) {
+ return indexFieldName;
+ }
+ return this.createViewIndexField(dbTableName, viewId);
+ }
+
async createDbView(tableId: string, viewRo: IViewRo) {
const userId = this.cls.get('user.id');
const { description, type, options, sort, filter, group, columnMeta } = viewRo;
@@ -101,46 +160,7 @@ export class ViewService implements IAdapterService {
columnMeta: mergedColumnMeta ? JSON.stringify(mergedColumnMeta) : JSON.stringify({}),
};
- const { dbTableName } = await prisma.tableMeta.findUniqueOrThrow({
- where: {
- id: tableId,
- },
- select: {
- dbTableName: true,
- },
- });
-
- const rowIndexFieldName = this.getRowIndexFieldName(viewId);
-
- // 1. create a new view in view model
- const viewData = await prisma.view.create({ data });
- // const columnMeta = await this.updateViewColumnMetaOrderByViewId(tableId, viewId);
-
- // 2. add a field for maintain row order number
- const addRowIndexColumnSql = this.knex.schema
- .alterTable(dbTableName, (table) => {
- table.double(rowIndexFieldName);
- })
- .toQuery();
- await prisma.$executeRawUnsafe(addRowIndexColumnSql);
-
- // 3. fill initial order for every record, with auto increment integer
- const updateRowIndexSql = this.knex(dbTableName)
- .update({
- [rowIndexFieldName]: this.knex.ref('__auto_number'),
- })
- .toQuery();
- await prisma.$executeRawUnsafe(updateRowIndexSql);
-
- // 4. create index
- const createRowIndexSQL = this.knex.schema
- .alterTable(dbTableName, (table) => {
- table.index(rowIndexFieldName, this.getRowIndexFieldIndexName(viewId));
- })
- .toQuery();
- await prisma.$executeRawUnsafe(createRowIndexSQL);
-
- return viewData;
+ return await prisma.view.create({ data });
}
async getViewById(viewId: string): Promise {
@@ -326,11 +346,11 @@ export class ViewService implements IAdapterService {
continue;
}
const { key, newValue } = opContext;
- const result = viewRoSchema.partial().safeParse({ [key]: newValue });
+ const result = viewVoSchema.partial().safeParse({ [key]: newValue });
if (!result.success) {
throw new BadRequestException(fromZodError(result.error).message);
}
- const parsedValue = result.data[key];
+ const parsedValue = result.data[key] as IViewPropertyKeys;
await this.prismaService.txClient().view.update({
where: { id: viewId },
data: {
diff --git a/apps/nestjs-backend/src/share-db/interface.ts b/apps/nestjs-backend/src/share-db/interface.ts
index 3319d60c9..1cd2d4d12 100644
--- a/apps/nestjs-backend/src/share-db/interface.ts
+++ b/apps/nestjs-backend/src/share-db/interface.ts
@@ -1,17 +1,7 @@
import type { ISnapshotBase } from '@teable/core';
import type { CreateOp, DB, DeleteOp, EditOp } from 'sharedb';
-export interface IAdapterService {
- create(collectionId: string, snapshot: unknown): Promise;
-
- del(version: number, collectionId: string, docId: string): Promise;
-
- update(
- version: number,
- collectionId: string,
- docId: string,
- opContexts: unknown[]
- ): Promise;
+export interface IReadonlyAdapterService {
getSnapshotBulk(
collectionId: string,
ids: string[],
@@ -25,6 +15,19 @@ export interface IAdapterService {
): Promise<{ ids: string[]; extra?: unknown }>;
}
+export interface IAdapterService extends IReadonlyAdapterService {
+ create(collectionId: string, snapshot: unknown): Promise;
+
+ del(version: number, collectionId: string, docId: string): Promise;
+
+ update(
+ version: number,
+ collectionId: string,
+ docId: string,
+ opContexts: unknown[]
+ ): Promise;
+}
+
export interface IShareDbConfig {
db: DB;
}
diff --git a/apps/nestjs-backend/src/share-db/share-db.adapter.ts b/apps/nestjs-backend/src/share-db/share-db.adapter.ts
index 1204e079b..201dcdbbe 100644
--- a/apps/nestjs-backend/src/share-db/share-db.adapter.ts
+++ b/apps/nestjs-backend/src/share-db/share-db.adapter.ts
@@ -20,7 +20,7 @@ import { RecordService } from '../features/record/record.service';
import { TableService } from '../features/table/table.service';
import { ViewService } from '../features/view/view.service';
import type { IClsStore } from '../types/cls';
-import type { IAdapterService } from './interface';
+import type { IAdapterService, IReadonlyAdapterService } from './interface';
import { WsAuthService } from './ws-auth.service';
export interface ICollectionSnapshot {
@@ -52,6 +52,13 @@ export class ShareDbAdapter extends ShareDb.DB {
}
getService(type: IdPrefix): IAdapterService {
+ if (IdPrefix.Record === type) {
+ return this.recordService;
+ }
+ throw new Error(`QueryType: ${type} has no adapter service implementation`);
+ }
+
+ getReadonlyService(type: IdPrefix): IReadonlyAdapterService {
switch (type) {
case IdPrefix.View:
return this.viewService;
@@ -62,7 +69,7 @@ export class ShareDbAdapter extends ShareDb.DB {
case IdPrefix.Table:
return this.tableService;
}
- throw new Error(`QueryType: ${type} has no service implementation`);
+ throw new Error(`QueryType: ${type} has no readonly adapter service implementation`);
}
query = async (
@@ -118,7 +125,7 @@ export class ShareDbAdapter extends ShareDb.DB {
const [docType, collectionId] = collection.split('_');
- const queryResult = await this.getService(docType as IdPrefix).getDocIdsByQuery(
+ const queryResult = await this.getReadonlyService(docType as IdPrefix).getDocIdsByQuery(
collectionId,
query
);
@@ -289,7 +296,7 @@ export class ShareDbAdapter extends ShareDb.DB {
try {
const [docType, collectionId] = collection.split('_');
- const snapshotData = await this.getService(docType as IdPrefix).getSnapshotBulk(
+ const snapshotData = await this.getReadonlyService(docType as IdPrefix).getSnapshotBulk(
collectionId,
ids,
projection && projection['$submit'] ? undefined : projection
diff --git a/apps/nestjs-backend/src/utils/index.ts b/apps/nestjs-backend/src/utils/index.ts
index b417962b6..39355d08e 100644
--- a/apps/nestjs-backend/src/utils/index.ts
+++ b/apps/nestjs-backend/src/utils/index.ts
@@ -1,4 +1,3 @@
export * from './name-conversion';
-export * from './view-order-field-name';
export * from './string-hash';
export * from './file-utils';
diff --git a/apps/nestjs-backend/src/utils/update-order.spec.ts b/apps/nestjs-backend/src/utils/update-order.spec.ts
new file mode 100644
index 000000000..8b60fe49d
--- /dev/null
+++ b/apps/nestjs-backend/src/utils/update-order.spec.ts
@@ -0,0 +1,203 @@
+import { updateOrder, updateMultipleOrders } from './update-order'; // Adjust the import path as necessary
+
+describe('updateOrder', () => {
+ // Mock dependencies
+ const getNextItemMock = vi.fn();
+ const updateMock = vi.fn();
+ const shuffleMock = vi.fn();
+
+ afterEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it('correctly handles reordering before the anchor item', async () => {
+ // Setup for case 1
+ getNextItemMock.mockResolvedValueOnce({ id: '2', order: 2 });
+ const params = {
+ parentId: 'parent1',
+ position: 'before' as const,
+ item: { id: 'item1', order: 4 },
+ anchorItem: { id: 'anchor', order: 3 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ await updateOrder(params);
+
+ // Verify getNextItem was called correctly
+ expect(getNextItemMock).toHaveBeenCalledWith({ lt: 3 }, 'desc');
+ // Verify update was called with expected arguments
+ expect(updateMock).toHaveBeenCalledWith('parent1', 'item1', {
+ newOrder: 2.5,
+ oldOrder: 4,
+ });
+ // Verify shuffle was not called
+ expect(shuffleMock).not.toHaveBeenCalled();
+ });
+
+ it('correctly handles reordering after the anchor item', async () => {
+ // Setup for case 2
+ getNextItemMock.mockResolvedValueOnce({ id: '4', order: 4 });
+ const params = {
+ parentId: 'parent1',
+ position: 'after' as const,
+ item: { id: 'item1', order: 2 },
+ anchorItem: { id: 'anchor', order: 3 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ await updateOrder(params);
+
+ // Verify getNextItem was called correctly
+ expect(getNextItemMock).toHaveBeenCalledWith({ gt: 3 }, 'asc');
+ // Verify update was called with expected arguments
+ expect(updateMock).toHaveBeenCalledWith('parent1', 'item1', {
+ newOrder: 3.5,
+ oldOrder: 2,
+ });
+ // Verify shuffle was not called
+ expect(shuffleMock).not.toHaveBeenCalled();
+ });
+
+ it('handles null from getNextItem correctly, indicating no next item', async () => {
+ // Setup: getNextItem returns null
+ getNextItemMock.mockResolvedValueOnce(null);
+ const params = {
+ parentId: 'parent1',
+ position: 'after' as const, // Can test 'before' in a similar manner with adjusted logic
+ item: { id: 'item1', order: 4 },
+ anchorItem: { id: 'anchor', order: 5 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ await updateOrder(params);
+
+ // When there's no item after the anchor, we expect the item to move just after the anchor
+ expect(updateMock).toHaveBeenCalledWith('parent1', 'item1', { newOrder: 6, oldOrder: 4 });
+ expect(shuffleMock).not.toHaveBeenCalled();
+ });
+
+ it('calls shuffle when the new order is too close to the anchor order', async () => {
+ // Setup: getNextItem returns a value that would cause a shuffle due to close orders
+ getNextItemMock.mockResolvedValueOnce({ id: 'anchor', order: 3 - Number.EPSILON });
+ const params = {
+ parentId: 'parent1',
+ position: 'before' as const,
+ item: { id: 'item1', order: 4 },
+ anchorItem: { id: 'anchor', order: 3 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ // it will not be endless loop, because getNextItemMock will return null in the next call
+ await updateOrder(params);
+
+ // Verify shuffle is called due to the order being too close
+ expect(shuffleMock).toHaveBeenCalledOnce();
+ expect(updateMock).toHaveBeenCalledOnce(); // Ensure update is called after shuffle
+ });
+});
+
+describe('update multiple order', () => {
+ // Mock dependencies
+ const getNextItemMock = vi.fn();
+ const updateMock = vi.fn();
+ const shuffleMock = vi.fn();
+
+ afterEach(() => {
+ vi.clearAllMocks();
+ });
+
+ it('correctly handles reordering before the anchor item', async () => {
+ // Setup for case 1
+ getNextItemMock.mockResolvedValueOnce({ id: '2', order: 2 });
+ const params = {
+ parentId: 'parent1',
+ position: 'before' as const,
+ itemLength: 3,
+ anchorItem: { id: 'anchor', order: 3 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ await updateMultipleOrders(params);
+
+ // Verify getNextItem was called correctly
+ expect(getNextItemMock).toHaveBeenCalledWith({ lt: 3 }, 'desc');
+ // Verify update was called with expected arguments
+ expect(updateMock).toHaveBeenCalledWith([2.25, 2.5, 2.75]);
+ // Verify shuffle was not called
+ expect(shuffleMock).not.toHaveBeenCalled();
+ });
+
+ it('correctly handles reordering after the anchor item', async () => {
+ // Setup for case 2
+ getNextItemMock.mockResolvedValueOnce({ id: '4', order: 4 });
+ const params = {
+ parentId: 'parent1',
+ position: 'after' as const,
+ itemLength: 3,
+ anchorItem: { id: 'anchor', order: 3 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ await updateMultipleOrders(params);
+
+ // Verify getNextItem was called correctly
+ expect(getNextItemMock).toHaveBeenCalledWith({ gt: 3 }, 'asc');
+ // Verify update was called with expected arguments
+ expect(updateMock).toHaveBeenCalledWith([3.25, 3.5, 3.75]);
+ // Verify shuffle was not called
+ expect(shuffleMock).not.toHaveBeenCalled();
+ });
+
+ it('handles null from getNextItem correctly, indicating no next item', async () => {
+ // Setup: getNextItem returns null
+ getNextItemMock.mockResolvedValueOnce(null);
+ const params = {
+ parentId: 'parent1',
+ position: 'after' as const,
+ itemLength: 3,
+ anchorItem: { id: 'anchor', order: 7 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ await updateMultipleOrders(params);
+
+ // When there's no item after the anchor, we expect the item to move just after the anchor
+ expect(updateMock).toHaveBeenCalledWith([7.25, 7.5, 7.75]);
+ expect(shuffleMock).not.toHaveBeenCalled();
+ });
+
+ it('calls shuffle when the new order is too close to the anchor order', async () => {
+ // Setup: getNextItem returns a value that would cause a shuffle due to close orders
+ getNextItemMock.mockResolvedValueOnce({ id: 'anchor', order: 3 - Number.EPSILON });
+ const params = {
+ parentId: 'parent1',
+ position: 'before' as const,
+ itemLength: 1,
+ anchorItem: { id: 'anchor', order: 3 },
+ getNextItem: getNextItemMock,
+ update: updateMock,
+ shuffle: shuffleMock,
+ };
+
+ // it will not be endless loop, because getNextItemMock will return null in the next call
+ await updateMultipleOrders(params);
+
+ // Verify shuffle is called due to the order being too close
+ expect(shuffleMock).toHaveBeenCalledOnce();
+ expect(updateMock).toHaveBeenCalledOnce(); // Ensure update is called after shuffle
+ });
+});
diff --git a/apps/nestjs-backend/src/utils/update-order.ts b/apps/nestjs-backend/src/utils/update-order.ts
new file mode 100644
index 000000000..4f34b2ae5
--- /dev/null
+++ b/apps/nestjs-backend/src/utils/update-order.ts
@@ -0,0 +1,106 @@
+/**
+ * if we have [1,2,3,4,5]
+ * --------------------------------
+ * case 1:
+ * anchorId = 3, position = 'before', order = 2
+ * pick the order < 3, we have [1, 2]
+ * orderBy desc, we have [2, 1]
+ * pick the first one, we have 2
+ * --------------------------------
+ * case 2:
+ * anchorId = 3, position = 'after', order = 2
+ * pick the order > 3, we have [4, 5]
+ * orderBy asc, we have [4, 5]
+ * pick the first one, we have 4
+ */
+export async function updateOrder(params: {
+ parentId: string;
+ position: 'before' | 'after';
+ item: { id: string; order: number };
+ anchorItem: { id: string; order: number };
+ getNextItem: (
+ whereOrder: { lt?: number; gt?: number },
+ align: 'desc' | 'asc'
+ ) => Promise<{ id: string; order: number } | null>;
+ update: (
+ parentId: string,
+ id: string,
+ data: { newOrder: number; oldOrder: number }
+ ) => Promise;
+ shuffle: (parentId: string) => Promise;
+}) {
+ const { parentId, position, item, anchorItem, getNextItem, update, shuffle } = params;
+ const nextView = await getNextItem(
+ { [position === 'before' ? 'lt' : 'gt']: anchorItem.order },
+ position === 'before' ? 'desc' : 'asc'
+ );
+
+ const order = nextView
+ ? (nextView.order + anchorItem.order) / 2
+ : anchorItem.order + (position === 'before' ? -1 : 1);
+
+ const { id, order: oldOrder } = item;
+
+ if (Math.abs(order - anchorItem.order) < Number.EPSILON * 2) {
+ await shuffle(parentId);
+ // recursive call
+ await updateOrder(params);
+ return;
+ }
+ await update(parentId, id, { newOrder: order, oldOrder });
+}
+
+/**
+ * if we have [1,2,3,4,5]
+ * --------------------------------
+ * case 1:
+ * anchor = 3, position = 'before', item.length = 2
+ * pick the order < 3, we have [1, 2]
+ * orderBy desc, we have [2, 1]
+ * pick the first one, we have 2 for the next order
+ * gap = ABS((anchor - next) / (item.length + 1)) = (3 - 2) / (2 + 1) = 0.333
+ * new item orders = next + gap * item.index = [2.333, 2.667]
+ * --------------------------------
+ * case 2:
+ * anchor = 3, position = 'after', item.length = 2
+ * pick the order > 3, we have [4, 5]
+ * orderBy asc, we have [4, 5]
+ * pick the first one, we have 4 for the next order
+ * gap = ABS((anchor - next) / (item.length + 1)) = ABS((3 - 4) / (2 + 1)) = 0.333
+ * new item orders = anchor + gap * item.index = [3.333, 3.667]
+ */
+export async function updateMultipleOrders(params: {
+ parentId: string;
+ position: 'before' | 'after';
+ itemLength: number;
+ anchorItem: { id: string; order: number };
+ getNextItem: (
+ whereOrder: { lt?: number; gt?: number },
+ align: 'desc' | 'asc'
+ ) => Promise<{ id: string; order: number } | null>;
+ update: (indexes: number[]) => Promise;
+ shuffle: (parentId: string) => Promise;
+}) {
+ const { parentId, position, itemLength, anchorItem, getNextItem, update, shuffle } = params;
+ const nextView = await getNextItem(
+ { [position === 'before' ? 'lt' : 'gt']: anchorItem.order },
+ position === 'before' ? 'desc' : 'asc'
+ );
+
+ const nextOrder = nextView ? nextView.order : anchorItem.order + (position === 'before' ? -1 : 1);
+ const gap = Math.abs((anchorItem.order - nextOrder) / (itemLength + 1));
+
+ if (gap < Number.EPSILON * 2) {
+ await shuffle(parentId);
+ // recursive call
+ await updateMultipleOrders(params);
+ return;
+ }
+
+ const orderBase = position === 'before' ? nextOrder : anchorItem.order;
+ const newItems = Array.from({ length: itemLength }).map(
+ (_, index) => orderBase + gap * (index + 1)
+ );
+
+ await update(newItems);
+}
diff --git a/apps/nestjs-backend/src/utils/view-order-field-name.ts b/apps/nestjs-backend/src/utils/view-order-field-name.ts
deleted file mode 100644
index f0203063c..000000000
--- a/apps/nestjs-backend/src/utils/view-order-field-name.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { ROW_ORDER_FIELD_PREFIX } from '../features/view/constant';
-
-export function getViewOrderFieldName(viewId?: string) {
- return viewId ? `${ROW_ORDER_FIELD_PREFIX}_${viewId}` : '__auto_number';
-}
diff --git a/apps/nestjs-backend/test/credit.e2e-spec.ts b/apps/nestjs-backend/test/credit.e2e-spec.ts
new file mode 100644
index 000000000..a6f5d1829
--- /dev/null
+++ b/apps/nestjs-backend/test/credit.e2e-spec.ts
@@ -0,0 +1,91 @@
+/* eslint-disable sonarjs/no-duplicate-string */
+import type { INestApplication } from '@nestjs/common';
+import type { ITableFullVo } from '@teable/core';
+import { FieldKeyType } from '@teable/core';
+import { PrismaService } from '@teable/db-main-prisma';
+import { createBase, createSpace, deleteBase, deleteSpace } from '@teable/openapi';
+import { createRecords, createTable, deleteTable, initApp } from './utils/init-app';
+
+describe('Credit limit (e2e)', () => {
+ let app: INestApplication;
+ let prisma: PrismaService;
+ beforeAll(async () => {
+ process.env.MAX_FREE_ROW_LIMIT = '10';
+ const appCtx = await initApp();
+ app = appCtx.app;
+ prisma = app.get(PrismaService);
+ });
+
+ afterAll(async () => {
+ process.env.MAX_FREE_ROW_LIMIT = undefined;
+ await app.close();
+ });
+
+ describe('max row limit', () => {
+ let table: ITableFullVo;
+ let spaceId: string;
+ let baseId: string;
+ beforeEach(async () => {
+ const space = await createSpace({
+ name: 'space1',
+ });
+ spaceId = space.data.id;
+ const base = await createBase({
+ spaceId,
+ });
+ baseId = base.data.id;
+ table = await createTable(baseId, { name: 'table1' });
+ });
+
+ afterEach(async () => {
+ await deleteTable(baseId, table.id);
+ await deleteBase(baseId);
+ await deleteSpace(spaceId);
+ });
+
+ it('should create a record', async () => {
+ // create 6 record succeed, 3(default) + 7 = 10
+ await createRecords(table.id, {
+ fieldKeyType: FieldKeyType.Name,
+ records: Array.from({ length: 7 }).map(() => ({ fields: {} })),
+ });
+
+ // limit exceed
+ await createRecords(
+ table.id,
+ {
+ fieldKeyType: FieldKeyType.Name,
+ records: [{ fields: {} }],
+ },
+ 400
+ );
+ });
+
+ it('should create a record with credit', async () => {
+ prisma.space.update({
+ where: {
+ id: spaceId,
+ },
+ data: {
+ credit: 11,
+ },
+ });
+
+ // create 6 record succeed, 3(default) + 8 = 11
+ await createRecords(table.id, {
+ fieldKeyType: FieldKeyType.Name,
+ records: Array.from({ length: 8 }).map(() => ({ fields: {} })),
+ });
+
+ // limit exceed
+ await createRecords(
+ table.id,
+ {
+ fieldKeyType: FieldKeyType.Name,
+ records: [{ fields: {} }],
+ },
+ 400
+ );
+ });
+ });
+});
diff --git a/apps/nestjs-backend/test/db-connection.e2e-spec.ts b/apps/nestjs-backend/test/db-connection.e2e-spec.ts
index 1206ed7e1..f54fdad2c 100644
--- a/apps/nestjs-backend/test/db-connection.e2e-spec.ts
+++ b/apps/nestjs-backend/test/db-connection.e2e-spec.ts
@@ -22,7 +22,7 @@ describe.skip('OpenAPI Db Connection (e2e)', () => {
});
it('should manage a db connection', async () => {
- console.log('PUBLIC_DATABASE_ADDRESS', process.env.PUBLIC_DATABASE_ADDRESS);
+ console.log('PUBLIC_DATABASE_PROXY', process.env.PUBLIC_DATABASE_PROXY);
if (globalThis.testConfig.driver !== DriverClient.Pg) {
expect(true).toBeTruthy();
diff --git a/apps/nestjs-backend/test/field-converting.e2e-spec.ts b/apps/nestjs-backend/test/field-converting.e2e-spec.ts
index 50ce1d1b9..12a12c555 100644
--- a/apps/nestjs-backend/test/field-converting.e2e-spec.ts
+++ b/apps/nestjs-backend/test/field-converting.e2e-spec.ts
@@ -223,8 +223,26 @@ describe('OpenAPI Freely perform column transformations (e2e)', () => {
},
};
- const { newField } = await expectUpdate(table1, linkFieldRo, linkFieldRo2);
+ const linkField = await createField(table1.id, linkFieldRo);
+ await updateRecordByApi(table1.id, table1.records[0].id, linkField.id, {
+ id: table2.records[0].id,
+ });
+
+ const newField = await convertField(table1.id, linkField.id, linkFieldRo2);
+
expect(newField.name).toEqual('other name');
+
+ const { name: _, ...newFieldOthers } = newField;
+ const { name: _0, ...oldFieldOthers } = linkField;
+
+ expect(newFieldOthers).toEqual(oldFieldOthers);
+
+ const table2Records = await getRecords(table2.id, { fieldKeyType: FieldKeyType.Id });
+ expect(
+ table2Records.records[0].fields[
+ (linkField.options as ILinkFieldOptions).symmetricFieldId as string
+ ]
+ ).toMatchObject([{ id: table1.records[0].id }]);
});
it('should modify rollup field name', async () => {
diff --git a/apps/nestjs-backend/test/order-update.e2e-spec.ts b/apps/nestjs-backend/test/order-update.e2e-spec.ts
new file mode 100644
index 000000000..2e82b518c
--- /dev/null
+++ b/apps/nestjs-backend/test/order-update.e2e-spec.ts
@@ -0,0 +1,277 @@
+import type { INestApplication } from '@nestjs/common';
+import type { ITableFullVo } from '@teable/core';
+import { ViewType } from '@teable/core';
+import type { ICreateBaseVo, ICreateSpaceVo } from '@teable/openapi';
+import {
+ createBase,
+ createSpace,
+ createTable,
+ deleteBase,
+ deleteSpace,
+ getBaseList,
+ getTableList,
+ updateBaseOrder,
+ updateRecordOrders,
+ updateTableOrder,
+ updateViewOrder,
+} from '@teable/openapi';
+import {
+ initApp,
+ createView,
+ deleteTable,
+ getViews,
+ getRecords,
+ createRecords,
+} from './utils/init-app';
+
+describe('order update', () => {
+ let app: INestApplication;
+ beforeAll(async () => {
+ const appCtx = await initApp();
+ app = appCtx.app;
+ });
+
+ afterAll(async () => {
+ await app.close();
+ });
+
+ describe('record', () => {
+ const baseId = globalThis.testConfig.baseId;
+ let table: ITableFullVo;
+ beforeEach(async () => {
+ table = (await createTable(baseId, { name: 'table1' })).data;
+ });
+
+ afterEach(async () => {
+ await deleteTable(baseId, table.id);
+ });
+
+ it('should update record order', async () => {
+ const viewId = table.views[0].id;
+ const record1 = { id: table.records[0].id };
+ const record2 = { id: table.records[1].id };
+ const record3 = { id: table.records[2].id };
+
+ await updateRecordOrders(table.id, viewId, {
+ anchorId: record2.id,
+ position: 'before',
+ recordIds: [record3.id],
+ });
+ const data1 = await getRecords(table.id, { viewId });
+ expect(data1.records).toMatchObject([record1, record3, record2]);
+
+ await updateRecordOrders(table.id, viewId, {
+ anchorId: record1.id,
+ position: 'before',
+ recordIds: [record3.id, record2.id],
+ });
+ const data2 = await getRecords(table.id, { viewId });
+ expect(data2.records).toMatchObject([record3, record2, record1]);
+
+ await updateRecordOrders(table.id, viewId, {
+ anchorId: record1.id,
+ position: 'after',
+ recordIds: [record3.id, record2.id],
+ });
+ const data3 = await getRecords(table.id, { viewId });
+ expect(data3.records).toMatchObject([record1, record3, record2]);
+
+ await updateRecordOrders(table.id, viewId, {
+ anchorId: record3.id,
+ position: 'after',
+ recordIds: [record2.id, record3.id],
+ });
+ const data4 = await getRecords(table.id, { viewId });
+ expect(data4.records).toMatchObject([record1, record2, record3]);
+
+ const result = await createRecords(table.id, {
+ records: [{ fields: {} }],
+ order: {
+ viewId,
+ anchorId: record1.id,
+ position: 'before',
+ },
+ });
+ const data5 = await getRecords(table.id, { viewId });
+ expect(data5.records).toMatchObject([
+ { id: result.records[0].id },
+ record1,
+ record2,
+ record3,
+ ]);
+ });
+
+ it('should create record with order', async () => {
+ const viewId = table.views[0].id;
+ const record1 = { id: table.records[0].id };
+ const record2 = { id: table.records[1].id };
+ const record3 = { id: table.records[2].id };
+
+ const result = await createRecords(table.id, {
+ records: [{ fields: {} }],
+ order: {
+ viewId,
+ anchorId: record1.id,
+ position: 'before',
+ },
+ });
+ const data1 = await getRecords(table.id, { viewId });
+ expect(data1.records).toMatchObject([
+ { id: result.records[0].id },
+ record1,
+ record2,
+ record3,
+ ]);
+
+ const result2 = await createRecords(table.id, {
+ records: [{ fields: {} }],
+ order: {
+ viewId,
+ anchorId: record3.id,
+ position: 'after',
+ },
+ });
+ const data2 = await getRecords(table.id, { viewId });
+ expect(data2.records).toMatchObject([
+ { id: result.records[0].id },
+ record1,
+ record2,
+ record3,
+ { id: result2.records[0].id },
+ ]);
+ });
+ });
+
+ describe('view', () => {
+ const baseId = globalThis.testConfig.baseId;
+ let table: ITableFullVo;
+ beforeEach(async () => {
+ table = (await createTable(baseId, { name: 'table1' })).data;
+ });
+
+ afterEach(async () => {
+ await deleteTable(baseId, table.id);
+ });
+
+ it('should update view order', async () => {
+ const view1 = { id: table.views[0].id };
+
+ const view2 = {
+ id: (
+ await createView(table.id, {
+ name: 'view',
+ type: ViewType.Grid,
+ })
+ ).id,
+ };
+
+ const view3 = {
+ id: (
+ await createView(table.id, {
+ name: 'view',
+ type: ViewType.Grid,
+ })
+ ).id,
+ };
+
+ await updateViewOrder(table.id, view3.id, { anchorId: view2.id, position: 'before' });
+ const views = await getViews(table.id);
+ expect(views).toMatchObject([view1, view3, view2]);
+
+ await updateViewOrder(table.id, view3.id, { anchorId: view1.id, position: 'before' });
+ const views2 = await getViews(table.id);
+ expect(views2).toMatchObject([view3, view1, view2]);
+
+ await updateViewOrder(table.id, view3.id, { anchorId: view1.id, position: 'after' });
+ const views3 = await getViews(table.id);
+ expect(views3).toMatchObject([view1, view3, view2]);
+
+ await updateViewOrder(table.id, view3.id, { anchorId: view2.id, position: 'after' });
+ const views4 = await getViews(table.id);
+ expect(views4).toMatchObject([view1, view2, view3]);
+ });
+ });
+
+ describe('table', () => {
+ const spaceId = globalThis.testConfig.spaceId;
+ let base: ICreateBaseVo;
+ beforeEach(async () => {
+ base = (await createBase({ spaceId, name: 'base1' })).data;
+ });
+
+ afterEach(async () => {
+ await deleteBase(base.id);
+ });
+
+ it('should update table order', async () => {
+ const table1 = {
+ id: (await createTable(base.id)).data.id,
+ };
+
+ const table2 = {
+ id: (await createTable(base.id)).data.id,
+ };
+
+ const table3 = {
+ id: (await createTable(base.id)).data.id,
+ };
+
+ await updateTableOrder(base.id, table3.id, { anchorId: table2.id, position: 'before' });
+ const tables = (await getTableList(base.id)).data;
+ expect(tables).toMatchObject([table1, table3, table2]);
+
+ await updateTableOrder(base.id, table3.id, { anchorId: table1.id, position: 'before' });
+ const tables2 = (await getTableList(base.id)).data;
+ expect(tables2).toMatchObject([table3, table1, table2]);
+
+ await updateTableOrder(base.id, table3.id, { anchorId: table1.id, position: 'after' });
+ const tables3 = (await getTableList(base.id)).data;
+ expect(tables3).toMatchObject([table1, table3, table2]);
+
+ await updateTableOrder(base.id, table3.id, { anchorId: table2.id, position: 'after' });
+ const tables4 = (await getTableList(base.id)).data;
+ expect(tables4).toMatchObject([table1, table2, table3]);
+ });
+ });
+
+ describe('base', () => {
+ let space: ICreateSpaceVo;
+ beforeEach(async () => {
+ space = (await createSpace({})).data;
+ });
+
+ afterEach(async () => {
+ await deleteSpace(space.id);
+ });
+
+ it('should update base order', async () => {
+ const base1 = {
+ id: (await createBase({ spaceId: space.id })).data.id,
+ };
+
+ const base2 = {
+ id: (await createBase({ spaceId: space.id })).data.id,
+ };
+
+ const base3 = {
+ id: (await createBase({ spaceId: space.id })).data.id,
+ };
+
+ await updateBaseOrder({ baseId: base3.id, anchorId: base2.id, position: 'before' });
+ const bases = (await getBaseList({ spaceId: space.id })).data;
+ expect(bases).toMatchObject([base1, base3, base2]);
+
+ await updateBaseOrder({ baseId: base3.id, anchorId: base1.id, position: 'before' });
+ const bases2 = (await getBaseList({ spaceId: space.id })).data;
+ expect(bases2).toMatchObject([base3, base1, base2]);
+
+ await updateBaseOrder({ baseId: base3.id, anchorId: base1.id, position: 'after' });
+ const bases3 = (await getBaseList({ spaceId: space.id })).data;
+ expect(bases3).toMatchObject([base1, base3, base2]);
+
+ await updateBaseOrder({ baseId: base3.id, anchorId: base2.id, position: 'after' });
+ const bases4 = (await getBaseList({ spaceId: space.id })).data;
+ expect(bases4).toMatchObject([base1, base2, base3]);
+ });
+ });
+});
diff --git a/apps/nestjs-backend/test/record.e2e-spec.ts b/apps/nestjs-backend/test/record.e2e-spec.ts
index e079f68f5..10dcccfde 100644
--- a/apps/nestjs-backend/test/record.e2e-spec.ts
+++ b/apps/nestjs-backend/test/record.e2e-spec.ts
@@ -13,7 +13,6 @@ import {
getField,
getRecord,
getRecords,
- getViews,
initApp,
updateRecord,
updateRecordByApi,
@@ -122,23 +121,6 @@ describe('OpenAPI RecordController (e2e)', () => {
expect(res2.records[0].fields[table.fields[0].id]).toEqual(value2);
});
- it('should create a record with order', async () => {
- const viewResponse = await getViews(table.id);
- const viewId = viewResponse[0].id;
- const res = await createRecords(table.id, {
- records: [
- {
- fields: {},
- recordOrder: {
- [viewId]: 0.6,
- },
- },
- ],
- });
-
- expect(res.records[0].recordOrder[viewId]).toEqual(0.6);
- });
-
it('should update record', async () => {
const record = await updateRecordByApi(
table.id,
diff --git a/apps/nestjs-backend/test/reference.e2e-spec.ts.bak b/apps/nestjs-backend/test/reference.e2e-spec.ts.bak
index 34ac3181d..1b3e70994 100644
--- a/apps/nestjs-backend/test/reference.e2e-spec.ts.bak
+++ b/apps/nestjs-backend/test/reference.e2e-spec.ts.bak
@@ -462,17 +462,14 @@ describe('Reference Service (e2e)', () => {
idC1: {
id: 'idC1',
fields: { fieldC: 'CX', manyToOneB: { title: 'C1, C2', id: 'idB1' } },
- recordOrder: {},
},
idC2: {
id: 'idC2',
fields: { fieldC: 'C2', manyToOneB: { title: 'C1, C2', id: 'idB1' } },
- recordOrder: {},
},
idC3: {
id: 'idC3',
fields: { fieldC: 'C3', manyToOneB: { title: 'C3', id: 'idB2' } },
- recordOrder: {},
},
idB1: {
id: 'idB1',
@@ -484,7 +481,6 @@ describe('Reference Service (e2e)', () => {
{ title: 'C2', id: 'idC2' },
],
},
- recordOrder: {},
},
idB2: {
id: 'idB2',
@@ -493,7 +489,6 @@ describe('Reference Service (e2e)', () => {
manyToOneA: { title: 'A1', id: 'idA1' },
oneToManyC: [{ title: 'C3', id: 'idC3' }],
},
- recordOrder: {},
},
idA1: {
id: 'idA1',
@@ -504,7 +499,6 @@ describe('Reference Service (e2e)', () => {
{ title: 'C3', id: 'idB2' },
],
},
- recordOrder: {},
},
};
// topoOrder Graph:
@@ -722,7 +716,7 @@ describe('Reference Service (e2e)', () => {
};
const recordMap = {
// use new value fieldA: 1 here
- idA1: { id: 'idA1', fields: { fieldA: 1, fieldB: null, fieldC: 'X' }, recordOrder: {} },
+ idA1: { id: 'idA1', fields: { fieldA: 1, fieldB: null, fieldC: 'X' } },
};
// topoOrder Graph:
// A.fieldA -> A.fieldB
diff --git a/apps/nestjs-backend/test/sort.e2e-spec.ts b/apps/nestjs-backend/test/sort.e2e-spec.ts
index a0e87992b..1ea98963e 100644
--- a/apps/nestjs-backend/test/sort.e2e-spec.ts
+++ b/apps/nestjs-backend/test/sort.e2e-spec.ts
@@ -2,7 +2,7 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { INestApplication } from '@nestjs/common';
import type { IFieldRo, IGetRecordsRo, ISortItem, ITableFullVo } from '@teable/core';
-import { FieldType, CellValueType, SortFunc } from '@teable/core';
+import { CellValueType, SortFunc, FieldType } from '@teable/core';
import { updateViewSort as apiSetViewSort } from '@teable/openapi';
import { isEmpty, orderBy } from 'lodash';
import type { SingleSelectOptionsDto } from '../src/features/field/model/field-dto/single-select-field.dto';
@@ -202,6 +202,33 @@ describe('OpenAPI Sort (e2e) Base CellValueType', () => {
expect(ascOriginRecords).toEqual(ascManualSortRecords);
expect(descOriginRecords).toEqual(descManualSortRecords);
});
+
+ test('view sort property should be merged after by interface parameter orderBy', async () => {
+ const { id: subTableId, fields: fields2, defaultViewId } = table;
+ const field = fields2.find(
+ (field) => field.type === FieldType.Number
+ ) as ITableFullVo['fields'][number];
+ const { id: fieldId } = field;
+
+ const booleanField = fields2.find((field) => field.type === FieldType.Checkbox);
+ const { id: booleanFieldId } = booleanField!;
+
+ const ascOrders: IGetRecordsRo['orderBy'] = [{ fieldId, order: SortFunc.Asc }];
+ const descOrders: IGetRecordsRo['orderBy'] = [
+ { fieldId: booleanFieldId, order: SortFunc.Desc },
+ ];
+ await setRecordsOrder(subTableId, defaultViewId!, ascOrders);
+ const originRecords = await getSortRecords(subTableId, {
+ viewId: defaultViewId,
+ orderBy: descOrders,
+ });
+ const manualSortRecords = getRecordsByOrder(
+ originRecords,
+ [...descOrders, ...ascOrders],
+ fields2
+ );
+ expect(originRecords).toEqual(manualSortRecords);
+ });
});
describe('OpenAPI Sort (e2e) Multiple CellValueType', () => {
diff --git a/apps/nestjs-backend/test/table-import.e2e-spec.ts b/apps/nestjs-backend/test/table-import.e2e-spec.ts
index 226ce44fc..420d7194c 100644
--- a/apps/nestjs-backend/test/table-import.e2e-spec.ts
+++ b/apps/nestjs-backend/test/table-import.e2e-spec.ts
@@ -1,4 +1,6 @@
import fs from 'fs';
+import os from 'node:os';
+import path from 'path';
import type { INestApplication } from '@nestjs/common';
import { SUPPORTEDTYPE } from '@teable/core';
import {
@@ -9,17 +11,103 @@ import {
importTableFromFile as apiImportTableFromFile,
getTableById as apiGetTableById,
} from '@teable/openapi';
+import * as XLSX from 'xlsx';
+import { CsvImporter } from '../src/features/import/open-api/import.class';
import { initApp, deleteTable } from './utils/init-app';
-let app: INestApplication;
-const baseId = globalThis.testConfig.baseId;
-const csvTmpPath = 'test.csv';
-const textTmpPath = 'test.txt';
+enum TestFileFormat {
+ 'CSV' = 'csv',
+ 'TSV' = 'tsv',
+ 'TXT' = 'txt',
+ 'XLSX' = 'xlsx',
+}
+
+const testFileFormats = [
+ TestFileFormat.CSV,
+ TestFileFormat.TSV,
+ TestFileFormat.TXT,
+ TestFileFormat.XLSX,
+];
+
+interface ITestFile {
+ [key: string]: {
+ path: string;
+ url: string;
+ };
+}
const data = `field_1,field_2,field_3,field_4,field_5,field_6
1,string_1,true,2022-11-10 16:00:00,,"long
text"
2,string_2,false,2022-11-11 16:00:00,,`;
+const tsvData = `field_1 field_2 field_3 field_4 field_5 field_6
+1 string_1 true 2022-11-10 16:00:00 "long\ntext"
+2 string_2 false 2022-11-11 16:00:00 `;
+const defaultTestSheetKey = 'Sheet1';
+const workbook = XLSX.utils.book_new();
+
+const worksheet = XLSX.utils.aoa_to_sheet([
+ ['field_1', 'field_2', 'field_3', 'field_4', 'field_5', 'field_6'],
+ [1, 'string_1', true, '2022-11-10 16:00:00', '', `long\ntext`],
+ [2, 'string_2', false, '2022-11-11 16:00:00', '', ''],
+]);
+
+XLSX.utils.book_append_sheet(workbook, worksheet, defaultTestSheetKey);
+
+let app: INestApplication;
+let testFiles: ITestFile = {};
+const baseId = globalThis.testConfig.baseId;
+const genTestFiles = async () => {
+ const result: ITestFile = {};
+ const fileDataMap = {
+ [TestFileFormat.CSV]: data,
+ [TestFileFormat.TSV]: tsvData,
+ [TestFileFormat.TXT]: data,
+ [TestFileFormat.XLSX]: await XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' }),
+ };
+ const contentTypeMap = {
+ [TestFileFormat.CSV]: 'text/csv',
+ [TestFileFormat.TSV]: 'text/tab-separated-values',
+ [TestFileFormat.TXT]: 'text/plain',
+ [TestFileFormat.XLSX]: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+ };
+ const tmpDir = os.tmpdir();
+ for (let i = 0; i < testFileFormats.length; i++) {
+ const format = testFileFormats[i];
+ const tmpPath = path.resolve(path.join(tmpDir, `test.${format}`));
+ const data = fileDataMap[format];
+ const contentType = contentTypeMap[format];
+
+ fs.writeFileSync(tmpPath, data);
+
+ const file = fs.readFileSync(tmpPath);
+ const stats = fs.statSync(tmpPath);
+
+ const { token, requestHeaders } = (
+ await apiGetSignature(
+ {
+ type: 1,
+ contentLength: stats.size,
+ contentType: contentType,
+ },
+ undefined
+ )
+ ).data;
+
+ await apiUploadFile(token, file, requestHeaders);
+
+ const {
+ data: { presignedUrl },
+ } = await apiNotify(token);
+
+ result[format] = {
+ path: tmpPath,
+ url: presignedUrl,
+ };
+ }
+ return result;
+};
+
const assertHeaders = [
{
type: 'number',
@@ -46,61 +134,20 @@ const assertHeaders = [
name: 'field_6',
},
];
-let csvUrl: string;
-let textUrl: string;
beforeAll(async () => {
const appCtx = await initApp();
app = appCtx.app;
- fs.writeFileSync(csvTmpPath, data);
- const fileData = fs.readFileSync(csvTmpPath);
- const fileStats = fs.statSync(csvTmpPath);
-
- fs.writeFileSync(textTmpPath, data);
- const textFileData = fs.readFileSync(textTmpPath);
- const textStats = fs.statSync(textTmpPath);
-
- const { token, requestHeaders } = (
- await apiGetSignature(
- {
- type: 1,
- contentLength: fileStats.size,
- contentType: 'text/csv',
- },
- undefined
- )
- ).data;
-
- const { token: txtToken, requestHeaders: txtRequestHeaders } = (
- await apiGetSignature(
- {
- type: 1,
- contentLength: textStats.size,
- contentType: 'text/plain',
- },
- undefined
- )
- ).data;
-
- await apiUploadFile(token, fileData, requestHeaders);
-
- await apiUploadFile(txtToken, textFileData, txtRequestHeaders);
-
- const res = await apiNotify(token);
- const txtRes = await apiNotify(txtToken);
- csvUrl = res.data.presignedUrl;
- textUrl = txtRes.data.presignedUrl;
+ testFiles = await genTestFiles();
});
afterAll(async () => {
await app.close();
- fs.unlink(csvTmpPath, (err) => {
- if (err) throw err;
- console.log('delete csv tmp file success!');
- });
- fs.unlink(textTmpPath, (err) => {
- if (err) throw err;
- console.log('delete csv tmp file success!');
+ testFileFormats.forEach((type) => {
+ fs.unlink(testFiles[type].path, (err) => {
+ if (err) throw err;
+ console.log(`delete ${type} test file success!`);
+ });
});
});
@@ -109,17 +156,17 @@ describe('/import/analyze OpenAPI ImportController (e2e) Get a column info from
const {
data: { worksheets },
} = await apiAnalyzeFile({
- attachmentUrl: csvUrl,
+ attachmentUrl: testFiles[TestFileFormat.CSV].url,
fileType: SUPPORTEDTYPE.CSV,
});
- const calculatedColumnHeaders = worksheets[0].columns;
+ const calculatedColumnHeaders = worksheets[CsvImporter.DEFAULT_SHEETKEY].columns;
expect(calculatedColumnHeaders).toEqual(assertHeaders);
});
it(`should return 400, when url file type is not csv`, async () => {
await expect(
apiAnalyzeFile({
- attachmentUrl: textUrl,
+ attachmentUrl: testFiles[TestFileFormat.TXT].url,
fileType: SUPPORTEDTYPE.CSV,
})
).rejects.toMatchObject({
@@ -127,168 +174,157 @@ describe('/import/analyze OpenAPI ImportController (e2e) Get a column info from
code: 'validation_error',
});
});
+
+ it(`should return column header info from excel file`, async () => {
+ const {
+ data: { worksheets },
+ } = await apiAnalyzeFile({
+ attachmentUrl: testFiles[TestFileFormat.XLSX].url,
+ fileType: SUPPORTEDTYPE.EXCEL,
+ });
+ const calculatedColumnHeaders = worksheets['Sheet1'].columns;
+ expect(calculatedColumnHeaders).toEqual(assertHeaders);
+ });
});
describe('/import/{baseId} OpenAPI ImportController (e2e) (Post)', () => {
const tableIds: string[] = [];
+ const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
afterAll(async () => {
tableIds.forEach((tableId) => {
deleteTable(baseId, tableId);
});
});
-
- it(`should create a new Table from csv file`, async () => {
+ // TODO fix sqlite error, cancel tmp delay
+ it(`should create a new Table from csv/tsv/excel file`, async () => {
const {
data: { worksheets },
} = await apiAnalyzeFile({
- attachmentUrl: csvUrl,
+ attachmentUrl: testFiles[TestFileFormat.CSV].url,
fileType: SUPPORTEDTYPE.CSV,
});
- const calculatedColumnHeaders = worksheets[0].columns;
+ const calculatedColumnHeaders = worksheets[CsvImporter.DEFAULT_SHEETKEY].columns;
const table = await apiImportTableFromFile(baseId, {
- attachmentUrl: csvUrl,
+ attachmentUrl: testFiles[TestFileFormat.CSV].url,
fileType: SUPPORTEDTYPE.CSV,
- worksheets: [
- {
- name: 'sheet1',
+ worksheets: {
+ [CsvImporter.DEFAULT_SHEETKEY]: {
+ name: CsvImporter.DEFAULT_SHEETKEY,
columns: calculatedColumnHeaders.map((column, index) => ({
...column,
sourceColumnIndex: index,
})),
- options: {
- useFirstRowAsHeader: true,
- importData: true,
- },
+ useFirstRowAsHeader: true,
+ importData: true,
},
- ],
+ },
});
const { fields, id } = table.data[0];
+ tableIds.push(id);
const createdFields = fields.map((field) => ({
type: field.type,
name: field.name,
}));
- const {
- data: { records },
- } = await apiGetTableById(baseId, table.data[0].id, {
+ const res = await apiGetTableById(baseId, table.data[0].id, {
includeContent: true,
});
- tableIds.push(id);
- const filledRecords = records?.map((rec) => {
- const newRec = { ...rec.fields };
- newRec['field_4'] = +new Date(newRec['field_4'] as string);
- return { ...newRec };
- });
- const assertRecords = [
- {
- field_1: 1,
- field_2: 'string_1',
- field_3: true,
- field_4: +new Date(new Date('2022-11-10 16:00:00').toUTCString()),
- field_6: 'long\ntext',
- },
- {
- field_1: 2,
- field_2: 'string_2',
- field_4: +new Date(new Date('2022-11-11 16:00:00').toUTCString()),
- },
- ];
+
expect(createdFields).toEqual(assertHeaders);
- expect(records?.length).toBe(2);
- expect(filledRecords).toEqual(assertRecords);
- });
+ expect(res).toMatchObject({
+ status: 200,
+ statusText: 'OK',
+ });
+
+ await delay(1000);
- it(`should create a new Table from csv file only fields without data`, async () => {
const {
- data: { worksheets },
+ data: { worksheets: worksheets1 },
} = await apiAnalyzeFile({
- attachmentUrl: csvUrl,
- fileType: SUPPORTEDTYPE.CSV,
+ attachmentUrl: testFiles[TestFileFormat.XLSX].url,
+ fileType: SUPPORTEDTYPE.EXCEL,
});
- const calculatedColumnHeaders = worksheets[0].columns;
+ const calculatedColumnHeaders1 = worksheets1[defaultTestSheetKey].columns;
- const table = await apiImportTableFromFile(baseId, {
- attachmentUrl: csvUrl,
- fileType: SUPPORTEDTYPE.CSV,
- worksheets: [
- {
- name: 'sheet1',
- columns: calculatedColumnHeaders.map((column, index) => ({
+ const table1 = await apiImportTableFromFile(baseId, {
+ attachmentUrl: testFiles[TestFileFormat.XLSX].url,
+ fileType: SUPPORTEDTYPE.EXCEL,
+ worksheets: {
+ [defaultTestSheetKey]: {
+ name: defaultTestSheetKey,
+ columns: calculatedColumnHeaders1.map((column, index) => ({
...column,
sourceColumnIndex: index,
})),
- options: {
- useFirstRowAsHeader: true,
- importData: false,
- },
+ useFirstRowAsHeader: true,
+ importData: true,
},
- ],
+ },
});
- const { fields, id } = table.data[0];
+ const { fields: fields1, id: id1 } = table1.data[0];
+ tableIds.push(id1);
- const createdFields = fields.map((field) => ({
+ const createdFields1 = fields1.map((field) => ({
type: field.type,
name: field.name,
}));
- const {
- data: { records },
- } = await apiGetTableById(baseId, table.data[0].id, {
+ const res1 = await apiGetTableById(baseId, table1.data[0].id, {
includeContent: true,
});
- tableIds.push(id);
- expect(createdFields).toEqual(assertHeaders);
- expect(records?.length).toBe(0);
- });
+ expect(createdFields1).toEqual(assertHeaders);
+ expect(res1).toMatchObject({
+ status: 200,
+ statusText: 'OK',
+ });
+
+ await delay(1000);
- it(`should create a new Table from csv file useFirstRowAsHeader: false`, async () => {
const {
- data: { worksheets },
+ data: { worksheets: worksheet2 },
} = await apiAnalyzeFile({
- attachmentUrl: csvUrl,
+ attachmentUrl: testFiles[TestFileFormat.TSV].url,
fileType: SUPPORTEDTYPE.CSV,
});
+ const calculatedColumnHeaders2 = worksheet2[CsvImporter.DEFAULT_SHEETKEY].columns;
- const calculatedColumnHeaders = worksheets[0].columns;
-
- const table = await apiImportTableFromFile(baseId, {
- attachmentUrl: csvUrl,
+ const table2 = await apiImportTableFromFile(baseId, {
+ attachmentUrl: testFiles[TestFileFormat.TSV].url,
fileType: SUPPORTEDTYPE.CSV,
- worksheets: [
- {
- name: 'sheet1',
- columns: calculatedColumnHeaders.map((column, index) => ({
+ worksheets: {
+ [CsvImporter.DEFAULT_SHEETKEY]: {
+ name: defaultTestSheetKey,
+ columns: calculatedColumnHeaders2.map((column, index) => ({
...column,
sourceColumnIndex: index,
})),
- options: {
- useFirstRowAsHeader: false,
- importData: true,
- },
+ useFirstRowAsHeader: true,
+ importData: true,
},
- ],
+ },
});
- const { fields, id } = table.data[0];
+ const { fields: fields2, id: id2 } = table2.data[0];
+ tableIds.push(id2);
- const createdFields = fields.map((field) => ({
+ const createdFields2 = fields2.map((field) => ({
type: field.type,
name: field.name,
}));
- const {
- data: { records },
- } = await apiGetTableById(baseId, table.data[0].id, {
+ const res2 = await apiGetTableById(baseId, table2.data[0].id, {
includeContent: true,
});
- tableIds.push(id);
- expect(createdFields).toEqual(assertHeaders);
- expect(records?.length).toBe(3);
+ expect(createdFields2).toEqual(assertHeaders);
+ expect(res2).toMatchObject({
+ status: 200,
+ statusText: 'OK',
+ });
});
});
diff --git a/apps/nestjs-backend/test/table.e2e-spec.ts b/apps/nestjs-backend/test/table.e2e-spec.ts
index 458ade5b8..3eada72e3 100644
--- a/apps/nestjs-backend/test/table.e2e-spec.ts
+++ b/apps/nestjs-backend/test/table.e2e-spec.ts
@@ -8,7 +8,6 @@ import {
updateTableDescription,
updateTableIcon,
updateTableName,
- updateTableOrder,
deleteTable as apiDeleteTable,
} from '@teable/openapi';
import { DB_PROVIDER_SYMBOL } from '../src/db-provider/db.provider';
@@ -129,11 +128,13 @@ describe('OpenAPI TableController (e2e)', () => {
});
afterAll(async () => {
- await deleteTable(baseId, tableId);
-
await app.close();
});
+ afterEach(async () => {
+ await deleteTable(baseId, tableId);
+ });
+
it('/api/table/ (POST) with assertData data', async () => {
let eventCount = 0;
event.once(Events.TABLE_CREATE, async (payload: TableCreateEvent) => {
@@ -228,14 +229,12 @@ describe('OpenAPI TableController (e2e)', () => {
await updateTableName(baseId, tableId, { name: 'newTableName' });
await updateTableDescription(baseId, tableId, { description: 'newDescription' });
await updateTableIcon(baseId, tableId, { icon: '😀' });
- await updateTableOrder(baseId, tableId, { order: 1.11 });
const table = await getTable(baseId, tableId);
expect(table.name).toEqual('newTableName');
expect(table.description).toEqual('newDescription');
expect(table.icon).toEqual('😀');
- expect(table.order).toEqual(1.11);
});
it('should delete table and clean up link and lookup fields', async () => {
diff --git a/apps/nestjs-backend/test/utils/init-app.ts b/apps/nestjs-backend/test/utils/init-app.ts
index 80212eae7..cb50c686c 100644
--- a/apps/nestjs-backend/test/utils/init-app.ts
+++ b/apps/nestjs-backend/test/utils/init-app.ts
@@ -276,6 +276,7 @@ export async function createRecords(
): Promise {
try {
const res = await apiCreateRecords(tableId, {
+ ...recordsRo,
fieldKeyType: recordsRo.fieldKeyType ?? FieldKeyType.Id,
records: recordsRo.records,
typecast: recordsRo.typecast ?? false,
diff --git a/apps/nestjs-backend/test/utils/record-mock.ts b/apps/nestjs-backend/test/utils/record-mock.ts
index 68e925dc4..5f57c3325 100644
--- a/apps/nestjs-backend/test/utils/record-mock.ts
+++ b/apps/nestjs-backend/test/utils/record-mock.ts
@@ -1,5 +1,5 @@
import { faker } from '@faker-js/faker';
-import type { Field, View } from '@prisma/client';
+import type { Field } from '@prisma/client';
import { PrismaClient } from '@prisma/client';
import type { IRatingFieldOptions, ISelectFieldOptions } from '@teable/core';
import { parseDsn, IdPrefix, Colors, FieldType, generateRecordId } from '@teable/core';
@@ -84,15 +84,6 @@ async function generateFieldData(params: {
}, {});
}
-async function generateViewRowIndex(params: { views: View[]; rowCount: number; i: number }) {
- const { views, rowCount, i } = params;
-
- return views.reduce<{ [vieOrderKey: string]: number }>((pre, cur) => {
- pre[`__row_${cur.id}`] = Number(rowCount) + i;
- return pre;
- }, {});
-}
-
export async function seeding(tableId: string, mockDataNum: number) {
const databaseUrl = process.env.PRISMA_DATABASE_URL!;
console.log('database-url: ', databaseUrl);
@@ -132,20 +123,14 @@ export async function seeding(tableId: string, mockDataNum: number) {
});
console.log(`Table: ${tableName}, mockDataNum: ${mockDataNum}`);
- const views = await prisma.view.findMany({ where: { tableId } });
const knex = Knex({
client: driver,
});
- const [{ count: rowCount }] = await prisma.$queryRawUnsafe<{ count: number }[]>(
- knex(dbTableName).count({ count: '*' }).toQuery()
- );
-
console.time(`Table: ${tableName}, Ready Install Data`);
const data: { [dbFieldName: string]: unknown }[] = [];
for (let i = 0; i < mockDataNum; i++) {
const fieldData = await generateFieldData({ mockDataNum, fields, selectOptions });
- const viewRowIndex = await generateViewRowIndex({ views, rowCount, i: i + 1 });
data.push({
__id: generateRecordId(),
@@ -153,7 +138,6 @@ export async function seeding(tableId: string, mockDataNum: number) {
__created_by: 'admin',
__last_modified_by: 'admin',
__version: 1,
- ...viewRowIndex,
...fieldData,
});
}
diff --git a/apps/nestjs-backend/test/view-order.e2e-spec.ts b/apps/nestjs-backend/test/view-order.e2e-spec.ts
deleted file mode 100644
index 4ee1908e2..000000000
--- a/apps/nestjs-backend/test/view-order.e2e-spec.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-import type { INestApplication } from '@nestjs/common';
-import { ViewType } from '@teable/core';
-import { updateViewOrder as apiSetViewOrder } from '@teable/openapi';
-import { initApp, createTable, deleteTable, getViews } from './utils/init-app';
-
-let app: INestApplication;
-const baseId = globalThis.testConfig.baseId;
-
-beforeAll(async () => {
- const appCtx = await initApp();
- app = appCtx.app;
-});
-
-afterAll(async () => {
- await app.close();
-});
-
-describe('/table/{tableId}/view/{viewId}/order OpenAPI ViewController (e2e) order (Patch) update grid view order', () => {
- let tableId: string;
- let viewId: string;
- let viewIds: string[];
- beforeAll(async () => {
- const result = await createTable(baseId, {
- name: 'Table',
- views: [{ type: ViewType.Grid }, { type: ViewType.Form }],
- });
- tableId = result.id;
- viewId = result.defaultViewId!;
- viewIds = result.views.map((view) => view.id);
- });
- afterAll(async () => {
- await deleteTable(baseId, tableId);
- });
-
- it(`should update view order`, async () => {
- const view2Id = viewIds[1];
-
- const assertViews = [view2Id, viewId];
- await apiSetViewOrder(tableId, view2Id, { order: -1 });
-
- const result = await getViews(tableId);
-
- const views = result.map(({ id }) => id);
-
- expect(result[0].order).toBe(-1);
- expect(assertViews).toEqual(views);
- });
-
- it(`should return 400, when update duplicate order`, async () => {
- const view2Id = viewIds[1];
- await expect(apiSetViewOrder(tableId, view2Id, { order: 0 })).rejects.toMatchObject({
- status: 400,
- });
- });
-});
diff --git a/apps/nestjs-backend/vitest-e2e.config.ts b/apps/nestjs-backend/vitest-e2e.config.ts
index 6b07792c7..e0f1f98f8 100644
--- a/apps/nestjs-backend/vitest-e2e.config.ts
+++ b/apps/nestjs-backend/vitest-e2e.config.ts
@@ -1,34 +1,25 @@
import swc from 'unplugin-swc';
-import { defineConfig } from 'vitest/config';
+import { configDefaults, defineConfig } from 'vitest/config';
const timeout = process.env.CI ? 30000 : 10000;
const testFiles = ['**/test/**/*.{e2e-test,e2e-spec}.{js,ts}'];
export default defineConfig({
plugins: [swc.vite({})],
+ cacheDir: '../../.cache/vitest/nestjs-backend/e2e',
test: {
globals: true,
environment: 'node',
setupFiles: './vitest-e2e.setup.ts',
testTimeout: timeout,
passWithNoTests: true,
- cache: {
- dir: '../../.cache/vitest/nestjs-backend/e2e',
- },
coverage: {
provider: 'v8',
- reporter: ['text', 'clover'],
- extension: ['js', 'ts'],
- all: true,
+ extension: ['.js', '.ts'],
},
logHeapUsage: true,
reporters: ['verbose'],
include: testFiles,
- exclude: [
- '**/node_modules/**',
- '**/dist/**',
- '**/.next/**',
- '**/.{idea,git,cache,output,temp}/**',
- ],
+ exclude: [...configDefaults.exclude, '**/.next/**'],
},
});
diff --git a/apps/nestjs-backend/vitest.config.ts b/apps/nestjs-backend/vitest.config.ts
index a10316d70..cc2d9c718 100644
--- a/apps/nestjs-backend/vitest.config.ts
+++ b/apps/nestjs-backend/vitest.config.ts
@@ -1,11 +1,12 @@
import swc from 'unplugin-swc';
import tsconfigPaths from 'vite-tsconfig-paths';
-import { defineConfig } from 'vitest/config';
+import { configDefaults, defineConfig } from 'vitest/config';
const testFiles = ['**/src/**/*.{test,spec}.{js,ts}'];
export default defineConfig({
plugins: [swc.vite({}), tsconfigPaths()],
+ cacheDir: '../../.cache/vitest/nestjs-backend/unit',
test: {
globals: true,
environment: 'node',
@@ -15,22 +16,16 @@ export default defineConfig({
singleThread: true,
},
},
- cache: {
- dir: '../../.cache/vitest/nestjs-backend/unit',
- },
coverage: {
provider: 'v8',
- reporter: ['text', 'clover'],
- extension: ['js', 'ts'],
- all: true,
+ extension: ['.js', '.ts'],
+ include: ['src/**/*'],
},
include: testFiles,
exclude: [
+ ...configDefaults.exclude,
'**/*.controller.spec.ts', // exclude controller test
- '**/node_modules/**',
- '**/dist/**',
'**/.next/**',
- '**/.{idea,git,cache,output,temp}/**',
],
},
});
diff --git a/apps/nextjs-app/.env b/apps/nextjs-app/.env
index 8c2ec661c..027ec572a 100644
--- a/apps/nextjs-app/.env
+++ b/apps/nextjs-app/.env
@@ -6,7 +6,6 @@ NEXT_BUILD_ENV_SOURCEMAPS=false
#NEXT_BUILD_ENV_LINT=false
#NEXT_BUILD_ENV_TYPECHECK=false
NEXT_BUILD_ENV_CSP=true
-NEXT_BUILD_ENV_IMAGES_ALL_REMOTE=false
NEXT_BUILD_ENV_SENTRY_ENABLED=true
NEXT_BUILD_ENV_SENTRY_UPLOAD_DRY_RUN=true
#NEXT_BUILD_ENV_SENTRY_DEBUG=false
@@ -15,6 +14,7 @@ NEXT_BUILD_ENV_SENTRY_UPLOAD_DRY_RUN=true
# ↓↓↓↓↓↓↓↓ frontend(nextjs) env ↓↓↓↓↓↓↓↓
NEXT_PUBLIC_SENTRY_DSN=
+NEXT_ENV_IMAGES_ALL_REMOTE=false
# ↓↓↓↓↓↓↓↓ backend(nestjs) env ↓↓↓↓↓↓↓↓
diff --git a/apps/nextjs-app/.env.development b/apps/nextjs-app/.env.development
index 4735f9d31..1fe259c04 100644
--- a/apps/nextjs-app/.env.development
+++ b/apps/nextjs-app/.env.development
@@ -1,13 +1,13 @@
#######################################################################################
# BUILD ENVIRONMENT - Consumed by next.config.mjs during build and development #
#######################################################################################
+NEXT_BUILD_ENV_CSP=false
NEXT_BUILD_ENV_SENTRY_ENABLED=false
NEXT_BUILD_ENV_SENTRY_UPLOAD_DRY_RUN=false
-NEXT_BUILD_ENV_IMAGES_ALL_REMOTE=true
#######################################################################################
# ↓↓↓↓↓↓↓↓ frontend(nextjs) env ↓↓↓↓↓↓↓↓
-
+NEXT_ENV_IMAGES_ALL_REMOTE=true
# ↓↓↓↓↓↓↓↓ backend(nestjs) env ↓↓↓↓↓↓↓↓
NEXTJS_DIR=../nextjs-app
@@ -25,7 +25,7 @@ STORAGE_PREFIX=http://127.0.0.1:3000
# DATABASE_URL
# @see https://www.prisma.io/docs/reference/database-reference/connection-urls#examples
PRISMA_DATABASE_URL=postgresql://teable:teable@127.0.0.1:5432/teable?schema=public&statement_cache_size=1
-PUBLIC_DATABASE_ADDRESS=${PRISMA_DATABASE_URL}
+PUBLIC_DATABASE_PROXY=127.0.0.1:5432
API_DOC_DISENABLED=false
API_DOC_ENABLED_SNIPPET=false
diff --git a/apps/nextjs-app/.env.example b/apps/nextjs-app/.env.example
index 387237537..30ffd101e 100644
--- a/apps/nextjs-app/.env.example
+++ b/apps/nextjs-app/.env.example
@@ -8,13 +8,13 @@ NEXT_BUILD_ENV_SOURCEMAPS=false
NEXT_BUILD_ENV_LINT=false
NEXT_BUILD_ENV_TYPECHECK=false
NEXT_BUILD_ENV_CSP=true
-NEXT_BUILD_ENV_IMAGES_ALL_REMOTE=true
NEXT_BUILD_ENV_SENTRY_ENABLED=false
NEXT_BUILD_ENV_SENTRY_UPLOAD_DRY_RUN=true
NEXT_BUILD_ENV_SENTRY_DEBUG=false
NEXT_BUILD_ENV_SENTRY_TRACING=false
# ↓↓↓↓↓↓↓↓ frontend(nextjs) env ↓↓↓↓↓↓↓↓
+NEXT_ENV_IMAGES_ALL_REMOTE=true
# set metrics id
MICROSOFT_CLARITY_ID=your-metrics-id
@@ -65,18 +65,31 @@ ESTIMATE_CALC_CEL_PER_MS=3
BIG_TRANSACTION_TIMEOUT=600000
# the maximum number of base db connections a user can make
DEFAULT_MAX_BASE_DB_CONNECTIONS=3
+# the maxium row limit when space has no credit, ingore it when you don't want to limit it
+MAX_FREE_ROW_LIMIT=100000
# your redis cache connection uri
BACKEND_CACHE_PROVIDER=redis
-BACKEND_CACHE_REDIS_URI=redis://:teable@127.0.0.1:6379/0
+BACKEND_CACHE_REDIS_URI=redis://default:teable@127.0.0.1:6379/0
# DATABASE_URL
# @see https://www.prisma.io/docs/reference/database-reference/connection-urls#examples
PRISMA_DATABASE_URL=file:../../db/main.db
# for external database access
-PUBLIC_DATABASE_ADDRESS=${PRISMA_DATABASE_URL}
+PUBLIC_DATABASE_PROXY=127.0.0.1:5432
API_DOC_DISENABLED=false
OPENAI_API_KEY=
OPENAI_API_ENDPOINT=
+
+# Social signin providers
+# github
+BACKEND_GITHUB_CLIENT_ID=github_client_id
+BACKEND_GITHUB_CLIENT_SECRET=github_client_secret
+# google
+BACKEND_GOOGLE_CLIENT_ID=google_client_id
+BACKEND_GOOGLE_CLIENT_SECRET=google_client_secret
+BACKEND_GOOGLE_CALLBACK_URL=https://app.teable.io/api/auth/google/callback
+# separated by ','
+SOCIAL_AUTH_PROVIDERS=github,google
diff --git a/apps/nextjs-app/.env.test b/apps/nextjs-app/.env.test
index 1d0bd8c4d..2e900b7b8 100644
--- a/apps/nextjs-app/.env.test
+++ b/apps/nextjs-app/.env.test
@@ -3,7 +3,7 @@
# ↓↓↓↓↓↓↓↓ backend(nestjs) env ↓↓↓↓↓↓↓↓
NEXTJS_DIR=../nextjs-app
-TEST_LOG_LEVEL=log,error
+TEST_LOG_LEVEL=error
PORT=3000
SOCKET_PORT=3001
@@ -17,7 +17,7 @@ STORAGE_PREFIX=http://127.0.0.1:3000
# DATABASE_URL
# @see https://www.prisma.io/docs/reference/database-reference/connection-urls#examples
PRISMA_DATABASE_URL=postgresql://teable:teable@127.0.0.1:5432/teable?schema=public&statement_cache_size=1
-PUBLIC_DATABASE_ADDRESS=${PRISMA_DATABASE_URL}
+PUBLIC_DATABASE_PROXY=127.0.0.1:5432
BACKEND_CACHE_PROVIDER=memory
API_DOC_DISENABLED=false
diff --git a/apps/nextjs-app/README.md b/apps/nextjs-app/README.md
index 2664644cd..611d1604e 100644
--- a/apps/nextjs-app/README.md
+++ b/apps/nextjs-app/README.md
@@ -1,133 +1,5 @@
# The web-app
-
-
-
-
-
+You don't need start this app when developing locally, it's started by the `nestjs-backend`.
-## Intro
-
-Basic demo nextjs nextjs-app, part of the [teable](https://github.com/teableio/teable).
-
-- Home: [Demo/Vercel](https://monorepo-nextjs-app.vercel.app)
-- SSR-I18n: [Demo/Vercel english](https://monorepo-nextjs-app.vercel.app/en/home) | [Demo/vercel french](https://monorepo-nextjs-app.vercel.app/fr/home)
-- API: [Demo rest/Vercel](https://monorepo-nextjs-app.vercel.app/api/rest/post/1)
-- [Changelog](https://github.com/teableio/teable/blob/main/apps/nextjs-app/CHANGELOG.md)
-
-## Quick start
-
-> For rest/api database access be sure to start `docker-compose up main-db`,
-> see detailed instructions (seeding, docker, supabase...) in the [@teable/db-main-prisma README](https://github.com/teableio/teable/blob/main/packages/db-main-prisma/README.md).
-
-```bash
-$ yarn install
-$ cd apps/nextjs-app
-$ yarn dev
-```
-
-### Features
-
-> Some common features that have been enabled to widen monorepo testing scenarios.
-
-- [x] Api routes: some api routes for rest.
-- [x] I18n: based on [next-i18next](https://github.com/isaachinman/next-i18next)
-
-- [x] Styling: [Tailwind v3](https://tailwindcss.com/) with JIT mode enabled and common plugins.
-- [x] Security: [next-secure-headers](https://github.com/jagaapple/next-secure-headers) with basic defaults.
-- [x] Seo: [next-seo](https://github.com/garmeeh/next-seo)
-- [x] Tests: [jest](https://jestjs.io/) + [ts-jest](https://github.com/kulshekhar/ts-jest) + [@testing-library/react](https://testing-library.com/)
-- [x] E2E: [Playwright](https://playwright.dev/)
-
-### Monorepo deps
-
-This app relies on packages in the monorepo, see detailed instructions in [README.md](https://github.com/teableio/teable)
-
-```json5
-{
- dependencies: {
- "@teable/sdk": "workspace:*",
- "@teable/db-main-prisma": "workspace:*",
- "@teable/ui-lib": "workspace:*",
- },
-}
-```
-
-And their counterparts in [tsconfig.json](./tsconfig.json)
-
-```json5
-{
- "compilerOptions": {
- "baseUrl": "./src",
- "paths": {
- "@teable/ui-lib/*": ["../../../packages/ui-lib/src/*"],
- "@teable/ui-lib": ["../../../packages/ui-lib/src/index"],
- "@teable/sdk/*": ["../../../packages/sdk/src/*"],
- "@teable/sdk": ["../../../packages/sdk/src/index"],
- "@teable/db-main-prisma/*": ["../../../packages/db-main-prisma/src/*"],
- "@teable/db-main-prisma": ["../../../packages/db-main-prisma/src/index"],
- },
- },
-}
-```
-
-## API routes
-
-### Rest api
-
-Try this route http://localhost:3000/api/rest/poem
-
-### Graphql (sdl)
-
-In development just open http://localhost:3000/api/graphql-sdl to have the graphiql console.
-
-Try
-
-```gql
-query {
- allPoems {
- id
- title
- }
-}
-```
-
-## Some tips
-
-### I18N & typings
-
-Translations are handled by [next-i18next](https://github.com/isaachinman/next-i18next).
-See the [next-i18next.config.js](./next-i18next.config.js).
-The keys autocompletion and typechecks are enabled in [./src/typings/react-i18next.d.ts](./src/typings/react-i18next.d.ts).
-
-## Structure
-
-```
-.
-├── apps
-│ └── nextjs-app
-│ ├── public/
-│ │ └── locales/
-│ ├── src/
-│ │ ├── backend/* (backend code)
-│ │ ├── components/*
-│ │ ├── features/* (regrouped by context)
-│ │ └── pages/api (api routes)
-│ ├── .env
-│ ├── .env.development
-│ ├── (.env.local)*
-│ ├── next.config.mjs
-│ ├── next-i18next.config.js
-│ ├── tsconfig.json (local paths enabled)
-│ └── tailwind.config.js
-└── packages (monorepo's packages that this app is using)
- ├── sdk
- ├── main-db-prisma
- └── ui-lib
-```
-
-### Develop
-
-```
-$ yarn dev
-```
+all env is maintained in the .env\* file, it is shared with the backend.
diff --git a/apps/nextjs-app/next.config.js b/apps/nextjs-app/next.config.js
index 628eafa9a..4a372ad8f 100644
--- a/apps/nextjs-app/next.config.js
+++ b/apps/nextjs-app/next.config.js
@@ -30,8 +30,8 @@ const NEXT_BUILD_ENV_SOURCEMAPS = trueEnv.includes(
);
const NEXT_BUILD_ENV_CSP = trueEnv.includes(process.env?.NEXT_BUILD_ENV_CSP ?? 'true');
-const NEXT_BUILD_ENV_IMAGES_ALL_REMOTE = trueEnv.includes(
- process.env?.NEXT_BUILD_ENV_IMAGES_ALL_REMOTE ?? 'true'
+const NEXT_ENV_IMAGES_ALL_REMOTE = trueEnv.includes(
+ process.env?.NEXT_ENV_IMAGES_ALL_REMOTE ?? 'true'
);
const NEXT_BUILD_ENV_SENTRY_ENABLED = trueEnv.includes(
@@ -147,7 +147,7 @@ const nextConfig = {
dangerouslyAllowSVG: false,
disableStaticImages: false,
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
- remotePatterns: NEXT_BUILD_ENV_IMAGES_ALL_REMOTE
+ remotePatterns: NEXT_ENV_IMAGES_ALL_REMOTE
? [
{
protocol: 'http',
@@ -210,7 +210,7 @@ const nextConfig = {
return isProd ? [] : [socketProxy];
},
- // @link https://nextjs.org/docs/api-reference/next.config.js/rewrites
+ // @link https://nextjs.org/docs/api-reference/next.config.js/headers
async headers() {
return [
{
diff --git a/apps/nextjs-app/package.json b/apps/nextjs-app/package.json
index 978869209..6696a7887 100644
--- a/apps/nextjs-app/package.json
+++ b/apps/nextjs-app/package.json
@@ -35,15 +35,9 @@
"check-size": "size-limit --highlight-less",
"clean": "rimraf ./.next ./out ./coverage ./tsconfig.tsbuildinfo ./node_modules/.cache ./.eslintcache",
"clean:backend": "rimraf --no-glob ./main",
- "prebuild:electron": "tsc --project ./electron-src/tsconfig.json",
- "dev": "yarn prebuild:electron && electron .",
- "build:electron": "yarn clean && yarn build && yarn run prebuild:electron",
- "pack-app": "yarn build:electron && electron-builder --dir",
- "dist": "yarn build:electron && electron-builder",
- "dist:debug": "lldb ./dist/mac-arm64/nextjs-app.app",
- "dist:unpack": "npx asar extract ./dist/mac-arm64/nextjs-app.app/Contents/Resources/app.asar ./dist/unpack",
"test": "run-s test-unit",
- "test-unit": "vitest run",
+ "test-unit": "vitest run --silent",
+ "test-unit-cover": "pnpm test-unit --coverage",
"typecheck": "tsc --project ./tsconfig.json --noEmit",
"lint": "eslint . --ext .ts,.tsx,.js,.jsx,.cjs,.mjs,.mdx --cache --cache-location ../../.cache/eslint/nextjs-app.eslintcache",
"fix-all-files": "eslint . --ext .ts,.tsx,.js,.jsx,.cjs,.mjs,.mdx --fix",
@@ -53,7 +47,7 @@
"@next/bundle-analyzer": "14.1.3",
"@next/env": "14.1.3",
"@playwright/test": "1.41.2",
- "@size-limit/file": "11.0.2",
+ "@size-limit/file": "11.1.1",
"@svgr/webpack": "8.1.0",
"@testing-library/dom": "9.3.4",
"@testing-library/jest-dom": "6.4.2",
@@ -61,7 +55,7 @@
"@testing-library/user-event": "14.5.2",
"@types/cors": "2.8.17",
"@types/express": "4.17.21",
- "@types/lodash": "4.14.202",
+ "@types/lodash": "4.17.0",
"@types/node": "20.9.0",
"@types/nprogress": "0.2.3",
"@types/react": "18.2.64",
@@ -70,6 +64,7 @@
"@types/react-syntax-highlighter": "15.5.11",
"@types/react-test-renderer": "18.0.7",
"@types/sharedb": "3.3.10",
+ "@vitest/coverage-v8": "1.4.0",
"@vitejs/plugin-react-swc": "3.6.0",
"autoprefixer": "10.4.18",
"cross-env": "7.0.3",
@@ -79,31 +74,31 @@
"eslint": "8.57.0",
"eslint-config-next": "14.1.3",
"get-tsconfig": "4.7.3",
- "happy-dom": "13.6.2",
+ "happy-dom": "14.0.0",
"npm-run-all2": "6.1.2",
- "postcss": "8.4.35",
+ "postcss": "8.4.36",
"postcss-flexbugs-fixes": "5.0.2",
- "postcss-preset-env": "9.5.0",
+ "postcss-preset-env": "9.5.2",
"prettier": "3.2.5",
"rimraf": "5.0.5",
- "size-limit": "11.0.2",
+ "size-limit": "11.1.1",
"symlink-dir": "5.2.1",
"sync-directory": "6.0.5",
"ts-node": "10.9.2",
"typescript": "5.4.2",
"vite-plugin-svgr": "4.2.0",
- "vite-tsconfig-paths": "4.3.1",
- "vitest": "1.3.1"
+ "vite-tsconfig-paths": "4.3.2",
+ "vitest": "1.4.0"
},
"dependencies": {
"@antv/g6": "4.8.24",
"@asteasolutions/zod-to-openapi": "6.4.0",
"@belgattitude/http-exception": "1.5.0",
- "@codemirror/autocomplete": "6.13.0",
+ "@codemirror/autocomplete": "6.15.0",
"@codemirror/commands": "6.3.3",
"@codemirror/language": "6.10.1",
"@codemirror/state": "6.4.1",
- "@codemirror/view": "6.25.1",
+ "@codemirror/view": "6.26.0",
"@dnd-kit/core": "6.1.0",
"@dnd-kit/sortable": "8.0.0",
"@dnd-kit/utilities": "3.2.2",
@@ -113,8 +108,8 @@
"@hookform/resolvers": "3.3.4",
"@nem035/gpt-3-encoder": "1.1.7",
"@radix-ui/react-icons": "1.3.0",
- "@sentry/nextjs": "7.105.0",
- "@sentry/react": "7.105.0",
+ "@sentry/nextjs": "7.107.0",
+ "@sentry/react": "7.107.0",
"@tailwindcss/container-queries": "0.1.1",
"@tanstack/react-query": "4.36.1",
"@tanstack/react-table": "8.11.7",
@@ -125,7 +120,7 @@
"@teable/sdk": "workspace:^",
"@teable/ui-lib": "workspace:^",
"allotment": "1.20.0",
- "axios": "1.6.7",
+ "axios": "1.6.8",
"class-variance-authority": "0.7.0",
"classnames": "2.5.1",
"dayjs": "1.11.10",
@@ -135,12 +130,12 @@
"express": "4.18.3",
"filesize": "10.1.0",
"fuse.js": "7.0.0",
- "i18next": "23.10.0",
+ "i18next": "23.10.1",
"is-port-reachable": "3.1.0",
"knex": "3.1.0",
"lodash": "4.17.21",
"lru-cache": "10.2.0",
- "lucide-react": "0.349.0",
+ "lucide-react": "0.358.0",
"next": "14.1.3",
"next-i18next": "15.2.0",
"next-secure-headers": "2.2.0",
@@ -154,10 +149,10 @@
"react-dom": "18.2.0",
"react-error-boundary": "4.0.13",
"react-grid-layout": "1.4.4",
- "react-hook-form": "7.51.0",
+ "react-hook-form": "7.51.1",
"react-hotkeys-hook": "4.5.0",
- "react-i18next": "14.0.8",
- "react-joyride": "2.7.4",
+ "react-i18next": "14.1.0",
+ "react-joyride": "2.8.0",
"react-markdown": "9.0.1",
"react-resizable": "3.0.5",
"react-responsive-carousel": "3.2.23",
@@ -165,24 +160,16 @@
"react-syntax-highlighter": "15.5.0",
"react-textarea-autosize": "8.5.3",
"react-use": "17.5.0",
- "recharts": "2.12.2",
+ "recharts": "2.12.3",
"reconnecting-websocket": "4.4.0",
"reflect-metadata": "0.2.1",
"remark-gfm": "4.0.0",
"sharedb": "4.1.2",
"tailwind-scrollbar": "3.1.0",
"tailwindcss": "3.4.1",
- "type-fest": "4.11.1",
+ "type-fest": "4.12.0",
"zod": "3.22.4",
"zod-validation-error": "3.0.3",
"zustand": "4.5.2"
- },
- "build": {
- "electronVersion": "20.3.6",
- "asar": false,
- "files": [
- "**/*",
- "!.env.development"
- ]
}
}
diff --git a/apps/nextjs-app/src/components/Error.tsx b/apps/nextjs-app/src/components/Error.tsx
new file mode 100644
index 000000000..5f95fba65
--- /dev/null
+++ b/apps/nextjs-app/src/components/Error.tsx
@@ -0,0 +1,22 @@
+import { cn } from '@teable/ui-lib/shadcn';
+
+interface IErrorProps {
+ className?: string;
+ error?: string;
+}
+
+export const Error = (props: IErrorProps) => {
+ const { error, className } = props;
+
+ return (
+
+ {error}
+
+ );
+};
diff --git a/apps/nextjs-app/src/features/app/blocks/import-table/FileItem.tsx b/apps/nextjs-app/src/features/app/blocks/import-table/FileItem.tsx
deleted file mode 100644
index 892a26db8..000000000
--- a/apps/nextjs-app/src/features/app/blocks/import-table/FileItem.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import { generateAttachmentId } from '@teable/core';
-import { X } from '@teable/icons';
-import type { INotifyVo } from '@teable/openapi';
-import { UploadType } from '@teable/openapi';
-import { getFieldIconString } from '@teable/sdk';
-import { AttachmentManager } from '@teable/sdk/components';
-import { Progress } from '@teable/ui-lib';
-import { toast } from '@teable/ui-lib/shadcn/ui/sonner';
-import { filesize } from 'filesize';
-import { useTranslation } from 'next-i18next';
-import { useEffect, useState } from 'react';
-
-interface IFileItemProps {
- file: File;
- accept?: string;
- onClose: () => void;
- onFinished: (result: INotifyVo) => void;
-}
-
-export const FileItem = (props: IFileItemProps) => {
- const { file, onClose, onFinished, accept } = props;
- const { name, size, type } = file;
-
- const { t } = useTranslation(['table']);
- const [process, setProcess] = useState(0);
-
- useEffect(() => {
- if (accept && type !== accept) {
- onClose();
- toast.error(t('table:import.form.error.errorFileFormat'));
- return;
- }
-
- const attchmentManager = new AttachmentManager(1);
- attchmentManager.upload([{ id: generateAttachmentId(), instance: file }], UploadType.Table, {
- successCallback: (_, result) => {
- onFinished?.(result);
- },
- progressCallback: (_, process) => {
- setProcess(process);
- },
- });
- }, [accept, file, onClose, onFinished, t, type]);
-
- return (
- <>
-
-
-
{name}
-
{filesize(size)}
-
onClose()}
- />
-
- { }
- >
- );
-};
diff --git a/apps/nextjs-app/src/features/app/blocks/import-table/TableImport.tsx b/apps/nextjs-app/src/features/app/blocks/import-table/TableImport.tsx
index 0c92be9af..0fdd0c2b8 100644
--- a/apps/nextjs-app/src/features/app/blocks/import-table/TableImport.tsx
+++ b/apps/nextjs-app/src/features/app/blocks/import-table/TableImport.tsx
@@ -1,13 +1,14 @@
import { useMutation } from '@tanstack/react-query';
+import { importTypeMap } from '@teable/core';
import type {
- IAnalyzeColumn,
IImportOptionRo,
IAnalyzeRo,
- IImportColumn,
+ IImportSheetItem,
+ SUPPORTEDTYPE,
+ IAnalyzeVo,
IImportOption,
} from '@teable/core';
-import { FieldType } from '@teable/core';
-import { SUPPORTEDTYPE } from '@teable/core/src/import/types';
+
import { analyzeFile, importTableFromFile } from '@teable/openapi';
import type { INotifyVo } from '@teable/openapi';
import { useBase } from '@teable/sdk';
@@ -30,21 +31,19 @@ import {
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
- Input,
} from '@teable/ui-lib';
-import { uniqBy } from 'lodash';
+import { toast } from '@teable/ui-lib/shadcn/ui/sonner';
import { useRouter } from 'next/router';
import { useTranslation } from 'next-i18next';
import { useState, useRef, useCallback } from 'react';
-import { z } from 'zod';
-import { CollapsePanel } from './CollapsePanel';
-import { FileItem } from './FileItem';
-import { PreviewColumn } from './PreviewColumn';
-import { Upload } from './Upload';
+import { FieldConfigPanel } from './field-config-panel';
+import { UploadPanel } from './upload-panel';
+import { UrlPanel } from './UrlPanel';
interface ITableImportProps {
open?: boolean;
children?: React.ReactElement;
+ fileType: SUPPORTEDTYPE;
onOpenChange?: (open: boolean) => void;
}
@@ -62,69 +61,18 @@ export const TableImport = (props: ITableImportProps) => {
const router = useRouter();
const { t } = useTranslation(['table']);
const [step, setStep] = useState(Step.UPLOAD);
- const { children, open, onOpenChange } = props;
+ const { children, open, onOpenChange, fileType } = props;
const [errorMessage, setErrorMessage] = useState('');
- const [linkUrl, setLinkUrl] = useState('');
const [alterDialogVisible, setAlterDialogVisible] = useState(false);
- const [files, setFiles] = useState(null);
+ const [file, setFile] = useState(null);
const [fileInfo, setFileInfo] = useState({} as IAnalyzeRo);
- const initCaculatedColumns = useRef([]);
- const [caculatedColumns, setCalculateColumns] = useState([]);
- const [importOptions, setImportOptions] = useState({
- autoSelectType: true,
- useFirstRowAsHeader: true,
- importData: true,
- });
+ const primitiveWorkSheets = useRef({});
+ const [workSheets, setWorkSheets] = useState({});
const closeDialog = () => {
dialogOpenProxy(false);
};
- const columnsChangeHandler = (newColumns: IImportColumn[]) => {
- const uniqueData = uniqBy(newColumns, 'name');
- if (newColumns.length !== uniqueData.length) {
- setErrorMessage('field name should be unique');
- } else {
- setErrorMessage('');
- }
- setCalculateColumns(newColumns);
- };
-
- const optionChangeHandler = (options: ITableImportOptions, propertyName: string) => {
- setImportOptions(options);
- if (propertyName === 'autoSelectType') {
- if (!options.autoSelectType) {
- const newColumns = caculatedColumns?.map((item) => ({
- ...item,
- type: FieldType.LongText,
- }));
- setCalculateColumns(newColumns);
- } else {
- const newColumns = caculatedColumns?.map((item) => ({
- ...item,
- type: initCaculatedColumns.current[item.sourceColumnIndex].type,
- }));
- setCalculateColumns(newColumns);
- }
- }
-
- if (propertyName === 'useFirstRowAsHeader') {
- if (!options.useFirstRowAsHeader) {
- const newColumns = caculatedColumns?.map((item, index) => ({
- ...item,
- name: `${t('table:import.form.defaultFieldName')} ${index + 1}`,
- }));
- setCalculateColumns(newColumns);
- } else {
- const newColumns = caculatedColumns?.map((item) => ({
- ...item,
- name: initCaculatedColumns.current[item.sourceColumnIndex].name,
- }));
- setCalculateColumns(newColumns);
- }
- }
- };
-
const { mutateAsync, isLoading } = useMutation({
mutationFn: async ({ baseId, importRo }: { baseId: string; importRo: IImportOptionRo }) => {
return (await importTableFromFile(baseId, importRo)).data;
@@ -146,19 +94,23 @@ export const TableImport = (props: ITableImportProps) => {
});
const importTable = async () => {
+ for (const [, value] of Object.entries(workSheets)) {
+ const { columns } = value;
+
+ if (columns.some((col) => !col.name)) {
+ setErrorMessage(t('table:import.form.error.fieldNameEmpty'));
+ return;
+ }
+ if (new Set(columns.map((col) => col.name.trim())).size !== columns.length) {
+ setErrorMessage(t('table:import.form.error.uniqueFieldName'));
+ return;
+ }
+ }
+
mutateAsync({
baseId: base.id,
importRo: {
- worksheets: [
- {
- name: 'import table',
- columns: caculatedColumns,
- options: {
- importData: importOptions.importData,
- useFirstRowAsHeader: importOptions.useFirstRowAsHeader,
- },
- },
- ],
+ worksheets: workSheets,
...fileInfo,
},
});
@@ -176,16 +128,19 @@ export const TableImport = (props: ITableImportProps) => {
data: { worksheets },
} = data;
- // TODO support groups
- const calculatedColumnHeaders = worksheets?.[0].columns || [];
- const columnHeaderWithIndex = calculatedColumnHeaders.map((col, index) => ({
- ...col,
- sourceColumnIndex: index,
- }));
- setCalculateColumns(columnHeaderWithIndex);
+ const workSheetsWithIndex: IImportOptionRo['worksheets'] = {};
+ for (const [key, value] of Object.entries(worksheets)) {
+ const item = { ...value, importData: true, useFirstRowAsHeader: true } as IImportSheetItem;
+ item.columns = item.columns.map((col, index) => ({
+ ...col,
+ sourceColumnIndex: index,
+ }));
+
+ workSheetsWithIndex[key] = item;
+ }
+ setWorkSheets(workSheetsWithIndex);
+ primitiveWorkSheets.current = worksheets;
setStep(Step.CONFIG);
- initCaculatedColumns.current = calculatedColumnHeaders;
- setErrorMessage('');
},
});
@@ -195,10 +150,10 @@ export const TableImport = (props: ITableImportProps) => {
await analyzeByUrl({
attachmentUrl: presignedUrl,
- fileType: SUPPORTEDTYPE.CSV,
+ fileType,
});
},
- [analyzeByUrl]
+ [analyzeByUrl, fileType]
);
const dialogOpenProxy = (open: boolean) => {
@@ -209,129 +164,73 @@ export const TableImport = (props: ITableImportProps) => {
onOpenChange?.(open);
};
+ const fieldChangeHandler = (value: IImportOptionRo['worksheets']) => {
+ setWorkSheets(value);
+ };
+
return (
<>
{children && {children} }
{open && (
-
-
+
+
{step === Step.UPLOAD && (
- {t('table:import.title.localFile')}
+ {t('table:import.title.localFile')}
{t('table:import.title.linkUrl')}
)}
-
+
{step === Step.UPLOAD && (
-
- {!files?.length && (
-
{
- setFiles(files);
- }}
- >
-
- {t('table:import.tips.importWayTip')}
-
-
- )}
- {files?.length &&
- Array.from(files).map((file) => (
-
setFiles(null)}
- onFinished={fileFinishedHandler}
- />
- ))}
-
- )}
- {step === Step.CONFIG && (
-
-
-
{t('table:import.title.importTitle')}
-
+
{
+ const { exceedSize, accept } = importTypeMap[fileType];
-
+ const acceptGroup = accept.split(',');
- {errorMessage && {errorMessage}
}
+ if (file && !acceptGroup.includes(file.type)) {
+ toast.error(t('table:import.form.error.errorFileFormat'));
+ return;
+ }
-
-
+ if (exceedSize && file && file.size > exceedSize * 1024 * 1024) {
+ toast.error(`${t('table:import.tips.fileExceedSizeTip')} ${exceedSize}MB`);
+ return;
+ }
+
+ setFile(file);
+ }}
+ onClose={() => setFile(null)}
+ analyzeLoading={analyzeLoading}
+ onFinished={fileFinishedHandler}
+ >
+ )}
+ {step === Step.CONFIG && (
+
)}
{step === Step.UPLOAD && (
-
-
{t('table:import.title.linkUrlInputTitle')}
-
- {
- const { value } = e.target;
- setLinkUrl(value);
- }}
- />
- {
- if (!linkUrl) {
- setErrorMessage(t('table:import.form.error.urlEmptyTip'));
- return;
- }
- if (!z.string().url().safeParse(linkUrl).success) {
- setErrorMessage(t('table:import.form.error.urlValidateTip'));
- return;
- }
- analyzeByUrl({
- attachmentUrl: linkUrl,
- fileType: SUPPORTEDTYPE.CSV,
- });
- }}
- >
- {analyzeLoading && }
- {t('table:import.title.upload')}
-
-
- {errorMessage &&
{errorMessage}
}
-
+
)}
{step === Step.CONFIG && (
-
-
-
{t('table:import.title.importTitle')}
-
-
-
-
- {errorMessage &&
{errorMessage}
}
-
-
-
+
)}
@@ -345,7 +244,7 @@ export const TableImport = (props: ITableImportProps) => {
size="sm"
className="ml-1"
onClick={() => importTable()}
- disabled={!!errorMessage || isLoading}
+ disabled={isLoading}
>
{isLoading && }
{t('table:import.title.import')}
diff --git a/apps/nextjs-app/src/features/app/blocks/import-table/UrlPanel.tsx b/apps/nextjs-app/src/features/app/blocks/import-table/UrlPanel.tsx
new file mode 100644
index 000000000..294cda109
--- /dev/null
+++ b/apps/nextjs-app/src/features/app/blocks/import-table/UrlPanel.tsx
@@ -0,0 +1,85 @@
+import type { UseMutateAsyncFunction } from '@tanstack/react-query';
+import type { SUPPORTEDTYPE, FieldType } from '@teable/core';
+import { importTypeMap } from '@teable/core';
+import { Input, Button, Spin } from '@teable/ui-lib';
+import type { AxiosResponse } from 'axios';
+import { useState } from 'react';
+import { useTranslation } from 'react-i18next';
+import { z } from 'zod';
+
+interface IUrlPanel {
+ fileType: SUPPORTEDTYPE;
+ analyzeFn: UseMutateAsyncFunction<
+ AxiosResponse<
+ {
+ worksheets: Record<
+ string,
+ {
+ name: string;
+ columns: {
+ name: string;
+ type: FieldType;
+ }[];
+ }
+ >;
+ },
+ unknown
+ >,
+ unknown,
+ {
+ fileType: SUPPORTEDTYPE;
+ attachmentUrl: string;
+ },
+ unknown
+ >;
+ isFinished: boolean;
+}
+
+const UrlPanel = (props: IUrlPanel) => {
+ const { fileType, analyzeFn, isFinished } = props;
+ const [linkUrl, setLinkUrl] = useState('');
+ const [errorMessage, setErrorMessage] = useState('');
+ const { t } = useTranslation(['table']);
+
+ return (
+
+
{t('table:import.title.linkUrlInputTitle')}
+
+ {
+ const { value } = e.target;
+ setLinkUrl(value);
+ }}
+ />
+ {
+ if (!linkUrl) {
+ setErrorMessage(t('table:import.form.error.urlEmptyTip'));
+ return;
+ }
+ if (!z.string().url().safeParse(linkUrl).success) {
+ setErrorMessage(t('table:import.form.error.urlValidateTip'));
+ return;
+ }
+ analyzeFn({
+ attachmentUrl: linkUrl,
+ fileType,
+ });
+ }}
+ >
+ {isFinished && }
+ {t('table:import.title.upload')}
+
+
+ {errorMessage &&
{errorMessage}
}
+
+ );
+};
+
+export { UrlPanel };
diff --git a/apps/nextjs-app/src/features/app/blocks/import-table/CollapsePanel.tsx b/apps/nextjs-app/src/features/app/blocks/import-table/field-config-panel/CollapsePanel.tsx
similarity index 72%
rename from apps/nextjs-app/src/features/app/blocks/import-table/CollapsePanel.tsx
rename to apps/nextjs-app/src/features/app/blocks/import-table/field-config-panel/CollapsePanel.tsx
index eae460630..12bc410e6 100644
--- a/apps/nextjs-app/src/features/app/blocks/import-table/CollapsePanel.tsx
+++ b/apps/nextjs-app/src/features/app/blocks/import-table/field-config-panel/CollapsePanel.tsx
@@ -9,10 +9,10 @@ import {
import classNames from 'classnames';
import { useTranslation } from 'next-i18next';
import { useState } from 'react';
-import type { ITableImportOptions } from './TableImport';
+import type { ITableImportOptions } from '../TableImport';
interface ICollapsePanel {
- onChange: (value: ITableImportOptions, propertyName: keyof ITableImportOptions) => void;
+ onChange: (value: boolean, propertyName: keyof ITableImportOptions) => void;
options: ITableImportOptions;
}
@@ -43,15 +43,7 @@ export const CollapsePanel = (props: ICollapsePanel) => {
- onChange(
- {
- ...options,
- autoSelectType: value,
- },
- 'autoSelectType'
- )
- }
+ onCheckedChange={(value) => onChange(value, 'autoSelectType')}
/>
{t('table:import.options.autoSelectFieldOptionName')}
@@ -63,15 +55,7 @@ export const CollapsePanel = (props: ICollapsePanel) => {
-
+
+
+
+
);
diff --git a/apps/nextjs-app/src/features/auth/pages/ResetPasswordPage.tsx b/apps/nextjs-app/src/features/auth/pages/ResetPasswordPage.tsx
new file mode 100644
index 000000000..39f3bb645
--- /dev/null
+++ b/apps/nextjs-app/src/features/auth/pages/ResetPasswordPage.tsx
@@ -0,0 +1,83 @@
+import { useMutation } from '@tanstack/react-query';
+import { resetPassword } from '@teable/openapi';
+import { passwordSchema } from '@teable/openapi/src/auth/types';
+import { Spin } from '@teable/ui-lib/base';
+import { Button, Input, Label, Separator, useToast } from '@teable/ui-lib/shadcn';
+import { useRouter } from 'next/router';
+import { useTranslation } from 'next-i18next';
+import { useState } from 'react';
+import { fromZodError } from 'zod-validation-error';
+import { Error } from '@/components/Error';
+import { authConfig } from '@/features/i18n/auth.config';
+import { LayoutMain } from '../components/LayoutMain';
+
+export const ResetPasswordPage = () => {
+ const [error, setError] = useState();
+ const [password, setPassword] = useState();
+ const router = useRouter();
+ const code = router.query.code as string;
+ const { t } = useTranslation(authConfig.i18nNamespaces);
+ const { toast } = useToast();
+
+ const { mutateAsync: resetPasswordMutate, isLoading } = useMutation({
+ mutationFn: resetPassword,
+ onSuccess: () => {
+ toast({
+ title: t('auth:resetPassword.success.title'),
+ description: t('auth:resetPassword.success.description'),
+ });
+ setTimeout(() => {
+ router.push('/auth/login');
+ }, 2000);
+ },
+ });
+
+ const passwordOnChange = (event: React.ChangeEvent) => {
+ const value = event.target.value;
+ setPassword(value);
+ setError(undefined);
+ };
+
+ const validPassword = (e: React.FocusEvent) => {
+ const value = e.target.value;
+ if (!value) {
+ return setError(t('auth:resetPassword.error.requiredPassword'));
+ }
+ const res = passwordSchema.safeParse(value);
+ if (!res.success) {
+ return setError(fromZodError(res.error).message);
+ }
+ };
+
+ return (
+
+ {t('auth:resetPassword.header')}
+ {t('auth:resetPassword.description')}
+
+
{t('auth:resetPassword.label')}
+
+
+
+
+
+
{
+ if (error || isLoading || !password) return;
+ resetPasswordMutate({ code, password });
+ }}
+ >
+ {isLoading && }
+ {t('auth:resetPassword.buttonText')}
+
+
+
+ );
+};
diff --git a/apps/nextjs-app/src/lib/server-env.ts b/apps/nextjs-app/src/lib/server-env.ts
index 2c69258d1..97e3fdb60 100644
--- a/apps/nextjs-app/src/lib/server-env.ts
+++ b/apps/nextjs-app/src/lib/server-env.ts
@@ -3,6 +3,8 @@ import React from 'react';
export interface IServerEnv {
templateSiteLink?: string;
microsoftClarityId?: string;
+ sentryDsn?: string;
+ socialAuthProviders?: string[];
}
export const EnvContext = React.createContext({});
diff --git a/apps/nextjs-app/src/pages/_app.tsx b/apps/nextjs-app/src/pages/_app.tsx
index 99fca3d10..71c266698 100644
--- a/apps/nextjs-app/src/pages/_app.tsx
+++ b/apps/nextjs-app/src/pages/_app.tsx
@@ -114,6 +114,7 @@ MyApp.getInitialProps = async (appContext: AppContext) => {
templateSiteLink: process.env.TEMPLATE_SITE_LINK,
microsoftClarityId: process.env.MICROSOFT_CLARITY_ID,
sentryDsn: process.env.SENTRY_DSN,
+ socialAuthProviders: process.env.SOCIAL_AUTH_PROVIDERS?.split(','),
},
};
if (!isLoginPage && !needLoginPage) {
diff --git a/apps/nextjs-app/src/pages/auth/forget-password.tsx b/apps/nextjs-app/src/pages/auth/forget-password.tsx
new file mode 100644
index 000000000..87b3e2df6
--- /dev/null
+++ b/apps/nextjs-app/src/pages/auth/forget-password.tsx
@@ -0,0 +1,24 @@
+import { QueryClientProvider } from '@tanstack/react-query';
+import { createQueryClient } from '@teable/sdk/context';
+import type { GetServerSideProps } from 'next';
+import { ForgetPasswordPage } from '@/features/auth/pages/ForgetPasswordPage';
+import { authConfig } from '@/features/i18n/auth.config';
+import { getTranslationsProps } from '@/lib/i18n';
+
+export default function ForgetPasswordRoute() {
+ const queryClient = createQueryClient();
+ return (
+
+
+
+ );
+}
+
+export const getServerSideProps: GetServerSideProps = async (context) => {
+ const { i18nNamespaces } = authConfig;
+ return {
+ props: {
+ ...(await getTranslationsProps(context, i18nNamespaces)),
+ },
+ };
+};
diff --git a/apps/nextjs-app/src/pages/auth/reset-password.tsx b/apps/nextjs-app/src/pages/auth/reset-password.tsx
new file mode 100644
index 000000000..b264ed9e2
--- /dev/null
+++ b/apps/nextjs-app/src/pages/auth/reset-password.tsx
@@ -0,0 +1,24 @@
+import { QueryClientProvider } from '@tanstack/react-query';
+import { createQueryClient } from '@teable/sdk/context';
+import type { GetServerSideProps } from 'next';
+import { ResetPasswordPage } from '@/features/auth/pages/ResetPasswordPage';
+import { authConfig } from '@/features/i18n/auth.config';
+import { getTranslationsProps } from '@/lib/i18n';
+
+export default function ForgetPasswordRoute() {
+ const queryClient = createQueryClient();
+ return (
+
+
+
+ );
+}
+
+export const getServerSideProps: GetServerSideProps = async (context) => {
+ const { i18nNamespaces } = authConfig;
+ return {
+ props: {
+ ...(await getTranslationsProps(context, i18nNamespaces)),
+ },
+ };
+};
diff --git a/apps/nextjs-app/src/types.d/react-i18next.d.ts b/apps/nextjs-app/src/types.d/next-i18next.d.ts
similarity index 87%
rename from apps/nextjs-app/src/types.d/react-i18next.d.ts
rename to apps/nextjs-app/src/types.d/next-i18next.d.ts
index 838463be8..58e1870de 100644
--- a/apps/nextjs-app/src/types.d/react-i18next.d.ts
+++ b/apps/nextjs-app/src/types.d/next-i18next.d.ts
@@ -4,10 +4,10 @@
* you can opt out by commenting the following code.
* @link https://react.i18next.com/latest/typescript
*/
-import 'react-i18next';
+import 'next-i18next';
import type { I18nNamespaces } from '@teable/common-i18n';
-declare module 'react-i18next' {
+declare module 'next-i18next' {
interface CustomTypeOptions {
defaultNS: 'common';
resources: I18nNamespaces;
diff --git a/apps/nextjs-app/vitest.config.ts b/apps/nextjs-app/vitest.config.ts
index a38a44368..fee1a3282 100644
--- a/apps/nextjs-app/vitest.config.ts
+++ b/apps/nextjs-app/vitest.config.ts
@@ -1,7 +1,7 @@
import react from '@vitejs/plugin-react-swc';
import svgr from 'vite-plugin-svgr';
import tsconfigPaths from 'vite-tsconfig-paths';
-import { defineConfig } from 'vitest/config';
+import { configDefaults, defineConfig } from 'vitest/config';
const testFiles = ['./src/**/*.{test,spec}.{js,jsx,ts,tsx}'];
export default defineConfig({
@@ -15,25 +15,20 @@ export default defineConfig({
svgrOptions: {},
}),
],
+ cacheDir: '../../.cache/vitest/nextjs-app',
test: {
globals: true,
environment: 'happy-dom',
passWithNoTests: false,
setupFiles: './config/tests/setupVitest.ts',
- cache: {
- dir: '../../.cache/vitest/nextjs-app',
- },
coverage: {
provider: 'v8',
- reporter: ['text', 'clover'],
- extension: ['js', 'jsx', 'ts', 'tsx'],
+ extension: ['.js', '.jsx', '.ts', '.tsx'],
+ include: ['src/**/*', 'config/**/*'],
},
include: testFiles,
- exclude: [
- '**/node_modules/**',
- '**/dist/**',
- '**/.next/**',
- '**/.{idea,git,cache,output,temp}/**',
- ],
+ exclude: [...configDefaults.exclude, '**/.next/**'],
},
});
+//
+// next-i18next.config.js
diff --git a/docker-bake.hcl b/docker-bake.hcl
index 8a0695b58..3c11c4cc6 100644
--- a/docker-bake.hcl
+++ b/docker-bake.hcl
@@ -14,12 +14,12 @@ target "teable" {
context = "."
dockerfile = "dockers/teable/Dockerfile"
platforms = ["linux/amd64", "linux/arm64"]
- tags = ["${IMAGE_REGISTRY}/teablecloud/teable:latest", "${IMAGE_REGISTRY}/teablecloud/teable:${IMAGE_TAG}"]
+ tags = ["${IMAGE_REGISTRY}/teableio/teable:latest", "${IMAGE_REGISTRY}/teableio/teable:${IMAGE_TAG}"]
}
target "teable-db-migrate" {
context = "."
dockerfile = "dockers/teable/Dockerfile.db-migrate"
platforms = ["linux/amd64", "linux/arm64"]
- tags = ["${IMAGE_REGISTRY}/teablecloud/teable-db-migrate:latest", "${IMAGE_REGISTRY}/teablecloud/teable-db-migrate:${IMAGE_TAG}"]
+ tags = ["${IMAGE_REGISTRY}/teableio/teable-db-migrate:latest", "${IMAGE_REGISTRY}/teableio/teable-db-migrate:${IMAGE_TAG}"]
}
\ No newline at end of file
diff --git a/dockers/examples/cluster/.env b/dockers/examples/cluster/.env
index 3c37c781f..2bc58a171 100644
--- a/dockers/examples/cluster/.env
+++ b/dockers/examples/cluster/.env
@@ -1,7 +1,51 @@
TIMEZONE=UTC
+# Postgres
+POSTGRES_HOST=teable-db
+POSTGRES_PORT=5432
POSTGRES_DB=example
POSTGRES_USER=example
-POSTGRES_PASSWORD=cluster_replace_password
+POSTGRES_PASSWORD=example2password
-REDIS_PASSWORD=cluster_replace_password
\ No newline at end of file
+# Redis
+REDIS_HOST=teable-cache
+REDIS_PORT=6379
+REDIS_DB=0
+REDIS_PASSWORD=example2password
+
+# Minio
+MINIO_SERVER_URL=http://127.0.0.1:9000
+MINIO_BROWSER_REDIRECT_URL=http://127.0.0.1:9000/minio/ui
+MINIO_ACCESS_KEY=example2access
+MINIO_SECRET_KEY=example2secret
+
+# App
+PUBLIC_ORIGIN=http://127.0.0.1
+PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
+PUBLIC_DATABASE_PROXY=127.0.0.1:42345
+
+BACKEND_CACHE_PROVIDER=redis
+BACKEND_CACHE_REDIS_URI=redis://default:${POSTGRES_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
+
+# Replace when using minio.
+# For intranet: replace with the ip of the host where minio is currently deployed.
+# For extranet: replace with minio's domain name or extranet ip.
+BACKEND_STORAGE_PROVIDER=minio
+BACKEND_STORAGE_PUBLIC_BUCKET=public
+BACKEND_STORAGE_PRIVATE_BUCKET=private
+BACKEND_STORAGE_MINIO_ENDPOINT=
+BACKEND_STORAGE_MINIO_PORT=9000
+BACKEND_STORAGE_MINIO_USE_SSL=false
+BACKEND_STORAGE_MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
+BACKEND_STORAGE_MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
+STORAGE_PREFIX=http://:9000
+
+# Need to support sending emails to enable the following configurations
+# You need to modify the configuration according to the actual situation, otherwise it will not be able to send emails correctly.
+#BACKEND_MAIL_HOST=smtp.teable.io
+#BACKEND_MAIL_PORT=465
+#BACKEND_MAIL_SECURE=true
+#BACKEND_MAIL_SENDER=noreply.teable.io
+#BACKEND_MAIL_SENDER_NAME=Teable
+#BACKEND_MAIL_AUTH_USER=username
+#BACKEND_MAIL_AUTH_PASS=password
diff --git a/dockers/examples/cluster/README.md b/dockers/examples/cluster/README.md
index 6d1a05d89..c1d4c424b 100644
--- a/dockers/examples/cluster/README.md
+++ b/dockers/examples/cluster/README.md
@@ -1,9 +1,34 @@
-# Example with teable cluster
+# Setup Instructions for Teable Cluster
-Look into the `.env` file and update the vaiables before executing `docker compose up -d`.
+Before executing `docker compose up -d`, ensure to update the variables in the `.env` file according to your
+environment's requirements.
-## Teable
+## Teable Configuration
-- Accessible via `http://127.0.0.1:80`
-- Uses postgres db for storage
-- Telemetry is disabled
+- **Access URL:** Access the Teable interface via [http://127.0.0.1:80](http://127.0.0.1:80).
+- **Database Storage:** Utilizes PostgreSQL database for data storage.
+- **Telemetry:** Telemetry collection is disabled by default.
+
+## MinIO Endpoint Configuration
+
+When configuring the Teable cluster to use MinIO for storage, it's necessary to replace the
+placeholder `` in the `.env` file with the appropriate endpoint:
+
+- **For Intranet Use:** Replace `` with the IP address of the host where MinIO is deployed. This setup
+ is recommended if MinIO and Teable are on the same network.
+
+- **For Extranet Use:** Replace `` with the domain name or extranet IP address of your MinIO instance.
+ Use this configuration if you need to access MinIO from outside your local network.
+
+## Public Database Proxy Configuration
+
+To ensure smooth native database connections, you need to set the `PUBLIC_DATABASE_PROXY` variable in the `.env` file to
+its default value, `127.0.0.1:42345`. This port should match the port specified for the `teable-db` container in
+the `docker-compose.yaml` file's `ports` attribute and can be adjusted to suit your needs.
+
+**Important Note:** When using ports `80` or `443`, it's essential to explicitly specify the port number in the URL.
+Failing to do so is not allowed. This practice guarantees accurate address resolution and dependable connectivity,
+providing a solid foundation for your database connections.
+
+Ensure to review and adjust these configurations to match your deployment environment before starting the Teable
+cluster.
diff --git a/dockers/examples/cluster/docker-compose.yaml b/dockers/examples/cluster/docker-compose.yaml
index 3bf218a63..9da91d7db 100644
--- a/dockers/examples/cluster/docker-compose.yaml
+++ b/dockers/examples/cluster/docker-compose.yaml
@@ -8,15 +8,11 @@ services:
restart: always
expose:
- '3000'
- volumes:
- - teable-data:/app/.assets:rw
+ env_file:
+ - .env
environment:
- TZ=${TIMEZONE}
- - NODE_OPTIONS=--max-old-space-size=1024
- - PUBLIC_ORIGIN=http://127.0.0.1
- - PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@teable-db:5432/${POSTGRES_DB}
- - BACKEND_CACHE_PROVIDER=redis
- - BACKEND_CACHE_REDIS_URI=redis://:${POSTGRES_PASSWORD}@teable-cache:6379/0
+ - NEXT_ENV_IMAGES_ALL_REMOTE=true
networks:
- teable-cluster
depends_on:
@@ -34,10 +30,13 @@ services:
teable-db:
image: postgres:15.4
restart: always
- expose:
- - '5432'
+ ports:
+ - '42345:5432'
volumes:
- teable-db:/var/lib/postgresql/data:rw
+ # you may use a bind-mounted host directory instead,
+ # so that it is harder to accidentally remove the volume and lose all your data!
+ # - ./docker/db/data:/var/lib/postgresql/data:rw
environment:
- TZ=${TIMEZONE}
- POSTGRES_DB=${POSTGRES_DB}
@@ -51,6 +50,17 @@ services:
timeout: 3s
retries: 3
+ teable-db-migrate:
+ image: ghcr.io/teableio/teable-db-migrate:latest
+ environment:
+ - TZ=${TIMEZONE}
+ - PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
+ networks:
+ - teable-cluster
+ depends_on:
+ teable-db:
+ condition: service_healthy
+
teable-cache:
image: redis:7.2.4
restart: always
@@ -58,6 +68,9 @@ services:
- '6379'
volumes:
- teable-cache:/data:rw
+ # you may use a bind-mounted host directory instead,
+ # so that it is harder to accidentally remove the volume and lose all your data!
+ # - ./docker/cache/data:/data:rw
networks:
- teable-cluster
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
@@ -67,16 +80,40 @@ services:
timeout: 3s
retries: 3
- teable-db-migrate:
- image: ghcr.io/teableio/teable-db-migrate:latest
+ teable-storage:
+ image: minio/minio:RELEASE.2024-02-17T01-15-57Z
+ expose:
+ - '9000'
+ - '9001'
environment:
- - TZ=${TIMEZONE}
- - PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@teable-db:5432/${POSTGRES_DB}
+ - MINIO_SERVER_URL=${MINIO_SERVER_URL}
+ - MINIO_BROWSER_REDIRECT_URL=${MINIO_BROWSER_REDIRECT_URL}
+ - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
+ - MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
+ volumes:
+ - teable-storage:/data:rw
+ # you may use a bind-mounted host directory instead,
+ # so that it is harder to accidentally remove the volume and lose all your data!
+ # - ./docker/storage/data:/data:rw
networks:
- teable-cluster
+ command: server /data --console-address ":9001"
+
+ createbuckets:
+ image: minio/mc
+ networks:
+ - teable-cluster
+ entrypoint: >
+ /bin/sh -c "
+ /usr/bin/mc alias set teable-storage http://teable-storage:9000 ${MINIO_ACCESS_KEY} ${MINIO_SECRET_KEY};
+ /usr/bin/mc mb teable-storage/public;
+ /usr/bin/mc anonymous set public teable-storage/public;
+ /usr/bin/mc mb teable-storage/private;
+ exit 0;
+ "
depends_on:
- teable-db:
- condition: service_healthy
+ teable-storage:
+ condition: service_started
teable-gateway:
image: openresty/openresty:1.25.3.1-2-bookworm-fat
@@ -84,6 +121,7 @@ services:
ports:
- '80:80'
- '443:443'
+ - '9000:9000'
volumes:
- './gateway/conf.d:/etc/nginx/conf.d'
networks:
@@ -103,6 +141,6 @@ networks:
driver: bridge
volumes:
- teable-data: {}
teable-db: {}
teable-cache: {}
+ teable-storage: {}
diff --git a/dockers/examples/cluster/gateway/conf.d/minio.conf b/dockers/examples/cluster/gateway/conf.d/minio.conf
new file mode 100644
index 000000000..156ef09e4
--- /dev/null
+++ b/dockers/examples/cluster/gateway/conf.d/minio.conf
@@ -0,0 +1,63 @@
+upstream storage_s3 {
+ server teable-storage:9000;
+}
+
+upstream storage_console {
+ server teable-storage:9001;
+}
+
+server {
+ server_name localhost;
+ listen 9000;
+ listen [::]:9000;
+
+ # Allow special characters in headers
+ ignore_invalid_headers off;
+ # Allow any size file to be uploaded.
+ # Set to a value such as 1000m; to restrict file size to a specific value
+ client_max_body_size 0;
+ # Disable buffering
+ proxy_buffering off;
+ proxy_request_buffering off;
+
+ location / {
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ proxy_connect_timeout 300;
+ # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
+ proxy_http_version 1.1;
+ proxy_set_header Connection "";
+ chunked_transfer_encoding off;
+
+ proxy_pass http://storage_s3; # This uses the upstream directive definition to load balance
+ }
+
+ location /minio/ui/ {
+ rewrite ^/minio/ui/(.*) /$1 break;
+ proxy_set_header Host $http_host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header X-NginX-Proxy true;
+
+ # This is necessary to pass the correct IP to be hashed
+ real_ip_header X-Real-IP;
+
+ proxy_connect_timeout 300;
+
+ # To support websockets in MinIO versions released after January 2023
+ proxy_http_version 1.1;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ # Some environments may encounter CORS errors (Kubernetes + Nginx Ingress)
+ # Uncomment the following line to set the Origin request to an empty string
+ # proxy_set_header Origin '';
+
+ chunked_transfer_encoding off;
+
+ proxy_pass http://storage_console; # This uses the upstream directive definition to load balance
+ }
+}
\ No newline at end of file
diff --git a/dockers/examples/docker-swarm/.env b/dockers/examples/docker-swarm/.env
index 8ecaa39d7..8d9247250 100644
--- a/dockers/examples/docker-swarm/.env
+++ b/dockers/examples/docker-swarm/.env
@@ -1,20 +1,27 @@
TIMEZONE=UTC
+# Postgres
POSTGRES_HOST=teable-db
POSTGRES_PORT=5432
POSTGRES_DB=example
POSTGRES_USER=example
-POSTGRES_PASSWORD=swarm_replace_password
+POSTGRES_PASSWORD=swarm2replace2password
+# Redis
REDIS_HOST=teable-cache
REDIS_PORT=6379
REDIS_DB=0
-REDIS_PASSWORD=swarm_replace_password
+REDIS_PASSWORD=swarm2replace2password
-MINIO_ACCESS_KEY=swarm_replace_access
-MINIO_SECRET_KEY=swarm_replace_secret
+# Minio
+MINIO_SERVER_URL=http://127.0.0.1:9000
+MINIO_BROWSER_REDIRECT_URL=http://127.0.0.1:9000/minio/ui
+MINIO_ACCESS_KEY=swarm2replace2access
+MINIO_SECRET_KEY=swarm2replace2secret
+# App
PUBLIC_ORIGIN=http://127.0.0.1
+PUBLIC_DATABASE_PROXY=127.0.0.1:42345
BACKEND_STORAGE_PROVIDER=minio
BACKEND_STORAGE_PUBLIC_BUCKET=public
@@ -22,4 +29,14 @@ BACKEND_STORAGE_PRIVATE_BUCKET=private
BACKEND_STORAGE_MINIO_ENDPOINT=127.0.0.1
BACKEND_STORAGE_MINIO_PORT=9000
BACKEND_STORAGE_MINIO_USE_SSL=false
-STORAGE_PREFIX=http://127.0.0.1
\ No newline at end of file
+STORAGE_PREFIX=http://127.0.0.1:9000
+
+# Need to support sending emails to enable the following configurations
+# You need to modify the configuration according to the actual situation, otherwise it will not be able to send emails correctly.
+#BACKEND_MAIL_HOST=smtp.teable.io
+#BACKEND_MAIL_PORT=465
+#BACKEND_MAIL_SECURE=true
+#BACKEND_MAIL_SENDER=noreply.teable.io
+#BACKEND_MAIL_SENDER_NAME=Teable
+#BACKEND_MAIL_AUTH_USER=username
+#BACKEND_MAIL_AUTH_PASS=password
\ No newline at end of file
diff --git a/dockers/examples/docker-swarm/deploy.sh b/dockers/examples/docker-swarm/deploy.sh
index 70caa57ea..071189495 100755
--- a/dockers/examples/docker-swarm/deploy.sh
+++ b/dockers/examples/docker-swarm/deploy.sh
@@ -7,7 +7,7 @@ create_network() {
export_env_vars() {
if [ -f .env ]; then
# see https://github.com/moby/moby/issues/29133
- export $(cat .env | xargs)
+ export $(grep -v '^#' .env | xargs)
else
echo ".env file not found, skipping export."
fi
diff --git a/dockers/examples/docker-swarm/docker-compose.app.yml b/dockers/examples/docker-swarm/docker-compose.app.yml
index d66520ebc..8832ec3ee 100644
--- a/dockers/examples/docker-swarm/docker-compose.app.yml
+++ b/dockers/examples/docker-swarm/docker-compose.app.yml
@@ -15,11 +15,12 @@ services:
- '3000'
environment:
- TZ=${TIMEZONE}
- - NODE_OPTIONS=--max-old-space-size=1024
+ - NEXT_ENV_IMAGES_ALL_REMOTE=true
- PUBLIC_ORIGIN=${PUBLIC_ORIGIN}
- PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
+ - PUBLIC_DATABASE_PROXY=${PUBLIC_DATABASE_PROXY}
- BACKEND_CACHE_PROVIDER=redis
- - BACKEND_CACHE_REDIS_URI=redis://:${POSTGRES_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
+ - BACKEND_CACHE_REDIS_URI=redis://default:${POSTGRES_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
- BACKEND_STORAGE_PROVIDER=${BACKEND_STORAGE_PROVIDER}
- BACKEND_STORAGE_PUBLIC_BUCKET=${BACKEND_STORAGE_PUBLIC_BUCKET}
- BACKEND_STORAGE_PRIVATE_BUCKET=${BACKEND_STORAGE_PRIVATE_BUCKET}
@@ -29,6 +30,13 @@ services:
- BACKEND_STORAGE_MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
- BACKEND_STORAGE_MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
- STORAGE_PREFIX=${STORAGE_PREFIX}
+ # - BACKEND_MAIL_HOST=${BACKEND_MAIL_HOST}
+ # - BACKEND_MAIL_PORT=${BACKEND_MAIL_PORT}
+ # - BACKEND_MAIL_SECURE=${BACKEND_MAIL_SECURE}
+ # - BACKEND_MAIL_SENDER=${BACKEND_MAIL_SENDER}
+ # - BACKEND_MAIL_SENDER_NAME=${BACKEND_MAIL_SENDER_NAME}
+ # - BACKEND_MAIL_AUTH_USER=${BACKEND_MAIL_AUTH_USER}
+ # - BACKEND_MAIL_AUTH_PASS=${BACKEND_MAIL_AUTH_PASS}
networks:
- teable-swarm
healthcheck:
diff --git a/dockers/examples/docker-swarm/docker-compose.kit.yml b/dockers/examples/docker-swarm/docker-compose.kit.yml
index bd8a00a7a..d120daa1a 100644
--- a/dockers/examples/docker-swarm/docker-compose.kit.yml
+++ b/dockers/examples/docker-swarm/docker-compose.kit.yml
@@ -3,8 +3,8 @@ version: '3.9'
services:
teable-db:
image: postgres:15.4
- expose:
- - '5432'
+ ports:
+ - '42345:5432'
volumes:
- teable-db:/var/lib/postgresql/data:rw
environment:
@@ -52,6 +52,8 @@ services:
- '9000'
- '9001'
environment:
+ - MINIO_SERVER_URL=${MINIO_SERVER_URL}
+ - MINIO_BROWSER_REDIRECT_URL=${MINIO_BROWSER_REDIRECT_URL}
- MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
- MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
volumes:
diff --git a/dockers/examples/docker-swarm/gateway/conf.d/minio.conf b/dockers/examples/docker-swarm/gateway/conf.d/minio.conf
index e99a3ea66..156ef09e4 100644
--- a/dockers/examples/docker-swarm/gateway/conf.d/minio.conf
+++ b/dockers/examples/docker-swarm/gateway/conf.d/minio.conf
@@ -11,10 +11,17 @@ server {
listen 9000;
listen [::]:9000;
- location / {
- proxy_pass http://storage_s3;
+ # Allow special characters in headers
+ ignore_invalid_headers off;
+ # Allow any size file to be uploaded.
+ # Set to a value such as 1000m; to restrict file size to a specific value
+ client_max_body_size 0;
+ # Disable buffering
+ proxy_buffering off;
+ proxy_request_buffering off;
- proxy_set_header Host $host;
+ location / {
+ proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
@@ -24,15 +31,12 @@ server {
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
- }
-}
-server {
- server_name localhost;
- listen 9001;
- listen [::]:9001;
+ proxy_pass http://storage_s3; # This uses the upstream directive definition to load balance
+ }
- location / {
+ location /minio/ui/ {
+ rewrite ^/minio/ui/(.*) /$1 break;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
diff --git a/dockers/examples/standalone/.env b/dockers/examples/standalone/.env
index 13344e84e..d8f59ead9 100644
--- a/dockers/examples/standalone/.env
+++ b/dockers/examples/standalone/.env
@@ -1,5 +1,23 @@
TIMEZONE=UTC
+# Postgres
+POSTGRES_HOST=teable-db
+POSTGRES_PORT=5432
POSTGRES_DB=example
POSTGRES_USER=example
-POSTGRES_PASSWORD=standalone_replace_password
\ No newline at end of file
+POSTGRES_PASSWORD=example2password
+
+# App
+PUBLIC_ORIGIN=http://127.0.0.1:3000
+PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
+PUBLIC_DATABASE_PROXY=127.0.0.1:42345
+
+# Need to support sending emails to enable the following configurations
+# You need to modify the configuration according to the actual situation, otherwise it will not be able to send emails correctly.
+#BACKEND_MAIL_HOST=smtp.teable.io
+#BACKEND_MAIL_PORT=465
+#BACKEND_MAIL_SECURE=true
+#BACKEND_MAIL_SENDER=noreply.teable.io
+#BACKEND_MAIL_SENDER_NAME=Teable
+#BACKEND_MAIL_AUTH_USER=username
+#BACKEND_MAIL_AUTH_PASS=password
\ No newline at end of file
diff --git a/dockers/examples/standalone/docker-compose.yaml b/dockers/examples/standalone/docker-compose.yaml
index b0d72bcb3..694b0083b 100644
--- a/dockers/examples/standalone/docker-compose.yaml
+++ b/dockers/examples/standalone/docker-compose.yaml
@@ -7,25 +7,31 @@ services:
ports:
- '3000:3000'
volumes:
- - teable_data:/app/.assets:rw
+ - teable-data:/app/.assets:rw
+ # you may use a bind-mounted host directory instead,
+ # so that it is harder to accidentally remove the volume and lose all your data!
+ # - ./docker/teable/data:/app/.assets:rw
+ env_file:
+ - .env
environment:
- TZ=${TIMEZONE}
- - NODE_OPTIONS=--max-old-space-size=1024
- - PUBLIC_ORIGIN=http://127.0.0.1:3000
- - PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@teable_db:5432/${POSTGRES_DB}
+ - NEXT_ENV_IMAGES_ALL_REMOTE=true
networks:
- teable-standalone
depends_on:
- teable_db_migrate:
+ teable-db-migrate:
condition: service_completed_successfully
- teable_db:
+ teable-db:
image: postgres:15.4
restart: always
- expose:
- - '5432'
+ ports:
+ - '42345:5432'
volumes:
- - teable_db:/var/lib/postgresql/data:rw
+ - teable-db:/var/lib/postgresql/data:rw
+ # you may use a bind-mounted host directory instead,
+ # so that it is harder to accidentally remove the volume and lose all your data!
+ # - ./docker/db/data:/var/lib/postgresql/data:rw
environment:
- TZ=${TIMEZONE}
- POSTGRES_DB=${POSTGRES_DB}
@@ -39,22 +45,22 @@ services:
timeout: 3s
retries: 3
- teable_db_migrate:
+ teable-db-migrate:
image: ghcr.io/teableio/teable-db-migrate:latest
environment:
- TZ=${TIMEZONE}
- - PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@teable_db:5432/${POSTGRES_DB}
+ - PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
networks:
- teable-standalone
depends_on:
- teable_db:
+ teable-db:
condition: service_healthy
networks:
teable-standalone:
- name: teable_standalone_network
+ name: teable-standalone-network
driver: bridge
volumes:
- teable_data: {}
- teable_db: {}
+ teable-data: {}
+ teable-db: {}
diff --git a/dockers/teable/Dockerfile b/dockers/teable/Dockerfile
index 6fac0f432..8f91b4268 100644
--- a/dockers/teable/Dockerfile
+++ b/dockers/teable/Dockerfile
@@ -1,4 +1,5 @@
ARG NODE_VERSION=20.9.0
+ARG BUILD_VERSION="1.0.0-alpha"
###################################################################
# Stage 1: Install all workspaces (dev)dependencies #
@@ -31,23 +32,24 @@ RUN pnpm -F @teable/db-main-prisma prisma-generate --schema ./prisma/postgres/sc
FROM deps AS builder
ARG INTEGRATION_TEST
-ARG BUILD_VERSION="1.0.0-alpha"
+ARG BUILD_VERSION
+ARG ENABLE_CSP=true
ARG SENTRY_ENABLED=true
ARG SENTRY_TRACING=true
-ENV NODE_ENV=production
-ENV NEXT_BUILD_ENV_TYPECHECK=false
-ENV NEXT_BUILD_ENV_LINT=false
-ENV NEXT_BUILD_ENV_OUTPUT=classic
-ENV NEXT_BUILD_ENV_SENTRY_ENABLED=$SENTRY_ENABLED
-ENV NEXT_BUILD_ENV_SENTRY_TRACING=$SENTRY_TRACING
+ENV NODE_ENV=production \
+ NEXT_BUILD_ENV_CSP=${ENABLE_CSP} \
+ NEXT_BUILD_ENV_TYPECHECK=false \
+ NEXT_BUILD_ENV_LINT=false \
+ NEXT_BUILD_ENV_SENTRY_ENABLED=${SENTRY_ENABLED} \
+ NEXT_BUILD_ENV_SENTRY_TRACING=${SENTRY_TRACING}
WORKDIR /app
COPY --from=deps --link /workspace-install ./
RUN set -eux; \
- sed -i~ '$a\NEXT_PUBLIC_BUILD_VERSION=$BUILD_VERSION' apps/nextjs-app/.env
+ echo "NEXT_PUBLIC_BUILD_VERSION=\"${BUILD_VERSION}\"" >> apps/nextjs-app/.env
# Distinguish whether it is an integration test operation
RUN if [ -n "$INTEGRATION_TEST" ]; then \
@@ -80,9 +82,9 @@ RUN pnpm -F @teable/db-main-prisma prisma-generate --schema ./prisma/postgres/sc
FROM node:${NODE_VERSION}-bookworm-slim AS runner
-ENV NODE_ENV=production
-ENV TZ=UTC
-ENV PORT=${NEXTJS_APP_PORT:-3000}
+ENV TZ=UTC \
+ NODE_ENV=production \
+ PORT=${NEXTJS_APP_PORT:-3000}
RUN npm install zx -g && \
apt-get update && apt-get install -y curl openssl && \
diff --git a/dockers/teable/Dockerfile.db-migrate b/dockers/teable/Dockerfile.db-migrate
index 8cf2d4f53..5c9d5ec85 100644
--- a/dockers/teable/Dockerfile.db-migrate
+++ b/dockers/teable/Dockerfile.db-migrate
@@ -1,7 +1,9 @@
ARG NODE_VERSION=20.9.0
-ARG PRISMA_VERSION=5.10.2
+ARG PRISMA_VERSION=5.11.0
+ARG BUILD_VERSION="1.0.0-alpha"
FROM node:${NODE_VERSION}-bookworm AS prisma
+ARG PRISMA_VERSION
RUN corepack enable && \
npm add @prisma/client@${PRISMA_VERSION} \
@@ -21,11 +23,12 @@ RUN cd sqlite_migrate && \
FROM node:${NODE_VERSION}-bookworm-slim AS runner
-
-ARG BUILD_VERSION="1.0.0-alpha"
+ARG PRISMA_VERSION
+ARG BUILD_VERSION
ENV TZ=UTC
ENV NODE_ENV=production
+ENV BUILD_VERSION=$BUILD_VERSION
RUN npm install zx @soluble/dsn-parser @prisma/client@${PRISMA_VERSION} prisma@${PRISMA_VERSION} -g && \
apt-get update && apt-get install -y openssl netcat-traditional wget && \
diff --git a/package.json b/package.json
index 44377ded5..77b100a00 100644
--- a/package.json
+++ b/package.json
@@ -37,6 +37,7 @@
"g:test": "pnpm g:test-e2e && pnpm g:test-unit",
"g:test-e2e": "pnpm -r test-e2e",
"g:test-unit": "pnpm -r --parralel test-unit",
+ "g:test-unit-cover": "pnpm -r --parralel test-unit-cover",
"g:typecheck": "pnpm -r --parralel typecheck",
"generate-openapi-types": "node scripts/generate-openapi-types.mjs",
"install:playwright": "playwright install",
@@ -50,15 +51,15 @@
"devDependencies": {
"@changesets/changelog-github": "0.5.0",
"@changesets/cli": "2.27.1",
- "@commitlint/cli": "19.0.3",
- "@commitlint/config-conventional": "19.0.3",
+ "@commitlint/cli": "19.2.1",
+ "@commitlint/config-conventional": "19.1.0",
"@teable/eslint-config-bases": "workspace:^",
"@types/shell-quote": "1.7.5",
"eslint": "8.57.0",
"husky": "9.0.11",
"lint-staged": "15.2.2",
"npm-run-all2": "6.1.2",
- "openapi-typescript": "6.7.4",
+ "openapi-typescript": "6.7.5",
"prettier": "3.2.5",
"rimraf": "5.0.5",
"shell-quote": "1.8.1",
@@ -70,5 +71,5 @@
"pnpm": ">=8.15.0",
"npm": "please-use-pnpm"
},
- "packageManager": "pnpm@8.15.4"
+ "packageManager": "pnpm@8.15.5"
}
diff --git a/packages/common-i18n/src/locales/en/auth.json b/packages/common-i18n/src/locales/en/auth.json
index 683f38b7c..561be7623 100644
--- a/packages/common-i18n/src/locales/en/auth.json
+++ b/packages/common-i18n/src/locales/en/auth.json
@@ -9,5 +9,35 @@
"label": {
"email": "Email",
"password": "Password"
+ },
+ "placeholder": {
+ "password": "Enter your password...",
+ "email": "Enter your email..."
+ },
+ "resetPassword": {
+ "header": "Set Your Password",
+ "description": "Enter a new password",
+ "label": "New password",
+ "error": {
+ "requiredPassword": "Enter password",
+ "invalidLink": "Invalid reset password link"
+ },
+ "success": {
+ "title": "🎉 Reset password success",
+ "description": "Your password has been reset successfully. Will redirect you to the login page."
+ },
+ "buttonText": "Send Reset password"
+ },
+ "forgetPassword": {
+ "trigger": "Forgot password?",
+ "header": "Reset Your Password",
+ "description": "Please enter your email address below and we will send you a link to reset your password.",
+ "errorRequiredEmail": "Email is required",
+ "errorInvalidEmail": "Invalid email",
+ "buttonText": "Send Reset Email",
+ "success": {
+ "title": "🎉 Reset password email sent",
+ "description": "We've sent you an email with a link to reset your password. Please check your inbox."
+ }
}
}
diff --git a/packages/common-i18n/src/locales/en/common.json b/packages/common-i18n/src/locales/en/common.json
index 2cec98ffe..696cd3583 100644
--- a/packages/common-i18n/src/locales/en/common.json
+++ b/packages/common-i18n/src/locales/en/common.json
@@ -49,10 +49,23 @@
"invalidNew": "Your new password is invalid, minimum 8 chars."
},
"changePasswordSuccess": {
- "title": "Change password successfully.",
+ "title": "🎉 Change password successfully.",
"desc": "You will be redirected to the login page in 2 seconds."
},
- "manageToken": "Access Token"
+ "manageToken": "Access Token",
+ "addPassword": {
+ "title": "Add password",
+ "desc": "Set a permanent password to login to your account.",
+ "password": "Enter your password",
+ "confirm": "Confirm your password"
+ },
+ "addPasswordError": {
+ "disMatch": "Your password does not match.",
+ "invalid": "Your password is invalid, minimum 8 chars."
+ },
+ "addPasswordSuccess": {
+ "title": "🎉 Add password successfully."
+ }
},
"notify": {
"title": "My Notifications",
diff --git a/packages/common-i18n/src/locales/en/table.json b/packages/common-i18n/src/locales/en/table.json
index b4c422bda..478b97b62 100644
--- a/packages/common-i18n/src/locales/en/table.json
+++ b/packages/common-i18n/src/locales/en/table.json
@@ -116,13 +116,16 @@
},
"menu": {
"addFromOtherSource": "Add from other sources",
+ "excelFile": "Microsoft Excel",
"csvFile": "Csv file",
"cancel": "Cancel",
"leave": "Leave"
},
"tips": {
"importWayTip": "Click or drag file to this area to upload",
- "leaveTip": "Your data will still be imported."
+ "leaveTip": "Your data will still be imported.",
+ "fileExceedSizeTip": "This type file size exceeds the limit of",
+ "analyzing": "analyzing"
},
"options": {
"autoSelectFieldOptionName": "Auto-select field types",
@@ -134,7 +137,9 @@
"error": {
"urlEmptyTip": "URL should not be empty!",
"urlValidateTip": "Couldn't parse URL. Try a different URL!",
- "errorFileFormat": "File format is incorrect!"
+ "errorFileFormat": "File format is incorrect!",
+ "uniqueFieldName": "Field name should be unique!",
+ "fieldNameEmpty": "Field name should not be empty!"
}
}
},
@@ -175,7 +180,9 @@
},
"view": {
"addRecord": "Add record",
- "searchView": "Search view..."
+ "searchView": "Search view...",
+ "dragToolTip": "Automatic sorting is turned on, manual drag is not available",
+ "insertToolTip": "Automatic sorting is turned on, insert with order is not available"
},
"lastModifiedTime": "Last modified time"
}
diff --git a/packages/common-i18n/src/locales/zh/auth.json b/packages/common-i18n/src/locales/zh/auth.json
index bd3254ed1..4a088ff6c 100644
--- a/packages/common-i18n/src/locales/zh/auth.json
+++ b/packages/common-i18n/src/locales/zh/auth.json
@@ -9,5 +9,35 @@
"label": {
"email": "邮箱",
"password": "密码"
+ },
+ "placeholder": {
+ "password": "请输入您的密码...",
+ "email": "请输入您的电子邮件地址..."
+ },
+ "resetPassword": {
+ "header": "设置您的密码",
+ "description": "请输入一个新密码",
+ "label": "新密码",
+ "error": {
+ "requiredPassword": "请输入密码",
+ "invalidLink": "无效的重置密码链接"
+ },
+ "success": {
+ "title": "🎉 重置密码成功",
+ "description": "您的密码已成功重置。我们将为您跳转到登录页面。"
+ },
+ "buttonText": "发送重置密码邮件"
+ },
+ "forgetPassword": {
+ "trigger": "忘记密码?",
+ "header": "重置您的密码",
+ "description": "请输入您的电子邮件地址,我们将向您发送一个链接,用于重置您的密码。",
+ "errorRequiredEmail": "电子邮件地址是必填项",
+ "errorInvalidEmail": "无效的电子邮件地址",
+ "buttonText": "发送重置邮件",
+ "success": {
+ "title": "🎉 重置密码邮件已发送",
+ "description": "我们已向您发送了一封包含重置密码链接的电子邮件。请检查您的收件箱。"
+ }
}
}
diff --git a/packages/common-i18n/src/locales/zh/common.json b/packages/common-i18n/src/locales/zh/common.json
index 918d7cd45..c66151fd5 100644
--- a/packages/common-i18n/src/locales/zh/common.json
+++ b/packages/common-i18n/src/locales/zh/common.json
@@ -49,10 +49,23 @@
"invalidNew": "您的新密码无效,至少需要8个字符。"
},
"changePasswordSuccess": {
- "title": "密码更改成功。",
+ "title": "🎉 密码更改成功。",
"desc": "您将在2秒内重定向到登录页面。"
},
- "manageToken": "开发者令牌"
+ "manageToken": "开发者令牌",
+ "addPassword": {
+ "title": "添加密码",
+ "desc": "设置一个永久密码以登录您的账户。",
+ "password": "输入您的密码",
+ "confirm": "确认您的密码"
+ },
+ "addPasswordError": {
+ "disMatch": "您的密码不匹配。",
+ "invalid": "您的密码无效,至少需要8个字符。"
+ },
+ "addPasswordSuccess": {
+ "title": "🎉 密码添加成功。"
+ }
},
"notify": {
"title": "我的通知",
diff --git a/packages/common-i18n/src/locales/zh/table.json b/packages/common-i18n/src/locales/zh/table.json
index 035962adf..9ddad298e 100644
--- a/packages/common-i18n/src/locales/zh/table.json
+++ b/packages/common-i18n/src/locales/zh/table.json
@@ -116,13 +116,16 @@
},
"menu": {
"addFromOtherSource": "从第三方资源导入",
- "csvFile": "csv 文件",
+ "excelFile": "Microsoft Excel",
+ "csvFile": "Csv 文件",
"cancel": "取消",
"leave": "取消"
},
"tips": {
"importWayTip": "点击或者拖拽到此区域上传",
- "leaveTip": "你的数据仍然会被导入"
+ "leaveTip": "你的数据仍然会被导入",
+ "fileExceedSizeTip": "该类型文件限制文件大小为",
+ "analyzing": "分析中"
},
"options": {
"autoSelectFieldOptionName": "自动预测类型",
@@ -134,7 +137,9 @@
"error": {
"urlEmptyTip": "URL不能为空!",
"urlValidateTip": "不能解析该URL,请重新输入!",
- "errorFileFormat": "文件格式错误!"
+ "errorFileFormat": "文件格式错误!",
+ "uniqueFieldName": "字段名不能重复!",
+ "fieldNameEmpty": "字段名不能为空"
}
}
},
@@ -170,12 +175,14 @@
"title": "数据库连接",
"description": "你可以通过数据库连接来直接访问数据库",
"noPermission": "你没有权限访问数据库连接",
- "connectionCountTip": "最大数据库连接数为 {max} 当前已建立的连接数为 {current} ",
+ "connectionCountTip": "最大数据库连接数为 {{max}} 当前已建立的连接数为 {{current}} ",
"helpLink": "https://help.teable.cn/gao-dai-ma-kai-fa/shu-ju-ku-lian-jie"
},
"view": {
"addRecord": "添加记录",
- "searchView": "搜索视图..."
+ "searchView": "搜索视图...",
+ "dragToolTip": "自动排序已经打开,无法进行手动拖拽排序",
+ "insertToolTip": "自动排序已经打开,无法指定插入位置"
},
"lastModifiedTime": "最近修改时间"
}
diff --git a/packages/core/package.json b/packages/core/package.json
index 3d0fd30bd..ffbcc66cb 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -29,6 +29,7 @@
"check-size": "size-limit",
"test": "run test-unit",
"test-unit": "vitest run --silent",
+ "test-unit-cover": "pnpm test-unit --coverage",
"fix-all-files": "eslint . --ext .ts,.js,.mjs,.cjs,.mts,.cts --fix"
},
"dependencies": {
@@ -37,7 +38,7 @@
"@types/color": "3.0.6",
"@types/papaparse": "5.3.14",
"antlr4ts": "0.5.0-alpha.4",
- "axios": "1.6.7",
+ "axios": "1.6.8",
"class-transformer": "0.5.1",
"color": "4.2.3",
"dayjs": "1.11.10",
@@ -48,10 +49,11 @@
"zod": "3.22.4"
},
"devDependencies": {
- "@size-limit/file": "11.0.2",
+ "@size-limit/file": "11.1.1",
"@teable/eslint-config-bases": "workspace:^",
- "@types/lodash": "4.14.202",
+ "@types/lodash": "4.17.0",
"@types/node": "20.9.0",
+ "@vitest/coverage-v8": "1.4.0",
"antlr4ts-cli": "0.5.0-alpha.4",
"cross-env": "7.0.3",
"es-check": "7.1.1",
@@ -59,9 +61,9 @@
"get-tsconfig": "4.7.3",
"prettier": "3.2.5",
"rimraf": "5.0.5",
- "size-limit": "11.0.2",
+ "size-limit": "11.1.1",
"typescript": "5.4.2",
- "vite-tsconfig-paths": "4.3.1",
- "vitest": "1.3.1"
+ "vite-tsconfig-paths": "4.3.2",
+ "vitest": "1.4.0"
}
}
diff --git a/packages/core/src/formula/evaluate.ts b/packages/core/src/formula/evaluate.ts
index 1ccd3be64..abf08b115 100644
--- a/packages/core/src/formula/evaluate.ts
+++ b/packages/core/src/formula/evaluate.ts
@@ -1,6 +1,6 @@
import { CharStreams, CommonTokenStream } from 'antlr4ts';
import type { FieldCore } from '../models/field/field';
-import type { ITinyRecord } from '../models/record/record.schema';
+import type { IRecord } from '../models/record/record.schema';
import { FormulaErrorListener } from './error.listener';
import { Formula } from './parser/Formula';
import { FormulaLexer } from './parser/FormulaLexer';
@@ -10,7 +10,7 @@ import { EvalVisitor } from './visitor';
export const evaluate = (
input: string,
dependFieldMap: { [fieldId: string]: FieldCore },
- record?: ITinyRecord
+ record?: IRecord
): TypedValue => {
const inputStream = CharStreams.fromString(input);
const lexer = new FormulaLexer(inputStream);
diff --git a/packages/core/src/formula/functions/common.ts b/packages/core/src/formula/functions/common.ts
index 4b5d23284..b66c2ad7f 100644
--- a/packages/core/src/formula/functions/common.ts
+++ b/packages/core/src/formula/functions/common.ts
@@ -1,6 +1,6 @@
import type { CellValueType } from '../../models/field/constant';
import type { FieldCore } from '../../models/field/field';
-import type { ITinyRecord } from '../../models/record/record.schema';
+import type { IRecord } from '../../models/record/record.schema';
import type { TypedValue } from '../typed-value';
export enum FormulaFuncType {
@@ -13,7 +13,7 @@ export enum FormulaFuncType {
}
export interface IFormulaContext {
- record: ITinyRecord;
+ record: IRecord;
dependencies: { [fieldId: string]: FieldCore };
}
diff --git a/packages/core/src/formula/functions/date-time.spec.ts b/packages/core/src/formula/functions/date-time.spec.ts
index d6cec8e41..44e600665 100644
--- a/packages/core/src/formula/functions/date-time.spec.ts
+++ b/packages/core/src/formula/functions/date-time.spec.ts
@@ -675,7 +675,6 @@ describe('DateTime', () => {
id: 'recTest',
fields: {},
createdTime: date,
- recordOrder: { viwTest: 1 },
};
const context = {
record,
@@ -697,7 +696,6 @@ describe('DateTime', () => {
fields: {},
createdTime: date,
lastModifiedTime: date,
- recordOrder: { viwTest: 1 },
};
const context = {
record,
diff --git a/packages/core/src/formula/functions/system.spec.ts b/packages/core/src/formula/functions/system.spec.ts
index f5761f83a..f5deb6eeb 100644
--- a/packages/core/src/formula/functions/system.spec.ts
+++ b/packages/core/src/formula/functions/system.spec.ts
@@ -42,7 +42,6 @@ describe('SystemFunc', () => {
id: 'recTest',
fields: {},
createdTime: new Date().toISOString(),
- recordOrder: { viwTest: 1 },
};
const context = {
record,
diff --git a/packages/core/src/formula/visitor.spec.ts b/packages/core/src/formula/visitor.spec.ts
index 0e043e438..7ef8cbed5 100644
--- a/packages/core/src/formula/visitor.spec.ts
+++ b/packages/core/src/formula/visitor.spec.ts
@@ -17,7 +17,6 @@ describe('EvalVisitor', () => {
fldMultipleLink: [{ id: 'recxxxxxxx' }, { id: 'recyyyyyyy', title: 'A2' }],
},
createdTime: new Date().toISOString(),
- recordOrder: { viwTest: 1 },
};
beforeAll(() => {
diff --git a/packages/core/src/formula/visitor.ts b/packages/core/src/formula/visitor.ts
index ddc7fbcec..59e2a0cbd 100644
--- a/packages/core/src/formula/visitor.ts
+++ b/packages/core/src/formula/visitor.ts
@@ -3,7 +3,7 @@
import { AbstractParseTreeVisitor } from 'antlr4ts/tree/AbstractParseTreeVisitor';
import { CellValueType } from '../models/field/constant';
import type { FieldCore } from '../models/field/field';
-import type { ITinyRecord } from '../models/record/record.schema';
+import type { IRecord } from '../models/record/record.schema';
import { FunctionName } from './functions/common';
import type { FormulaFunc } from './functions/common';
import { FUNCTIONS } from './functions/factory';
@@ -34,7 +34,7 @@ export class EvalVisitor
private readonly converter = new TypedValueConverter();
constructor(
private dependencies: { [fieldId: string]: FieldCore },
- private record?: ITinyRecord
+ private record?: IRecord
) {
super();
}
diff --git a/packages/core/src/import/constant.ts b/packages/core/src/import/constant.ts
index df8c0ce1e..800c2e934 100644
--- a/packages/core/src/import/constant.ts
+++ b/packages/core/src/import/constant.ts
@@ -2,17 +2,14 @@ import { SUPPORTEDTYPE } from './types';
export const importTypeMap = {
[SUPPORTEDTYPE.CSV]: {
- accept: 'text/csv',
+ accept: 'text/csv,text/tab-separated-values',
exampleUrl: 'https://www.example.com/file.csv',
- acceptHeaders: ['text/csv', 'text/plain'],
+ exceedSize: null,
},
[SUPPORTEDTYPE.EXCEL]: {
accept:
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel',
exampleUrl: 'https://www.example.com/file.xlsx',
- acceptHeaders: [
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
- 'application/vnd.ms-excel',
- ],
+ exceedSize: 5,
},
};
diff --git a/packages/core/src/import/index.ts b/packages/core/src/import/index.ts
index f0f3b8aea..52dcbe9c5 100644
--- a/packages/core/src/import/index.ts
+++ b/packages/core/src/import/index.ts
@@ -1,2 +1,2 @@
-export * from './types';
export * from './constant';
+export * from './types';
diff --git a/packages/core/src/import/types.ts b/packages/core/src/import/types.ts
index 7808c7ad4..4bb35df6f 100644
--- a/packages/core/src/import/types.ts
+++ b/packages/core/src/import/types.ts
@@ -7,7 +7,7 @@ export enum SUPPORTEDTYPE {
}
export const analyzeRoSchema = z.object({
- attachmentUrl: z.string().url(),
+ attachmentUrl: z.string().url().trim(),
fileType: z.nativeEnum(SUPPORTEDTYPE),
});
@@ -17,12 +17,13 @@ export const analyzeColumnSchema = z.object({
});
export const analyzeVoSchema = z.object({
- worksheets: z
- .object({
+ worksheets: z.record(
+ z.string(),
+ z.object({
name: z.string(),
columns: analyzeColumnSchema.array(),
})
- .array(),
+ ),
});
export type IAnalyzeRo = z.infer;
@@ -42,19 +43,20 @@ export const importColumnSchema = analyzeColumnSchema.extend({
sourceColumnIndex: z.number(),
});
-export const importOptionSchema = z.object({
+export const importSheetItem = z.object({
+ name: z.string(),
+ columns: importColumnSchema.array(),
useFirstRowAsHeader: z.boolean(),
importData: z.boolean(),
});
+export const importOptionSchema = importSheetItem.pick({
+ useFirstRowAsHeader: true,
+ importData: true,
+});
+
export const importOptionRoSchema = z.object({
- worksheets: z
- .object({
- name: z.string(),
- columns: importColumnSchema.array(),
- options: importOptionSchema,
- })
- .array(),
+ worksheets: z.record(z.string(), importSheetItem),
attachmentUrl: z.string().url(),
fileType: z.nativeEnum(SUPPORTEDTYPE),
});
@@ -63,4 +65,6 @@ export type IImportColumn = z.infer;
export type IImportOptionRo = z.infer;
+export type IImportSheetItem = z.infer;
+
export type IImportOption = z.infer;
diff --git a/packages/core/src/models/field/derivate/abstract/formula.field.abstract.ts b/packages/core/src/models/field/derivate/abstract/formula.field.abstract.ts
index dc8a912b6..fda4df560 100644
--- a/packages/core/src/models/field/derivate/abstract/formula.field.abstract.ts
+++ b/packages/core/src/models/field/derivate/abstract/formula.field.abstract.ts
@@ -6,7 +6,7 @@ import type { RootContext } from '../../../../formula/parser/Formula';
import { Formula } from '../../../../formula/parser/Formula';
import { FormulaLexer } from '../../../../formula/parser/FormulaLexer';
import { EvalVisitor } from '../../../../formula/visitor';
-import type { ITinyRecord } from '../../../record/record.schema';
+import type { IRecord } from '../../../record/record.schema';
import { CellValueType } from '../../constant';
import { FieldCore } from '../../field';
import type { INumberFormatting, IDatetimeFormatting, IUnionFormatting } from '../../formatting';
@@ -52,7 +52,7 @@ export abstract class FormulaAbstractCore extends FieldCore {
return this._tree;
}
- evaluate(dependFieldMap: { [fieldId: string]: FieldCore }, record: ITinyRecord) {
+ evaluate(dependFieldMap: { [fieldId: string]: FieldCore }, record: IRecord) {
const visitor = new EvalVisitor(dependFieldMap, record);
return visitor.visit(this.tree);
}
diff --git a/packages/core/src/models/record/record.schema.spec.ts b/packages/core/src/models/record/record.schema.spec.ts
index fc2184f2b..24199f025 100644
--- a/packages/core/src/models/record/record.schema.spec.ts
+++ b/packages/core/src/models/record/record.schema.spec.ts
@@ -86,7 +86,6 @@ describe('recordSchema', () => {
lastModifiedTime: '2023-01-02T00:00:00.000Z',
createdBy: 'user',
lastModifiedBy: 'user',
- recordOrder: { viwXXXXXXX: 1 },
};
it('validates successfully for valid data', () => {
@@ -121,15 +120,6 @@ describe('recordSchema', () => {
const result = recordSchema.safeParse(data);
expect(result.success).toBe(true);
});
-
- it('fails for invalid recordOrder (non-number values)', () => {
- const data = { ...validData, recordOrder: { viwXXXXXXX: 'invalidValue' } };
- const result = recordSchema.safeParse(data);
- expect(result.success).toBe(false);
- if (!result.success) {
- expect(result.error.errors[0].message).toEqual('Expected number, received string');
- }
- });
});
describe('recordsVoSchema', () => {
@@ -140,7 +130,6 @@ describe('recordsVoSchema', () => {
fields: {
fldXXXXXXXXXXXXXXX: 'text value',
},
- recordOrder: {},
},
],
offset: 'offset',
diff --git a/packages/core/src/models/record/record.schema.ts b/packages/core/src/models/record/record.schema.ts
index 2b1f8d26a..d04d5b81c 100644
--- a/packages/core/src/models/record/record.schema.ts
+++ b/packages/core/src/models/record/record.schema.ts
@@ -29,16 +29,10 @@ export const recordSchema = z.object({
lastModifiedBy: z.string().optional().openapi({
description: 'Last modified by, user name',
}),
- recordOrder: z.record(z.number()).openapi({
- description:
- 'The object key is view id, and record is sorted by this order in each view by default',
- }),
});
export type IRecord = z.infer;
-export type ITinyRecord = Omit;
-
export const fieldKeyTypeRoSchema = z
.nativeEnum(FieldKeyType, {
errorMap: () => ({ message: 'Error fieldKeyType, You should set it to "name" or "id"' }),
@@ -225,7 +219,6 @@ export const recordsSchema = recordSchema.array().openapi({
fields: {
'single line text': 'text value',
},
- recordOrder: {},
},
],
description: 'Array of record objects ',
@@ -239,7 +232,6 @@ export const recordsVoSchema = z.object({
fields: {
'single line text': 'text value',
},
- recordOrder: {},
},
],
description: 'Array of record objects ',
@@ -252,14 +244,31 @@ export const recordsVoSchema = z.object({
export type IRecordsVo = z.infer;
+export const recordInsertOrderRoSchema = z
+ .object({
+ viewId: z.string().openapi({
+ description:
+ 'You can only specify order in one view when create record, other views appear last by default',
+ }),
+ anchorId: z.string().openapi({
+ description: 'The record id to anchor to',
+ }),
+ position: z.enum(['before', 'after']),
+ })
+ .openapi({
+ description: 'Where this record to insert to',
+ });
+
+export type IRecordInsertOrderRo = z.infer;
+
export const createRecordsRoSchema = z
.object({
fieldKeyType: fieldKeyTypeRoSchema,
typecast: typecastSchema,
+ order: recordInsertOrderRoSchema.optional(),
records: z
.object({
fields: recordSchema.shape.fields,
- recordOrder: z.record(z.number()).optional(),
})
.array()
.openapi({
diff --git a/packages/core/src/models/record/record.ts b/packages/core/src/models/record/record.ts
index 225191552..d5288582f 100644
--- a/packages/core/src/models/record/record.ts
+++ b/packages/core/src/models/record/record.ts
@@ -20,8 +20,6 @@ export class RecordCore {
createdTime!: Date;
- recordOrder!: Record;
-
id!: string;
isDeleted = false;
diff --git a/packages/core/src/models/table/table.schema.ts b/packages/core/src/models/table/table.schema.ts
index 708b26dc8..4608c1a2e 100644
--- a/packages/core/src/models/table/table.schema.ts
+++ b/packages/core/src/models/table/table.schema.ts
@@ -36,9 +36,7 @@ export const tableFullVoSchema = z
records: recordSchema.array().openapi({
description: 'The records of the table.',
}),
- order: z.number().openapi({
- description: 'The order is a floating number, table will sort by it in the folder.',
- }),
+ order: z.number().optional(),
lastModifiedTime: z.string().optional().openapi({
description: 'The last modified time of the table.',
}),
@@ -69,7 +67,6 @@ export const tableRoSchema = tableFullVoSchema
.partial({
name: true,
dbTableName: true,
- order: true,
})
.merge(
z.object({
@@ -89,10 +86,6 @@ export const tableRoSchema = tableFullVoSchema
description:
'The record data of the table. If it is empty, 3 empty records will be generated by default.',
}),
- order: z.number().optional().openapi({
- description:
- 'The order is a floating number, table will sort by it in the folder. If it is empty, table will be put to the last one.',
- }),
})
)
.openapi({
diff --git a/packages/core/src/models/table/table.ts b/packages/core/src/models/table/table.ts
index 7cdce3b0d..e90264cf0 100644
--- a/packages/core/src/models/table/table.ts
+++ b/packages/core/src/models/table/table.ts
@@ -11,8 +11,6 @@ export class TableCore implements ITableVo {
description?: string;
- order!: number;
-
lastModifiedTime!: string;
defaultViewId!: string;
diff --git a/packages/core/src/models/view/sort/sort.schema.spec.ts b/packages/core/src/models/view/sort/sort.schema.spec.ts
index 363147060..31d62ecef 100644
--- a/packages/core/src/models/view/sort/sort.schema.spec.ts
+++ b/packages/core/src/models/view/sort/sort.schema.spec.ts
@@ -48,12 +48,9 @@ describe('Sort mergeWithDefaultSort function test', () => {
it('should return merged sort, when sort query exists and no same field items', async () => {
const mergedSort = mergeWithDefaultSort(defaultViewSortString, querySort);
const presetSort = [
+ ...querySort,
{ fieldId: 'fld1xxx', order: 'asc' },
{ fieldId: 'fld2xxx', order: 'desc' },
- {
- fieldId: 'fld3xxx',
- order: 'asc',
- },
];
expect(mergedSort).toEqual(presetSort);
});
diff --git a/packages/core/src/models/view/sort/sort.ts b/packages/core/src/models/view/sort/sort.ts
index 151d7af8f..7cccf059e 100644
--- a/packages/core/src/models/view/sort/sort.ts
+++ b/packages/core/src/models/view/sort/sort.ts
@@ -59,13 +59,15 @@ export function mergeWithDefaultSort(
return [];
}
- let mergeSort = viewSort?.sortObjs || [];
+ const mergeSort = viewSort?.sortObjs || [];
if (querySort?.length) {
// merge the same fieldId item, query first
- const map = new Map(mergeSort.map((sortItem) => [sortItem.fieldId, sortItem]));
- querySort.forEach((sortItem) => map.set(sortItem.fieldId, sortItem));
- mergeSort = Array.from(map.values());
+ const map = new Map(querySort.map((sortItem) => [sortItem.fieldId, sortItem]));
+ mergeSort.forEach((sortItem) => {
+ !map.has(sortItem.fieldId) && map.set(sortItem.fieldId, sortItem);
+ });
+ return Array.from(map.values());
}
return mergeSort;
diff --git a/packages/core/src/models/view/view.schema.ts b/packages/core/src/models/view/view.schema.ts
index 660f9980c..4ac2222f2 100644
--- a/packages/core/src/models/view/view.schema.ts
+++ b/packages/core/src/models/view/view.schema.ts
@@ -22,7 +22,7 @@ export const viewVoSchema = z.object({
name: z.string(),
type: z.nativeEnum(ViewType),
description: z.string().optional(),
- order: z.number(),
+ order: z.number().optional(),
options: viewOptionsSchema.optional(),
sort: sortSchema.optional(),
filter: filterSchema.optional(),
@@ -56,5 +56,5 @@ export const viewRoSchema = viewVoSchema
});
export type IViewRo = z.infer;
-export type IViewPropertyKeys = keyof IViewRo;
+export type IViewPropertyKeys = keyof IViewVo;
export const VIEW_JSON_KEYS = ['options', 'sort', 'filter', 'group', 'shareMeta', 'columnMeta'];
diff --git a/packages/core/src/models/view/view.ts b/packages/core/src/models/view/view.ts
index cabf77ef7..6342cefaa 100644
--- a/packages/core/src/models/view/view.ts
+++ b/packages/core/src/models/view/view.ts
@@ -21,8 +21,6 @@ export abstract class ViewCore implements IViewVo {
group?: IGroup;
- order!: number;
-
shareId?: string;
enableShare?: boolean;
diff --git a/packages/core/src/op-builder/common.ts b/packages/core/src/op-builder/common.ts
index 35cc9a99a..8617e5a08 100644
--- a/packages/core/src/op-builder/common.ts
+++ b/packages/core/src/op-builder/common.ts
@@ -3,7 +3,6 @@ export enum OpName {
SetTableProperty = 'setTableProperty',
SetRecord = 'setRecord',
- SetRecordOrder = 'setRecordOrder',
AddRecord = 'addRecord',
AddField = 'addField',
diff --git a/packages/core/src/op-builder/record/add-record.ts b/packages/core/src/op-builder/record/add-record.ts
index a4939f662..a5dbd6656 100644
--- a/packages/core/src/op-builder/record/add-record.ts
+++ b/packages/core/src/op-builder/record/add-record.ts
@@ -10,7 +10,6 @@ export class AddRecordBuilder implements ICreateOpBuilder {
return {
id: record.id,
fields: {},
- recordOrder: record.recordOrder ?? {},
};
}
}
diff --git a/packages/core/src/op-builder/record/index.ts b/packages/core/src/op-builder/record/index.ts
index 65a4b5ea7..c63be85e2 100644
--- a/packages/core/src/op-builder/record/index.ts
+++ b/packages/core/src/op-builder/record/index.ts
@@ -1,4 +1,3 @@
export * from './add-record';
export * from './record-op-builder';
-export * from './set-record-order';
export * from './set-record';
diff --git a/packages/core/src/op-builder/record/record-op-builder.ts b/packages/core/src/op-builder/record/record-op-builder.ts
index 1d57fdd66..c07bdcec8 100644
--- a/packages/core/src/op-builder/record/record-op-builder.ts
+++ b/packages/core/src/op-builder/record/record-op-builder.ts
@@ -3,12 +3,10 @@ import { OpName } from '../common';
import { OpBuilderAbstract } from '../op-builder.abstract';
import { AddRecordBuilder } from './add-record';
import { SetRecordBuilder } from './set-record';
-import { SetRecordOrderBuilder } from './set-record-order';
export class RecordOpBuilder {
static editor = {
[OpName.SetRecord]: new SetRecordBuilder(),
- [OpName.SetRecordOrder]: new SetRecordOrderBuilder(),
};
static creator = new AddRecordBuilder();
diff --git a/packages/core/src/op-builder/record/set-record-order.ts b/packages/core/src/op-builder/record/set-record-order.ts
deleted file mode 100644
index 6b3594a00..000000000
--- a/packages/core/src/op-builder/record/set-record-order.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import type { IOtOperation } from '../../models';
-import { OpName, pathMatcher } from '../common';
-import type { IOpBuilder } from '../interface';
-
-export interface ISetRecordOrderOpContext {
- name: OpName.SetRecordOrder;
- viewId: string;
- newOrder: number;
- oldOrder?: number;
-}
-
-export class SetRecordOrderBuilder implements IOpBuilder {
- name: OpName.SetRecordOrder = OpName.SetRecordOrder;
-
- build(params: { viewId: string; newOrder: number; oldOrder?: number }): IOtOperation {
- const { viewId, newOrder, oldOrder } = params;
- return {
- p: ['recordOrder', viewId],
- oi: newOrder,
- ...(oldOrder ? { od: oldOrder } : {}),
- };
- }
-
- detect(op: IOtOperation): ISetRecordOrderOpContext | null {
- const { p, oi, od } = op;
-
- const result = pathMatcher<{ viewId: string }>(p, ['recordOrder', ':viewId']);
-
- if (!result) {
- return null;
- }
-
- return {
- name: this.name,
- viewId: result.viewId,
- newOrder: oi,
- oldOrder: od,
- };
- }
-}
diff --git a/packages/core/src/utils/id-generator.ts b/packages/core/src/utils/id-generator.ts
index be6b8c65b..832b84fdc 100644
--- a/packages/core/src/utils/id-generator.ts
+++ b/packages/core/src/utils/id-generator.ts
@@ -17,6 +17,7 @@ export enum IdPrefix {
WorkflowDecision = 'wde',
User = 'usr',
+ Account = 'aco',
Invitation = 'inv',
@@ -112,3 +113,7 @@ export function generateNotificationId() {
export function generateAccessTokenId() {
return IdPrefix.AccessToken + getRandomString(16);
}
+
+export function generateAccountId() {
+ return IdPrefix.Account + getRandomString(16);
+}
diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts
index 0f594c0e2..a9acbc9ce 100644
--- a/packages/core/vitest.config.ts
+++ b/packages/core/vitest.config.ts
@@ -1,10 +1,11 @@
import tsconfigPaths from 'vite-tsconfig-paths';
-import { defineConfig } from 'vitest/config';
+import { defineConfig, configDefaults } from 'vitest/config';
const testFiles = ['./src/**/*.{test,spec}.{js,ts}'];
export default defineConfig({
plugins: [tsconfigPaths()],
+ cacheDir: '../../.cache/vitest/core',
test: {
globals: true,
environment: 'node',
@@ -19,9 +20,6 @@ export default defineConfig({
enabled: true,
},
}, */
- cache: {
- dir: '../../.cache/vitest/core',
- },
poolOptions: {
threads: {
singleThread: true,
@@ -29,9 +27,8 @@ export default defineConfig({
},
coverage: {
provider: 'v8',
- reporter: ['text', 'clover'],
- extension: ['js', 'ts'],
- all: true,
+ extension: ['.js', '.ts'],
+ include: ['src/**/*'],
},
// To mimic Jest behaviour regarding mocks.
// @link https://vitest.dev/config/#clearmocks
@@ -39,11 +36,6 @@ export default defineConfig({
mockReset: true,
restoreMocks: true,
include: testFiles,
- exclude: [
- '**/node_modules/**',
- '**/dist/**',
- '**/.next/**',
- '**/.{idea,git,cache,output,temp}/**',
- ],
+ exclude: [...configDefaults.exclude, '**/.next/**'],
},
});
diff --git a/packages/db-main-prisma/package.json b/packages/db-main-prisma/package.json
index ff8f41638..2949acfe9 100644
--- a/packages/db-main-prisma/package.json
+++ b/packages/db-main-prisma/package.json
@@ -39,8 +39,8 @@
"nestjs-cls": "^4.0.0"
},
"dependencies": {
- "@prisma/client": "5.10.2",
- "prisma": "5.10.2",
+ "@prisma/client": "5.11.0",
+ "prisma": "5.11.0",
"nanoid": "3.3.7"
},
"devDependencies": {
diff --git a/packages/db-main-prisma/prisma/postgres/migrations/20240313062534_add_credit/migration.sql b/packages/db-main-prisma/prisma/postgres/migrations/20240313062534_add_credit/migration.sql
new file mode 100644
index 000000000..cf9380ac8
--- /dev/null
+++ b/packages/db-main-prisma/prisma/postgres/migrations/20240313062534_add_credit/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "space" ADD COLUMN "credit" INTEGER;
diff --git a/packages/db-main-prisma/prisma/postgres/schema.prisma b/packages/db-main-prisma/prisma/postgres/schema.prisma
index d039e6e15..cfc716d1f 100644
--- a/packages/db-main-prisma/prisma/postgres/schema.prisma
+++ b/packages/db-main-prisma/prisma/postgres/schema.prisma
@@ -12,6 +12,7 @@ datasource db {
model Space {
id String @id @default(cuid())
name String
+ credit Int?
deletedTime DateTime? @map("deleted_time")
createdTime DateTime @default(now()) @map("created_time")
createdBy String @map("created_by")
diff --git a/packages/db-main-prisma/prisma/sqlite/migrations/20240313061543_add_credit/migration.sql b/packages/db-main-prisma/prisma/sqlite/migrations/20240313061543_add_credit/migration.sql
new file mode 100644
index 000000000..879a1ff0d
--- /dev/null
+++ b/packages/db-main-prisma/prisma/sqlite/migrations/20240313061543_add_credit/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "space" ADD COLUMN "credit" INTEGER;
diff --git a/packages/db-main-prisma/prisma/sqlite/schema.prisma b/packages/db-main-prisma/prisma/sqlite/schema.prisma
index eecf52bd5..110f981fe 100644
--- a/packages/db-main-prisma/prisma/sqlite/schema.prisma
+++ b/packages/db-main-prisma/prisma/sqlite/schema.prisma
@@ -12,6 +12,7 @@ datasource db {
model Space {
id String @id @default(cuid())
name String
+ credit Int?
deletedTime DateTime? @map("deleted_time")
createdTime DateTime @default(now()) @map("created_time")
createdBy String @map("created_by")
diff --git a/packages/db-main-prisma/prisma/template.prisma b/packages/db-main-prisma/prisma/template.prisma
index c53e5d589..3c908e1ec 100644
--- a/packages/db-main-prisma/prisma/template.prisma
+++ b/packages/db-main-prisma/prisma/template.prisma
@@ -12,6 +12,7 @@ datasource db {
model Space {
id String @id @default(cuid())
name String
+ credit Int?
deletedTime DateTime? @map("deleted_time")
createdTime DateTime @default(now()) @map("created_time")
createdBy String @map("created_by")
diff --git a/packages/eslint-config-bases/package.json b/packages/eslint-config-bases/package.json
index e8a5314d1..2e9afb798 100644
--- a/packages/eslint-config-bases/package.json
+++ b/packages/eslint-config-bases/package.json
@@ -74,8 +74,8 @@
"dependencies": {
"@rushstack/eslint-patch": "1.6.1",
"@tanstack/eslint-plugin-query": "4.36.1",
- "@typescript-eslint/eslint-plugin": "7.0.2",
- "@typescript-eslint/parser": "7.0.2",
+ "@typescript-eslint/eslint-plugin": "7.2.0",
+ "@typescript-eslint/parser": "7.2.0",
"eslint-config-prettier": "9.1.0",
"eslint-import-resolver-typescript": "3.6.1",
"eslint-plugin-import": "2.29.1",
diff --git a/packages/icons/package.json b/packages/icons/package.json
index ca2a8aa70..7d22cae96 100644
--- a/packages/icons/package.json
+++ b/packages/icons/package.json
@@ -35,7 +35,7 @@
"@types/fs-extra": "11.0.4",
"@types/node": "20.9.0",
"@types/react": "18.2.64",
- "axios": "1.6.7",
+ "axios": "1.6.8",
"chalk": "5.3.0",
"dotenv": "16.4.5",
"eslint": "8.57.0",
diff --git a/packages/icons/src/components/FileCsv.tsx b/packages/icons/src/components/FileCsv.tsx
index 0a74926e5..b5b547699 100644
--- a/packages/icons/src/components/FileCsv.tsx
+++ b/packages/icons/src/components/FileCsv.tsx
@@ -24,7 +24,7 @@ const FileCsv = (props: SVGProps) => (
/>
diff --git a/packages/icons/src/components/GithubLogo.tsx b/packages/icons/src/components/GithubLogo.tsx
new file mode 100644
index 000000000..634a8ad03
--- /dev/null
+++ b/packages/icons/src/components/GithubLogo.tsx
@@ -0,0 +1,25 @@
+import * as React from 'react';
+import type { SVGProps } from 'react';
+const GithubLogo = (props: SVGProps) => (
+
+
+
+
+
+
+
+
+
+
+);
+export default GithubLogo;
diff --git a/packages/icons/src/components/GoogleLogo.tsx b/packages/icons/src/components/GoogleLogo.tsx
new file mode 100644
index 000000000..9113536aa
--- /dev/null
+++ b/packages/icons/src/components/GoogleLogo.tsx
@@ -0,0 +1,37 @@
+import * as React from 'react';
+import type { SVGProps } from 'react';
+const GoogleLogo = (props: SVGProps) => (
+
+
+
+
+
+
+
+
+
+
+
+
+
+);
+export default GoogleLogo;
diff --git a/packages/icons/src/components/Import.tsx b/packages/icons/src/components/Import.tsx
new file mode 100644
index 000000000..ed96fd26f
--- /dev/null
+++ b/packages/icons/src/components/Import.tsx
@@ -0,0 +1,28 @@
+import * as React from 'react';
+import type { SVGProps } from 'react';
+const Import = (props: SVGProps) => (
+
+
+
+
+);
+export default Import;
diff --git a/packages/icons/src/index.ts b/packages/icons/src/index.ts
index 1e4f47369..07cf4b734 100644
--- a/packages/icons/src/index.ts
+++ b/packages/icons/src/index.ts
@@ -57,11 +57,14 @@ export { default as FreezeColumn } from './components/FreezeColumn';
export { default as Frown } from './components/Frown';
export { default as Gauge } from './components/Gauge';
export { default as Github } from './components/Github';
+export { default as GithubLogo } from './components/GithubLogo';
+export { default as GoogleLogo } from './components/GoogleLogo';
export { default as Hash } from './components/Hash';
export { default as Heart } from './components/Heart';
export { default as HelpCircle } from './components/HelpCircle';
export { default as History } from './components/History';
export { default as Home } from './components/Home';
+export { default as Import } from './components/Import';
export { default as Inbox } from './components/Inbox';
export { default as Key } from './components/Key';
export { default as Layers } from './components/Layers';
diff --git a/packages/openapi/package.json b/packages/openapi/package.json
index aed1ed62b..e69907721 100644
--- a/packages/openapi/package.json
+++ b/packages/openapi/package.json
@@ -23,7 +23,7 @@
"@asteasolutions/zod-to-openapi": "6.4.0",
"@teable/core": "workspace:^",
"@types/node": "20.9.0",
- "axios": "1.6.7",
+ "axios": "1.6.8",
"httpsnippet-lite": "3.0.5",
"openapi-sampler": "1.4.0",
"openapi3-ts": "4.2.2",
diff --git a/packages/openapi/src/aggregation/get-aggregation.ts b/packages/openapi/src/aggregation/get-aggregation.ts
index 0dd637761..2f779a3de 100644
--- a/packages/openapi/src/aggregation/get-aggregation.ts
+++ b/packages/openapi/src/aggregation/get-aggregation.ts
@@ -1,6 +1,6 @@
import type { RouteConfig } from '@asteasolutions/zod-to-openapi';
import type { IAggregationRo, IAggregationVo } from '@teable/core';
-import { aggregationRoSchema, aggregationVoSchema } from '@teable/core';
+import { aggregationVoSchema } from '@teable/core';
import { axios } from '../axios';
import { registerRoute, urlBuilder } from '../utils';
import { z } from '../zod';
diff --git a/packages/openapi/src/auth/add-password.ts b/packages/openapi/src/auth/add-password.ts
new file mode 100644
index 000000000..7bf029ac0
--- /dev/null
+++ b/packages/openapi/src/auth/add-password.ts
@@ -0,0 +1,37 @@
+import { axios } from '../axios';
+import { registerRoute } from '../utils';
+import { z } from '../zod';
+import { passwordSchema } from './types';
+
+export const ADD_PASSWORD = '/auth/add-password';
+
+export const addPasswordRoSchema = z.object({
+ password: passwordSchema,
+});
+
+export type IAddPasswordRo = z.infer;
+
+export const addPasswordRoute = registerRoute({
+ method: 'post',
+ path: ADD_PASSWORD,
+ description: 'Add password',
+ request: {
+ body: {
+ content: {
+ 'application/json': {
+ schema: addPasswordRoSchema,
+ },
+ },
+ },
+ },
+ tags: ['auth'],
+ responses: {
+ 200: {
+ description: 'Successfully added password',
+ },
+ },
+});
+
+export const addPassword = async (ro: IAddPasswordRo) => {
+ return axios.post(ADD_PASSWORD, ro);
+};
diff --git a/packages/openapi/src/auth/index.ts b/packages/openapi/src/auth/index.ts
index 4ae2a5f6e..bd4d10573 100644
--- a/packages/openapi/src/auth/index.ts
+++ b/packages/openapi/src/auth/index.ts
@@ -3,3 +3,6 @@ export * from './signout';
export * from './signup';
export * from './user-me';
export * from './change-password';
+export * from './send-reset-password-email';
+export * from './reset-password';
+export * from './add-password';
diff --git a/packages/openapi/src/auth/reset-password.ts b/packages/openapi/src/auth/reset-password.ts
new file mode 100644
index 000000000..29a006ab8
--- /dev/null
+++ b/packages/openapi/src/auth/reset-password.ts
@@ -0,0 +1,38 @@
+import { axios } from '../axios';
+import { registerRoute } from '../utils';
+import { z } from '../zod';
+import { passwordSchema } from './types';
+
+export const RESET_PASSWORD = '/auth/reset-password';
+
+export const resetPasswordRoSchema = z.object({
+ password: passwordSchema,
+ code: z.string(),
+});
+
+export type IResetPasswordRo = z.infer;
+
+export const resetPasswordRoute = registerRoute({
+ method: 'post',
+ path: RESET_PASSWORD,
+ description: 'Reset password',
+ request: {
+ body: {
+ content: {
+ 'application/json': {
+ schema: resetPasswordRoSchema,
+ },
+ },
+ },
+ },
+ tags: ['auth'],
+ responses: {
+ 200: {
+ description: 'Successfully reset password',
+ },
+ },
+});
+
+export const resetPassword = async (ro: IResetPasswordRo) => {
+ return axios.post(RESET_PASSWORD, ro);
+};
diff --git a/packages/openapi/src/auth/send-reset-password-email.ts b/packages/openapi/src/auth/send-reset-password-email.ts
new file mode 100644
index 000000000..df8f3ceae
--- /dev/null
+++ b/packages/openapi/src/auth/send-reset-password-email.ts
@@ -0,0 +1,36 @@
+import { axios } from '../axios';
+import { registerRoute } from '../utils';
+import { z } from '../zod';
+
+export const SEND_RESET_PASSWORD_EMAIL = '/auth/send-reset-password-email';
+
+export const sendResetPasswordEmailRoSchema = z.object({
+ email: z.string().email(),
+});
+
+export type ISendResetPasswordEmailRo = z.infer;
+
+export const sendResetPasswordEmailRoute = registerRoute({
+ method: 'post',
+ path: SEND_RESET_PASSWORD_EMAIL,
+ description: 'Send reset password email',
+ request: {
+ body: {
+ content: {
+ 'application/json': {
+ schema: sendResetPasswordEmailRoSchema,
+ },
+ },
+ },
+ },
+ tags: ['auth'],
+ responses: {
+ 200: {
+ description: 'Successfully sent reset password email',
+ },
+ },
+});
+
+export const sendResetPasswordEmail = async (ro: ISendResetPasswordEmailRo) => {
+ return axios.post(SEND_RESET_PASSWORD_EMAIL, ro);
+};
diff --git a/packages/openapi/src/auth/user-me.ts b/packages/openapi/src/auth/user-me.ts
index ab82de850..a081be60a 100644
--- a/packages/openapi/src/auth/user-me.ts
+++ b/packages/openapi/src/auth/user-me.ts
@@ -13,6 +13,7 @@ export const userMeVoSchema = z.object({
email: z.string().email(),
phone: z.string().nullable().optional(),
notifyMeta: userNotifyMetaSchema,
+ hasPassword: z.boolean(),
});
export type IUserMeVo = z.infer;
diff --git a/packages/openapi/src/base/create-from-template.ts b/packages/openapi/src/base/create-from-template.ts
index 8370415ef..05c77aff9 100644
--- a/packages/openapi/src/base/create-from-template.ts
+++ b/packages/openapi/src/base/create-from-template.ts
@@ -5,7 +5,7 @@ import { z } from '../zod';
import type { ICreateBaseVo } from './create';
import { createBaseVoSchema } from './create';
-export const CREATE_BASE_FROM_TEMPLATE = '/base/createFromTemplate';
+export const CREATE_BASE_FROM_TEMPLATE = '/base/create-from-template';
export const createBaseFromTemplateRoSchema = z.object({
spaceId: z.string(),
diff --git a/packages/openapi/src/base/create.ts b/packages/openapi/src/base/create.ts
index 21971a9c2..84495b56e 100644
--- a/packages/openapi/src/base/create.ts
+++ b/packages/openapi/src/base/create.ts
@@ -9,7 +9,6 @@ export const createBaseRoSchema = z.object({
spaceId: z.string(),
name: z.string().optional(),
icon: z.string().optional(),
- order: z.number().optional(),
});
export type ICreateBaseRo = z.infer;
@@ -18,7 +17,6 @@ export const createBaseVoSchema = z.object({
id: z.string(),
name: z.string(),
spaceId: z.string(),
- order: z.number(),
});
export type ICreateBaseVo = z.infer;
diff --git a/packages/openapi/src/base/get.ts b/packages/openapi/src/base/get.ts
index 3b69537e2..83bfc10a8 100644
--- a/packages/openapi/src/base/get.ts
+++ b/packages/openapi/src/base/get.ts
@@ -10,7 +10,6 @@ export const getBaseVoSchema = z.object({
id: z.string(),
name: z.string(),
spaceId: z.string(),
- order: z.number(),
icon: z.string().nullable(),
role: spaceRolesSchema,
});
diff --git a/packages/openapi/src/base/index.ts b/packages/openapi/src/base/index.ts
index 452e1cf63..c9bffd894 100644
--- a/packages/openapi/src/base/index.ts
+++ b/packages/openapi/src/base/index.ts
@@ -2,6 +2,7 @@ export * from './create';
export * from './delete';
export * from './get';
export * from './update';
+export * from './update-order';
export * from './all-list';
export * from './collaborator-get-list';
export * from './duplicate';
diff --git a/packages/openapi/src/base/update-order.ts b/packages/openapi/src/base/update-order.ts
new file mode 100644
index 000000000..7d3b58cf0
--- /dev/null
+++ b/packages/openapi/src/base/update-order.ts
@@ -0,0 +1,42 @@
+import type { RouteConfig } from '@asteasolutions/zod-to-openapi';
+import { axios } from '../axios';
+import { registerRoute, urlBuilder } from '../utils';
+import type { IUpdateOrderRo } from '../view/update-order';
+import { updateOrderRoSchema } from '../view/update-order';
+import { z } from '../zod';
+
+export const BASE_ORDER = '/base/{baseId}/order';
+
+export const updateBaseOrderRoute: RouteConfig = registerRoute({
+ method: 'put',
+ path: BASE_ORDER,
+ description: 'Update base order',
+ request: {
+ params: z.object({
+ baseId: z.string(),
+ }),
+ body: {
+ content: {
+ 'application/json': {
+ schema: updateOrderRoSchema,
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: 'Successfully update.',
+ },
+ },
+ tags: ['base'],
+});
+
+export const updateBaseOrder = async (params: { baseId: string } & IUpdateOrderRo) => {
+ const { baseId, ...orderRo } = params;
+ return axios.put(
+ urlBuilder(BASE_ORDER, {
+ baseId,
+ }),
+ orderRo
+ );
+};
diff --git a/packages/openapi/src/base/update.ts b/packages/openapi/src/base/update.ts
index 8013835c2..b41b4ce41 100644
--- a/packages/openapi/src/base/update.ts
+++ b/packages/openapi/src/base/update.ts
@@ -14,7 +14,6 @@ export const updateBaseVoSchema = z.object({
spaceId: z.string(),
name: z.string(),
icon: z.string().emoji().optional(),
- order: z.number(),
});
export type IUpdateBaseVo = z.infer;
diff --git a/packages/openapi/src/field/update.ts b/packages/openapi/src/field/update.ts
index 018cd32e7..c885f4f60 100644
--- a/packages/openapi/src/field/update.ts
+++ b/packages/openapi/src/field/update.ts
@@ -1,5 +1,5 @@
import type { RouteConfig } from '@asteasolutions/zod-to-openapi';
-import type { IFieldVo, IUpdateFieldRo } from '@teable/core';
+import type { IUpdateFieldRo } from '@teable/core';
import { updateFieldRoSchema } from '@teable/core';
import { axios } from '../axios';
import { registerRoute, urlBuilder } from '../utils';
@@ -35,7 +35,7 @@ export const UpdateFieldRoute: RouteConfig = registerRoute({
});
export const updateField = async (tableId: string, fieldId: string, fieldRo: IUpdateFieldRo) => {
- return axios.patch(
+ return axios.patch(
urlBuilder(UPDATE_FIELD, {
tableId,
fieldId,
diff --git a/packages/openapi/src/space/get-base-list.ts b/packages/openapi/src/space/get-base-list.ts
index f0d440056..1fbf5ecca 100644
--- a/packages/openapi/src/space/get-base-list.ts
+++ b/packages/openapi/src/space/get-base-list.ts
@@ -8,7 +8,7 @@ import { z } from '../zod';
export const GET_BASE_LIST = '/space/{spaceId}/base';
export const getBaseListRoSchema = z.object({
- spaceId: z.string().optional(),
+ spaceId: z.string(),
});
export type IGetBasesListRo = z.infer;
diff --git a/packages/openapi/src/table/update-order.ts b/packages/openapi/src/table/update-order.ts
index 6d5f81d45..7013f03cf 100644
--- a/packages/openapi/src/table/update-order.ts
+++ b/packages/openapi/src/table/update-order.ts
@@ -1,16 +1,12 @@
import type { RouteConfig } from '@asteasolutions/zod-to-openapi';
import { axios } from '../axios';
import { registerRoute, urlBuilder } from '../utils';
+import type { IUpdateOrderRo } from '../view/update-order';
+import { updateOrderRoSchema } from '../view/update-order';
import { z } from '../zod';
export const TABLE_ORDER = '/base/{baseId}/table/{tableId}/order';
-export const tableOrderRoSchema = z.object({
- order: z.number(),
-});
-
-export type ITableOrderRo = z.infer;
-
export const updateTableOrderRoute: RouteConfig = registerRoute({
method: 'put',
path: TABLE_ORDER,
@@ -23,7 +19,7 @@ export const updateTableOrderRoute: RouteConfig = registerRoute({
body: {
content: {
'application/json': {
- schema: tableOrderRoSchema,
+ schema: updateOrderRoSchema,
},
},
},
@@ -36,12 +32,16 @@ export const updateTableOrderRoute: RouteConfig = registerRoute({
tags: ['table'],
});
-export const updateTableOrder = async (baseId: string, tableId: string, data: ITableOrderRo) => {
+export const updateTableOrder = async (
+ baseId: string,
+ tableId: string,
+ orderRo: IUpdateOrderRo
+) => {
return axios.put(
urlBuilder(TABLE_ORDER, {
baseId,
tableId,
}),
- data
+ orderRo
);
};
diff --git a/packages/openapi/src/view/index.ts b/packages/openapi/src/view/index.ts
index 352e4416f..86c7755e3 100644
--- a/packages/openapi/src/view/index.ts
+++ b/packages/openapi/src/view/index.ts
@@ -9,6 +9,7 @@ export * from './update-sort';
export * from './update-group';
export * from './update-options';
export * from './update-order';
+export * from './update-record-order';
export * from './update-name';
export * from './update-description';
export * from './update-share-meta';
diff --git a/packages/openapi/src/view/update-order.ts b/packages/openapi/src/view/update-order.ts
index 549b089fe..a006f1510 100644
--- a/packages/openapi/src/view/update-order.ts
+++ b/packages/openapi/src/view/update-order.ts
@@ -5,14 +5,13 @@ import { z } from '../zod';
export const VIEW_ORDER = '/table/{tableId}/view/{viewId}/order';
-export interface IViewOrderRo {
- order: number;
-}
-
-export const viewOrderRoSchema = z.object({
- order: z.number(),
+export const updateOrderRoSchema = z.object({
+ anchorId: z.string(),
+ position: z.enum(['before', 'after']),
});
+export type IUpdateOrderRo = z.infer;
+
export const updateViewOrderRoute: RouteConfig = registerRoute({
method: 'put',
path: VIEW_ORDER,
@@ -25,7 +24,7 @@ export const updateViewOrderRoute: RouteConfig = registerRoute({
body: {
content: {
'application/json': {
- schema: viewOrderRoSchema,
+ schema: updateOrderRoSchema,
},
},
},
@@ -38,7 +37,7 @@ export const updateViewOrderRoute: RouteConfig = registerRoute({
tags: ['view'],
});
-export const updateViewOrder = async (tableId: string, viewId: string, orderRo: IViewOrderRo) => {
+export const updateViewOrder = async (tableId: string, viewId: string, orderRo: IUpdateOrderRo) => {
return axios.put(
urlBuilder(VIEW_ORDER, {
tableId,
diff --git a/packages/openapi/src/view/update-record-order.ts b/packages/openapi/src/view/update-record-order.ts
new file mode 100644
index 000000000..792141b5f
--- /dev/null
+++ b/packages/openapi/src/view/update-record-order.ts
@@ -0,0 +1,58 @@
+import type { RouteConfig } from '@asteasolutions/zod-to-openapi';
+import { axios } from '../axios';
+import { registerRoute, urlBuilder } from '../utils';
+import { z } from '../zod';
+
+export const updateRecordOrdersRoSchema = z.object({
+ anchorId: z.string().openapi({
+ description: 'Id of the record that you want to move other records around',
+ }),
+ position: z.enum(['before', 'after']),
+ recordIds: z.string().array().max(1000).openapi({
+ description: 'Ids of those records you want to move',
+ maxLength: 1000,
+ }),
+});
+
+export type IUpdateRecordOrdersRo = z.infer;
+
+export const RECORD_ORDER = '/table/{tableId}/view/{viewId}/record-order';
+
+export const updateRecordOrdersRoute: RouteConfig = registerRoute({
+ method: 'put',
+ path: RECORD_ORDER,
+ description: 'Update record order in view',
+ request: {
+ params: z.object({
+ tableId: z.string(),
+ viewId: z.string(),
+ }),
+ body: {
+ content: {
+ 'application/json': {
+ schema: updateRecordOrdersRoSchema,
+ },
+ },
+ },
+ },
+ responses: {
+ 200: {
+ description: 'Successfully update.',
+ },
+ },
+ tags: ['view'],
+});
+
+export const updateRecordOrders = async (
+ tableId: string,
+ viewId: string,
+ orderRo: IUpdateRecordOrdersRo
+) => {
+ return axios.put(
+ urlBuilder(RECORD_ORDER, {
+ tableId,
+ viewId,
+ }),
+ orderRo
+ );
+};
diff --git a/packages/sdk/package.json b/packages/sdk/package.json
index 1797aee76..33b0813aa 100644
--- a/packages/sdk/package.json
+++ b/packages/sdk/package.json
@@ -30,15 +30,16 @@
"typecheck": "tsc --project ./tsconfig.build.json --noEmit",
"test": "run-s test-unit",
"test-unit": "vitest run --silent",
+ "test-unit-cover": "pnpm test-unit --coverage",
"fix-all-files": "eslint . --ext .ts,.tsx,.js,.jsx,.cjs,.mjs --fix"
},
"dependencies": {
"@belgattitude/http-exception": "1.5.0",
- "@codemirror/autocomplete": "6.13.0",
+ "@codemirror/autocomplete": "6.15.0",
"@codemirror/commands": "6.3.3",
"@codemirror/language": "6.10.1",
"@codemirror/state": "6.4.1",
- "@codemirror/view": "6.25.1",
+ "@codemirror/view": "6.26.0",
"@dnd-kit/core": "6.1.0",
"@dnd-kit/sortable": "8.0.0",
"@dnd-kit/utilities": "3.2.2",
@@ -52,18 +53,18 @@
"@teable/ui-lib": "workspace:*",
"@types/mousetrap": "1.6.15",
"antlr4ts": "0.5.0-alpha.4",
- "axios": "1.6.7",
+ "axios": "1.6.8",
"class-transformer": "0.5.1",
"classnames": "2.5.1",
"date-fns": "3.3.1",
"dayjs": "1.11.10",
"dequal": "2.0.3",
"fuse.js": "7.0.0",
- "immer": "10.0.3",
+ "immer": "10.0.4",
"knex": "3.1.0",
"lodash": "4.17.21",
"lru-cache": "10.2.0",
- "lucide-react": "0.349.0",
+ "lucide-react": "0.358.0",
"mousetrap": "1.6.5",
"react-day-picker": "8.10.0",
"react-hammerjs": "1.0.1",
@@ -85,13 +86,14 @@
"@teable/eslint-config-bases": "workspace:^",
"@testing-library/jest-dom": "6.4.2",
"@testing-library/react": "14.2.1",
- "@types/lodash": "4.14.202",
+ "@types/lodash": "4.17.0",
"@types/node": "20.9.0",
"@types/react": "18.2.64",
"@types/react-dom": "18.2.21",
"@types/react-hammerjs": "1.0.7",
"@types/scroller": "0.1.5",
"@types/sharedb": "3.3.10",
+ "@vitest/coverage-v8": "1.4.0",
"@vitejs/plugin-react-swc": "3.6.0",
"cross-env": "7.0.3",
"eslint": "8.57.0",
@@ -105,7 +107,7 @@
"tailwindcss": "3.4.1",
"typescript": "5.4.2",
"vite-plugin-svgr": "4.2.0",
- "vite-tsconfig-paths": "4.3.1",
- "vitest": "1.3.1"
+ "vite-tsconfig-paths": "4.3.2",
+ "vitest": "1.4.0"
}
}
diff --git a/packages/sdk/src/components/editor/formula/constants.ts b/packages/sdk/src/components/editor/formula/constants.ts
index f5c67ae23..f1b2ac7ec 100644
--- a/packages/sdk/src/components/editor/formula/constants.ts
+++ b/packages/sdk/src/components/editor/formula/constants.ts
@@ -195,7 +195,7 @@ export const FORMULA_FUNCTIONS_MAP = new Map 1\nODD(-0.1) => -1',
},
],
diff --git a/packages/sdk/src/components/grid-enhancements/hooks/use-grid-async-records.ts b/packages/sdk/src/components/grid-enhancements/hooks/use-grid-async-records.ts
index a6a2b0e4f..8356a9a8e 100644
--- a/packages/sdk/src/components/grid-enhancements/hooks/use-grid-async-records.ts
+++ b/packages/sdk/src/components/grid-enhancements/hooks/use-grid-async-records.ts
@@ -2,11 +2,10 @@ import type { IRecord, IGetRecordsRo } from '@teable/core';
import { inRange, debounce } from 'lodash';
import { useCallback, useEffect, useRef, useState, useMemo } from 'react';
import type { IGridProps, IRectangle } from '../..';
+import { useTableId } from '../../../hooks';
import { useRecords } from '../../../hooks/use-records';
-import { useRowCount } from '../../../hooks/use-row-count';
import { useViewId } from '../../../hooks/use-view-id';
-import type { Record } from '../../../model';
-import { reorder } from '../../../utils';
+import { Record } from '../../../model';
// eslint-disable-next-line
export const LOAD_PAGE_SIZE = 300;
@@ -33,8 +32,8 @@ export const useGridAsyncRecords = (
...initQuery,
});
const recordsQuery = useMemo(() => ({ ...query, ...outerQuery }), [query, outerQuery]);
+ const tableId = useTableId();
const viewId = useViewId();
- const rowCount = useRowCount();
const queryRef = useRef(query);
queryRef.current = query;
const records = useRecords(recordsQuery, initRecords);
@@ -124,34 +123,39 @@ export const useGridAsyncRecords = (
const onRowOrdered = useCallback(
(rowIndexCollection: number[], newRowIndex: number) => {
- const operationRecords: Record[] = [];
+ const operationRecordIds: string[] = [];
for (const rowIndex of rowIndexCollection) {
const record = loadedRecordMap[rowIndex];
if (!record) {
throw new Error('Can not find record by index: ' + rowIndex);
}
- operationRecords.push(record);
+ operationRecordIds.push(record.id);
}
if (!viewId) {
throw new Error('Can not find view id');
}
- const newOrders = reorder(
- rowIndexCollection.length,
- newRowIndex,
- rowCount ?? initRecords?.length ?? 0,
- (index) => {
- return loadedRecordMap[index].recordOrder[viewId];
- }
- );
-
- operationRecords.forEach((record, index) => {
- record.updateRecordOrder(viewId, newOrders[index]);
+ if (newRowIndex === -1) {
+ Record.updateRecordOrders(tableId as string, viewId, {
+ anchorId: operationRecordIds[0],
+ position: 'before',
+ recordIds: operationRecordIds,
+ });
+ return;
+ }
+ const record = loadedRecordMap[newRowIndex];
+ if (!record) {
+ throw new Error("Can't find target record by index: " + newRowIndex);
+ }
+ Record.updateRecordOrders(tableId as string, viewId, {
+ anchorId: record.id,
+ position: 'after',
+ recordIds: operationRecordIds,
});
},
- [loadedRecordMap, viewId, rowCount, initRecords?.length]
+ [viewId, loadedRecordMap, tableId]
);
return {
diff --git a/packages/sdk/src/context/__tests__/createSessionContext.tsx b/packages/sdk/src/context/__tests__/createSessionContext.tsx
new file mode 100644
index 000000000..06bcbd987
--- /dev/null
+++ b/packages/sdk/src/context/__tests__/createSessionContext.tsx
@@ -0,0 +1,22 @@
+import { noop } from 'lodash';
+import { SessionContext, type ISessionContext } from '../session';
+
+export const createSessionContext = (context: Partial = {}) => {
+ const defaultContext: ISessionContext = {
+ refresh: noop,
+ refreshAvatar: noop,
+ user: {
+ id: 'usrxxxxxx',
+ name: 'teable',
+ email: 'example@teable.io',
+ notifyMeta: {},
+ hasPassword: true,
+ },
+ };
+ // eslint-disable-next-line react/display-name
+ return ({ children }: { children: React.ReactNode }) => (
+
+ {children}
+
+ );
+};
diff --git a/packages/sdk/src/context/session/SessionContext.ts b/packages/sdk/src/context/session/SessionContext.ts
index d5fbf0c68..569767e9a 100644
--- a/packages/sdk/src/context/session/SessionContext.ts
+++ b/packages/sdk/src/context/session/SessionContext.ts
@@ -8,9 +8,9 @@ export type ISession = {
};
export type ISessionContext = ISession & {
- refresh?: () => void;
- refreshAvatar?: () => void;
+ refresh: () => void;
+ refreshAvatar: () => void;
};
// eslint-disable-next-line @typescript-eslint/naming-convention
-export const SessionContext = React.createContext({});
+export const SessionContext = React.createContext(null!);
diff --git a/packages/sdk/src/context/session/SessionProvider.tsx b/packages/sdk/src/context/session/SessionProvider.tsx
index 75b03e1c0..b47715ebf 100644
--- a/packages/sdk/src/context/session/SessionProvider.tsx
+++ b/packages/sdk/src/context/session/SessionProvider.tsx
@@ -40,7 +40,7 @@ export const SessionProvider: React.FC) => {
+ const AppProvider = createAppContext(appContext);
+ const SessionProvider = createSessionContext();
+
+ // eslint-disable-next-line react/display-name
+ return ({ children }: { children: React.ReactNode }) => (
+
+ {children}
+
+ );
+};
+
describe('useInstances hook', () => {
const mockQueryMethods = {
on: vi.fn(),
@@ -75,14 +89,14 @@ describe('useInstances hook', () => {
it('should initialize with initData when connected is false', () => {
const { result } = renderHook(() => useInstances({ ...mockProps, initData }), {
- wrapper: createAppContext({ ...mockAppContext, connected: false }),
+ wrapper: createUseInstancesWrap({ ...mockAppContext, connected: false }),
});
expect(result.current).toEqual(initData.map((doc) => createTestInstance(doc)));
});
it('should create a subscribe query with correct parameters', () => {
renderHook(() => useInstances(mockProps), {
- wrapper: createAppContext(mockAppContext),
+ wrapper: createUseInstancesWrap(mockAppContext),
});
expect(mockAppContext.connection.createSubscribeQuery).toHaveBeenCalledWith(
'testCollection',
@@ -92,7 +106,7 @@ describe('useInstances hook', () => {
it('should update instances on ready event', () => {
const { result } = renderHook(() => useInstances(mockProps), {
- wrapper: createAppContext(mockAppContext),
+ wrapper: createUseInstancesWrap(mockAppContext),
});
expect(result.current).toEqual([]);
@@ -114,7 +128,7 @@ describe('useInstances hook', () => {
];
const { result } = renderHook(() => useInstances(mockProps), {
- wrapper: createAppContext(mockAppContext),
+ wrapper: createUseInstancesWrap(mockAppContext),
});
expect(result.current).toEqual([]);
@@ -143,7 +157,7 @@ describe('useInstances hook', () => {
];
const { result } = renderHook(() => useInstances(mockProps), {
- wrapper: createAppContext(mockAppContext),
+ wrapper: createUseInstancesWrap(mockAppContext),
});
expect(result.current).toEqual([]);
@@ -164,7 +178,7 @@ describe('useInstances hook', () => {
const moveData = [initData[1], initData[0]];
const { result } = renderHook(() => useInstances(mockProps), {
- wrapper: createAppContext(mockAppContext),
+ wrapper: createUseInstancesWrap(mockAppContext),
});
expect(result.current).toEqual([]);
@@ -181,7 +195,7 @@ describe('useInstances hook', () => {
it('doc on op', () => {
const { result } = renderHook(() => useInstances(mockProps), {
- wrapper: createAppContext(mockAppContext),
+ wrapper: createUseInstancesWrap(mockAppContext),
});
expect(result.current).toEqual([]);
diff --git a/packages/sdk/src/model/base.ts b/packages/sdk/src/model/base.ts
index addf08fbc..0c2f5bd27 100644
--- a/packages/sdk/src/model/base.ts
+++ b/packages/sdk/src/model/base.ts
@@ -7,17 +7,15 @@ export class Base implements IGetBaseVo {
id: string;
name: string;
spaceId: string;
- order: number;
icon: string | null;
role: SpaceRole;
knex: Knex;
constructor(base: IGetBaseVo, driver: DriverClient) {
- const { id, name, order, spaceId, icon, role } = base;
+ const { id, name, spaceId, icon, role } = base;
this.id = id;
this.name = name;
this.spaceId = spaceId;
- this.order = order;
this.icon = icon;
this.role = role;
this.knex = knex({ client: driver });
diff --git a/packages/sdk/src/model/record/record.ts b/packages/sdk/src/model/record/record.ts
index 971a09dce..4dce4d1cb 100644
--- a/packages/sdk/src/model/record/record.ts
+++ b/packages/sdk/src/model/record/record.ts
@@ -1,7 +1,7 @@
/* eslint-disable @typescript-eslint/naming-convention */
import type { IRecord } from '@teable/core';
import { RecordOpBuilder, RecordCore } from '@teable/core';
-import { createRecords, getRecords } from '@teable/openapi';
+import { createRecords, getRecords, updateRecordOrders } from '@teable/openapi';
import type { Doc } from 'sharedb/lib/client';
import { requestWrap } from '../../utils/requestWrap';
import type { IFieldInstance } from '../field/factory';
@@ -11,6 +11,8 @@ export class Record extends RecordCore {
static getRecords = requestWrap(getRecords);
+ static updateRecordOrders = requestWrap(updateRecordOrders);
+
constructor(
protected doc: Doc,
protected fieldMap: { [fieldId: string]: IFieldInstance }
@@ -35,22 +37,4 @@ export class Record extends RecordCore {
return error;
}
}
-
- async updateRecordOrder(viewId: string, order: number) {
- const operation = RecordOpBuilder.editor.setRecordOrder.build({
- viewId,
- newOrder: order,
- oldOrder: this.recordOrder[viewId],
- });
-
- try {
- return await new Promise((resolve, reject) => {
- this.doc.submitOp([operation], undefined, (error) => {
- error ? reject(error) : resolve(undefined);
- });
- });
- } catch (error) {
- return error;
- }
- }
}
diff --git a/packages/sdk/src/model/table/table.ts b/packages/sdk/src/model/table/table.ts
index 1768e6463..bce73504e 100644
--- a/packages/sdk/src/model/table/table.ts
+++ b/packages/sdk/src/model/table/table.ts
@@ -1,6 +1,14 @@
/* eslint-disable @typescript-eslint/naming-convention */
-import type { IFieldRo, IRecord, ITableVo, IUpdateFieldRo, IViewRo } from '@teable/core';
+import type {
+ IFieldRo,
+ IRecord,
+ IRecordInsertOrderRo,
+ ITableVo,
+ IUpdateFieldRo,
+ IViewRo,
+} from '@teable/core';
import { FieldKeyType, TableCore } from '@teable/core';
+import type { IUpdateOrderRo } from '@teable/openapi';
import {
createTable,
deleteTable,
@@ -57,8 +65,8 @@ export class Table extends TableCore {
return requestWrap(updateTableIcon)(this.baseId, this.id, { icon });
}
- async updateOrder(order: number) {
- return requestWrap(updateTableOrder)(this.baseId, this.id, { order });
+ async updateOrder(orderRo: IUpdateOrderRo) {
+ return requestWrap(updateTableOrder)(this.baseId, this.id, orderRo);
}
async createView(viewRo: IViewRo) {
@@ -69,15 +77,15 @@ export class Table extends TableCore {
return View.deleteView(this.id, viewId);
}
- async createRecord(recordFields: IRecord['fields'], recordOrder?: { [viewId: string]: number }) {
+ async createRecord(recordFields: IRecord['fields'], recordOrder?: IRecordInsertOrderRo) {
return Record.createRecords(this.id, {
fieldKeyType: FieldKeyType.Id,
records: [
{
fields: recordFields,
- recordOrder,
},
],
+ order: recordOrder,
});
}
diff --git a/packages/sdk/src/model/view/view.ts b/packages/sdk/src/model/view/view.ts
index 6fef85320..7fbe753aa 100644
--- a/packages/sdk/src/model/view/view.ts
+++ b/packages/sdk/src/model/view/view.ts
@@ -9,6 +9,7 @@ import type {
IGroup,
} from '@teable/core';
import { ViewCore } from '@teable/core';
+import type { IUpdateOrderRo } from '@teable/openapi';
import {
createView,
deleteView,
@@ -73,8 +74,8 @@ export abstract class View extends ViewCore {
return await requestWrap(updateViewGroup)(this.tableId, this.id, { group });
}
- async updateOrder(order: number) {
- return await requestWrap(updateViewOrder)(this.tableId, this.id, { order });
+ async updateOrder(orderRo: IUpdateOrderRo) {
+ return await requestWrap(updateViewOrder)(this.tableId, this.id, orderRo);
}
async updateName(name: string) {
diff --git a/packages/sdk/tsconfig.build.json b/packages/sdk/tsconfig.build.json
index 8c8ce47b7..35453ba67 100644
--- a/packages/sdk/tsconfig.build.json
+++ b/packages/sdk/tsconfig.build.json
@@ -8,6 +8,6 @@
"jsx": "react-jsx",
"paths": {}
},
- "exclude": ["dist", "**/__tests__/*", "**/*spec.ts"],
+ "exclude": ["dist", "**/__tests__/*", "**/*spec.ts", "**/*spec.tsx"],
"include": ["src"]
}
diff --git a/packages/sdk/vitest.config.ts b/packages/sdk/vitest.config.ts
index 471d58da7..da4b4e506 100644
--- a/packages/sdk/vitest.config.ts
+++ b/packages/sdk/vitest.config.ts
@@ -1,7 +1,7 @@
import react from '@vitejs/plugin-react-swc';
import svgr from 'vite-plugin-svgr';
import tsconfigPaths from 'vite-tsconfig-paths';
-import { defineConfig } from 'vitest/config';
+import { configDefaults, defineConfig } from 'vitest/config';
const testFiles = ['./src/**/*.{test,spec}.{js,jsx,ts,tsx}'];
export default defineConfig({
@@ -11,10 +11,11 @@ export default defineConfig({
}),
tsconfigPaths(),
svgr({
- // svgr options: https://react-svgr.com/docs/options/
+ // svgr options: https://react-svgr.com/docs/options/include: ['src/**/*'],
svgrOptions: {},
}),
],
+ cacheDir: '../../.cache/vitest/sdk',
test: {
globals: true,
environment: 'happy-dom',
@@ -23,20 +24,12 @@ export default defineConfig({
},
passWithNoTests: false,
setupFiles: './config/tests/setupVitest.ts',
- cache: {
- dir: '../../.cache/vitest/sdk',
- },
coverage: {
provider: 'v8',
- reporter: ['text', 'clover'],
- extension: ['js', 'jsx', 'ts', 'tsx'],
+ extension: ['.js', '.jsx', '.ts', '.tsx'],
+ include: ['src/**/*'],
},
include: testFiles,
- exclude: [
- '**/node_modules/**',
- '**/dist/**',
- '**/.next/**',
- '**/.{idea,git,cache,output,temp}/**',
- ],
+ exclude: [...configDefaults.exclude, '**/.next/**'],
},
});
diff --git a/packages/ui-lib/package.json b/packages/ui-lib/package.json
index 691c3cf12..6f844cfaf 100644
--- a/packages/ui-lib/package.json
+++ b/packages/ui-lib/package.json
@@ -51,15 +51,15 @@
},
"devDependencies": {
"@mdx-js/react": "3.0.1",
- "@storybook/addon-actions": "7.6.17",
- "@storybook/addon-docs": "7.6.17",
- "@storybook/addon-essentials": "7.6.17",
- "@storybook/addon-links": "7.6.17",
+ "@storybook/addon-actions": "8.0.1",
+ "@storybook/addon-docs": "8.0.1",
+ "@storybook/addon-essentials": "8.0.1",
+ "@storybook/addon-links": "8.0.1",
"@storybook/addon-postcss": "2.0.0",
- "@storybook/addon-storysource": "7.6.17",
- "@storybook/builder-webpack5": "7.6.17",
+ "@storybook/addon-storysource": "8.0.1",
+ "@storybook/builder-webpack5": "8.0.1",
"@storybook/manager-webpack5": "6.5.16",
- "@storybook/react": "7.6.17",
+ "@storybook/react": "8.0.1",
"@tailwindcss/aspect-ratio": "0.4.2",
"@teable/eslint-config-bases": "workspace:^",
"@testing-library/react": "14.2.1",
@@ -72,7 +72,7 @@
"eslint": "8.57.0",
"microbundle": "0.15.1",
"npm-run-all2": "6.1.2",
- "postcss": "8.4.35",
+ "postcss": "8.4.36",
"postcss-flexbugs-fixes": "5.0.2",
"prettier": "3.2.5",
"react": "18.2.0",
@@ -114,14 +114,15 @@
"@teable/icons": "workspace:^",
"class-variance-authority": "0.7.0",
"clsx": "2.1.0",
- "cmdk": "0.2.1",
+ "cmdk": "1.0.0",
+ "date-fns": "3.3.1",
"deepmerge": "4.3.1",
- "next-themes": "0.2.1",
+ "next-themes": "0.3.0",
"react-day-picker": "8.10.0",
- "react-hook-form": "7.51.0",
- "react-resizable-panels": "2.0.12",
+ "react-hook-form": "7.51.1",
+ "react-resizable-panels": "2.0.13",
"sonner": "1.4.3",
- "tailwind-merge": "2.2.1",
+ "tailwind-merge": "2.2.2",
"tailwindcss-animate": "1.0.7",
"zod": "3.22.4"
}
diff --git a/packages/ui-lib/src/base/selector/Selector.tsx b/packages/ui-lib/src/base/selector/Selector.tsx
index 03943563a..ce232850f 100644
--- a/packages/ui-lib/src/base/selector/Selector.tsx
+++ b/packages/ui-lib/src/base/selector/Selector.tsx
@@ -11,7 +11,6 @@ import {
CommandEmpty,
CommandItem,
CommandList,
- CommandGroup,
} from '../../shadcn';
export interface ISelectorItem {
diff --git a/packages/ui-lib/src/shadcn/ui/command.tsx b/packages/ui-lib/src/shadcn/ui/command.tsx
index ccde15e31..3134794fe 100644
--- a/packages/ui-lib/src/shadcn/ui/command.tsx
+++ b/packages/ui-lib/src/shadcn/ui/command.tsx
@@ -116,7 +116,7 @@ const CommandItem = React.forwardRef<
=6.9.0'}
@@ -3319,10 +3364,10 @@ packages:
'@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.24.0)
'@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.24.0)
'@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.0)
- babel-plugin-polyfill-corejs2: 0.4.8(@babel/core@7.24.0)
+ babel-plugin-polyfill-corejs2: 0.4.10(@babel/core@7.24.0)
babel-plugin-polyfill-corejs3: 0.9.0(@babel/core@7.24.0)
babel-plugin-polyfill-regenerator: 0.5.5(@babel/core@7.24.0)
- core-js-compat: 3.36.0
+ core-js-compat: 3.36.1
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -3441,6 +3486,10 @@ packages:
resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==}
dev: true
+ /@bcoe/v8-coverage@0.2.3:
+ resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
+ dev: true
+
/@belgattitude/http-exception@1.5.0:
resolution: {integrity: sha512-JIvW/VizUDrxYcXfguUuPjCRE8tJlXBVxXhxCaNldNsMyw/S9gJt5GumAxsIEKiFI94PT4CvHO2PTztnHbU0aw==}
engines: {node: '>=14.16'}
@@ -3648,8 +3697,8 @@ packages:
prettier: 2.8.8
dev: true
- /@codemirror/autocomplete@6.13.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.25.1)(@lezer/common@1.2.1):
- resolution: {integrity: sha512-SuDrho1klTINfbcMPnyro1ZxU9xJtwDMtb62R8TjL/tOl71IoOsvBo1a9x+hDvHhIzkTcJHy2VC+rmpGgYkRSw==}
+ /@codemirror/autocomplete@6.15.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.0)(@lezer/common@1.2.1):
+ resolution: {integrity: sha512-G2Zm0mXznxz97JhaaOdoEG2cVupn4JjPaS4AcNvZzhOsnnG9YVN68VzfoUw6dYTsIxT6a/cmoFEN47KAWhXaOg==}
peerDependencies:
'@codemirror/language': ^6.0.0
'@codemirror/state': ^6.0.0
@@ -3658,7 +3707,7 @@ packages:
dependencies:
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.25.1
+ '@codemirror/view': 6.26.0
'@lezer/common': 1.2.1
dev: false
@@ -3667,7 +3716,7 @@ packages:
dependencies:
'@codemirror/language': 6.10.1
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.25.1
+ '@codemirror/view': 6.26.0
'@lezer/common': 1.2.1
dev: false
@@ -3675,7 +3724,7 @@ packages:
resolution: {integrity: sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==}
dependencies:
'@codemirror/state': 6.4.1
- '@codemirror/view': 6.25.1
+ '@codemirror/view': 6.26.0
'@lezer/common': 1.2.1
'@lezer/highlight': 1.2.0
'@lezer/lr': 1.4.0
@@ -3686,8 +3735,8 @@ packages:
resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==}
dev: false
- /@codemirror/view@6.25.1:
- resolution: {integrity: sha512-2LXLxsQnHDdfGzDvjzAwZh2ZviNJm7im6tGpa0IONIDnFd8RZ80D2SNi8PDi6YjKcMoMRK20v6OmKIdsrwsyoQ==}
+ /@codemirror/view@6.26.0:
+ resolution: {integrity: sha512-nSSmzONpqsNzshPOxiKhK203R6BvABepugAe34QfQDbNDslyjkqBuKgrK5ZBvqNXpfxz5iLrlGTmEfhbQyH46A==}
dependencies:
'@codemirror/state': 6.4.1
style-mod: 4.1.2
@@ -3706,15 +3755,15 @@ packages:
engines: {node: '>=0.1.90'}
dev: true
- /@commitlint/cli@19.0.3(@types/node@20.9.0)(typescript@5.4.2):
- resolution: {integrity: sha512-mGhh/aYPib4Vy4h+AGRloMY+CqkmtdeKPV9poMcZeImF5e3knQ5VYaSeAM0mEzps1dbKsHvABwaDpafLUuM96g==}
+ /@commitlint/cli@19.2.1(@types/node@20.9.0)(typescript@5.4.2):
+ resolution: {integrity: sha512-cbkYUJsLqRomccNxvoJTyv5yn0bSy05BBizVyIcLACkRbVUqYorC351Diw/XFSWC/GtpwiwT2eOvQgFZa374bg==}
engines: {node: '>=v18'}
hasBin: true
dependencies:
'@commitlint/format': 19.0.3
- '@commitlint/lint': 19.0.3
- '@commitlint/load': 19.0.3(@types/node@20.9.0)(typescript@5.4.2)
- '@commitlint/read': 19.0.3
+ '@commitlint/lint': 19.1.0
+ '@commitlint/load': 19.2.0(@types/node@20.9.0)(typescript@5.4.2)
+ '@commitlint/read': 19.2.1
'@commitlint/types': 19.0.3
execa: 8.0.1
yargs: 17.7.2
@@ -3723,8 +3772,8 @@ packages:
- typescript
dev: true
- /@commitlint/config-conventional@19.0.3:
- resolution: {integrity: sha512-vh0L8XeLaEzTe8VCxSd0gAFvfTK0RFolrzw4o431bIuWJfi/yRCHJlsDwus7wW2eJaFFDR0VFXJyjGyDQhi4vA==}
+ /@commitlint/config-conventional@19.1.0:
+ resolution: {integrity: sha512-KIKD2xrp6Uuk+dcZVj3++MlzIr/Su6zLE8crEDQCZNvWHNQSeeGbzOlNtsR32TUy6H3JbP7nWgduAHCaiGQ6EA==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/types': 19.0.3
@@ -3772,8 +3821,8 @@ packages:
semver: 7.6.0
dev: true
- /@commitlint/lint@19.0.3:
- resolution: {integrity: sha512-uHPyRqIn57iIplYa5xBr6oNu5aPXKGC4WLeuHfqQHclwIqbJ33g3yA5fIA+/NYnp5ZM2EFiujqHFaVUYj6HlKA==}
+ /@commitlint/lint@19.1.0:
+ resolution: {integrity: sha512-ESjaBmL/9cxm+eePyEr6SFlBUIYlYpI80n+Ltm7IA3MAcrmiP05UMhJdAD66sO8jvo8O4xdGn/1Mt2G5VzfZKw==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/is-ignored': 19.0.3
@@ -3782,17 +3831,17 @@ packages:
'@commitlint/types': 19.0.3
dev: true
- /@commitlint/load@19.0.3(@types/node@20.9.0)(typescript@5.4.2):
- resolution: {integrity: sha512-18Tk/ZcDFRKIoKfEcl7kC+bYkEQ055iyKmGsYDoYWpKf6FUvBrP9bIWapuy/MB+kYiltmP9ITiUx6UXtqC9IRw==}
+ /@commitlint/load@19.2.0(@types/node@20.9.0)(typescript@5.4.2):
+ resolution: {integrity: sha512-XvxxLJTKqZojCxaBQ7u92qQLFMMZc4+p9qrIq/9kJDy8DOrEa7P1yx7Tjdc2u2JxIalqT4KOGraVgCE7eCYJyQ==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/config-validator': 19.0.3
'@commitlint/execute-rule': 19.0.0
- '@commitlint/resolve-extends': 19.0.3
+ '@commitlint/resolve-extends': 19.1.0
'@commitlint/types': 19.0.3
chalk: 5.3.0
- cosmiconfig: 8.3.6(typescript@5.4.2)
- cosmiconfig-typescript-loader: 5.0.0(@types/node@20.9.0)(cosmiconfig@8.3.6)(typescript@5.4.2)
+ cosmiconfig: 9.0.0(typescript@5.4.2)
+ cosmiconfig-typescript-loader: 5.0.0(@types/node@20.9.0)(cosmiconfig@9.0.0)(typescript@5.4.2)
lodash.isplainobject: 4.0.6
lodash.merge: 4.6.2
lodash.uniq: 4.5.0
@@ -3815,18 +3864,19 @@ packages:
conventional-commits-parser: 5.0.0
dev: true
- /@commitlint/read@19.0.3:
- resolution: {integrity: sha512-b5AflTyAXkUx5qKw4TkjjcOccXZHql3JqMi522knTQktq2AubKXFz60Sws+K4FsefwPws6fGz9mqiI/NvsvxFA==}
+ /@commitlint/read@19.2.1:
+ resolution: {integrity: sha512-qETc4+PL0EUv7Q36lJbPG+NJiBOGg7SSC7B5BsPWOmei+Dyif80ErfWQ0qXoW9oCh7GTpTNRoaVhiI8RbhuaNw==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/top-level': 19.0.0
'@commitlint/types': 19.0.3
+ execa: 8.0.1
git-raw-commits: 4.0.0
minimist: 1.2.8
dev: true
- /@commitlint/resolve-extends@19.0.3:
- resolution: {integrity: sha512-18BKmta8OC8+Ub+Q3QGM9l27VjQaXobloVXOrMvu8CpEwJYv62vC/t7Ka5kJnsW0tU9q1eMqJFZ/nN9T/cOaIA==}
+ /@commitlint/resolve-extends@19.1.0:
+ resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==}
engines: {node: '>=v18'}
dependencies:
'@commitlint/config-validator': 19.0.3
@@ -3960,15 +4010,15 @@ packages:
'@css-inline/css-inline-win32-x64-msvc': 0.13.0
dev: false
- /@csstools/cascade-layer-name-parser@1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3):
- resolution: {integrity: sha512-xHxXavWvXB5nAA9IvZtjEzkONM3hPXpxqYK4cEw60LcqPiFjq7ZlEFxOyYFPrG4UdANKtnucNtRVDy7frjq6AA==}
+ /@csstools/cascade-layer-name-parser@1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4):
+ resolution: {integrity: sha512-RRqNjxTZDUhx7pxYOBG/AkCVmPS3zYzfE47GEhIGkFuWFTQGJBgWOUUkKNo5MfxIfjDz5/1L3F3rF1oIsYaIpw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.6.0
- '@csstools/css-tokenizer': ^2.2.3
+ '@csstools/css-parser-algorithms': ^2.6.1
+ '@csstools/css-tokenizer': ^2.2.4
dependencies:
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
dev: true
/@csstools/color-helpers@4.0.0:
@@ -3976,413 +4026,413 @@ packages:
engines: {node: ^14 || ^16 || >=18}
dev: true
- /@csstools/css-calc@1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3):
- resolution: {integrity: sha512-+7bUzB5I4cI97tKmBJA8ilTl/YRo6VAOdlrnd/4x2NyK60nvYurGKa5TZpE1zcgIrTC97iJRE0/V65feyFytuw==}
+ /@csstools/css-calc@1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4):
+ resolution: {integrity: sha512-iQqIW5vDPqQdLx07/atCuNKDprhIWjB0b8XRhUyXZWBZYUG+9mNyFwyu30rypX84WLevVo25NYW2ipxR8WyseQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.6.0
- '@csstools/css-tokenizer': ^2.2.3
+ '@csstools/css-parser-algorithms': ^2.6.1
+ '@csstools/css-tokenizer': ^2.2.4
dependencies:
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
dev: true
- /@csstools/css-color-parser@1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3):
- resolution: {integrity: sha512-5GEkuuUxD5dael3xoWjyf7gAPAi4pwm8X8JW/nUMhxntGY4Wo4Lp7vKlex4V5ZgTfAoov14rZFsZyOantdTatg==}
+ /@csstools/css-color-parser@1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4):
+ resolution: {integrity: sha512-mlt0PomBlDXMGcbPAqCG36Fw35LZTtaSgCQCHEs4k8QTv1cUKe0rJDlFSJMHtqrgQiLC7LAAS9+s9kKQp2ou/Q==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.6.0
- '@csstools/css-tokenizer': ^2.2.3
+ '@csstools/css-parser-algorithms': ^2.6.1
+ '@csstools/css-tokenizer': ^2.2.4
dependencies:
'@csstools/color-helpers': 4.0.0
- '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
+ '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
dev: true
- /@csstools/css-parser-algorithms@2.6.0(@csstools/css-tokenizer@2.2.3):
- resolution: {integrity: sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==}
+ /@csstools/css-parser-algorithms@2.6.1(@csstools/css-tokenizer@2.2.4):
+ resolution: {integrity: sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
- '@csstools/css-tokenizer': ^2.2.3
+ '@csstools/css-tokenizer': ^2.2.4
dependencies:
- '@csstools/css-tokenizer': 2.2.3
+ '@csstools/css-tokenizer': 2.2.4
dev: true
- /@csstools/css-tokenizer@2.2.3:
- resolution: {integrity: sha512-pp//EvZ9dUmGuGtG1p+n17gTHEOqu9jO+FiCUjNN3BDmyhdA2Jq9QsVeR7K8/2QCK17HSsioPlTW9ZkzoWb3Lg==}
+ /@csstools/css-tokenizer@2.2.4:
+ resolution: {integrity: sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==}
engines: {node: ^14 || ^16 || >=18}
dev: true
- /@csstools/media-query-list-parser@2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3):
- resolution: {integrity: sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==}
+ /@csstools/media-query-list-parser@2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4):
+ resolution: {integrity: sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
- '@csstools/css-parser-algorithms': ^2.6.0
- '@csstools/css-tokenizer': ^2.2.3
+ '@csstools/css-parser-algorithms': ^2.6.1
+ '@csstools/css-tokenizer': ^2.2.4
dependencies:
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
dev: true
- /@csstools/postcss-cascade-layers@4.0.3(postcss@8.4.35):
+ /@csstools/postcss-cascade-layers@4.0.3(postcss@8.4.36):
resolution: {integrity: sha512-RbkQoOH23yGhWVetgBTwFgIOHEyU2tKMN7blTz/YAKKabR6tr9pP7mYS23Q9snFY2hr8WSaV8Le64KdM9BtUSA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15)
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.16)
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /@csstools/postcss-color-function@3.0.10(postcss@8.4.35):
- resolution: {integrity: sha512-jxiXmSl4ZYX8KewFjL5ef6of9uW73VkaHeDb2tqb5q4ZDPYxjusNX1KJ8UXY8+7ydqS5QBo42tVMrSMGy+rDmw==}
+ /@csstools/postcss-color-function@3.0.12(postcss@8.4.36):
+ resolution: {integrity: sha512-amPGGDI4Xmgu7VN2ciKQe0pP/j5raaETT50nzbnkydp9FMw7imKxSUnXdVQU4NmRgpLKIc5Q7jox0MFhMBImIg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-color-mix-function@2.0.10(postcss@8.4.35):
- resolution: {integrity: sha512-zeD856+FDCUjB077pPS+Z9OnTQnqpiJrao3TW+sasCb/gJ3vZCX7sRSRFsRUo0/MntTtJu9hkKv9eMkFmfjydA==}
+ /@csstools/postcss-color-mix-function@2.0.12(postcss@8.4.36):
+ resolution: {integrity: sha512-qpAEGwVVqHSa88i3gLb43IMpT4/LyZEE8HzZylQKKXFVJ7XykXaORTmXySxyH6H+flT+NyCnutKG2fegCVyCug==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-exponential-functions@1.0.4(postcss@8.4.35):
- resolution: {integrity: sha512-frMf0CFVnZoGEKAHlxLy3s4g/tpjyFn5+A+h895UJNm9Uc+ewGT7+EeK7Kh9IHH4pD4FkaGW1vOQtER00PLurQ==}
+ /@csstools/postcss-exponential-functions@1.0.5(postcss@8.4.36):
+ resolution: {integrity: sha512-7S7I7KgwHWQYzJJAoIjRtUf7DQs1dxipeg1A6ikZr0PYapNJX7UHz0evlpE67SQqYj1xBs70gpG7xUv3uLp4PA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- postcss: 8.4.35
+ '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-font-format-keywords@3.0.2(postcss@8.4.35):
+ /@csstools/postcss-font-format-keywords@3.0.2(postcss@8.4.36):
resolution: {integrity: sha512-E0xz2sjm4AMCkXLCFvI/lyl4XO6aN1NCSMMVEOngFDJ+k2rDwfr6NDjWljk1li42jiLNChVX+YFnmfGCigZKXw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /@csstools/postcss-gamut-mapping@1.0.3(postcss@8.4.35):
- resolution: {integrity: sha512-P0+ude1KyCy9LXOe2pHJmpcXK4q/OQbr2Sn2wQSssMw0rALGmny2MfHiCqEu8n6mf2cN6lWDZdzY8enBk8WHXQ==}
+ /@csstools/postcss-gamut-mapping@1.0.5(postcss@8.4.36):
+ resolution: {integrity: sha512-AJ74/4nHXgghLWY4/ydEhu3mzwN8c56EjIGrJsoEhKaNuGBAOtUfE5qbkc9XQQ0G2FMhHggqE+9eRrApeK7ebQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-gradients-interpolation-method@4.0.11(postcss@8.4.35):
- resolution: {integrity: sha512-LFom5jCVUfzF+iuiOZvhvX7RRN8vc+tKpcKo9s4keEBAU2mPwV5/Fgz5iylEfXP/DZbEdq2C0At20urMi/lupw==}
+ /@csstools/postcss-gradients-interpolation-method@4.0.13(postcss@8.4.36):
+ resolution: {integrity: sha512-dBbyxs9g+mrIzmEH+UtrqJUmvcJB/60j0ijhBcVJMHCgl/rKjj8ey6r/pJOI0EhkVsckOu3Prc9AGzH88C+1pQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-hwb-function@3.0.9(postcss@8.4.35):
- resolution: {integrity: sha512-S3/Z+mGHWIKAex7DLsHFDiku5lBEK34avT2My6sGPNCXB38TZjrKI0rd7JdN9oulem5sn+CU7oONyIftui24oQ==}
+ /@csstools/postcss-hwb-function@3.0.11(postcss@8.4.36):
+ resolution: {integrity: sha512-c36FtMFptwGn5CmsfdONA40IlWG2lHeoC/TDyED/7lwiTht5okxe6iLAa9t2LjBBo5AHQSHfeMvOASdXk/SHog==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-ic-unit@3.0.4(postcss@8.4.35):
- resolution: {integrity: sha512-OB6ojl33/TQHhjVx1NI+n3EnYbdUM6Q/mSUv3WFATdcz7IrH/CmBaZt7P1R6j1Xdp58thIa6jm4Je7saGs+2AA==}
+ /@csstools/postcss-ic-unit@3.0.5(postcss@8.4.36):
+ resolution: {integrity: sha512-9CriM/zvKXa/lDARlxs/MgeyKE6ZmmX4V77VLD7VUxKLVSt0Go3NCy/gRMbwGzxbrk3iaHFXnFbc2lNw+/7jcg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /@csstools/postcss-initial@1.0.1(postcss@8.4.35):
+ /@csstools/postcss-initial@1.0.1(postcss@8.4.36):
resolution: {integrity: sha512-wtb+IbUIrIf8CrN6MLQuFR7nlU5C7PwuebfeEXfjthUha1+XZj2RVi+5k/lukToA24sZkYAiSJfHM8uG/UZIdg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-is-pseudo-class@4.0.5(postcss@8.4.35):
+ /@csstools/postcss-is-pseudo-class@4.0.5(postcss@8.4.36):
resolution: {integrity: sha512-qG3MI7IN3KY9UwdaE9E7G7sFydscVW7nAj5OGwaBP9tQPEEVdxXTGI+l1ZW5EUpZFSj+u3q/22fH5+8HI72+Bg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15)
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.16)
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /@csstools/postcss-light-dark-function@1.0.0(postcss@8.4.35):
- resolution: {integrity: sha512-KHo633V16DGo6tmpr1ARAwO73CPBNmDI3PfSQYe7ZBMiv60WEizbcEroK75fHjxKYJ4tj9uCCzp5sYG4cEUqqw==}
+ /@csstools/postcss-light-dark-function@1.0.1(postcss@8.4.36):
+ resolution: {integrity: sha512-CJOcp+m7Njbu91HtYMMoYuZznsvNSpJtLiR/7BO8/bHTXYPiuAZfxunh7wXLkMbHd5dRBgAVAQZ+H4iFqrvWZw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.35):
+ /@csstools/postcss-logical-float-and-clear@2.0.1(postcss@8.4.36):
resolution: {integrity: sha512-SsrWUNaXKr+e/Uo4R/uIsqJYt3DaggIh/jyZdhy/q8fECoJSKsSMr7nObSLdvoULB69Zb6Bs+sefEIoMG/YfOA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.35):
+ /@csstools/postcss-logical-overflow@1.0.1(postcss@8.4.36):
resolution: {integrity: sha512-Kl4lAbMg0iyztEzDhZuQw8Sj9r2uqFDcU1IPl+AAt2nue8K/f1i7ElvKtXkjhIAmKiy5h2EY8Gt/Cqg0pYFDCw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.35):
+ /@csstools/postcss-logical-overscroll-behavior@1.0.1(postcss@8.4.36):
resolution: {integrity: sha512-+kHamNxAnX8ojPCtV8WPcUP3XcqMFBSDuBuvT6MHgq7oX4IQxLIXKx64t7g9LiuJzE7vd06Q9qUYR6bh4YnGpQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-logical-resize@2.0.1(postcss@8.4.35):
+ /@csstools/postcss-logical-resize@2.0.1(postcss@8.4.36):
resolution: {integrity: sha512-W5Gtwz7oIuFcKa5SmBjQ2uxr8ZoL7M2bkoIf0T1WeNqljMkBrfw1DDA8/J83k57NQ1kcweJEjkJ04pUkmyee3A==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /@csstools/postcss-logical-viewport-units@2.0.6(postcss@8.4.35):
- resolution: {integrity: sha512-6hV0ngZh8J7HqNY3kyt+z5ABN/XE18qvrU7ne4YSkKfltrWDnQgGiW/Q+h7bdQz8/W5juAefcdCCAJUIBE7erg==}
+ /@csstools/postcss-logical-viewport-units@2.0.7(postcss@8.4.36):
+ resolution: {integrity: sha512-L4G3zsp/bnU0+WXUyysihCUH14LkfMgUJsS9vKz3vCYbVobOTqQRoNXnEPpyNp8WYyolLqAWbGGJhVu8J6u2OQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-media-minmax@1.1.3(postcss@8.4.35):
- resolution: {integrity: sha512-W9AFRQSLvT+Dxtp20AewzGTUxzkJ21XSKzqRALwQdAv0uJGXkR76qgdhkoX0L/tcV4gXtgDfVtGYL/x2Nz/M5Q==}
+ /@csstools/postcss-media-minmax@1.1.4(postcss@8.4.36):
+ resolution: {integrity: sha512-xl/PIO3TUbXO1ZA4SA6HCw+Q9UGe2cgeRKx3lHCzoNig2D4bT5vfVCOrwhxjUb09oHihc9eI3I0iIfVPiXaN1A==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/media-query-list-parser': 2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- postcss: 8.4.35
+ '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.6(postcss@8.4.35):
- resolution: {integrity: sha512-awc2qenSDvx6r+w6G9xxENp+LsbvHC8mMMV23KYmk4pR3YL8JxeKPDSiDhmqd93FQ9nNNDc/CaCQEcvP+GV4rw==}
+ /@csstools/postcss-media-queries-aspect-ratio-number-values@2.0.7(postcss@8.4.36):
+ resolution: {integrity: sha512-HBDAQw1K0NilcHGMUHv8jzf2mpOtcWTVKtuY3AeZ5TS1uyWWNVi5/yuA/tREPLU9WifNdqHQ+rfbsV/8zTIkTg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/media-query-list-parser': 2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- postcss: 8.4.35
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-nested-calc@3.0.2(postcss@8.4.35):
+ /@csstools/postcss-nested-calc@3.0.2(postcss@8.4.36):
resolution: {integrity: sha512-ySUmPyawiHSmBW/VI44+IObcKH0v88LqFe0d09Sb3w4B1qjkaROc6d5IA3ll9kjD46IIX/dbO5bwFN/swyoyZA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.35):
+ /@csstools/postcss-normalize-display-values@3.0.2(postcss@8.4.36):
resolution: {integrity: sha512-fCapyyT/dUdyPtrelQSIV+d5HqtTgnNP/BEG9IuhgXHt93Wc4CfC1bQ55GzKAjWrZbgakMQ7MLfCXEf3rlZJOw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /@csstools/postcss-oklab-function@3.0.10(postcss@8.4.35):
- resolution: {integrity: sha512-s9trs1c+gUMtaTtwrrIpdVQkUbRuwi6bQ9rBHaqwt4kd3kEnEYfP85uLY1inFx6Rt8OM2XVg3PSYbfnFSAO51A==}
+ /@csstools/postcss-oklab-function@3.0.12(postcss@8.4.36):
+ resolution: {integrity: sha512-RNitTHamFvUUh8x+MJuPd2tCekYexUrylGKfUoor5D2GGcgzY1WB6Bl3pIj9t8bAq5h/lcacKaB2wmvUOTfGgQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-progressive-custom-properties@3.1.0(postcss@8.4.35):
- resolution: {integrity: sha512-Mfb1T1BHa6pktLI+poMEHI7Q+VYvAsdwJZPFsSkIB2ZUsawCiPxXLw06BKSVPITxFlaY/FEUzfpyOTfX9YCE2w==}
+ /@csstools/postcss-progressive-custom-properties@3.1.1(postcss@8.4.36):
+ resolution: {integrity: sha512-cx/bZgj+MK8SpRZNTu2zGeVFMCQfhsaeuDhukAhfA53yykvIXaTIwLi5shW9hfkvPrkqBeFoiRAzq/qogxeHTA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /@csstools/postcss-relative-color-syntax@2.0.10(postcss@8.4.35):
- resolution: {integrity: sha512-IkTIk9Eq2VegSN4lgsljGY8boyfX3l3Pw58e+R9oyPe/Ye7r3NwuiQ3w0nkXoQ+RC+d240V6n7eZme2mEPqQvg==}
+ /@csstools/postcss-relative-color-syntax@2.0.12(postcss@8.4.36):
+ resolution: {integrity: sha512-VreDGDgE634niwCytLtkoE5kRxfva7bnMzSoyok7Eh9VPYFOm8CK/oJXt9y3df71Bxc9PG4KC8RA3CxTknudnw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.35):
+ /@csstools/postcss-scope-pseudo-class@3.0.1(postcss@8.4.36):
resolution: {integrity: sha512-3ZFonK2gfgqg29gUJ2w7xVw2wFJ1eNWVDONjbzGkm73gJHVCYK5fnCqlLr+N+KbEfv2XbWAO0AaOJCFB6Fer6A==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /@csstools/postcss-stepped-value-functions@3.0.5(postcss@8.4.35):
- resolution: {integrity: sha512-B8K8RaTrYVZLxbNzVUvFO3SlCDJDaUTAO7KRth05fa7f01ufPvb6ztdBuxSoRwOtmNp8iROxPJHOemWo2kBBtA==}
+ /@csstools/postcss-stepped-value-functions@3.0.6(postcss@8.4.36):
+ resolution: {integrity: sha512-rnyp8tWRuBXERTHVdB5hjUlif5dQgPcyN+BX55wUnYpZ3LN9QPfK2Z3/HUZymwyou8Gg6vhd6X2W+g1pLq1jYg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- postcss: 8.4.35
+ '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-text-decoration-shorthand@3.0.4(postcss@8.4.35):
+ /@csstools/postcss-text-decoration-shorthand@3.0.4(postcss@8.4.36):
resolution: {integrity: sha512-yUZmbnUemgQmja7SpOZeU45+P49wNEgQguRdyTktFkZsHf7Gof+ZIYfvF6Cm+LsU1PwSupy4yUeEKKjX5+k6cQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
'@csstools/color-helpers': 4.0.0
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /@csstools/postcss-trigonometric-functions@3.0.5(postcss@8.4.35):
- resolution: {integrity: sha512-RhBfQ0TsBudyPuoo8pXKdfQuUiQxMU/Sc5GyV57bWk93JbUHXq6b4CdPx+B/tHUeFKvocVJn/e2jbu96rh0d3Q==}
+ /@csstools/postcss-trigonometric-functions@3.0.6(postcss@8.4.36):
+ resolution: {integrity: sha512-i5Zd0bMJooZAn+ZcDmPij2WCkcOJJJ6opzK+QeDjxbMrYmoGQl0CY8FDHdeQyBF1Nly+Q0Fq3S7QfdNLKBBaCg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-calc': 1.1.7(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- postcss: 8.4.35
+ '@csstools/css-calc': 1.2.0(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ postcss: 8.4.36
dev: true
- /@csstools/postcss-unset-value@3.0.1(postcss@8.4.35):
+ /@csstools/postcss-unset-value@3.0.1(postcss@8.4.36):
resolution: {integrity: sha512-dbDnZ2ja2U8mbPP0Hvmt2RMEGBiF1H7oY6HYSpjteXJGihYwgxgTr6KRbbJ/V6c+4wd51M+9980qG4gKVn5ttg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.15):
+ /@csstools/selector-resolve-nested@1.1.0(postcss-selector-parser@6.0.16):
resolution: {integrity: sha512-uWvSaeRcHyeNenKg8tp17EVDRkpflmdyvbE0DHo6D/GdBb6PDnCYYU6gRpXhtICMGMcahQmj2zGxwFM/WC8hCg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss-selector-parser: ^6.0.13
dependencies:
- postcss-selector-parser: 6.0.15
+ postcss-selector-parser: 6.0.16
dev: true
- /@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.15):
+ /@csstools/selector-specificity@3.0.2(postcss-selector-parser@6.0.16):
resolution: {integrity: sha512-RpHaZ1h9LE7aALeQXmXrJkRG84ZxIsctEN2biEUmFyKpzFM3zZ35eUMcIzZFsw/2olQE6v69+esEqU2f1MKycg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss-selector-parser: ^6.0.13
dependencies:
- postcss-selector-parser: 6.0.15
+ postcss-selector-parser: 6.0.16
dev: true
- /@csstools/utilities@1.0.0(postcss@8.4.35):
+ /@csstools/utilities@1.0.0(postcss@8.4.36):
resolution: {integrity: sha512-tAgvZQe/t2mlvpNosA4+CkMiZ2azISW5WPAcdSalZlEjQvUfghHxfQcrCiK/7/CrfAWVxyM88kGFYO82heIGDg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
/@dabh/diagnostics@2.0.3:
@@ -4480,11 +4530,11 @@ packages:
dev: true
optional: true
- /@esbuild/android-arm64@0.18.20:
- resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+ /@esbuild/aix-ppc64@0.20.2:
+ resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
+ cpu: [ppc64]
+ os: [aix]
requiresBuild: true
dev: true
optional: true
@@ -4498,10 +4548,10 @@ packages:
dev: true
optional: true
- /@esbuild/android-arm@0.18.20:
- resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+ /@esbuild/android-arm64@0.20.2:
+ resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
engines: {node: '>=12'}
- cpu: [arm]
+ cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
@@ -4516,10 +4566,10 @@ packages:
dev: true
optional: true
- /@esbuild/android-x64@0.18.20:
- resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+ /@esbuild/android-arm@0.20.2:
+ resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [arm]
os: [android]
requiresBuild: true
dev: true
@@ -4534,11 +4584,11 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-arm64@0.18.20:
- resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+ /@esbuild/android-x64@0.20.2:
+ resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
+ cpu: [x64]
+ os: [android]
requiresBuild: true
dev: true
optional: true
@@ -4552,10 +4602,10 @@ packages:
dev: true
optional: true
- /@esbuild/darwin-x64@0.18.20:
- resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+ /@esbuild/darwin-arm64@0.20.2:
+ resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
@@ -4570,11 +4620,11 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-arm64@0.18.20:
- resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+ /@esbuild/darwin-x64@0.20.2:
+ resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
+ cpu: [x64]
+ os: [darwin]
requiresBuild: true
dev: true
optional: true
@@ -4588,10 +4638,10 @@ packages:
dev: true
optional: true
- /@esbuild/freebsd-x64@0.18.20:
- resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+ /@esbuild/freebsd-arm64@0.20.2:
+ resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
@@ -4606,11 +4656,11 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm64@0.18.20:
- resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+ /@esbuild/freebsd-x64@0.20.2:
+ resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
+ cpu: [x64]
+ os: [freebsd]
requiresBuild: true
dev: true
optional: true
@@ -4624,10 +4674,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-arm@0.18.20:
- resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+ /@esbuild/linux-arm64@0.20.2:
+ resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
engines: {node: '>=12'}
- cpu: [arm]
+ cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
@@ -4642,10 +4692,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ia32@0.18.20:
- resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+ /@esbuild/linux-arm@0.20.2:
+ resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
engines: {node: '>=12'}
- cpu: [ia32]
+ cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
@@ -4660,10 +4710,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-loong64@0.18.20:
- resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+ /@esbuild/linux-ia32@0.20.2:
+ resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
engines: {node: '>=12'}
- cpu: [loong64]
+ cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
@@ -4678,10 +4728,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-mips64el@0.18.20:
- resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+ /@esbuild/linux-loong64@0.20.2:
+ resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
engines: {node: '>=12'}
- cpu: [mips64el]
+ cpu: [loong64]
os: [linux]
requiresBuild: true
dev: true
@@ -4696,10 +4746,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-ppc64@0.18.20:
- resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+ /@esbuild/linux-mips64el@0.20.2:
+ resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
engines: {node: '>=12'}
- cpu: [ppc64]
+ cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
@@ -4714,10 +4764,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-riscv64@0.18.20:
- resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+ /@esbuild/linux-ppc64@0.20.2:
+ resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
engines: {node: '>=12'}
- cpu: [riscv64]
+ cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
@@ -4732,10 +4782,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-s390x@0.18.20:
- resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+ /@esbuild/linux-riscv64@0.20.2:
+ resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
engines: {node: '>=12'}
- cpu: [s390x]
+ cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
@@ -4750,10 +4800,10 @@ packages:
dev: true
optional: true
- /@esbuild/linux-x64@0.18.20:
- resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+ /@esbuild/linux-s390x@0.20.2:
+ resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
@@ -4768,11 +4818,11 @@ packages:
dev: true
optional: true
- /@esbuild/netbsd-x64@0.18.20:
- resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+ /@esbuild/linux-x64@0.20.2:
+ resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
engines: {node: '>=12'}
cpu: [x64]
- os: [netbsd]
+ os: [linux]
requiresBuild: true
dev: true
optional: true
@@ -4786,11 +4836,11 @@ packages:
dev: true
optional: true
- /@esbuild/openbsd-x64@0.18.20:
- resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+ /@esbuild/netbsd-x64@0.20.2:
+ resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
engines: {node: '>=12'}
cpu: [x64]
- os: [openbsd]
+ os: [netbsd]
requiresBuild: true
dev: true
optional: true
@@ -4804,11 +4854,11 @@ packages:
dev: true
optional: true
- /@esbuild/sunos-x64@0.18.20:
- resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+ /@esbuild/openbsd-x64@0.20.2:
+ resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
engines: {node: '>=12'}
cpu: [x64]
- os: [sunos]
+ os: [openbsd]
requiresBuild: true
dev: true
optional: true
@@ -4822,11 +4872,11 @@ packages:
dev: true
optional: true
- /@esbuild/win32-arm64@0.18.20:
- resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+ /@esbuild/sunos-x64@0.20.2:
+ resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
+ cpu: [x64]
+ os: [sunos]
requiresBuild: true
dev: true
optional: true
@@ -4840,10 +4890,10 @@ packages:
dev: true
optional: true
- /@esbuild/win32-ia32@0.18.20:
- resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+ /@esbuild/win32-arm64@0.20.2:
+ resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
engines: {node: '>=12'}
- cpu: [ia32]
+ cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
@@ -4858,10 +4908,10 @@ packages:
dev: true
optional: true
- /@esbuild/win32-x64@0.18.20:
- resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+ /@esbuild/win32-ia32@0.20.2:
+ resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
engines: {node: '>=12'}
- cpu: [x64]
+ cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
@@ -4876,6 +4926,15 @@ packages:
dev: true
optional: true
+ /@esbuild/win32-x64@0.20.2:
+ resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4923,12 +4982,14 @@ packages:
resolution: {integrity: sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==}
dependencies:
'@floating-ui/utils': 0.2.1
+ dev: false
/@floating-ui/dom@1.6.3:
resolution: {integrity: sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==}
dependencies:
'@floating-ui/core': 1.6.0
'@floating-ui/utils': 0.2.1
+ dev: false
/@floating-ui/react-dom@2.0.8(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==}
@@ -4939,9 +5000,11 @@ packages:
'@floating-ui/dom': 1.6.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ dev: false
/@floating-ui/utils@0.2.1:
resolution: {integrity: sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==}
+ dev: false
/@fontsource-variable/inter@5.0.17:
resolution: {integrity: sha512-sa80nNnqF8kzhBvqusWiL9vlPMVpdmOwMmDBup46Jggsr1VBqo+YuzwB36Ls+X6uHJtb8Yv3ALBHL/zGmT862A==}
@@ -4971,15 +5034,15 @@ packages:
/@gilbarbara/types@0.2.2:
resolution: {integrity: sha512-QuQDBRRcm1Q8AbSac2W1YElurOhprj3Iko/o+P1fJxUWS4rOGKMVli98OXS7uo4z+cKAif6a+L9bcZFSyauQpQ==}
dependencies:
- type-fest: 4.11.1
+ type-fest: 4.12.0
dev: false
- /@grpc/grpc-js@1.10.1:
- resolution: {integrity: sha512-55ONqFytZExfOIjF1RjXPcVmT/jJqFzbbDqxK9jmRV4nxiYWtL9hENSW1Jfx0SdZfrvoqd44YJ/GJTqfRrawSQ==}
- engines: {node: ^8.13.0 || >=10.10.0}
+ /@grpc/grpc-js@1.10.3:
+ resolution: {integrity: sha512-qiO9MNgYnwbvZ8MK0YLWbnGrNX3zTcj6/Ef7UHu5ZofER3e2nF3Y35GaPo9qNJJ/UJQKa4KL+z/F4Q8Q+uCdUQ==}
+ engines: {node: '>=12.10.0'}
dependencies:
'@grpc/proto-loader': 0.7.10
- '@types/node': 20.9.0
+ '@js-sdsl/ordered-map': 4.4.2
dev: false
/@grpc/proto-loader@0.7.10:
@@ -5030,12 +5093,12 @@ packages:
'@hapi/hoek': 9.3.0
dev: false
- /@hookform/resolvers@3.3.4(react-hook-form@7.51.0):
+ /@hookform/resolvers@3.3.4(react-hook-form@7.51.1):
resolution: {integrity: sha512-o5cgpGOuJYrd+iMKvkttOclgwRW86EsWJZZRC23prf0uU2i48Htq4PuT73AVb9ionFyZrwYEITuOFGF+BydEtQ==}
peerDependencies:
react-hook-form: ^7.0.0
dependencies:
- react-hook-form: 7.51.0(react@18.2.0)
+ react-hook-form: 7.51.1(react@18.2.0)
dev: false
/@humanwhocodes/config-array@0.11.14:
@@ -5258,17 +5321,6 @@ packages:
wrap-ansi: 8.1.0
wrap-ansi-cjs: /wrap-ansi@7.0.0
- /@istanbuljs/load-nyc-config@1.1.0:
- resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
- engines: {node: '>=8'}
- dependencies:
- camelcase: 5.3.1
- find-up: 4.1.0
- get-package-type: 0.1.0
- js-yaml: 3.14.1
- resolve-from: 5.0.0
- dev: true
-
/@istanbuljs/schema@0.1.3:
resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
engines: {node: '>=8'}
@@ -5281,41 +5333,6 @@ packages:
'@sinclair/typebox': 0.27.8
dev: true
- /@jest/transform@29.7.0:
- resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@babel/core': 7.24.0
- '@jest/types': 29.6.3
- '@jridgewell/trace-mapping': 0.3.25
- babel-plugin-istanbul: 6.1.1
- chalk: 4.1.2
- convert-source-map: 2.0.0
- fast-json-stable-stringify: 2.1.0
- graceful-fs: 4.2.11
- jest-haste-map: 29.7.0
- jest-regex-util: 29.6.3
- jest-util: 29.7.0
- micromatch: 4.0.5
- pirates: 4.0.6
- slash: 3.0.0
- write-file-atomic: 4.0.2
- transitivePeerDependencies:
- - supports-color
- dev: true
-
- /@jest/types@29.6.3:
- resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/schemas': 29.6.3
- '@types/istanbul-lib-coverage': 2.0.6
- '@types/istanbul-reports': 3.0.4
- '@types/node': 20.9.0
- '@types/yargs': 17.0.32
- chalk: 4.1.2
- dev: true
-
/@jridgewell/gen-mapping@0.3.5:
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -5332,8 +5349,8 @@ packages:
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
- /@jridgewell/source-map@0.3.5:
- resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
+ /@jridgewell/source-map@0.3.6:
+ resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
dependencies:
'@jridgewell/gen-mapping': 0.3.5
'@jridgewell/trace-mapping': 0.3.25
@@ -5354,8 +5371,13 @@ packages:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.4.15
+ /@js-sdsl/ordered-map@4.4.2:
+ resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==}
+ dev: false
+
/@juggle/resize-observer@3.4.0:
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
+ dev: false
/@keyv/redis@2.8.4:
resolution: {integrity: sha512-osO4C+i+Gi844wHjvXuHwhl+sDx3289Of309ZlLcj6SJReTLmPXzNiVR81N88wOu5aC+lVFdmx9FUQkkjdbPRQ==}
@@ -5392,8 +5414,8 @@ packages:
'@lezer/common': 1.2.1
dev: false
- /@ljharb/through@2.3.12:
- resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==}
+ /@ljharb/through@2.3.13:
+ resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
@@ -5440,16 +5462,6 @@ packages:
- encoding
- supports-color
- /@mdx-js/react@2.3.0(react@18.2.0):
- resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==}
- peerDependencies:
- react: '>=16'
- dependencies:
- '@types/mdx': 2.0.11
- '@types/react': 18.2.64
- react: 18.2.0
- dev: true
-
/@mdx-js/react@3.0.1(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==}
peerDependencies:
@@ -5469,7 +5481,7 @@ packages:
resolution: {integrity: sha512-dtOenP4ZAmsKXkobTDUCcbkQvPJbuJ6Kp/LHqWDYLK//XNgGs3Re8ymcQzyVhtph8JckdI3K8FR5Q+6mX7HnpQ==}
dev: false
- /@nestjs-modules/mailer@1.11.2(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(nodemailer@6.9.11):
+ /@nestjs-modules/mailer@1.11.2(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(nodemailer@6.9.12):
resolution: {integrity: sha512-k07wyKbtCzxWMm6IqGwcGIisnXD/6sneGvUR8rBBZbxtLn1HE1FLGyiaXBrPui/0K7W41aS9x9jAIhfTawtlUg==}
peerDependencies:
'@nestjs/common': '>=7.0.9'
@@ -5477,11 +5489,11 @@ packages:
nodemailer: '>=6.4.6'
dependencies:
'@css-inline/css-inline': 0.13.0
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
glob: 10.3.10
mjml: 4.15.3
- nodemailer: 6.9.11
+ nodemailer: 6.9.12
preview-email: 3.0.19
optionalDependencies:
'@types/ejs': 3.1.5
@@ -5493,19 +5505,19 @@ packages:
- encoding
dev: false
- /@nestjs/axios@3.0.2(@nestjs/common@10.3.3)(axios@1.6.7)(rxjs@7.8.1):
+ /@nestjs/axios@3.0.2(@nestjs/common@10.3.4)(axios@1.6.8)(rxjs@7.8.1):
resolution: {integrity: sha512-Z6GuOUdNQjP7FX+OuV2Ybyamse+/e0BFdTWBX5JxpBDKA+YkdLynDgG6HTF04zy6e9zPa19UX0WA2VDoehwhXQ==}
peerDependencies:
'@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
axios: ^1.3.1
rxjs: ^6.0.0 || ^7.0.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- axios: 1.6.7
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ axios: 1.6.8
rxjs: 7.8.1
dev: false
- /@nestjs/cli@10.3.2(@swc/core@1.4.5):
+ /@nestjs/cli@10.3.2(@swc/core@1.4.8):
resolution: {integrity: sha512-aWmD1GLluWrbuC4a1Iz/XBk5p74Uj6nIVZj6Ov03JbTfgtWqGFLtXuMetvzMiHxfrHehx/myt2iKAPRhKdZvTg==}
engines: {node: '>= 16.14'}
hasBin: true
@@ -5522,7 +5534,7 @@ packages:
'@angular-devkit/schematics': 17.1.2(chokidar@3.6.0)
'@angular-devkit/schematics-cli': 17.1.2(chokidar@3.6.0)
'@nestjs/schematics': 10.1.1(chokidar@3.6.0)(typescript@5.3.3)
- '@swc/core': 1.4.5
+ '@swc/core': 1.4.8
chalk: 4.1.2
chokidar: 3.6.0
cli-table3: 0.6.3
@@ -5539,7 +5551,7 @@ packages:
tsconfig-paths: 4.2.0
tsconfig-paths-webpack-plugin: 4.1.0
typescript: 5.3.3
- webpack: 5.90.1(@swc/core@1.4.5)
+ webpack: 5.90.1(@swc/core@1.4.8)
webpack-node-externals: 3.0.0
transitivePeerDependencies:
- esbuild
@@ -5547,8 +5559,8 @@ packages:
- webpack-cli
dev: true
- /@nestjs/common@10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1):
- resolution: {integrity: sha512-LAkTe8/CF0uNWM0ecuDwUNTHCi1lVSITmmR4FQ6Ftz1E7ujQCnJ5pMRzd8JRN14vdBkxZZ8VbVF0BDUKoKNxMQ==}
+ /@nestjs/common@10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1):
+ resolution: {integrity: sha512-HmehujZhUZjf9TN2o0TyzWYNwEgyRYqZZ5qIcF/mCgIUZ4olIKlazna0kGK56FGlCvviHWNKQM5eTuVeTstIgA==}
peerDependencies:
class-transformer: '*'
class-validator: '*'
@@ -5568,13 +5580,13 @@ packages:
tslib: 2.6.2
uid: 2.0.2
- /@nestjs/config@3.2.0(@nestjs/common@10.3.3)(rxjs@7.8.1):
+ /@nestjs/config@3.2.0(@nestjs/common@10.3.4)(rxjs@7.8.1):
resolution: {integrity: sha512-BpYRn57shg7CH35KGT6h+hT7ZucB6Qn2B3NBNdvhD4ApU8huS5pX/Wc2e/aO5trIha606Bz2a9t9/vbiuTBTww==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
rxjs: ^7.1.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
dotenv: 16.4.1
dotenv-expand: 10.0.0
lodash: 4.17.21
@@ -5582,8 +5594,8 @@ packages:
uuid: 9.0.1
dev: false
- /@nestjs/core@10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1):
- resolution: {integrity: sha512-kxJWggQAPX3RuZx9JVec69eSLaYLNIox2emkZJpfBJ5Qq7cAq7edQIt1r4LGjTKq6kFubNTPsqhWf5y7yFRBPw==}
+ /@nestjs/core@10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1):
+ resolution: {integrity: sha512-rF0yebuHmMj+9/CkbjPWWMvlF5x8j5Biw2DRvbl8R8n2X3OdFBN+06x/9xm3/ZssR5tLoB9tsYspFUb+SvnnwA==}
requiresBuild: true
peerDependencies:
'@nestjs/common': ^10.0.0
@@ -5600,9 +5612,9 @@ packages:
'@nestjs/websockets':
optional: true
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/platform-express': 10.3.3(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)
- '@nestjs/websockets': 10.3.3(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/platform-express': 10.3.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)
+ '@nestjs/websockets': 10.3.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
'@nuxtjs/opencollective': 0.3.2
fast-safe-stringify: 2.1.1
iterare: 1.2.1
@@ -5614,28 +5626,28 @@ packages:
transitivePeerDependencies:
- encoding
- /@nestjs/event-emitter@2.0.4(@nestjs/common@10.3.3)(@nestjs/core@10.3.3):
+ /@nestjs/event-emitter@2.0.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4):
resolution: {integrity: sha512-quMiw8yOwoSul0pp3mOonGz8EyXWHSBTqBy8B0TbYYgpnG1Ix2wGUnuTksLWaaBiiOTDhciaZ41Y5fJZsSJE1Q==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
'@nestjs/core': ^8.0.0 || ^9.0.0 || ^10.0.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
eventemitter2: 6.4.9
dev: false
- /@nestjs/jwt@10.2.0(@nestjs/common@10.3.3):
+ /@nestjs/jwt@10.2.0(@nestjs/common@10.3.4):
resolution: {integrity: sha512-x8cG90SURkEiLOehNaN2aRlotxT0KZESUliOPKKnjWiyJOcWurkF3w345WOX0P4MgFzUjGoZ1Sy0aZnxeihT0g==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
'@types/jsonwebtoken': 9.0.5
jsonwebtoken: 9.0.2
dev: false
- /@nestjs/mapped-types@2.0.5(@nestjs/common@10.3.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1):
+ /@nestjs/mapped-types@2.0.5(@nestjs/common@10.3.4)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1):
resolution: {integrity: sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
@@ -5648,47 +5660,47 @@ packages:
class-validator:
optional: true
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
class-transformer: 0.5.1
class-validator: 0.14.1
reflect-metadata: 0.2.1
dev: false
- /@nestjs/passport@10.0.3(@nestjs/common@10.3.3)(passport@0.7.0):
+ /@nestjs/passport@10.0.3(@nestjs/common@10.3.4)(passport@0.7.0):
resolution: {integrity: sha512-znJ9Y4S8ZDVY+j4doWAJ8EuuVO7SkQN3yOBmzxbGaXbvcSwFDAdGJ+OMCg52NdzIO4tQoN4pYKx8W6M0ArfFRQ==}
peerDependencies:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
passport: ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
passport: 0.7.0
dev: false
- /@nestjs/platform-express@10.3.3(@nestjs/common@10.3.3)(@nestjs/core@10.3.3):
- resolution: {integrity: sha512-GGKSEU48Os7nYFIsUM0nutuFUGn5AbeP8gzFBiBCAtiuJWrXZXpZ58pMBYxAbMf7IrcOZFInHEukjHGAQU0OZw==}
+ /@nestjs/platform-express@10.3.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4):
+ resolution: {integrity: sha512-rzUUUZCGYNs/viT9I6W5izJ1+oYCG0ym/dAn31NmYJW9UchxJdX5PCJqWF8iIbys6JgfbdcapMR5t+L7OZsasQ==}
peerDependencies:
'@nestjs/common': ^10.0.0
'@nestjs/core': ^10.0.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
body-parser: 1.20.2
cors: 2.8.5
- express: 4.18.2
+ express: 4.18.3
multer: 1.4.4-lts.1
tslib: 2.6.2
transitivePeerDependencies:
- supports-color
- /@nestjs/platform-ws@10.3.3(@nestjs/common@10.3.3)(@nestjs/websockets@10.3.3)(rxjs@7.8.1):
- resolution: {integrity: sha512-UMVW0Tai9wPJJakQdNOuSeuHHSbezIzHMiMUa75Nj9oYY1aiNkeN3QZKX2/fHPd6Zu1+RN10V6xayw2HOtn8zA==}
+ /@nestjs/platform-ws@10.3.4(@nestjs/common@10.3.4)(@nestjs/websockets@10.3.4)(rxjs@7.8.1):
+ resolution: {integrity: sha512-OhAMnqlPwWxym5SxvXjc60/p+Ln8drMQYT9avf5K2w2O0LSTdDdW4gf4KT5PN9ySCCxqQkDhzp706toDsY1KQA==}
peerDependencies:
'@nestjs/common': ^10.0.0
'@nestjs/websockets': ^10.0.0
rxjs: ^7.1.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/websockets': 10.3.3(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/websockets': 10.3.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
rxjs: 7.8.1
tslib: 2.6.2
ws: 8.16.0
@@ -5712,7 +5724,7 @@ packages:
- chokidar
dev: true
- /@nestjs/swagger@7.3.0(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1):
+ /@nestjs/swagger@7.3.0(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1):
resolution: {integrity: sha512-zLkfKZ+ioYsIZ3dfv7Bj8YHnZMNAGWFUmx2ZDuLp/fBE4P8BSjB7hldzDueFXsmwaPL90v7lgyd82P+s7KME1Q==}
peerDependencies:
'@fastify/static': ^6.0.0 || ^7.0.0
@@ -5730,9 +5742,9 @@ packages:
optional: true
dependencies:
'@microsoft/tsdoc': 0.14.2
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/mapped-types': 2.0.5(@nestjs/common@10.3.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/mapped-types': 2.0.5(@nestjs/common@10.3.4)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)
class-transformer: 0.5.1
class-validator: 0.14.1
js-yaml: 4.1.0
@@ -5742,7 +5754,7 @@ packages:
swagger-ui-dist: 5.11.2
dev: false
- /@nestjs/terminus@10.2.3(@nestjs/axios@3.0.2)(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(@prisma/client@5.10.2)(reflect-metadata@0.2.1)(rxjs@7.8.1):
+ /@nestjs/terminus@10.2.3(@nestjs/axios@3.0.2)(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(@prisma/client@5.11.0)(reflect-metadata@0.2.1)(rxjs@7.8.1):
resolution: {integrity: sha512-iX7gXtAooePcyQqFt57aDke5MzgdkBeYgF5YsFNNFwOiAFdIQEhfv3PR0G+HlH9F6D7nBCDZt9U87Pks/qHijg==}
peerDependencies:
'@grpc/grpc-js': '*'
@@ -5790,18 +5802,18 @@ packages:
typeorm:
optional: true
dependencies:
- '@nestjs/axios': 3.0.2(@nestjs/common@10.3.3)(axios@1.6.7)(rxjs@7.8.1)
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@prisma/client': 5.10.2(prisma@5.10.2)
+ '@nestjs/axios': 3.0.2(@nestjs/common@10.3.4)(axios@1.6.8)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@prisma/client': 5.11.0(prisma@5.11.0)
boxen: 5.1.2
check-disk-space: 3.4.0
reflect-metadata: 0.2.1
rxjs: 7.8.1
dev: false
- /@nestjs/testing@10.3.3(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(@nestjs/platform-express@10.3.3):
- resolution: {integrity: sha512-kX20GfjAImL5grd/i69uD/x7sc00BaqGcP2dRG3ilqshQUuy5DOmspLCr3a2C8xmVU7kzK4spT0oTxhe6WcCAA==}
+ /@nestjs/testing@10.3.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(@nestjs/platform-express@10.3.4):
+ resolution: {integrity: sha512-g3NQnRUFBcYF+ySkB7INg5RiV7CNfkP5zwaf3NFo0WjhBrfih9f1jMZ/19blLZ4djN/ngulYks2E3lzROAW8RQ==}
peerDependencies:
'@nestjs/common': ^10.0.0
'@nestjs/core': ^10.0.0
@@ -5813,14 +5825,14 @@ packages:
'@nestjs/platform-express':
optional: true
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/platform-express': 10.3.3(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/platform-express': 10.3.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)
tslib: 2.6.2
dev: true
- /@nestjs/websockets@10.3.3(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1):
- resolution: {integrity: sha512-cR5cB0bLS87vd0iu7Nud/4x2EH1Vs0aIgwGWd0eH/5SAw0rrDNU81PiOde+rnMXETbxvSVfOZuLRyn7/WQtGUg==}
+ /@nestjs/websockets@10.3.4(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1):
+ resolution: {integrity: sha512-ZGDY8t1bBYzY2xbOe2QOxYG+D6W1mALSS3VD/rcVW34oaysF4iQQEr4t2ktYLbPAuZlEvwM5EhutqCkBUsDw7Q==}
peerDependencies:
'@nestjs/common': ^10.0.0
'@nestjs/core': ^10.0.0
@@ -5831,8 +5843,8 @@ packages:
'@nestjs/platform-socket.io':
optional: true
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
iterare: 1.2.1
object-hash: 3.0.0
reflect-metadata: 0.2.1
@@ -6027,11 +6039,6 @@ packages:
'@opentelemetry/api': 1.8.0
dev: false
- /@opentelemetry/api@1.7.0:
- resolution: {integrity: sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==}
- engines: {node: '>=8.0.0'}
- dev: false
-
/@opentelemetry/api@1.8.0:
resolution: {integrity: sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==}
engines: {node: '>=8.0.0'}
@@ -6046,16 +6053,6 @@ packages:
'@opentelemetry/api': 1.8.0
dev: false
- /@opentelemetry/core@1.21.0(@opentelemetry/api@1.7.0):
- resolution: {integrity: sha512-KP+OIweb3wYoP7qTYL/j5IpOlu52uxBv5M4+QhSmmUfLyTgu1OIS71msK3chFo1D6Y61BIH3wMiMYRCxJCQctA==}
- engines: {node: '>=14'}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.8.0'
- dependencies:
- '@opentelemetry/api': 1.7.0
- '@opentelemetry/semantic-conventions': 1.21.0
- dev: false
-
/@opentelemetry/core@1.22.0(@opentelemetry/api@1.8.0):
resolution: {integrity: sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA==}
engines: {node: '>=14'}
@@ -6072,7 +6069,7 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.0.0
dependencies:
- '@grpc/grpc-js': 1.10.1
+ '@grpc/grpc-js': 1.10.3
'@opentelemetry/api': 1.8.0
'@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0)
'@opentelemetry/otlp-grpc-exporter-base': 0.49.1(@opentelemetry/api@1.8.0)
@@ -6123,8 +6120,8 @@ packages:
'@opentelemetry/semantic-conventions': 1.22.0
dev: false
- /@opentelemetry/instrumentation-express@0.36.0(@opentelemetry/api@1.8.0):
- resolution: {integrity: sha512-7sPiMPpYOTRw2+FXJc9RpHGsf8Mkfwz44TfxHOz0xxcuIz6Vb8sV3+qaXIGKT+gxS1YRaQQOHUSaP9rs1lNNPQ==}
+ /@opentelemetry/instrumentation-express@0.36.1(@opentelemetry/api@1.8.0):
+ resolution: {integrity: sha512-ltIE4kIMa+83QjW/p7oe7XCESF29w3FQ9/T1VgShdX7fzm56K2a0xfEX1vF8lnHRGERYxIWX9D086C6gJOjVGA==}
engines: {node: '>=14'}
peerDependencies:
'@opentelemetry/api': ^1.3.0
@@ -6164,22 +6161,6 @@ packages:
- supports-color
dev: false
- /@opentelemetry/instrumentation@0.48.0(@opentelemetry/api@1.7.0):
- resolution: {integrity: sha512-sjtZQB5PStIdCw5ovVTDGwnmQC+GGYArJNgIcydrDSqUTdYBnMrN9P4pwQZgS3vTGIp+TU1L8vMXGe51NVmIKQ==}
- engines: {node: '>=14'}
- peerDependencies:
- '@opentelemetry/api': ^1.3.0
- dependencies:
- '@opentelemetry/api': 1.7.0
- '@types/shimmer': 1.0.5
- import-in-the-middle: 1.7.1
- require-in-the-middle: 7.2.0
- semver: 7.6.0
- shimmer: 1.2.1
- transitivePeerDependencies:
- - supports-color
- dev: false
-
/@opentelemetry/instrumentation@0.49.1(@opentelemetry/api@1.8.0):
resolution: {integrity: sha512-0DLtWtaIppuNNRRllSD4bjU8ZIiLp1cDXvJEbp752/Zf+y3gaLNaoGRGIlX4UHhcsrmtL+P2qxi3Hodi8VuKiQ==}
engines: {node: '>=14'}
@@ -6190,7 +6171,7 @@ packages:
'@opentelemetry/api-logs': 0.49.1
'@types/shimmer': 1.0.5
import-in-the-middle: 1.7.1
- require-in-the-middle: 7.2.0
+ require-in-the-middle: 7.2.1
semver: 7.6.0
shimmer: 1.2.1
transitivePeerDependencies:
@@ -6213,7 +6194,7 @@ packages:
peerDependencies:
'@opentelemetry/api': ^1.0.0
dependencies:
- '@grpc/grpc-js': 1.10.1
+ '@grpc/grpc-js': 1.10.3
'@opentelemetry/api': 1.8.0
'@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0)
'@opentelemetry/otlp-exporter-base': 0.49.1(@opentelemetry/api@1.8.0)
@@ -6267,17 +6248,6 @@ packages:
'@opentelemetry/core': 1.22.0(@opentelemetry/api@1.8.0)
dev: false
- /@opentelemetry/resources@1.21.0(@opentelemetry/api@1.7.0):
- resolution: {integrity: sha512-1Z86FUxPKL6zWVy2LdhueEGl9AHDJcx+bvHStxomruz6Whd02mE3lNUMjVJ+FGRoktx/xYQcxccYb03DiUP6Yw==}
- engines: {node: '>=14'}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.8.0'
- dependencies:
- '@opentelemetry/api': 1.7.0
- '@opentelemetry/core': 1.21.0(@opentelemetry/api@1.7.0)
- '@opentelemetry/semantic-conventions': 1.21.0
- dev: false
-
/@opentelemetry/resources@1.22.0(@opentelemetry/api@1.8.0):
resolution: {integrity: sha512-+vNeIFPH2hfcNL0AJk/ykJXoUCtR1YaDUZM+p3wZNU4Hq98gzq+7b43xbkXjadD9VhWIUQqEwXyY64q6msPj6A==}
engines: {node: '>=14'}
@@ -6338,18 +6308,6 @@ packages:
- supports-color
dev: false
- /@opentelemetry/sdk-trace-base@1.21.0(@opentelemetry/api@1.7.0):
- resolution: {integrity: sha512-yrElGX5Fv0umzp8Nxpta/XqU71+jCAyaLk34GmBzNcrW43nqbrqvdPs4gj4MVy/HcTjr6hifCDCYA3rMkajxxA==}
- engines: {node: '>=14'}
- peerDependencies:
- '@opentelemetry/api': '>=1.0.0 <1.8.0'
- dependencies:
- '@opentelemetry/api': 1.7.0
- '@opentelemetry/core': 1.21.0(@opentelemetry/api@1.7.0)
- '@opentelemetry/resources': 1.21.0(@opentelemetry/api@1.7.0)
- '@opentelemetry/semantic-conventions': 1.21.0
- dev: false
-
/@opentelemetry/sdk-trace-base@1.22.0(@opentelemetry/api@1.8.0):
resolution: {integrity: sha512-pfTuSIpCKONC6vkTpv6VmACxD+P1woZf4q0K46nSUvXFvOFqjBYKFaAMkKD3M1mlKUUh0Oajwj35qNjMl80m1Q==}
engines: {node: '>=14'}
@@ -6377,11 +6335,6 @@ packages:
semver: 7.6.0
dev: false
- /@opentelemetry/semantic-conventions@1.21.0:
- resolution: {integrity: sha512-lkC8kZYntxVKr7b8xmjCVUgE0a8xgDakPyDo9uSWavXPyYqLgYYGdEd2j8NxihRyb6UwpX3G/hFUF4/9q2V+/g==}
- engines: {node: '>=14'}
- dev: false
-
/@opentelemetry/semantic-conventions@1.22.0:
resolution: {integrity: sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw==}
engines: {node: '>=14'}
@@ -6405,12 +6358,12 @@ packages:
playwright: 1.41.2
dev: true
- /@polka/url@1.0.0-next.24:
- resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
+ /@polka/url@1.0.0-next.25:
+ resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==}
dev: true
- /@prisma/client@5.10.2(prisma@5.10.2):
- resolution: {integrity: sha512-ef49hzB2yJZCvM5gFHMxSFL9KYrIP9udpT5rYo0CsHD4P9IKj473MbhU1gjKKftiwWBTIyrt9jukprzZXazyag==}
+ /@prisma/client@5.11.0(prisma@5.11.0):
+ resolution: {integrity: sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw==}
engines: {node: '>=16.13'}
requiresBuild: true
peerDependencies:
@@ -6419,47 +6372,47 @@ packages:
prisma:
optional: true
dependencies:
- prisma: 5.10.2
+ prisma: 5.11.0
dev: false
- /@prisma/debug@5.10.2:
- resolution: {integrity: sha512-bkBOmH9dpEBbMKFJj8V+Zp8IZHIBjy3fSyhLhxj4FmKGb/UBSt9doyfA6k1UeUREsMJft7xgPYBbHSOYBr8XCA==}
+ /@prisma/debug@5.11.0:
+ resolution: {integrity: sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==}
dev: false
- /@prisma/engines-version@5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9:
- resolution: {integrity: sha512-uCy/++3Jx/O3ufM+qv2H1L4tOemTNqcP/gyEVOlZqTpBvYJUe0tWtW0y3o2Ueq04mll4aM5X3f6ugQftOSLdFQ==}
+ /@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102:
+ resolution: {integrity: sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==}
dev: false
- /@prisma/engines@5.10.2:
- resolution: {integrity: sha512-HkSJvix6PW8YqEEt3zHfCYYJY69CXsNdhU+wna+4Y7EZ+AwzeupMnUThmvaDA7uqswiHkgm5/SZ6/4CStjaGmw==}
+ /@prisma/engines@5.11.0:
+ resolution: {integrity: sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==}
requiresBuild: true
dependencies:
- '@prisma/debug': 5.10.2
- '@prisma/engines-version': 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9
- '@prisma/fetch-engine': 5.10.2
- '@prisma/get-platform': 5.10.2
+ '@prisma/debug': 5.11.0
+ '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102
+ '@prisma/fetch-engine': 5.11.0
+ '@prisma/get-platform': 5.11.0
dev: false
- /@prisma/fetch-engine@5.10.2:
- resolution: {integrity: sha512-dSmXcqSt6DpTmMaLQ9K8ZKzVAMH3qwGCmYEZr/uVnzVhxRJ1EbT/w2MMwIdBNq1zT69Rvh0h75WMIi0mrIw7Hg==}
+ /@prisma/fetch-engine@5.11.0:
+ resolution: {integrity: sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==}
dependencies:
- '@prisma/debug': 5.10.2
- '@prisma/engines-version': 5.10.0-34.5a9203d0590c951969e85a7d07215503f4672eb9
- '@prisma/get-platform': 5.10.2
+ '@prisma/debug': 5.11.0
+ '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102
+ '@prisma/get-platform': 5.11.0
dev: false
- /@prisma/get-platform@5.10.2:
- resolution: {integrity: sha512-nqXP6vHiY2PIsebBAuDeWiUYg8h8mfjBckHh6Jezuwej0QJNnjDiOq30uesmg+JXxGk99nqyG3B7wpcOODzXvg==}
+ /@prisma/get-platform@5.11.0:
+ resolution: {integrity: sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==}
dependencies:
- '@prisma/debug': 5.10.2
+ '@prisma/debug': 5.11.0
dev: false
- /@prisma/instrumentation@5.10.2:
- resolution: {integrity: sha512-5ncGbvwFQMmubMBbTJ38JS5CEKW5x9GTxVtCk37IQRHyqMdJkLyC86pfPdHHrCsozljG/DBcK/OdND0CF8rfLg==}
+ /@prisma/instrumentation@5.11.0:
+ resolution: {integrity: sha512-ou4nvDpNEY6+t3Dn9juOTz6tK33D0Y4XXkEZ2uPd8KH6Mqmc+4LYOOm470DP7noj7dyJjuGiM+wpPk//HKrcDg==}
dependencies:
- '@opentelemetry/api': 1.7.0
- '@opentelemetry/instrumentation': 0.48.0(@opentelemetry/api@1.7.0)
- '@opentelemetry/sdk-trace-base': 1.21.0(@opentelemetry/api@1.7.0)
+ '@opentelemetry/api': 1.8.0
+ '@opentelemetry/instrumentation': 0.49.1(@opentelemetry/api@1.8.0)
+ '@opentelemetry/sdk-trace-base': 1.22.0(@opentelemetry/api@1.8.0)
transitivePeerDependencies:
- supports-color
dev: false
@@ -6530,17 +6483,13 @@ packages:
resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==}
dependencies:
'@babel/runtime': 7.24.0
-
- /@radix-ui/primitive@1.0.0:
- resolution: {integrity: sha512-3e7rn8FDMin4CgeL7Z/49smCA3rFYY3Ha2rUQ7HRWFadS5iCRw08ZgVT1LaNTCNqgvrUiyczLflrVrF0SRQtNA==}
- dependencies:
- '@babel/runtime': 7.24.0
dev: false
/@radix-ui/primitive@1.0.1:
resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==}
dependencies:
'@babel/runtime': 7.24.0
+ dev: false
/@radix-ui/react-alert-dialog@1.0.5(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-OrVIOcZL0tl6xibeuGt5/+UxoT2N27KCFOPjFyfXMnchxSHZ/OW7cCX2nGlIYJrbHK/fczPcFzAwvNBB6XBNMA==}
@@ -6587,6 +6536,7 @@ packages:
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ dev: false
/@radix-ui/react-avatar@1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-kVK2K7ZD3wwj3qhle0ElXhOjbezIgyl2hVvgwfIdexL3rN6zJmy5AqqIf+D31lxVppdzV8CjAfZ6PklkmInZLw==}
@@ -6690,14 +6640,6 @@ packages:
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
-
- /@radix-ui/react-compose-refs@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- react: 18.2.0
dev: false
/@radix-ui/react-compose-refs@1.0.1(@types/react@18.2.64)(react@18.2.0):
@@ -6713,15 +6655,6 @@ packages:
'@types/react': 18.2.64
react: 18.2.0
- /@radix-ui/react-context@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-1pVM9RfOQ+n/N5PJK33kRSKsr1glNxomxONs5c49MliinBY6Yw2Q995qfBUUo0/Mbg05B/sGA0gkgPI7kmSHBg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- react: 18.2.0
- dev: false
-
/@radix-ui/react-context@1.0.1(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==}
peerDependencies:
@@ -6734,32 +6667,6 @@ packages:
'@babel/runtime': 7.24.0
'@types/react': 18.2.64
react: 18.2.0
-
- /@radix-ui/react-dialog@1.0.0(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-Yn9YU+QlHYLWwV1XfKiqnGVpWYWk6MeBVM6x/bcoyPvxgjQGoeT35482viLPctTMWoMw0PoHgqfSox7Ig+957Q==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-context': 1.0.0(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.0(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.0(react@18.2.0)
- '@radix-ui/react-portal': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-presence': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.0(react@18.2.0)
- aria-hidden: 1.2.3
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.4(@types/react@18.2.64)(react@18.2.0)
- transitivePeerDependencies:
- - '@types/react'
dev: false
/@radix-ui/react-dialog@1.0.5(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
@@ -6808,25 +6715,10 @@ packages:
'@babel/runtime': 7.24.0
'@types/react': 18.2.64
react: 18.2.0
-
- /@radix-ui/react-dismissable-layer@1.0.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-n7kDRfx+LB1zLueRDvZ1Pd0bxdJWDUZNQ/GWoxDn2prnuJKRdxsjulejX/ePkOsLi2tTm6P24mDqlMSgQpsT6g==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/primitive': 1.0.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-escape-keydown': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-dismissable-layer@1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==}
+ /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -6848,10 +6740,10 @@ packages:
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- dev: true
+ dev: false
- /@radix-ui/react-dismissable-layer@1.0.5(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==}
+ /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==}
peerDependencies:
'@types/react': '*'
'@types/react-dom': '*'
@@ -6866,101 +6758,31 @@ packages:
'@babel/runtime': 7.24.0
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.64)(react@18.2.0)
+ '@radix-ui/react-context': 1.0.1(@types/react@18.2.64)(react@18.2.0)
+ '@radix-ui/react-id': 1.0.1(@types/react@18.2.64)(react@18.2.0)
+ '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-escape-keydown': 1.0.3(@types/react@18.2.64)(react@18.2.0)
+ '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.64)(react@18.2.0)
'@types/react': 18.2.64
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-dropdown-menu@2.0.6(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-i6TuFOoWmLWq+M/eCLGd/bQ2HfAX1RJgvrBQ6AQLmzfvsLdefxbWu8G9zczcPFfcSPehz9GcpF6K9QYreFV8hA==}
+ /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.64)(react@18.2.0):
+ resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==}
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
dependencies:
'@babel/runtime': 7.24.0
- '@radix-ui/primitive': 1.0.1
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-menu': 2.0.6(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.64)(react@18.2.0)
'@types/react': 18.2.64
- '@types/react-dom': 18.2.21
react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-focus-guards@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-UagjDk4ijOAnGu4WMUPj9ahi7/zJJqNZ9ZAiGPp7waUWJO0O1aWXi/udPphI0IUjvrhBsZJGSN66dR2dsueLWQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- react: 18.2.0
- dev: false
-
- /@radix-ui/react-focus-guards@1.0.1(@types/react@18.2.64)(react@18.2.0):
- resolution: {integrity: sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==}
- peerDependencies:
- '@types/react': '*'
- react: ^16.8 || ^17.0 || ^18.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
- dependencies:
- '@babel/runtime': 7.24.0
- '@types/react': 18.2.64
- react: 18.2.0
-
- /@radix-ui/react-focus-scope@1.0.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-C4SWtsULLGf/2L4oGeIHlvWQx7Rf+7cX/vKOAD2dXW0A1b5QXwi3wWeaEgW+wn+SEVrraMUk05vLU9fZZz5HbQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
-
- /@radix-ui/react-focus-scope@1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==}
- 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
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@types/react': 18.2.64
- '@types/react-dom': 18.2.21
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: true
-
/@radix-ui/react-focus-scope@1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==}
peerDependencies:
@@ -7021,16 +6843,6 @@ packages:
react: 18.2.0
dev: false
- /@radix-ui/react-id@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-Q6iAB/U7Tq3NTolBBQbHTgclPmGWE3OlktGGqrClPozSw4vkQ1DfQAOtzgRPecKsMdJINE05iaoDUG8tRzCBjw==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0)
- react: 18.2.0
- dev: false
-
/@radix-ui/react-id@1.0.1(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==}
peerDependencies:
@@ -7044,6 +6856,7 @@ packages:
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.64)(react@18.2.0)
'@types/react': 18.2.64
react: 18.2.0
+ dev: false
/@radix-ui/react-label@2.0.2(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-N5ehvlM7qoTLx7nWPodsPYPgMzA5WM8zZChQg8nyFJKnDO5WHdba1vv5/H6IO5LtJMfD2Q3wh1qHFGNtK0w3bQ==}
@@ -7139,36 +6952,6 @@ packages:
react-remove-scroll: 2.5.5(@types/react@18.2.64)(react@18.2.0)
dev: false
- /@radix-ui/react-popper@1.1.2(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==}
- 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
- dependencies:
- '@babel/runtime': 7.24.0
- '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-rect': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-size': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/rect': 1.0.1
- '@types/react': 18.2.64
- '@types/react-dom': 18.2.21
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: true
-
/@radix-ui/react-popper@1.1.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==}
peerDependencies:
@@ -7199,39 +6982,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-portal@1.0.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-a8qyFO/Xb99d8wQdu4o7qnigNjTPG123uADNecz0eX4usnQEj7o+cG4ZX4zkqq98NYekT7UoEQIjxBNWIFuqTA==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-primitive': 1.0.0(react-dom@18.2.0)(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
-
- /@radix-ui/react-portal@1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==}
- 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
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.64
- '@types/react-dom': 18.2.21
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: true
-
/@radix-ui/react-portal@1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==}
peerDependencies:
@@ -7253,19 +7003,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-presence@1.0.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-A+6XEvN01NfVWiKu38ybawfHsBjWum42MRPnEuqPsBZ4eV7e/7K321B5VgYMPv3Xx5An6o1/l9ZuDBgmcmWK3w==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
-
/@radix-ui/react-presence@1.0.1(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==}
peerDependencies:
@@ -7288,18 +7025,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-primitive@1.0.0(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-EyXe6mnRlHZ8b6f4ilTDrXmkLShICIuOTTj0GX4w1rp+wSxf3+TD05u1UOITC8VsJ2a9nwHvdXtOXEOl0Cw/zQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- react-dom: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-slot': 1.0.0(react@18.2.0)
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: false
-
/@radix-ui/react-primitive@1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==}
peerDependencies:
@@ -7319,6 +7044,7 @@ packages:
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ dev: false
/@radix-ui/react-progress@1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-5G6Om/tYSxjSeEdrb1VfKkfZfn/1IlPWd731h2RfPuSbIfNUgfqAwbKfJCg/PP6nuUCTrYzalwHSpSinoWoCag==}
@@ -7399,6 +7125,7 @@ packages:
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ dev: false
/@radix-ui/react-scroll-area@1.0.5(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-b6PAgH4GQf9QEn8zbT2XUHpW5z8BzqEc7Kl11TwDrvuTrxlkcjTD5qa/bxgKr+nmuXKu4L/W5UZ4mlP/VG/5Gw==}
@@ -7429,47 +7156,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-select@1.2.2(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==}
- 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
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/number': 1.0.1
- '@radix-ui/primitive': 1.0.1
- '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-direction': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-dismissable-layer': 1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-focus-guards': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-focus-scope': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-id': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-popper': 1.1.2(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-portal': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-slot': 1.0.2(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-use-previous': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-visually-hidden': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.64
- '@types/react-dom': 18.2.21
- aria-hidden: 1.2.3
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- react-remove-scroll: 2.5.5(@types/react@18.2.64)(react@18.2.0)
- dev: true
-
/@radix-ui/react-select@2.0.0(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-RH5b7af4oHtkcHS7pG6Sgv5rk5Wxa7XI8W5gvB1N/yiuDGZxko1ynvOiVhFM7Cis2A8zxF9bTOUVbRDzPepe6w==}
peerDependencies:
@@ -7530,15 +7216,6 @@ packages:
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
-
- /@radix-ui/react-slot@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-compose-refs': 1.0.0(react@18.2.0)
- react: 18.2.0
dev: false
/@radix-ui/react-slot@1.0.2(@types/react@18.2.64)(react@18.2.0):
@@ -7642,83 +7319,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-toggle-group@1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==}
- 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
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/primitive': 1.0.1
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-direction': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-toggle': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@types/react': 18.2.64
- '@types/react-dom': 18.2.21
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: true
-
- /@radix-ui/react-toggle@1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==}
- 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
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/primitive': 1.0.1
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@types/react': 18.2.64
- '@types/react-dom': 18.2.21
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: true
-
- /@radix-ui/react-toolbar@1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==}
- 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
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/primitive': 1.0.1
- '@radix-ui/react-context': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-direction': 1.0.1(@types/react@18.2.64)(react@18.2.0)
- '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-roving-focus': 1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-separator': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-toggle-group': 1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@types/react': 18.2.64
- '@types/react-dom': 18.2.21
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
- dev: true
-
/@radix-ui/react-tooltip@1.0.7(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-lPh5iKNFVQ/jav/j6ZrWq3blfDJ0OH9R6FlNUHPMqdLuQ9vwDgFsRxvl8b7Asuy5c8xmoojHUxKHQSOAvMHxyw==}
peerDependencies:
@@ -7751,15 +7351,6 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /@radix-ui/react-use-callback-ref@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-GZtyzoHz95Rhs6S63D2t/eqvdFCm7I+yHMLVQheKM7nBD8mbZIt+ct1jz4536MDnaOGKIxynJ8eHTkVGVVkoTg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- react: 18.2.0
- dev: false
-
/@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==}
peerDependencies:
@@ -7772,15 +7363,6 @@ packages:
'@babel/runtime': 7.24.0
'@types/react': 18.2.64
react: 18.2.0
-
- /@radix-ui/react-use-controllable-state@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-FohDoZvk3mEXh9AWAVyRTYR4Sq7/gavuofglmiXB2g1aKyboUD4YtgWxKj8O5n+Uak52gXQ4wKz5IFST4vtJHg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- react: 18.2.0
dev: false
/@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.2.64)(react@18.2.0):
@@ -7796,15 +7378,6 @@ packages:
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.64)(react@18.2.0)
'@types/react': 18.2.64
react: 18.2.0
-
- /@radix-ui/react-use-escape-keydown@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-JwfBCUIfhXRxKExgIqGa4CQsiMemo1Xt0W/B4ei3fpzpvPENKpMKQ8mZSB6Acj3ebrAEgi2xiQvcI1PAAodvyg==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- '@radix-ui/react-use-callback-ref': 1.0.0(react@18.2.0)
- react: 18.2.0
dev: false
/@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.2.64)(react@18.2.0):
@@ -7820,14 +7393,6 @@ packages:
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.64)(react@18.2.0)
'@types/react': 18.2.64
react: 18.2.0
-
- /@radix-ui/react-use-layout-effect@1.0.0(react@18.2.0):
- resolution: {integrity: sha512-6Tpkq+R6LOlmQb1R5NNETLG0B4YP0wc+klfXafpUCj6JGyaUc8il7/kUZ7m59rGbXGczE9Bs+iz2qloqsZBduQ==}
- peerDependencies:
- react: ^16.8 || ^17.0 || ^18.0
- dependencies:
- '@babel/runtime': 7.24.0
- react: 18.2.0
dev: false
/@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.2.64)(react@18.2.0):
@@ -7842,6 +7407,7 @@ packages:
'@babel/runtime': 7.24.0
'@types/react': 18.2.64
react: 18.2.0
+ dev: false
/@radix-ui/react-use-previous@1.0.1(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==}
@@ -7855,6 +7421,7 @@ packages:
'@babel/runtime': 7.24.0
'@types/react': 18.2.64
react: 18.2.0
+ dev: false
/@radix-ui/react-use-rect@1.0.1(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==}
@@ -7869,6 +7436,7 @@ packages:
'@radix-ui/rect': 1.0.1
'@types/react': 18.2.64
react: 18.2.0
+ dev: false
/@radix-ui/react-use-size@1.0.1(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==}
@@ -7883,6 +7451,7 @@ packages:
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.64)(react@18.2.0)
'@types/react': 18.2.64
react: 18.2.0
+ dev: false
/@radix-ui/react-visually-hidden@1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==}
@@ -7903,11 +7472,13 @@ packages:
'@types/react-dom': 18.2.21
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ dev: false
/@radix-ui/rect@1.0.1:
resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==}
dependencies:
'@babel/runtime': 7.24.0
+ dev: false
/@redis/bloom@1.2.0(@redis/client@1.5.14):
resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==}
@@ -8076,6 +7647,7 @@ packages:
estree-walker: 2.0.2
picomatch: 2.3.1
rollup: 2.78.0
+ dev: false
/@rollup/pluginutils@5.1.0(rollup@2.79.1):
resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
@@ -8092,104 +7664,104 @@ packages:
rollup: 2.79.1
dev: true
- /@rollup/rollup-android-arm-eabi@4.12.1:
- resolution: {integrity: sha512-iU2Sya8hNn1LhsYyf0N+L4Gf9Qc+9eBTJJJsaOGUp+7x4n2M9dxTt8UvhJl3oeftSjblSlpCfvjA/IfP3g5VjQ==}
+ /@rollup/rollup-android-arm-eabi@4.13.0:
+ resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==}
cpu: [arm]
os: [android]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-android-arm64@4.12.1:
- resolution: {integrity: sha512-wlzcWiH2Ir7rdMELxFE5vuM7D6TsOcJ2Yw0c3vaBR3VOsJFVTx9xvwnAvhgU5Ii8Gd6+I11qNHwndDscIm0HXg==}
+ /@rollup/rollup-android-arm64@4.13.0:
+ resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-darwin-arm64@4.12.1:
- resolution: {integrity: sha512-YRXa1+aZIFN5BaImK+84B3uNK8C6+ynKLPgvn29X9s0LTVCByp54TB7tdSMHDR7GTV39bz1lOmlLDuedgTwwHg==}
+ /@rollup/rollup-darwin-arm64@4.13.0:
+ resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-darwin-x64@4.12.1:
- resolution: {integrity: sha512-opjWJ4MevxeA8FhlngQWPBOvVWYNPFkq6/25rGgG+KOy0r8clYwL1CFd+PGwRqqMFVQ4/Qd3sQu5t7ucP7C/Uw==}
+ /@rollup/rollup-darwin-x64@4.13.0:
+ resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm-gnueabihf@4.12.1:
- resolution: {integrity: sha512-uBkwaI+gBUlIe+EfbNnY5xNyXuhZbDSx2nzzW8tRMjUmpScd6lCQYKY2V9BATHtv5Ef2OBq6SChEP8h+/cxifQ==}
+ /@rollup/rollup-linux-arm-gnueabihf@4.13.0:
+ resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm64-gnu@4.12.1:
- resolution: {integrity: sha512-0bK9aG1kIg0Su7OcFTlexkVeNZ5IzEsnz1ept87a0TUgZ6HplSgkJAnFpEVRW7GRcikT4GlPV0pbtVedOaXHQQ==}
+ /@rollup/rollup-linux-arm64-gnu@4.13.0:
+ resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-arm64-musl@4.12.1:
- resolution: {integrity: sha512-qB6AFRXuP8bdkBI4D7UPUbE7OQf7u5OL+R94JE42Z2Qjmyj74FtDdLGeriRyBDhm4rQSvqAGCGC01b8Fu2LthQ==}
+ /@rollup/rollup-linux-arm64-musl@4.13.0:
+ resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-riscv64-gnu@4.12.1:
- resolution: {integrity: sha512-sHig3LaGlpNgDj5o8uPEoGs98RII8HpNIqFtAI8/pYABO8i0nb1QzT0JDoXF/pxzqO+FkxvwkHZo9k0NJYDedg==}
+ /@rollup/rollup-linux-riscv64-gnu@4.13.0:
+ resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-x64-gnu@4.12.1:
- resolution: {integrity: sha512-nD3YcUv6jBJbBNFvSbp0IV66+ba/1teuBcu+fBBPZ33sidxitc6ErhON3JNavaH8HlswhWMC3s5rgZpM4MtPqQ==}
+ /@rollup/rollup-linux-x64-gnu@4.13.0:
+ resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-linux-x64-musl@4.12.1:
- resolution: {integrity: sha512-7/XVZqgBby2qp/cO0TQ8uJK+9xnSdJ9ct6gSDdEr4MfABrjTyrW6Bau7HQ73a2a5tPB7hno49A0y1jhWGDN9OQ==}
+ /@rollup/rollup-linux-x64-musl@4.13.0:
+ resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-arm64-msvc@4.12.1:
- resolution: {integrity: sha512-CYc64bnICG42UPL7TrhIwsJW4QcKkIt9gGlj21gq3VV0LL6XNb1yAdHVp1pIi9gkts9gGcT3OfUYHjGP7ETAiw==}
+ /@rollup/rollup-win32-arm64-msvc@4.13.0:
+ resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-ia32-msvc@4.12.1:
- resolution: {integrity: sha512-LN+vnlZ9g0qlHGlS920GR4zFCqAwbv2lULrR29yGaWP9u7wF5L7GqWu9Ah6/kFZPXPUkpdZwd//TNR+9XC9hvA==}
+ /@rollup/rollup-win32-ia32-msvc@4.13.0:
+ resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
- /@rollup/rollup-win32-x64-msvc@4.12.1:
- resolution: {integrity: sha512-n+vkrSyphvmU0qkQ6QBNXCGr2mKjhP08mPRM/Xp5Ck2FV4NrHU+y6axzDeixUrCBHVUS51TZhjqrKBBsHLKb2Q==}
+ /@rollup/rollup-win32-x64-msvc@4.13.0:
+ resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==}
cpu: [x64]
os: [win32]
requiresBuild: true
@@ -8206,45 +7778,45 @@ packages:
selderee: 0.11.0
dev: false
- /@sentry-internal/feedback@7.105.0:
- resolution: {integrity: sha512-17doUQFKYgLfG7EmZXjZQ7HR/aBzuLDd+GVaCNthUPyiz/tltV7EFECDWwHpXqzQgYRgroSbY8PruMVujFGUUw==}
+ /@sentry-internal/feedback@7.107.0:
+ resolution: {integrity: sha512-okF0B9AJHrpkwNMxNs/Lffw3N5ZNbGwz4uvCfyOfnMxc7E2VfDM18QzUvTBRvNr3bA9wl+InJ+EMG3aZhyPunA==}
engines: {node: '>=12'}
dependencies:
- '@sentry/core': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry/core': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
- /@sentry-internal/replay-canvas@7.105.0:
- resolution: {integrity: sha512-XMBdkjIDhap5Gwrub5wlUJhuUVJM4aL4lZV8KcxJZZSXgXsnyGYbEh9SPZOHO05jtbxTxVeL3Pik5qtYjdGnPA==}
+ /@sentry-internal/replay-canvas@7.107.0:
+ resolution: {integrity: sha512-dmDL9g3QDfo7axBOsVnpiKdJ/DXrdeuRv1AqsLgwzJKvItsv0ZizX0u+rj5b1UoxcwbXRMxJ0hit5a1yt3t/ow==}
engines: {node: '>=12'}
dependencies:
- '@sentry/core': 7.105.0
- '@sentry/replay': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry/core': 7.107.0
+ '@sentry/replay': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
- /@sentry-internal/tracing@7.105.0:
- resolution: {integrity: sha512-b+AFYB7Bc9vmyxl2jbmuT4esX5G0oPfpz35A0sxFzmJIhvMg1YMDNio2c81BtKN+VSPORCnKMLhfk3kyKKvWMQ==}
+ /@sentry-internal/tracing@7.107.0:
+ resolution: {integrity: sha512-le9wM8+OHBbq7m/8P7JUJ1UhSPIty+Z/HmRXc5Z64ODZcOwFV6TmDpYx729IXDdz36XUKmeI+BeM7yQdTTZPfQ==}
engines: {node: '>=8'}
dependencies:
- '@sentry/core': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry/core': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
- /@sentry/browser@7.105.0:
- resolution: {integrity: sha512-OlYJzsZG109T1VpZ7O7KXf9IXCUUpp41lkkQM7ICBOBsfiHRUKmV5piTGCG5UgAvyb/gI/I1uQQtO4jthcHKEA==}
+ /@sentry/browser@7.107.0:
+ resolution: {integrity: sha512-KnqaQDhxv6w9dJ+mYLsNwPeGZfgbpM3vaismBNyJCKLgWn2V75kxkSq+bDX8LQT/13AyK7iFp317L6P8EuNa3g==}
engines: {node: '>=8'}
dependencies:
- '@sentry-internal/feedback': 7.105.0
- '@sentry-internal/replay-canvas': 7.105.0
- '@sentry-internal/tracing': 7.105.0
- '@sentry/core': 7.105.0
- '@sentry/replay': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry-internal/feedback': 7.107.0
+ '@sentry-internal/replay-canvas': 7.107.0
+ '@sentry-internal/tracing': 7.107.0
+ '@sentry/core': 7.107.0
+ '@sentry/replay': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
/@sentry/cli@1.77.3:
@@ -8264,26 +7836,26 @@ packages:
- supports-color
dev: false
- /@sentry/core@7.105.0:
- resolution: {integrity: sha512-5xsaTG6jZincTeJUmZomlv20mVRZUEF1U/g89lmrSOybyk2+opEnB1JeBn4ODwnvmSik8r2QLr6/RiYlaxRJCg==}
+ /@sentry/core@7.107.0:
+ resolution: {integrity: sha512-C7ogye6+KPyBi8NVL0P8Rxx3Ur7Td8ufnjxosVy678lqY+dcYPk/HONROrzUFYW5fMKWL4/KYnwP+x9uHnkDmw==}
engines: {node: '>=8'}
dependencies:
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
- /@sentry/integrations@7.105.0:
- resolution: {integrity: sha512-AgzecTkF0o+C4svbroMGA+cW5LRnfFSoJnzF5ltUB67hnX906amlwbOvdkKD3MugYO02nRSjF/eEi26E1HACMA==}
+ /@sentry/integrations@7.107.0:
+ resolution: {integrity: sha512-0h2sZcjcdptS2pju1KSF4+sXaRaFTlmAN1ZokFfmfnVTs6cVtIFttUFxTYrwQUEE2knpAV05pz87zg1yfPAfYg==}
engines: {node: '>=8'}
dependencies:
- '@sentry/core': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry/core': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
localforage: 1.10.0
dev: false
- /@sentry/nextjs@7.105.0(next@14.1.3)(react@18.2.0):
- resolution: {integrity: sha512-v0fkBM3JktQ3EPffsC30kiuyQGim1mLYwCy6CGnascyMN7iCdqtLx51OPenVQmgmDj0dxXGjWGrkAPnuCKGUxQ==}
+ /@sentry/nextjs@7.107.0(next@14.1.3)(react@18.2.0):
+ resolution: {integrity: sha512-cGKntMb/svjHx5xWuLEh4sYMPA75c9gXegVeGeibpLUuD9b+LNeL7GaqxQ9dm2CX+Vza7QvHGBO/u+08abpEQA==}
engines: {node: '>=8'}
peerDependencies:
next: ^10.0.8 || ^11.0 || ^12.0 || ^13.0 || ^14.0
@@ -8294,13 +7866,13 @@ packages:
optional: true
dependencies:
'@rollup/plugin-commonjs': 24.0.0(rollup@2.78.0)
- '@sentry/core': 7.105.0
- '@sentry/integrations': 7.105.0
- '@sentry/node': 7.105.0
- '@sentry/react': 7.105.0(react@18.2.0)
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
- '@sentry/vercel-edge': 7.105.0
+ '@sentry/core': 7.107.0
+ '@sentry/integrations': 7.107.0
+ '@sentry/node': 7.107.0
+ '@sentry/react': 7.107.0(react@18.2.0)
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
+ '@sentry/vercel-edge': 7.107.0
'@sentry/webpack-plugin': 1.21.0
chalk: 3.0.0
next: 14.1.3(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)
@@ -8313,60 +7885,60 @@ packages:
- supports-color
dev: false
- /@sentry/node@7.105.0:
- resolution: {integrity: sha512-b0QwZ7vT4hcJi6LmNRh3dcaYpLtXnkYXkL0rfhMb8hN8sUx8zuOWFMI7j0cfAloVThUeJVwGyv9dERfzGS2r2w==}
+ /@sentry/node@7.107.0:
+ resolution: {integrity: sha512-UZXkG7uThT2YyPW8AOSKRXp1LbVcBHufa4r1XAwBukA2FKO6HHJPjMUgY6DYVQ6k+BmA56CNfVjYrdLbyjBYYA==}
engines: {node: '>=8'}
dependencies:
- '@sentry-internal/tracing': 7.105.0
- '@sentry/core': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry-internal/tracing': 7.107.0
+ '@sentry/core': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
- /@sentry/react@7.105.0(react@18.2.0):
- resolution: {integrity: sha512-t9MXmMC6lNv8Hj+eng6ZQg9UdrmOeds8yh2382d/yOcdLR3yFA/JVga1BiR/P9D/26Y6YVE8DgTcn8gz4xKngg==}
+ /@sentry/react@7.107.0(react@18.2.0):
+ resolution: {integrity: sha512-3sXNKcDQjEimxwBPnRkewy3xNLt3KqStMAdDZ/dAF3rviOSVyk80DCQ3P6+HIqeB+IAXqWptg4eSWRA1qNZquA==}
engines: {node: '>=8'}
peerDependencies:
react: 15.x || 16.x || 17.x || 18.x
dependencies:
- '@sentry/browser': 7.105.0
- '@sentry/core': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry/browser': 7.107.0
+ '@sentry/core': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
hoist-non-react-statics: 3.3.2
react: 18.2.0
dev: false
- /@sentry/replay@7.105.0:
- resolution: {integrity: sha512-hZD2m6fNL9gorUOaaEpqxeH7zNP4y2Ej0TdieM1HMQ2q9Zrm9yOzk9/7ALfbRLIZFRMFTqo9vvVztLs3E+Hx+g==}
+ /@sentry/replay@7.107.0:
+ resolution: {integrity: sha512-BNJDEVaEwr/YnV22qnyVA1almx/3p615m3+KaF8lPo7YleYgJGSJv1auH64j1G8INkrJ0J0wFBujb1EFjMYkxA==}
engines: {node: '>=12'}
dependencies:
- '@sentry-internal/tracing': 7.105.0
- '@sentry/core': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry-internal/tracing': 7.107.0
+ '@sentry/core': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
- /@sentry/types@7.105.0:
- resolution: {integrity: sha512-80o0KMVM+X2Ym9hoQxvJetkJJwkpCg7o6tHHFXI+Rp7fawc2iCMTa0IRQMUiSkFvntQLYIdDoNNuKdzz2PbQGA==}
+ /@sentry/types@7.107.0:
+ resolution: {integrity: sha512-H7qcPjPSUWHE/Zf5bR1EE24G0pGVuJgrSx8Tvvl5nKEepswMYlbXHRVSDN0gTk/E5Z7cqf+hUBOpkQgZyps77w==}
engines: {node: '>=8'}
dev: false
- /@sentry/utils@7.105.0:
- resolution: {integrity: sha512-YVAV0c2KLM8+VZCicQ/E/P2+J9Vs0hGhrXwV7w6ZEAtvxrg4oF270toL1WRhvcaf8JO4J1v4V+LuU6Txs4uEeQ==}
+ /@sentry/utils@7.107.0:
+ resolution: {integrity: sha512-C6PbN5gHh73MRHohnReeQ60N8rrLYa9LciHue3Ru2290eSThg4CzsPnx4SzkGpkSeVlhhptKtKZ+hp/ha3iVuw==}
engines: {node: '>=8'}
dependencies:
- '@sentry/types': 7.105.0
+ '@sentry/types': 7.107.0
dev: false
- /@sentry/vercel-edge@7.105.0:
- resolution: {integrity: sha512-BYblGPEIJisV+z1L/xkn9zG+SkrZDF//K4s7Ls/Wt+eWAcMhMy9y6QnKMwcBX3D8j7ylHTgG/70Z2Zpc4mk38A==}
+ /@sentry/vercel-edge@7.107.0:
+ resolution: {integrity: sha512-8p4v0QrMus3lVOwfIfevf/F+GuJnkC/0CIyp69FF7RMHb0zvkCmuXBjuski1AMD5aCL+E3e4MEU73UKA5XNqSA==}
engines: {node: '>=8'}
dependencies:
- '@sentry-internal/tracing': 7.105.0
- '@sentry/core': 7.105.0
- '@sentry/types': 7.105.0
- '@sentry/utils': 7.105.0
+ '@sentry-internal/tracing': 7.107.0
+ '@sentry/core': 7.107.0
+ '@sentry/types': 7.107.0
+ '@sentry/utils': 7.107.0
dev: false
/@sentry/webpack-plugin@1.21.0:
@@ -8403,22 +7975,22 @@ packages:
engines: {node: '>=18'}
dev: true
- /@size-limit/file@11.0.2(size-limit@11.0.2):
- resolution: {integrity: sha512-874lrMtWYRL+xb/6xzejjwD+krfHTOo+2uFGpZfJScvuNv91Ni2O7k0o09zC70VzCYBGkXquV92ln/H+/ognGg==}
+ /@size-limit/file@11.1.1(size-limit@11.1.1):
+ resolution: {integrity: sha512-c4XXp2CLvfx2RfzAqIAlxV6OWAQSVquLMNKKD6x9urJD7knjnTesPkbMcf3SkQbjCY4PlLL6kYhaO9drCWGM6g==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
- size-limit: 11.0.2
+ size-limit: 11.1.1
dependencies:
- size-limit: 11.0.2
+ size-limit: 11.1.1
dev: true
/@soluble/dsn-parser@1.9.2:
resolution: {integrity: sha512-FgkvHHHSCzjQ1/ouW6Vtw2hy0k5/KWeu116swH5VYX267I4rx+8MCy9/6eZ60IWGIQVNgh0sektKAu0n9gtzzA==}
- /@storybook/addon-actions@7.6.17:
- resolution: {integrity: sha512-TBphs4v6LRfyTpFo/WINF0TkMaE3rrNog7wW5mbz6n0j8o53kDN4o9ZEcygSL5zQX43CAaghQTeDCss7ueG7ZQ==}
+ /@storybook/addon-actions@8.0.1:
+ resolution: {integrity: sha512-qFd1NOI9C16/Jo+7XQQXRsoTzcvKPlT6M5lU47lGLuyLwbZSp5EKxmy8+uKTnyLF/2BTAvOLZ/wYmw+Gj4VzOA==}
dependencies:
- '@storybook/core-events': 7.6.17
+ '@storybook/core-events': 8.0.1
'@storybook/global': 5.0.0
'@types/uuid': 9.0.8
dequal: 2.0.3
@@ -8426,121 +7998,110 @@ packages:
uuid: 9.0.1
dev: true
- /@storybook/addon-backgrounds@7.6.17:
- resolution: {integrity: sha512-7dize7x8+37PH77kmt69b0xSaeDqOcZ4fpzW6+hk53hIaCVU26eGs4+j+743Xva31eOgZWNLupUhOpUDc6SqZw==}
+ /@storybook/addon-backgrounds@8.0.1:
+ resolution: {integrity: sha512-A06rUg7yEmyEoRTS8B46CkiUh49lKQ9ipGK323O7S9qkwbXSLvqBQTaKmGstZq6p0begPF1DWaGUxCXfU3qr2g==}
dependencies:
'@storybook/global': 5.0.0
memoizerific: 1.11.3
ts-dedent: 2.2.0
dev: true
- /@storybook/addon-controls@7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-zR0aLaUF7FtV/nMRyfniFbCls/e0DAAoXACuOAUAwNAv0lbIS8AyZZiHSmKucCvziUQ6WceeCC7+du3C+9y0rQ==}
+ /@storybook/addon-controls@8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-MadJq5fmFUI1eNkDyJSSqtF/IHD+hv/gS0eFNd9+CIioHaysJG2g7t27lG703BV+Qwzz9ekilKBJ/z0bIuqm8g==}
dependencies:
- '@storybook/blocks': 7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/blocks': 8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
lodash: 4.17.21
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
- - '@types/react-dom'
- encoding
- react
- react-dom
- supports-color
dev: true
- /@storybook/addon-docs@7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-FKa4Mdy7nhgvEVZJHpMkHriDzpVHbohn87zv9NCL+Ctjs1iAmzGwxEm0culszyDS1HN2ToVoY0h8CSi2RSSZqA==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ /@storybook/addon-docs@8.0.1:
+ resolution: {integrity: sha512-G03ELd2OEycuYoziwbomIgHGUXNIVU2MoCITU7Q1e2zfFJ4amMab7btHmUm4eTnUChXvzbYIucti3Sp9sQNsKw==}
dependencies:
- '@jest/transform': 29.7.0
- '@mdx-js/react': 2.3.0(react@18.2.0)
- '@storybook/blocks': 7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@storybook/client-logger': 7.6.17
- '@storybook/components': 7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@storybook/csf-plugin': 7.6.17
- '@storybook/csf-tools': 7.6.17
+ '@babel/core': 7.24.0
+ '@mdx-js/react': 3.0.1(@types/react@18.2.64)(react@18.2.0)
+ '@storybook/blocks': 8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/client-logger': 8.0.1
+ '@storybook/components': 8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/csf-plugin': 8.0.1
+ '@storybook/csf-tools': 8.0.1
'@storybook/global': 5.0.0
- '@storybook/mdx2-csf': 1.1.0
- '@storybook/node-logger': 7.6.17
- '@storybook/postinstall': 7.6.17
- '@storybook/preview-api': 7.6.17
- '@storybook/react-dom-shim': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.6.17
+ '@storybook/node-logger': 8.0.1
+ '@storybook/preview-api': 8.0.1
+ '@storybook/react-dom-shim': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 8.0.1
+ '@types/react': 18.2.64
fs-extra: 11.2.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- remark-external-links: 8.0.0
- remark-slug: 6.1.0
+ rehype-external-links: 3.0.0
+ rehype-slug: 6.0.0
ts-dedent: 2.2.0
transitivePeerDependencies:
- - '@types/react'
- - '@types/react-dom'
- encoding
- supports-color
dev: true
- /@storybook/addon-essentials@7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-qlSpamxuYfT2taF953nC9QijGF2pSbg1ewMNpdwLTj16PTZvR/d8NCDMTJujI1bDwM2m18u8Yc43ibh5LEmxCw==}
- peerDependencies:
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
- dependencies:
- '@storybook/addon-actions': 7.6.17
- '@storybook/addon-backgrounds': 7.6.17
- '@storybook/addon-controls': 7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-docs': 7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@storybook/addon-highlight': 7.6.17
- '@storybook/addon-measure': 7.6.17
- '@storybook/addon-outline': 7.6.17
- '@storybook/addon-toolbars': 7.6.17
- '@storybook/addon-viewport': 7.6.17
- '@storybook/core-common': 7.6.17
- '@storybook/manager-api': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/node-logger': 7.6.17
- '@storybook/preview-api': 7.6.17
- react: 18.2.0
- react-dom: 18.2.0(react@18.2.0)
+ /@storybook/addon-essentials@8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-ExN5v9p/08ArWVB1eARWri8UdzaXzZgrPCjV+Ip/Bljh/NYuNOd1PhfQ84IyBOB+RhtlPX9hh7fAdQiDa0MN0g==}
+ dependencies:
+ '@storybook/addon-actions': 8.0.1
+ '@storybook/addon-backgrounds': 8.0.1
+ '@storybook/addon-controls': 8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/addon-docs': 8.0.1
+ '@storybook/addon-highlight': 8.0.1
+ '@storybook/addon-measure': 8.0.1
+ '@storybook/addon-outline': 8.0.1
+ '@storybook/addon-toolbars': 8.0.1
+ '@storybook/addon-viewport': 8.0.1
+ '@storybook/core-common': 8.0.1
+ '@storybook/manager-api': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/node-logger': 8.0.1
+ '@storybook/preview-api': 8.0.1
ts-dedent: 2.2.0
transitivePeerDependencies:
- '@types/react'
- - '@types/react-dom'
- encoding
+ - react
+ - react-dom
- supports-color
dev: true
- /@storybook/addon-highlight@7.6.17:
- resolution: {integrity: sha512-R1yBPUUqGn+60aJakn8q+5Zt34E/gU3n3VmgPdryP0LJUdZ5q1/RZShoVDV+yYQ40htMH6oaCv3OyyPzFAGJ6A==}
+ /@storybook/addon-highlight@8.0.1:
+ resolution: {integrity: sha512-7+Q4dpQRbBylFKexSSvyksFqYXTIKMQzIcmL/XirUPKzDenCyuGfhDFWtredsb+kIR4P/Gg9MepMWkfBsoupuA==}
dependencies:
'@storybook/global': 5.0.0
dev: true
- /@storybook/addon-links@7.6.17(react@18.2.0):
- resolution: {integrity: sha512-iFUwKObRn0EKI0zMETsil2p9a/81rCuSMEWECsi+khkCAs1FUnD2cT6Ag5ydcNcBXsdtdfDJdtXQrkw+TSoStQ==}
+ /@storybook/addon-links@8.0.1(react@18.2.0):
+ resolution: {integrity: sha512-cYAPSr/mO++ZZWcNigfTEDPYshozT0hYpHJ7S5DIhUTZCpv92IDudN0HjYmEQnz4+OdsGaQ6GnITI2Fr8IOfQA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
peerDependenciesMeta:
react:
optional: true
dependencies:
- '@storybook/csf': 0.1.2
+ '@storybook/csf': 0.1.3
'@storybook/global': 5.0.0
react: 18.2.0
ts-dedent: 2.2.0
dev: true
- /@storybook/addon-measure@7.6.17:
- resolution: {integrity: sha512-O5vnHZNkduvZ95jf1UssbOl6ivIxzl5tv+4EpScPYId7w700bxWsJH+QX7ip6KlrCf2o3iUhmPe8bm05ghG2KA==}
+ /@storybook/addon-measure@8.0.1:
+ resolution: {integrity: sha512-dHZY8K5FWoEYuIK9+6dwky/IsqCGlNuGEU2gn2Q2OiIzHOveumxMtGQkWk8hrzRnwQB/eMbijbdwd+d0aBJp1w==}
dependencies:
'@storybook/global': 5.0.0
tiny-invariant: 1.3.3
dev: true
- /@storybook/addon-outline@7.6.17:
- resolution: {integrity: sha512-9o9JXDsYjNaDgz/cY5+jv694+aik/1aiRGGvsCv68e1p/ob0glkGKav4lnJe2VJqD+gCmaARoD8GOJlhoQl8JQ==}
+ /@storybook/addon-outline@8.0.1:
+ resolution: {integrity: sha512-1zPBQ+J4IUjULXlBbf3lLt5nblMUwQiTV6HAjngeczl3pCaZ3Q86lVAURE2K/gmLElsRALX4XoLw8M7hY4iYxQ==}
dependencies:
'@storybook/global': 5.0.0
ts-dedent: 2.2.0
@@ -8559,20 +8120,20 @@ packages:
- webpack
dev: true
- /@storybook/addon-storysource@7.6.17:
- resolution: {integrity: sha512-8SZiIuIkRU9NQM3Y2mmE0m+bqtXQefzW8Z9DkPKwTJSJxVBvMZVMHjRiQcPn8ll6zhqQIaQiBj0ahlR8ZqrnqA==}
+ /@storybook/addon-storysource@8.0.1:
+ resolution: {integrity: sha512-kv543xzyK7RnuYcGtZwTgoQZKjELLJ3d/uMwkEPgLFKW20tHWPL0jkBF95yCAFuKxI/vXCSU4k+iy6BP/MMaww==}
dependencies:
- '@storybook/source-loader': 7.6.17
+ '@storybook/source-loader': 8.0.1
estraverse: 5.3.0
tiny-invariant: 1.3.3
dev: true
- /@storybook/addon-toolbars@7.6.17:
- resolution: {integrity: sha512-UMrchbUHiyWrh6WuGnpy34Jqzkx/63B+MSgb3CW7YsQaXz64kE0Rol0TNSznnB+mYXplcqH+ndI4r4kFsmgwDg==}
+ /@storybook/addon-toolbars@8.0.1:
+ resolution: {integrity: sha512-Fa5H+iiQsYtcaF/2RhzTOo9YWMzOhjkl2muPOe3f/a7Z4eR4R4pGmJv/JZ1qfpRk67PoyFcUUkFnNWjBF0yLjQ==}
dev: true
- /@storybook/addon-viewport@7.6.17:
- resolution: {integrity: sha512-sA0QCcf4QAMixWvn8uvRYPfkKCSl6JajJaAspoPqXSxHEpK7uwOlpg3kqFU5XJJPXD0X957M+ONgNvBzYqSpEw==}
+ /@storybook/addon-viewport@8.0.1:
+ resolution: {integrity: sha512-8p4oDI1lSicLRhbRSZUCuUAJoJrZ+FG/ccgtEV6y6a4GRMkBbUpoqTMyHQKfDqszFmr7G4lG2HVXYCura8a3zg==}
dependencies:
memoizerific: 1.11.3
dev: true
@@ -8625,28 +8186,34 @@ packages:
util-deprecate: 1.0.2
dev: true
- /@storybook/blocks@7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-PsNVoe0bX1mMn4Kk3nbKZ0ItDZZ0YJnYAFJ6toAbsyBAbgzg1sce88sQinzvbn58/RT9MPKeWMPB45ZS7ggiNg==}
+ /@storybook/blocks@8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-S1aPjmhS3bTvyAeUNHULWzmuGFJ59DiaV5eGv3Dg5u8BKGlYXGe39wItE4p/KR/OqkwtY5++rFHrWQiJeEP90A==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
dependencies:
- '@storybook/channels': 7.6.17
- '@storybook/client-logger': 7.6.17
- '@storybook/components': 7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@storybook/core-events': 7.6.17
- '@storybook/csf': 0.1.2
- '@storybook/docs-tools': 7.6.17
+ '@storybook/channels': 8.0.1
+ '@storybook/client-logger': 8.0.1
+ '@storybook/components': 8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/core-events': 8.0.1
+ '@storybook/csf': 0.1.3
+ '@storybook/docs-tools': 8.0.1
'@storybook/global': 5.0.0
- '@storybook/manager-api': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/preview-api': 7.6.17
- '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.6.17
- '@types/lodash': 4.14.202
+ '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/manager-api': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/preview-api': 8.0.1
+ '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 8.0.1
+ '@types/lodash': 4.17.0
color-convert: 2.0.1
dequal: 2.0.3
lodash: 4.17.21
- markdown-to-jsx: 7.4.1(react@18.2.0)
+ markdown-to-jsx: 7.3.2(react@18.2.0)
memoizerific: 1.11.3
polished: 4.3.1
react: 18.2.0
@@ -8658,38 +8225,34 @@ packages:
util-deprecate: 1.0.2
transitivePeerDependencies:
- '@types/react'
- - '@types/react-dom'
- encoding
- supports-color
dev: true
- /@storybook/builder-webpack5@7.6.17(esbuild@0.18.20)(typescript@5.4.2):
- resolution: {integrity: sha512-GMaBd8/RzivuAmWrYSt9Rga3j8WLcu5LCMYiPVs+XKXsKAC8lTkV0WRWh8Nk6wTmfzsRQ2acwFjSG5oE4ClZKA==}
+ /@storybook/builder-webpack5@8.0.1(esbuild@0.20.2)(typescript@5.4.2):
+ resolution: {integrity: sha512-1UOdF5Ic5Ss86VwcZ5E0h5TJT6hcQTQFF+mjSla3Yy9Q9mvWtyr4xHYnTH7RXNB0cQXbFvaPvQLnBA0aOq/8HQ==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@babel/core': 7.24.0
- '@storybook/channels': 7.6.17
- '@storybook/client-logger': 7.6.17
- '@storybook/core-common': 7.6.17
- '@storybook/core-events': 7.6.17
- '@storybook/core-webpack': 7.6.17
- '@storybook/node-logger': 7.6.17
- '@storybook/preview': 7.6.17
- '@storybook/preview-api': 7.6.17
- '@swc/core': 1.4.5
- '@types/node': 18.19.22
+ '@storybook/channels': 8.0.1
+ '@storybook/client-logger': 8.0.1
+ '@storybook/core-common': 8.0.1
+ '@storybook/core-events': 8.0.1
+ '@storybook/core-webpack': 8.0.1
+ '@storybook/node-logger': 8.0.1
+ '@storybook/preview': 8.0.1
+ '@storybook/preview-api': 8.0.1
+ '@types/node': 18.19.25
'@types/semver': 7.5.8
- babel-loader: 9.1.3(@babel/core@7.24.0)(webpack@5.90.2)
browser-assert: 1.2.1
case-sensitive-paths-webpack-plugin: 2.4.0
cjs-module-lexer: 1.2.3
constants-browserify: 1.0.0
css-loader: 6.10.0(webpack@5.90.2)
- es-module-lexer: 1.4.1
+ es-module-lexer: 1.4.2
express: 4.18.3
fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.4.2)(webpack@5.90.2)
fs-extra: 11.2.0
@@ -8699,20 +8262,19 @@ packages:
process: 0.11.10
semver: 7.6.0
style-loader: 3.3.4(webpack@5.90.2)
- swc-loader: 0.2.6(@swc/core@1.4.5)(webpack@5.90.2)
- terser-webpack-plugin: 5.3.10(@swc/core@1.4.5)(esbuild@0.18.20)(webpack@5.90.2)
+ terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.90.2)
ts-dedent: 2.2.0
typescript: 5.4.2
url: 0.11.3
util: 0.12.5
util-deprecate: 1.0.2
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
webpack-dev-middleware: 6.1.1(webpack@5.90.2)
webpack-hot-middleware: 2.26.1
webpack-virtual-modules: 0.5.0
transitivePeerDependencies:
- '@rspack/core'
- - '@swc/helpers'
+ - '@swc/core'
- encoding
- esbuild
- supports-color
@@ -8750,13 +8312,12 @@ packages:
util-deprecate: 1.0.2
dev: true
- /@storybook/channels@7.6.17:
- resolution: {integrity: sha512-GFG40pzaSxk1hUr/J/TMqW5AFDDPUSu+HkeE/oqSWJbOodBOLJzHN6CReJS6y1DjYSZLNFt1jftPWZZInG/XUA==}
+ /@storybook/channels@8.0.1:
+ resolution: {integrity: sha512-zKhOOI/NU5w0rMGrGNlWkBLhNq7l33pRej9AJ+4rQcuJ3cc0ONkSktktYK8ThQ49I1ZOn7eS+h0BEmXX1Mr3Qg==}
dependencies:
- '@storybook/client-logger': 7.6.17
- '@storybook/core-events': 7.6.17
+ '@storybook/client-logger': 8.0.1
+ '@storybook/core-events': 8.0.1
'@storybook/global': 5.0.0
- qs: 6.12.0
telejson: 7.2.0
tiny-invariant: 1.3.3
dev: true
@@ -8774,7 +8335,7 @@ packages:
'@storybook/core-events': 6.5.16
'@storybook/csf': 0.0.2--canary.4566f4d.1
'@storybook/store': 6.5.16(react-dom@18.2.0)(react@18.2.0)
- '@types/qs': 6.9.12
+ '@types/qs': 6.9.13
'@types/webpack-env': 1.18.4
core-js: 3.36.0
fast-deep-equal: 3.1.3
@@ -8798,8 +8359,8 @@ packages:
global: 4.4.0
dev: true
- /@storybook/client-logger@7.6.17:
- resolution: {integrity: sha512-6WBYqixAXNAXlSaBWwgljWpAu10tPRBJrcFvx2gPUne58EeMM20Gi/iHYBz2kMCY+JLAgeIH7ZxInqwO8vDwiQ==}
+ /@storybook/client-logger@8.0.1:
+ resolution: {integrity: sha512-8NgJlVixYQB+c0zduoCAcOtEm4M9y776QKtmXvCaCtxyXl2uCbZFAMy6iai6ctoiVge0xiRaEzIkWKT1pHLDig==}
dependencies:
'@storybook/global': 5.0.0
dev: true
@@ -8822,27 +8383,25 @@ packages:
util-deprecate: 1.0.2
dev: true
- /@storybook/components@7.6.17(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-lbh7GynMidA+CZcJnstVku6Nhs+YkqjYaZ+mKPugvlVhGVWv0DaaeQFVuZ8cJtUGJ/5FFU4Y+n+gylYUHkGBMA==}
+ /@storybook/components@8.0.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-xrOL0CLirSnzZTtuXD+bgk1+MF36DuTG4ADD89A00dl22Uquo+MHFI9kzqxGtyb7PPpcJQjcgw/1WoSMSepPvQ==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
dependencies:
- '@radix-ui/react-select': 1.2.2(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@radix-ui/react-toolbar': 1.0.4(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
- '@storybook/client-logger': 7.6.17
- '@storybook/csf': 0.1.2
+ '@radix-ui/react-slot': 1.0.2(@types/react@18.2.64)(react@18.2.0)
+ '@storybook/client-logger': 8.0.1
+ '@storybook/csf': 0.1.3
'@storybook/global': 5.0.0
- '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.6.17
+ '@storybook/icons': 1.2.9(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 8.0.1
memoizerific: 1.11.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
- use-resize-observer: 9.1.0(react-dom@18.2.0)(react@18.2.0)
util-deprecate: 1.0.2
transitivePeerDependencies:
- '@types/react'
- - '@types/react-dom'
dev: true
/@storybook/core-client@6.5.16(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2)(webpack@5.90.2):
@@ -8879,14 +8438,7 @@ packages:
typescript: 5.4.2
unfetch: 4.2.0
util-deprecate: 1.0.2
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
- dev: true
-
- /@storybook/core-client@7.6.17:
- resolution: {integrity: sha512-LuDbADK+DPNAOOCXOlvY09hdGVueXlDetsdOJ/DgYnSa9QSWv9Uv+F8QcEgR3QckZJbPlztKJIVLgP2n/Xkijw==}
- dependencies:
- '@storybook/client-logger': 7.6.17
- '@storybook/preview-api': 7.6.17
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/@storybook/core-common@6.5.16(eslint@8.57.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2):
@@ -8923,7 +8475,7 @@ packages:
'@babel/register': 7.23.7(@babel/core@7.24.0)
'@storybook/node-logger': 6.5.16
'@storybook/semver': 7.3.2
- '@types/node': 16.18.87
+ '@types/node': 16.18.90
'@types/pretty-hrtime': 1.0.3
babel-loader: 8.3.0(@babel/core@7.24.0)(webpack@4.47.0)
babel-plugin-macros: 3.1.0
@@ -8960,19 +8512,20 @@ packages:
- webpack-command
dev: true
- /@storybook/core-common@7.6.17:
- resolution: {integrity: sha512-me2TP3Q9/qzqCLoDHUSsUF+VS1MHxfHbTVF6vAz0D/COTxzsxLpu9TxTbzJoBCxse6XRb6wWI1RgF1mIcjic7g==}
+ /@storybook/core-common@8.0.1:
+ resolution: {integrity: sha512-+t9qyJ/b/yRDCsp6zW68NsViieqCUuH6S8BpbSPWnkuGTYp98BMMGQoY4cqufUcFPuDYMzwAN7wQ5/iM5b7DYQ==}
dependencies:
- '@storybook/core-events': 7.6.17
- '@storybook/node-logger': 7.6.17
- '@storybook/types': 7.6.17
- '@types/find-cache-dir': 3.2.1
- '@types/node': 18.19.22
- '@types/node-fetch': 2.6.11
- '@types/pretty-hrtime': 1.0.3
+ '@storybook/core-events': 8.0.1
+ '@storybook/csf-tools': 8.0.1
+ '@storybook/node-logger': 8.0.1
+ '@storybook/types': 8.0.1
+ '@yarnpkg/fslib': 2.10.3
+ '@yarnpkg/libzip': 2.3.0
chalk: 4.1.2
- esbuild: 0.18.20
- esbuild-register: 3.5.0(esbuild@0.18.20)
+ cross-spawn: 7.0.3
+ esbuild: 0.20.2
+ esbuild-register: 3.5.0(esbuild@0.20.2)
+ execa: 5.1.1
file-system-cache: 2.3.0
find-cache-dir: 3.3.2
find-up: 5.0.0
@@ -8985,7 +8538,11 @@ packages:
pkg-dir: 5.0.0
pretty-hrtime: 1.0.3
resolve-from: 5.0.0
+ semver: 7.6.0
+ tempy: 1.0.1
+ tiny-invariant: 1.3.3
ts-dedent: 2.2.0
+ util: 0.12.5
transitivePeerDependencies:
- encoding
- supports-color
@@ -8997,45 +8554,45 @@ packages:
core-js: 3.36.0
dev: true
- /@storybook/core-events@7.6.17:
- resolution: {integrity: sha512-AriWMCm/k1cxlv10f+jZ1wavThTRpLaN3kY019kHWbYT9XgaSuLU67G7GPr3cGnJ6HuA6uhbzu8qtqVCd6OfXA==}
+ /@storybook/core-events@8.0.1:
+ resolution: {integrity: sha512-AI8W9YNNXtkC9W1wL+LV2M/hd4SJWVOGNFhwf+bGSFfGb9NLl23CIBWg8XgYVpTtil3etw5ODDgykEmUBcKsKw==}
dependencies:
ts-dedent: 2.2.0
dev: true
- /@storybook/core-webpack@7.6.17:
- resolution: {integrity: sha512-PyGrFhRM8sTONGwwLWLqBQ1HO+LBnVZ+5TOQO7ejQfdV2FWyNOzjBXm2e5jL/C6XlqiEhmL5pyHEyDBaQJQ3KA==}
+ /@storybook/core-webpack@8.0.1:
+ resolution: {integrity: sha512-QiZYA6mDgfInk10s2pXwSCGIgaUWeix/eo9Iizby3uGlNIu3XOfqfxvCwAE5EjlpLOaUdUbrB9UYr57k0x1PAg==}
dependencies:
- '@storybook/core-common': 7.6.17
- '@storybook/node-logger': 7.6.17
- '@storybook/types': 7.6.17
- '@types/node': 18.19.22
+ '@storybook/core-common': 8.0.1
+ '@storybook/node-logger': 8.0.1
+ '@storybook/types': 8.0.1
+ '@types/node': 18.19.25
ts-dedent: 2.2.0
transitivePeerDependencies:
- encoding
- supports-color
dev: true
- /@storybook/csf-plugin@7.6.17:
- resolution: {integrity: sha512-xTHv9BUh3bkDVCvcbmdfVF0/e96BdrEgqPJ3G3RmKbSzWLOkQ2U9yiPfHzT0KJWPhVwj12fjfZp0zunu+pcS6Q==}
+ /@storybook/csf-plugin@8.0.1:
+ resolution: {integrity: sha512-n3CEGP64gNUjyTKwByS5fpi7TnmUECsLpWH7KE/mpJVRm4omu/xlS1mEgikOxWFgxlXzotM1mAvjeWidvnMq/g==}
dependencies:
- '@storybook/csf-tools': 7.6.17
- unplugin: 1.8.3
+ '@storybook/csf-tools': 8.0.1
+ unplugin: 1.10.0
transitivePeerDependencies:
- supports-color
dev: true
- /@storybook/csf-tools@7.6.17:
- resolution: {integrity: sha512-dAQtam0EBPeTJYcQPLxXgz4L9JFqD+HWbLFG9CmNIhMMjticrB0mpk1EFIS6vPXk/VsVWpBgMLD7dZlD6YMKcQ==}
+ /@storybook/csf-tools@8.0.1:
+ resolution: {integrity: sha512-jG7dP0DsYpV+sdp/EV0/mcuZ6bzaTRsX3N/vZySKTRCvef72IGyxAeZrAg4OoOla0B2t/wxc8RZCG8NGaxHu4Q==}
dependencies:
'@babel/generator': 7.23.6
'@babel/parser': 7.24.0
'@babel/traverse': 7.24.0
'@babel/types': 7.24.0
- '@storybook/csf': 0.1.2
- '@storybook/types': 7.6.17
+ '@storybook/csf': 0.1.3
+ '@storybook/types': 8.0.1
fs-extra: 11.2.0
- recast: 0.23.5
+ recast: 0.23.6
ts-dedent: 2.2.0
transitivePeerDependencies:
- supports-color
@@ -9053,18 +8610,18 @@ packages:
lodash: 4.17.21
dev: true
- /@storybook/csf@0.1.2:
- resolution: {integrity: sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==}
+ /@storybook/csf@0.1.3:
+ resolution: {integrity: sha512-IPZvXXo4b3G+gpmgBSBqVM81jbp2ePOKsvhgJdhyZJtkYQCII7rg9KKLQhvBQM5sLaF1eU6r0iuwmyynC9d9SA==}
dependencies:
type-fest: 2.19.0
dev: true
- /@storybook/docs-tools@7.6.17:
- resolution: {integrity: sha512-bYrLoj06adqklyLkEwD32C0Ww6t+9ZVvrJHiVT42bIhTRpFiFPAetl1a9KPHtFLnfduh4n2IxIr1jv32ThPDTA==}
+ /@storybook/docs-tools@8.0.1:
+ resolution: {integrity: sha512-xgCe0wB3wHS+uD5xxl1vH5W6/BhvNkEkUtcfpEgA7XUkBqymLq+A6aMuKBNDi/rQI2KLnq8INirFrKaSZXKcmQ==}
dependencies:
- '@storybook/core-common': 7.6.17
- '@storybook/preview-api': 7.6.17
- '@storybook/types': 7.6.17
+ '@storybook/core-common': 8.0.1
+ '@storybook/preview-api': 8.0.1
+ '@storybook/types': 8.0.1
'@types/doctrine': 0.0.3
assert: 2.1.0
doctrine: 3.0.0
@@ -9078,17 +8635,28 @@ packages:
resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==}
dev: true
- /@storybook/manager-api@7.6.17(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-IJIV1Yc6yw1dhCY4tReHCfBnUKDqEBnMyHp3mbXpsaHxnxJZrXO45WjRAZIKlQKhl/Ge1CrnznmHRCmYgqmrWg==}
+ /@storybook/icons@1.2.9(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-cOmylsz25SYXaJL/gvTk/dl3pyk7yBFRfeXTsHvTA3dfhoU/LWSq0NKL9nM7WBasJyn6XPSGnLS4RtKXLw5EUg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: true
+
+ /@storybook/manager-api@8.0.1(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-LEUU8ueHAl8Vg8/NJjuMkqU+CQKhlACSphxMk4P6LWcmRl26/4lzcecH31NflxyjDt+HmCNji3mG81MhrBur9g==}
dependencies:
- '@storybook/channels': 7.6.17
- '@storybook/client-logger': 7.6.17
- '@storybook/core-events': 7.6.17
- '@storybook/csf': 0.1.2
+ '@storybook/channels': 8.0.1
+ '@storybook/client-logger': 8.0.1
+ '@storybook/core-events': 8.0.1
+ '@storybook/csf': 0.1.3
'@storybook/global': 5.0.0
- '@storybook/router': 7.6.17
- '@storybook/theming': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.6.17
+ '@storybook/router': 8.0.1
+ '@storybook/theming': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 8.0.1
dequal: 2.0.3
lodash: 4.17.21
memoizerific: 1.11.3
@@ -9100,7 +8668,7 @@ packages:
- react-dom
dev: true
- /@storybook/manager-webpack5@6.5.16(@swc/core@1.4.5)(esbuild@0.18.20)(eslint@8.57.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2):
+ /@storybook/manager-webpack5@6.5.16(esbuild@0.20.2)(eslint@8.57.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2):
resolution: {integrity: sha512-OtxXv8JCe0r/0rE5HxaFicsNsXA+fqZxzokxquFFgrYf/1Jg4d7QX6/pG5wINF+5qInJfVkRG6xhPzv1s5bk9Q==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -9119,7 +8687,7 @@ packages:
'@storybook/node-logger': 6.5.16
'@storybook/theming': 6.5.16(react-dom@18.2.0)(react@18.2.0)
'@storybook/ui': 6.5.16(react-dom@18.2.0)(react@18.2.0)
- '@types/node': 16.18.87
+ '@types/node': 16.18.90
babel-loader: 8.3.0(@babel/core@7.24.0)(webpack@5.90.2)
case-sensitive-paths-webpack-plugin: 2.4.0
chalk: 4.1.2
@@ -9138,11 +8706,11 @@ packages:
resolve-from: 5.0.0
style-loader: 2.0.0(webpack@5.90.2)
telejson: 6.0.8
- terser-webpack-plugin: 5.3.10(@swc/core@1.4.5)(esbuild@0.18.20)(webpack@5.90.2)
+ terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.90.2)
ts-dedent: 2.2.0
typescript: 5.4.2
util-deprecate: 1.0.2
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
webpack-dev-middleware: 4.3.0(webpack@5.90.2)
webpack-virtual-modules: 0.4.6
transitivePeerDependencies:
@@ -9158,10 +8726,6 @@ packages:
- webpack-command
dev: true
- /@storybook/mdx2-csf@1.1.0:
- resolution: {integrity: sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==}
- dev: true
-
/@storybook/node-logger@6.5.16:
resolution: {integrity: sha512-YjhBKrclQtjhqFNSO+BZK+RXOx6EQypAELJKoLFaawg331e8VUfvUuRCNB3fcEWp8G9oH13PQQte0OTjLyyOYg==}
dependencies:
@@ -9172,29 +8736,25 @@ packages:
pretty-hrtime: 1.0.3
dev: true
- /@storybook/node-logger@7.6.17:
- resolution: {integrity: sha512-w59MQuXhhUNrUVmVkXhMwIg2nvFWjdDczLTwYLorhfsE36CWeUOY5QCZWQy0Qf/h+jz8Uo7Evy64qn18v9C4wA==}
- dev: true
-
- /@storybook/postinstall@7.6.17:
- resolution: {integrity: sha512-WaWqB8o9vUc9aaVls+povQSVirf1Xd1LZcVhUKfAocAF3mzYUsnJsVqvnbjRj/F96UFVihOyDt9Zjl/9OvrCvQ==}
+ /@storybook/node-logger@8.0.1:
+ resolution: {integrity: sha512-uYWKSz9NhLOe2O60sJ4UPT1nzvbH0oR/YjK+OP3B4BySa6e195xY/5Uhou4lEaPSNU/0XXaLHCYeXjqeBjZopA==}
dev: true
- /@storybook/preview-api@7.6.17:
- resolution: {integrity: sha512-wLfDdI9RWo1f2zzFe54yRhg+2YWyxLZvqdZnSQ45mTs4/7xXV5Wfbv3QNTtcdw8tT3U5KRTrN1mTfTCiRJc0Kw==}
+ /@storybook/preview-api@8.0.1:
+ resolution: {integrity: sha512-grIox2BWEzaxXfBTIc/ODO/DerGk8PGdH6T/GIDgRxbunWndfVRT57j9sUfXuYn7nb4fPFSFD7N3gYhznpslHg==}
dependencies:
- '@storybook/channels': 7.6.17
- '@storybook/client-logger': 7.6.17
- '@storybook/core-events': 7.6.17
- '@storybook/csf': 0.1.2
+ '@storybook/channels': 8.0.1
+ '@storybook/client-logger': 8.0.1
+ '@storybook/core-events': 8.0.1
+ '@storybook/csf': 0.1.3
'@storybook/global': 5.0.0
- '@storybook/types': 7.6.17
- '@types/qs': 6.9.12
+ '@storybook/types': 8.0.1
+ '@types/qs': 6.9.13
dequal: 2.0.3
lodash: 4.17.21
memoizerific: 1.11.3
qs: 6.12.0
- synchronous-promise: 2.0.17
+ tiny-invariant: 1.3.3
ts-dedent: 2.2.0
util-deprecate: 1.0.2
dev: true
@@ -9225,12 +8785,12 @@ packages:
util-deprecate: 1.0.2
dev: true
- /@storybook/preview@7.6.17:
- resolution: {integrity: sha512-LvkMYK/y6alGjwRVNDIKL1lFlbyZ0H0c8iAbcQkiMoaFiujMQyVswMDKlWcj42Upfr/B1igydiruomc+eUt0mw==}
+ /@storybook/preview@8.0.1:
+ resolution: {integrity: sha512-HSYwtMFJPJuNPfrBizCjDH/P8ZcyzBpgQg+/D6xcI4odSY7j2ub7QWCvbrSv1/llp0lMHDDRsFyT847qRPgwuQ==}
dev: true
- /@storybook/react-dom-shim@7.6.17(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-32Sa/G+WnvaPiQ1Wvjjw5UM9rr2c4GDohwCcWVv3/LJuiFPqNS6zglAtmnsrlIBnUwRBMLMh/ekCTdqMiUmfDw==}
+ /@storybook/react-dom-shim@8.0.1(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-WQJiImmR4ToJTLYICwm50c3c8+vv3PFzvkoW+sMxQbYoJBJM8lfvbvsQu80aedG6C1VGEMe68mXSXSQqTvL+bA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -9239,27 +8799,26 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/react@7.6.17(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2):
- resolution: {integrity: sha512-lVqzQSU03rRJWYW+gK2gq6mSo3/qtnVICY8B8oP7gc36jVu4ksDIu45bTfukM618ODkUZy0vZe6T4engK3azjA==}
- engines: {node: '>=16.0.0'}
+ /@storybook/react@8.0.1(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.2):
+ resolution: {integrity: sha512-8d3nklcf2ePC/23kPVdKyQGjCfgnOeETU3b/DxA3bBE6T9EkiknjH4JJebBkmYh21oMgDYn5RpCrP73niyc0MQ==}
+ engines: {node: '>=18.0.0'}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
- typescript: '*'
+ typescript: '>= 4.2.x'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@storybook/client-logger': 7.6.17
- '@storybook/core-client': 7.6.17
- '@storybook/docs-tools': 7.6.17
+ '@storybook/client-logger': 8.0.1
+ '@storybook/docs-tools': 8.0.1
'@storybook/global': 5.0.0
- '@storybook/preview-api': 7.6.17
- '@storybook/react-dom-shim': 7.6.17(react-dom@18.2.0)(react@18.2.0)
- '@storybook/types': 7.6.17
+ '@storybook/preview-api': 8.0.1
+ '@storybook/react-dom-shim': 8.0.1(react-dom@18.2.0)(react@18.2.0)
+ '@storybook/types': 8.0.1
'@types/escodegen': 0.0.6
'@types/estree': 0.0.51
- '@types/node': 18.19.22
+ '@types/node': 18.19.25
acorn: 7.4.1
acorn-jsx: 5.3.2(acorn@7.4.1)
acorn-walk: 7.2.0
@@ -9270,6 +8829,7 @@ packages:
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-element-to-jsx-string: 15.0.0(react-dom@18.2.0)(react@18.2.0)
+ semver: 7.6.0
ts-dedent: 2.2.0
type-fest: 2.19.0
typescript: 5.4.2
@@ -9294,10 +8854,10 @@ packages:
regenerator-runtime: 0.13.11
dev: true
- /@storybook/router@7.6.17:
- resolution: {integrity: sha512-GnyC0j6Wi5hT4qRhSyT8NPtJfGmf82uZw97LQRWeyYu5gWEshUdM7aj40XlNiScd5cZDp0owO1idduVF2k2l2A==}
+ /@storybook/router@8.0.1:
+ resolution: {integrity: sha512-lTh0veiuQIygavalQu+n/fqZoyR1RoM6kLMPg9xLfH30aFL8I+e4G9Iq9782EguSMK1ya+QYjNe7Zo/CZCfezw==}
dependencies:
- '@storybook/client-logger': 7.6.17
+ '@storybook/client-logger': 8.0.1
memoizerific: 1.11.3
qs: 6.12.0
dev: true
@@ -9311,14 +8871,14 @@ packages:
find-up: 4.1.0
dev: true
- /@storybook/source-loader@7.6.17:
- resolution: {integrity: sha512-90v1es7dHmHgkGbflPlaRBYcn2+mqdC8OG4QtyYqOUq6xsLsyg+5CX2rupfHbuSLw9r0A3o1ViOII2J/kWtFow==}
+ /@storybook/source-loader@8.0.1:
+ resolution: {integrity: sha512-YBqVBCwiaw8g42/cCSsL3MlWLZWbSwWipj4/JxYG1/vmbxEpKbUwh0MPw8fITLbLw9OoQkKud8yG/IqSt/L8uw==}
dependencies:
- '@storybook/csf': 0.1.2
- '@storybook/types': 7.6.17
+ '@storybook/csf': 0.1.3
+ '@storybook/types': 8.0.1
estraverse: 5.3.0
lodash: 4.17.21
- prettier: 2.8.8
+ prettier: 3.2.5
dev: true
/@storybook/store@6.5.16(react-dom@18.2.0)(react@18.2.0):
@@ -9360,25 +8920,29 @@ packages:
regenerator-runtime: 0.13.11
dev: true
- /@storybook/theming@7.6.17(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-ZbaBt3KAbmBtfjNqgMY7wPMBshhSJlhodyMNQypv+95xLD/R+Az6aBYbpVAOygLaUQaQk4ar7H/Ww6lFIoiFbA==}
+ /@storybook/theming@8.0.1(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-TUmSHRh3YrpJ25DYjD+9PpJaq9Qf9P1S2xpwfNARM9r2KpkMF1/RgqnnQgZpP9od0Tzvkji7XPzxPU//EmQKEA==}
peerDependencies:
react: ^16.8.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+ peerDependenciesMeta:
+ react:
+ optional: true
+ react-dom:
+ optional: true
dependencies:
'@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.2.0)
- '@storybook/client-logger': 7.6.17
+ '@storybook/client-logger': 8.0.1
'@storybook/global': 5.0.0
memoizerific: 1.11.3
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: true
- /@storybook/types@7.6.17:
- resolution: {integrity: sha512-GRY0xEJQ0PrL7DY2qCNUdIfUOE0Gsue6N+GBJw9ku1IUDFLJRDOF+4Dx2BvYcVCPI5XPqdWKlEyZdMdKjiQN7Q==}
+ /@storybook/types@8.0.1:
+ resolution: {integrity: sha512-JfNWLg+/dcLgLmIyTVSkM42cYgwhdIfMoLyhA1XR62Ssb9/PyuicLJYKSKS9blTkPtVEYJqcz51fmE9K67ym4w==}
dependencies:
- '@storybook/channels': 7.6.17
- '@types/babel__core': 7.20.5
+ '@storybook/channels': 8.0.1
'@types/express': 4.17.21
file-system-cache: 2.3.0
dev: true
@@ -9584,88 +9148,88 @@ packages:
- typescript
dev: true
- /@swc/core-darwin-arm64@1.4.5:
- resolution: {integrity: sha512-toMSkbByHNfGXESyY1aiq5L3KutgijrNWB/THgdHIA1aIbwtrgMdFQfxpSE+INuuvWYi/Fxarv86EnU7ewbI0Q==}
+ /@swc/core-darwin-arm64@1.4.8:
+ resolution: {integrity: sha512-hhQCffRTgzpTIbngSnC30vV6IJVTI9FFBF954WEsshsecVoCGFiMwazBbrkLG+RwXENTrMhgeREEFh6R3KRgKQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
optional: true
- /@swc/core-darwin-x64@1.4.5:
- resolution: {integrity: sha512-LN8cbnmb4Gav8UcbBc+L/DEthmzCWZz22rQr6fIEHMN+f0d71fuKnV0ca0hoKbpZn33dlzUmXQE53HRjlRUQbw==}
+ /@swc/core-darwin-x64@1.4.8:
+ resolution: {integrity: sha512-P3ZBw8Jr8rKhY/J8d+6WqWriqngGTgHwtFeJ8MIakQJTbdYbFgXSZxcvDiERg3psbGeFXaUaPI0GO6BXv9k/OQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
requiresBuild: true
optional: true
- /@swc/core-linux-arm-gnueabihf@1.4.5:
- resolution: {integrity: sha512-suRFkhBWmOQxlM4frpos1uqjmHfaEI8FuJ0LL5+yRE7IunNDeQJBKujGZt6taeuxo1KqC0N0Ajr8IluN2wrKpA==}
+ /@swc/core-linux-arm-gnueabihf@1.4.8:
+ resolution: {integrity: sha512-PP9JIJt19bUWhAGcQW6qMwTjZOcMyzkvZa0/LWSlDm0ORYVLmDXUoeQbGD3e0Zju9UiZxyulnpjEN0ZihJgPTA==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-arm64-gnu@1.4.5:
- resolution: {integrity: sha512-mLKxasQArDGmR6k9c0tkPVUdoo8VfUecocMG1Mx9NYvpidJNaZ3xq9nYM77v7uq1fQqrs/59DM1fJTNRWvv/UQ==}
+ /@swc/core-linux-arm64-gnu@1.4.8:
+ resolution: {integrity: sha512-HvEWnwKHkoVUr5iftWirTApFJ13hGzhAY2CMw4lz9lur2m+zhPviRRED0FCI6T95Knpv7+8eUOr98Z7ctrG6DQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-arm64-musl@1.4.5:
- resolution: {integrity: sha512-pgKuyRP7S29U/HMDTx+x8dFcklWxwB9cHFNCNWSE6bS4vHR93jc4quwPX9OEQX5CVHxm+c8+xof043I4OGkAXw==}
+ /@swc/core-linux-arm64-musl@1.4.8:
+ resolution: {integrity: sha512-kY8+qa7k/dEeBq9p0Hrta18QnJPpsiJvDQSLNaTIFpdM3aEM9zbkshWz8gaX5VVGUEALowCBUWqmzO4VaqM+2w==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-x64-gnu@1.4.5:
- resolution: {integrity: sha512-srR+YN86Oerzoghd0DPCzTbTp08feeJPSr9kkNdmtQWENOa4l/9cJV3+XY6vviw0sEjezPmYnc3SwRxJRaxvEw==}
+ /@swc/core-linux-x64-gnu@1.4.8:
+ resolution: {integrity: sha512-0WWyIw432wpO/zeGblwq4f2YWam4pn8Z/Ig4KzHMgthR/KmiLU3f0Z7eo45eVmq5vcU7Os1zi/Zb65OOt09q/w==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-linux-x64-musl@1.4.5:
- resolution: {integrity: sha512-aSf41LZtDeG5VXI4RCnzcu0UInPyNm3ip8Kw+sCK+sSqW9o7DgBkyqqbip3RZq84fNUHBQQQQdKXetltsyRRqw==}
+ /@swc/core-linux-x64-musl@1.4.8:
+ resolution: {integrity: sha512-p4yxvVS05rBNCrBaSTa20KK88vOwtg8ifTW7ec/yoab0bD5EwzzB8KbDmLLxE6uziFa0sdjF0dfRDwSZPex37Q==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
requiresBuild: true
optional: true
- /@swc/core-win32-arm64-msvc@1.4.5:
- resolution: {integrity: sha512-vU3k8JwRUlTkJMfJQY9E4VvLrsIFOpfhnvbuXB84Amo1cJsz+bYQcC6RSvY7qpaDzDKFdUGbJco4uZTRoRf7Mg==}
+ /@swc/core-win32-arm64-msvc@1.4.8:
+ resolution: {integrity: sha512-jKuXihxAaqUnbFfvPxtmxjdJfs87F1GdBf33il+VUmSyWCP4BE6vW+/ReDAe8sRNsKyrZ3UH1vI5q1n64csBUA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
requiresBuild: true
optional: true
- /@swc/core-win32-ia32-msvc@1.4.5:
- resolution: {integrity: sha512-856YRh3frRK2XbrSjDOFBgoAqWJLNRkaEtfGzXfeEoyJlOz0BFsSJHxKlHAFkxRfHe2li9DJRUQFTEhXn4OUWw==}
+ /@swc/core-win32-ia32-msvc@1.4.8:
+ resolution: {integrity: sha512-O0wT4AGHrX8aBeH6c2ADMHgagAJc5Kf6W48U5moyYDAkkVnKvtSc4kGhjWhe1Yl0sI0cpYh2In2FxvYsb44eWw==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
requiresBuild: true
optional: true
- /@swc/core-win32-x64-msvc@1.4.5:
- resolution: {integrity: sha512-j1+kV7jmWY1+NbXAvxAEW165781yLXVZKLcoXIZKmw18EatqMF6w8acg1gDG8C+Iw5aWLkRZVS4pijSh7+DtCQ==}
+ /@swc/core-win32-x64-msvc@1.4.8:
+ resolution: {integrity: sha512-C2AYc3A2o+ECciqsJWRgIpp83Vk5EaRzHe7ed/xOWzVd0MsWR+fweEsyOjlmzHfpUxJSi46Ak3/BIZJlhZbXbg==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
requiresBuild: true
optional: true
- /@swc/core@1.4.5:
- resolution: {integrity: sha512-4/JGkG4b1Z/QwCGgx+Ub46MlzrsZvBk5JSkxm9PcZ4bSX81c+4Y94Xm3iLp5Ka8NxzS5rD4mJSpcYuN3Tw0ceg==}
+ /@swc/core@1.4.8:
+ resolution: {integrity: sha512-uY2RSJcFPgNOEg12RQZL197LZX+MunGiKxsbxmh22VfVxrOYGRvh4mPANFlrD1yb38CgmW1wI6YgIi8LkIwmWg==}
engines: {node: '>=10'}
requiresBuild: true
peerDependencies:
@@ -9675,18 +9239,18 @@ packages:
optional: true
dependencies:
'@swc/counter': 0.1.3
- '@swc/types': 0.1.5
+ '@swc/types': 0.1.6
optionalDependencies:
- '@swc/core-darwin-arm64': 1.4.5
- '@swc/core-darwin-x64': 1.4.5
- '@swc/core-linux-arm-gnueabihf': 1.4.5
- '@swc/core-linux-arm64-gnu': 1.4.5
- '@swc/core-linux-arm64-musl': 1.4.5
- '@swc/core-linux-x64-gnu': 1.4.5
- '@swc/core-linux-x64-musl': 1.4.5
- '@swc/core-win32-arm64-msvc': 1.4.5
- '@swc/core-win32-ia32-msvc': 1.4.5
- '@swc/core-win32-x64-msvc': 1.4.5
+ '@swc/core-darwin-arm64': 1.4.8
+ '@swc/core-darwin-x64': 1.4.8
+ '@swc/core-linux-arm-gnueabihf': 1.4.8
+ '@swc/core-linux-arm64-gnu': 1.4.8
+ '@swc/core-linux-arm64-musl': 1.4.8
+ '@swc/core-linux-x64-gnu': 1.4.8
+ '@swc/core-linux-x64-musl': 1.4.8
+ '@swc/core-win32-arm64-msvc': 1.4.8
+ '@swc/core-win32-ia32-msvc': 1.4.8
+ '@swc/core-win32-x64-msvc': 1.4.8
/@swc/counter@0.1.3:
resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
@@ -9697,8 +9261,10 @@ packages:
tslib: 2.6.2
dev: false
- /@swc/types@0.1.5:
- resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==}
+ /@swc/types@0.1.6:
+ resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==}
+ dependencies:
+ '@swc/counter': 0.1.3
/@tailwindcss/aspect-ratio@0.4.2(tailwindcss@3.4.1):
resolution: {integrity: sha512-8QPrypskfBa7QIMuKHg2TA7BqES6vhBrDLOv8Unb6FcFyd3TjKbc6lcmb9UPQHxfl24sXoJ41ux/H7qQQvfaSQ==}
@@ -9781,7 +9347,7 @@ packages:
pretty-format: 27.5.1
dev: true
- /@testing-library/jest-dom@6.4.2(vitest@1.3.1):
+ /@testing-library/jest-dom@6.4.2(vitest@1.4.0):
resolution: {integrity: sha512-CzqH0AFymEMG48CpzXFriYYkOjk6ZGPCLMhW9e9jg3KMCn5OfJecF8GtGW7yGfR/IgCe3SX8BSwjdzI6BBbZLw==}
engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
peerDependencies:
@@ -9810,7 +9376,7 @@ packages:
dom-accessibility-api: 0.6.3
lodash: 4.17.21
redent: 3.0.0
- vitest: 1.3.1(@types/node@20.9.0)(happy-dom@13.6.2)
+ vitest: 1.4.0(@types/node@20.9.0)(happy-dom@14.0.0)
dev: true
/@testing-library/react@14.2.1(react-dom@18.2.0)(react@18.2.0):
@@ -9879,35 +9445,6 @@ packages:
resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
dev: true
- /@types/babel__core@7.20.5:
- resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
- dependencies:
- '@babel/parser': 7.24.0
- '@babel/types': 7.24.0
- '@types/babel__generator': 7.6.8
- '@types/babel__template': 7.4.4
- '@types/babel__traverse': 7.20.5
- dev: true
-
- /@types/babel__generator@7.6.8:
- resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==}
- dependencies:
- '@babel/types': 7.24.0
- dev: true
-
- /@types/babel__template@7.4.4:
- resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
- dependencies:
- '@babel/parser': 7.24.0
- '@babel/types': 7.24.0
- dev: true
-
- /@types/babel__traverse@7.20.5:
- resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==}
- dependencies:
- '@babel/types': 7.24.0
- dev: true
-
/@types/bcrypt@5.0.2:
resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==}
dependencies:
@@ -10031,6 +9568,10 @@ packages:
dev: false
optional: true
+ /@types/emscripten@1.39.10:
+ resolution: {integrity: sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==}
+ dev: true
+
/@types/escodegen@0.0.6:
resolution: {integrity: sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==}
dev: true
@@ -10069,7 +9610,7 @@ packages:
resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==}
dependencies:
'@types/node': 20.9.0
- '@types/qs': 6.9.12
+ '@types/qs': 6.9.13
'@types/range-parser': 1.2.7
'@types/send': 0.17.4
dev: true
@@ -10085,14 +9626,10 @@ packages:
dependencies:
'@types/body-parser': 1.19.5
'@types/express-serve-static-core': 4.17.43
- '@types/qs': 6.9.12
+ '@types/qs': 6.9.13
'@types/serve-static': 1.15.5
dev: true
- /@types/find-cache-dir@3.2.1:
- resolution: {integrity: sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==}
- dev: true
-
/@types/fs-extra@11.0.4:
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
dependencies:
@@ -10100,12 +9637,6 @@ packages:
'@types/node': 20.9.0
dev: true
- /@types/graceful-fs@4.1.9:
- resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
- dependencies:
- '@types/node': 20.9.0
- dev: true
-
/@types/hammerjs@2.0.45:
resolution: {integrity: sha512-qkcUlZmX6c4J8q45taBKTL3p+LbITgyx7qhlPYOdOHZB7B31K0mXbP5YA7i7SgDeEGuI9MnumiKPEMrxg8j3KQ==}
dev: true
@@ -10152,18 +9683,6 @@ packages:
resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
dev: true
- /@types/istanbul-lib-report@3.0.3:
- resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
- dependencies:
- '@types/istanbul-lib-coverage': 2.0.6
- dev: true
-
- /@types/istanbul-reports@3.0.4:
- resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
- dependencies:
- '@types/istanbul-lib-report': 3.0.3
- dev: true
-
/@types/js-cookie@2.2.7:
resolution: {integrity: sha512-aLkWa0C0vO5b4Sr798E26QgOkss68Un0bLjs7u9qxzPT5CG+8DuNTffWES58YzJs3hrVAOs1wonycqEBqNJubA==}
dev: false
@@ -10196,8 +9715,8 @@ packages:
resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==}
dev: true
- /@types/lodash@4.14.202:
- resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==}
+ /@types/lodash@4.17.0:
+ resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==}
dev: true
/@types/markdown-it@13.0.7:
@@ -10266,12 +9785,12 @@ packages:
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
dev: true
- /@types/node@16.18.87:
- resolution: {integrity: sha512-+IzfhNirR/MDbXz6Om5eHV54D9mQlEMGag6AgEzlju0xH3M8baCXYwqQ6RKgGMpn9wSTx6Ltya/0y4Z8eSfdLw==}
+ /@types/node@16.18.90:
+ resolution: {integrity: sha512-ofx8kJGTumXmOfYHrJckfdunEiEoq6Aa8x3JKVtGS25z/DTV/fUqIolnHPssDs8P3fq2ZWayNwkAWEk/RmdmwQ==}
dev: true
- /@types/node@18.19.22:
- resolution: {integrity: sha512-p3pDIfuMg/aXBmhkyanPshdfJuX5c5+bQjYLIikPLXAUycEogij/c50n/C+8XOA5L93cU4ZRXtn+dNQGi0IZqQ==}
+ /@types/node@18.19.25:
+ resolution: {integrity: sha512-NrNXHJCexZtcbR9K1hsv1fSbwAwnhv7ql7l331aKvW0sej5H0NY1o64BHe0AA2ZoQuTm7NE6fyNW079MOWXe4Q==}
dependencies:
undici-types: 5.26.5
dev: true
@@ -10301,6 +9820,12 @@ packages:
resolution: {integrity: sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==}
dev: true
+ /@types/oauth@0.9.4:
+ resolution: {integrity: sha512-qk9orhti499fq5XxKCCEbd0OzdPZuancneyse3KtR+vgMiHRbh+mn8M4G6t64ob/Fg+GZGpa565MF/2dKWY32A==}
+ dependencies:
+ '@types/node': 20.9.0
+ dev: true
+
/@types/papaparse@5.3.14:
resolution: {integrity: sha512-LxJ4iEFcpqc6METwp9f6BV6VVc43m6MfH0VqFosHvrUgfXiFe6ww7R3itkOQ+TCK6Y+Iv/+RnnvtRZnkc5Kc9g==}
dependencies:
@@ -10311,6 +9836,22 @@ packages:
resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
dev: true
+ /@types/passport-github2@1.2.9:
+ resolution: {integrity: sha512-/nMfiPK2E6GKttwBzwj0Wjaot8eHrM57hnWxu52o6becr5/kXlH/4yE2v2rh234WGvSgEEzIII02Nc5oC5xEHA==}
+ dependencies:
+ '@types/express': 4.17.21
+ '@types/passport': 1.0.16
+ '@types/passport-oauth2': 1.4.15
+ dev: true
+
+ /@types/passport-google-oauth20@2.0.14:
+ resolution: {integrity: sha512-ZaZpRUAeMl3vy298ulKO1wGLn9SQtj/CyIfZL/Px5xU9pybMiQU3mhXDCBiWSbg0EK9uXT4ZoWC3ktuWY+5fwQ==}
+ dependencies:
+ '@types/express': 4.17.21
+ '@types/passport': 1.0.16
+ '@types/passport-oauth2': 1.4.15
+ dev: true
+
/@types/passport-jwt@4.0.1:
resolution: {integrity: sha512-Y0Ykz6nWP4jpxgEUYq8NoVZeCQPo1ZndJLfapI249g1jHChvRfZRO/LS3tqu26YgAS/laI1qx98sYGz0IalRXQ==}
dependencies:
@@ -10326,6 +9867,14 @@ packages:
'@types/passport-strategy': 0.2.38
dev: true
+ /@types/passport-oauth2@1.4.15:
+ resolution: {integrity: sha512-9cUTP/HStNSZmhxXGuRrBJfEWzIEJRub2eyJu3CvkA+8HAMc9W3aKdFhVq+Qz1hi42qn+GvSAnz3zwacDSYWpw==}
+ dependencies:
+ '@types/express': 4.17.21
+ '@types/oauth': 0.9.4
+ '@types/passport': 1.0.16
+ dev: true
+
/@types/passport-strategy@0.2.38:
resolution: {integrity: sha512-GC6eMqqojOooq993Tmnmp7AUTbbQSgilyvpCYQjT+H6JfG/g6RGc7nXEniZlp0zyKJ0WUdOiZWLBZft9Yug1uA==}
dependencies:
@@ -10361,8 +9910,8 @@ packages:
dev: false
optional: true
- /@types/qs@6.9.12:
- resolution: {integrity: sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==}
+ /@types/qs@6.9.13:
+ resolution: {integrity: sha512-iLR+1vTTJ3p0QaOUq6ACbY1mzKTODFDT/XedZI8BksOotFmL4ForwDfRQ/DZeuTHR7/2i4lI1D203gdfxuqTlA==}
dev: true
/@types/range-parser@1.2.7:
@@ -10484,18 +10033,8 @@ packages:
'@types/node': 20.9.0
dev: true
- /@types/yargs-parser@21.0.3:
- resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
- dev: true
-
- /@types/yargs@17.0.32:
- resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==}
- dependencies:
- '@types/yargs-parser': 21.0.3
- dev: true
-
- /@typescript-eslint/eslint-plugin@7.0.2(@typescript-eslint/parser@7.0.2)(eslint@8.57.0)(typescript@5.4.2):
- resolution: {integrity: sha512-/XtVZJtbaphtdrWjr+CJclaCVGPtOdBpFEnvtNf/jRV0IiEemRrL0qABex/nEt8isYcnFacm3nPHYQwL+Wb7qg==}
+ /@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2):
+ resolution: {integrity: sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@@ -10506,18 +10045,18 @@ packages:
optional: true
dependencies:
'@eslint-community/regexpp': 4.10.0
- '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.4.2)
- '@typescript-eslint/scope-manager': 7.0.2
- '@typescript-eslint/type-utils': 7.0.2(eslint@8.57.0)(typescript@5.4.2)
- '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.4.2)
- '@typescript-eslint/visitor-keys': 7.0.2
+ '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
+ '@typescript-eslint/scope-manager': 7.2.0
+ '@typescript-eslint/type-utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
+ '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
+ '@typescript-eslint/visitor-keys': 7.2.0
debug: 4.3.4
eslint: 8.57.0
graphemer: 1.4.0
ignore: 5.3.1
natural-compare: 1.4.0
semver: 7.6.0
- ts-api-utils: 1.2.1(typescript@5.4.2)
+ ts-api-utils: 1.3.0(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
@@ -10544,8 +10083,8 @@ packages:
- supports-color
dev: true
- /@typescript-eslint/parser@7.0.2(eslint@8.57.0)(typescript@5.4.2):
- resolution: {integrity: sha512-GdwfDglCxSmU+QTS9vhz2Sop46ebNCXpPPvsByK7hu0rFGRHL+AusKQJ7SoN+LbLh6APFpQwHKmDSwN35Z700Q==}
+ /@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.4.2):
+ resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -10554,10 +10093,10 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/scope-manager': 7.0.2
- '@typescript-eslint/types': 7.0.2
- '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.4.2)
- '@typescript-eslint/visitor-keys': 7.0.2
+ '@typescript-eslint/scope-manager': 7.2.0
+ '@typescript-eslint/types': 7.2.0
+ '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2)
+ '@typescript-eslint/visitor-keys': 7.2.0
debug: 4.3.4
eslint: 8.57.0
typescript: 5.4.2
@@ -10580,15 +10119,15 @@ packages:
'@typescript-eslint/visitor-keys': 6.21.0
dev: true
- /@typescript-eslint/scope-manager@7.0.2:
- resolution: {integrity: sha512-l6sa2jF3h+qgN2qUMjVR3uCNGjWw4ahGfzIYsCtFrQJCjhbrDPdiihYT8FnnqFwsWX+20hK592yX9I2rxKTP4g==}
+ /@typescript-eslint/scope-manager@7.2.0:
+ resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 7.0.2
- '@typescript-eslint/visitor-keys': 7.0.2
+ '@typescript-eslint/types': 7.2.0
+ '@typescript-eslint/visitor-keys': 7.2.0
- /@typescript-eslint/type-utils@7.0.2(eslint@8.57.0)(typescript@5.4.2):
- resolution: {integrity: sha512-IKKDcFsKAYlk8Rs4wiFfEwJTQlHcdn8CLwLaxwd6zb8HNiMcQIFX9sWax2k4Cjj7l7mGS5N1zl7RCHOVwHq2VQ==}
+ /@typescript-eslint/type-utils@7.2.0(eslint@8.57.0)(typescript@5.4.2):
+ resolution: {integrity: sha512-xHi51adBHo9O9330J8GQYQwrKBqbIPJGZZVQTHHmy200hvkLZFWJIFtAG/7IYTWUyun6DE6w5InDReePJYJlJA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -10597,11 +10136,11 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.4.2)
- '@typescript-eslint/utils': 7.0.2(eslint@8.57.0)(typescript@5.4.2)
+ '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2)
+ '@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
debug: 4.3.4
eslint: 8.57.0
- ts-api-utils: 1.2.1(typescript@5.4.2)
+ ts-api-utils: 1.3.0(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
@@ -10617,8 +10156,8 @@ packages:
engines: {node: ^16.0.0 || >=18.0.0}
dev: true
- /@typescript-eslint/types@7.0.2:
- resolution: {integrity: sha512-ZzcCQHj4JaXFjdOql6adYV4B/oFOFjPOC9XYwCaZFRvqN8Llfvv4gSxrkQkd2u4Ci62i2c6W6gkDwQJDaRc4nA==}
+ /@typescript-eslint/types@7.2.0:
+ resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==}
engines: {node: ^16.0.0 || >=18.0.0}
/@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.2):
@@ -10658,14 +10197,14 @@ packages:
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.0
- ts-api-utils: 1.2.1(typescript@5.4.2)
+ ts-api-utils: 1.3.0(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
dev: true
- /@typescript-eslint/typescript-estree@7.0.2(typescript@5.4.2):
- resolution: {integrity: sha512-3AMc8khTcELFWcKcPc0xiLviEvvfzATpdPj/DXuOGIdQIIFybf4DMT1vKRbuAEOFMwhWt7NFLXRkbjsvKZQyvw==}
+ /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.2):
+ resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
typescript: '*'
@@ -10673,14 +10212,14 @@ packages:
typescript:
optional: true
dependencies:
- '@typescript-eslint/types': 7.0.2
- '@typescript-eslint/visitor-keys': 7.0.2
+ '@typescript-eslint/types': 7.2.0
+ '@typescript-eslint/visitor-keys': 7.2.0
debug: 4.3.4
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.3
semver: 7.6.0
- ts-api-utils: 1.2.1(typescript@5.4.2)
+ ts-api-utils: 1.3.0(typescript@5.4.2)
typescript: 5.4.2
transitivePeerDependencies:
- supports-color
@@ -10705,8 +10244,8 @@ packages:
- typescript
dev: false
- /@typescript-eslint/utils@7.0.2(eslint@8.57.0)(typescript@5.4.2):
- resolution: {integrity: sha512-PZPIONBIB/X684bhT1XlrkjNZJIEevwkKDsdwfiu1WeqBxYEEdIgVDgm8/bbKHVu+6YOpeRqcfImTdImx/4Bsw==}
+ /@typescript-eslint/utils@7.2.0(eslint@8.57.0)(typescript@5.4.2):
+ resolution: {integrity: sha512-YfHpnMAGb1Eekpm3XRK8hcMwGLGsnT6L+7b2XyRv6ouDuJU1tZir1GS2i0+VXRatMwSI1/UfcyPe53ADkU+IuA==}
engines: {node: ^16.0.0 || >=18.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -10714,9 +10253,9 @@ packages:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
'@types/json-schema': 7.0.15
'@types/semver': 7.5.8
- '@typescript-eslint/scope-manager': 7.0.2
- '@typescript-eslint/types': 7.0.2
- '@typescript-eslint/typescript-estree': 7.0.2(typescript@5.4.2)
+ '@typescript-eslint/scope-manager': 7.2.0
+ '@typescript-eslint/types': 7.2.0
+ '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.2)
eslint: 8.57.0
semver: 7.6.0
transitivePeerDependencies:
@@ -10740,59 +10279,83 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
- /@typescript-eslint/visitor-keys@7.0.2:
- resolution: {integrity: sha512-8Y+YiBmqPighbm5xA2k4wKTxRzx9EkBu7Rlw+WHqMvRJ3RPz/BMBO9b2ru0LUNmXg120PHUXD5+SWFy2R8DqlQ==}
+ /@typescript-eslint/visitor-keys@7.2.0:
+ resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==}
engines: {node: ^16.0.0 || >=18.0.0}
dependencies:
- '@typescript-eslint/types': 7.0.2
+ '@typescript-eslint/types': 7.2.0
eslint-visitor-keys: 3.4.3
/@ungap/structured-clone@1.2.0:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
- /@vitejs/plugin-react-swc@3.6.0(vite@5.1.5):
+ /@vitejs/plugin-react-swc@3.6.0(vite@5.1.6):
resolution: {integrity: sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==}
peerDependencies:
vite: ^4 || ^5
dependencies:
- '@swc/core': 1.4.5
- vite: 5.1.5(@types/node@20.9.0)
+ '@swc/core': 1.4.8
+ vite: 5.1.6(@types/node@20.9.0)
+ transitivePeerDependencies:
+ - '@swc/helpers'
+ dev: true
+
+ /@vitest/coverage-v8@1.4.0(vitest@1.4.0):
+ resolution: {integrity: sha512-4hDGyH1SvKpgZnIByr9LhGgCEuF9DKM34IBLCC/fVfy24Z3+PZ+Ii9hsVBsHvY1umM1aGPEjceRkzxCfcQ10wg==}
+ peerDependencies:
+ vitest: 1.4.0
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@bcoe/v8-coverage': 0.2.3
+ debug: 4.3.4
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.4
+ istanbul-reports: 3.1.7
+ magic-string: 0.30.8
+ magicast: 0.3.3
+ picocolors: 1.0.0
+ std-env: 3.7.0
+ strip-literal: 2.0.0
+ test-exclude: 6.0.0
+ v8-to-istanbul: 9.2.0
+ vitest: 1.4.0(@types/node@20.9.0)(happy-dom@14.0.0)
transitivePeerDependencies:
- - '@swc/helpers'
+ - supports-color
dev: true
- /@vitest/expect@1.3.1:
- resolution: {integrity: sha512-xofQFwIzfdmLLlHa6ag0dPV8YsnKOCP1KdAeVVh34vSjN2dcUiXYCD9htu/9eM7t8Xln4v03U9HLxLpPlsXdZw==}
+ /@vitest/expect@1.4.0:
+ resolution: {integrity: sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==}
dependencies:
- '@vitest/spy': 1.3.1
- '@vitest/utils': 1.3.1
+ '@vitest/spy': 1.4.0
+ '@vitest/utils': 1.4.0
chai: 4.4.1
dev: true
- /@vitest/runner@1.3.1:
- resolution: {integrity: sha512-5FzF9c3jG/z5bgCnjr8j9LNq/9OxV2uEBAITOXfoe3rdZJTdO7jzThth7FXv/6b+kdY65tpRQB7WaKhNZwX+Kg==}
+ /@vitest/runner@1.4.0:
+ resolution: {integrity: sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==}
dependencies:
- '@vitest/utils': 1.3.1
+ '@vitest/utils': 1.4.0
p-limit: 5.0.0
pathe: 1.1.2
dev: true
- /@vitest/snapshot@1.3.1:
- resolution: {integrity: sha512-EF++BZbt6RZmOlE3SuTPu/NfwBF6q4ABS37HHXzs2LUVPBLx2QoY/K0fKpRChSo8eLiuxcbCVfqKgx/dplCDuQ==}
+ /@vitest/snapshot@1.4.0:
+ resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==}
dependencies:
magic-string: 0.30.8
pathe: 1.1.2
pretty-format: 29.7.0
dev: true
- /@vitest/spy@1.3.1:
- resolution: {integrity: sha512-xAcW+S099ylC9VLU7eZfdT9myV67Nor9w9zhf0mGCYJSO+zM2839tOeROTdikOi/8Qeusffvxb/MyBSOja1Uig==}
+ /@vitest/spy@1.4.0:
+ resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==}
dependencies:
tinyspy: 2.2.1
dev: true
- /@vitest/utils@1.3.1:
- resolution: {integrity: sha512-d3Waie/299qqRyHTm2DjADeTaNdNSVsnwHPWrs20JMpjh6eiVq7ggggweO8rc4arhf6rRkWuHKwvxGvejUXZZQ==}
+ /@vitest/utils@1.4.0:
+ resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==}
dependencies:
diff-sequences: 29.6.3
estree-walker: 3.0.3
@@ -10800,8 +10363,8 @@ packages:
pretty-format: 29.7.0
dev: true
- /@webassemblyjs/ast@1.11.6:
- resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==}
+ /@webassemblyjs/ast@1.12.1:
+ resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==}
dependencies:
'@webassemblyjs/helper-numbers': 1.11.6
'@webassemblyjs/helper-wasm-bytecode': 1.11.6
@@ -10831,8 +10394,8 @@ packages:
resolution: {integrity: sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==}
dev: true
- /@webassemblyjs/helper-buffer@1.11.6:
- resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==}
+ /@webassemblyjs/helper-buffer@1.12.1:
+ resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==}
dev: true
/@webassemblyjs/helper-buffer@1.9.0:
@@ -10871,13 +10434,13 @@ packages:
resolution: {integrity: sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==}
dev: true
- /@webassemblyjs/helper-wasm-section@1.11.6:
- resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==}
+ /@webassemblyjs/helper-wasm-section@1.12.1:
+ resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==}
dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-buffer': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
'@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/wasm-gen': 1.11.6
+ '@webassemblyjs/wasm-gen': 1.12.1
dev: true
/@webassemblyjs/helper-wasm-section@1.9.0:
@@ -10921,17 +10484,17 @@ packages:
resolution: {integrity: sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==}
dev: true
- /@webassemblyjs/wasm-edit@1.11.6:
- resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==}
+ /@webassemblyjs/wasm-edit@1.12.1:
+ resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==}
dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-buffer': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
'@webassemblyjs/helper-wasm-bytecode': 1.11.6
- '@webassemblyjs/helper-wasm-section': 1.11.6
- '@webassemblyjs/wasm-gen': 1.11.6
- '@webassemblyjs/wasm-opt': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
- '@webassemblyjs/wast-printer': 1.11.6
+ '@webassemblyjs/helper-wasm-section': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-opt': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
+ '@webassemblyjs/wast-printer': 1.12.1
dev: true
/@webassemblyjs/wasm-edit@1.9.0:
@@ -10947,10 +10510,10 @@ packages:
'@webassemblyjs/wast-printer': 1.9.0
dev: true
- /@webassemblyjs/wasm-gen@1.11.6:
- resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==}
+ /@webassemblyjs/wasm-gen@1.12.1:
+ resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==}
dependencies:
- '@webassemblyjs/ast': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
'@webassemblyjs/helper-wasm-bytecode': 1.11.6
'@webassemblyjs/ieee754': 1.11.6
'@webassemblyjs/leb128': 1.11.6
@@ -10967,13 +10530,13 @@ packages:
'@webassemblyjs/utf8': 1.9.0
dev: true
- /@webassemblyjs/wasm-opt@1.11.6:
- resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==}
+ /@webassemblyjs/wasm-opt@1.12.1:
+ resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==}
dependencies:
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/helper-buffer': 1.11.6
- '@webassemblyjs/wasm-gen': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/helper-buffer': 1.12.1
+ '@webassemblyjs/wasm-gen': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
dev: true
/@webassemblyjs/wasm-opt@1.9.0:
@@ -10985,10 +10548,10 @@ packages:
'@webassemblyjs/wasm-parser': 1.9.0
dev: true
- /@webassemblyjs/wasm-parser@1.11.6:
- resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==}
+ /@webassemblyjs/wasm-parser@1.12.1:
+ resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==}
dependencies:
- '@webassemblyjs/ast': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
'@webassemblyjs/helper-api-error': 1.11.6
'@webassemblyjs/helper-wasm-bytecode': 1.11.6
'@webassemblyjs/ieee754': 1.11.6
@@ -11018,10 +10581,10 @@ packages:
'@xtuc/long': 4.2.2
dev: true
- /@webassemblyjs/wast-printer@1.11.6:
- resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==}
+ /@webassemblyjs/wast-printer@1.12.1:
+ resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==}
dependencies:
- '@webassemblyjs/ast': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
'@xtuc/long': 4.2.2
dev: true
@@ -11045,6 +10608,22 @@ packages:
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
dev: true
+ /@yarnpkg/fslib@2.10.3:
+ resolution: {integrity: sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==}
+ engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+ dependencies:
+ '@yarnpkg/libzip': 2.3.0
+ tslib: 1.14.1
+ dev: true
+
+ /@yarnpkg/libzip@2.3.0:
+ resolution: {integrity: sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==}
+ engines: {node: '>=12 <14 || 14.2 - 14.9 || >14.10.0'}
+ dependencies:
+ '@types/emscripten': 1.39.10
+ tslib: 1.14.1
+ dev: true
+
/@zkochan/rimraf@2.1.3:
resolution: {integrity: sha512-mCfR3gylCzPC+iqdxEA6z5SxJeOgzgbwmyxanKriIne5qZLswDe/M43aD3p5MNzwzXRhbZg/OX+MpES6Zk1a6A==}
engines: {node: '>=12.10'}
@@ -11169,12 +10748,9 @@ packages:
/aggregate-error@3.1.0:
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
engines: {node: '>=8'}
- requiresBuild: true
dependencies:
clean-stack: 2.2.0
indent-string: 4.0.0
- dev: false
- optional: true
/airbnb-js-shims@2.2.1:
resolution: {integrity: sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==}
@@ -11186,15 +10762,15 @@ packages:
es6-shim: 0.35.8
function.prototype.name: 1.1.6
globalthis: 1.0.3
- object.entries: 1.1.7
- object.fromentries: 2.0.7
+ object.entries: 1.1.8
+ object.fromentries: 2.0.8
object.getownpropertydescriptors: 2.1.7
- object.values: 1.1.7
+ object.values: 1.2.0
promise.allsettled: 1.0.7
promise.prototype.finally: 3.1.8
string.prototype.matchall: 4.0.10
string.prototype.padend: 3.1.5
- string.prototype.padstart: 3.1.5
+ string.prototype.padstart: 3.1.6
symbol.prototype.description: 1.0.6
dev: true
@@ -11432,6 +11008,7 @@ packages:
engines: {node: '>=10'}
dependencies:
tslib: 2.6.2
+ dev: false
/aria-query@5.1.3:
resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==}
@@ -11496,16 +11073,6 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /array.prototype.filter@1.0.3:
- resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==}
- engines: {node: '>= 0.4'}
- dependencies:
- call-bind: 1.0.7
- define-properties: 1.2.1
- es-abstract: 1.22.5
- es-array-method-boxes-properly: 1.0.0
- is-string: 1.0.7
-
/array.prototype.findlastindex@1.2.4:
resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==}
engines: {node: '>= 0.4'}
@@ -11534,14 +11101,15 @@ packages:
es-abstract: 1.22.5
es-shim-unscopables: 1.0.2
- /array.prototype.map@1.0.6:
- resolution: {integrity: sha512-nK1psgF2cXqP3wSyCSq0Hc7zwNq3sfljQqaG27r/7a7ooNUnn5nGq6yYWyks9jMO5EoFQ0ax80hSg6oXSRNXaw==}
+ /array.prototype.map@1.0.7:
+ resolution: {integrity: sha512-XpcFfLoBEAhezrrNw1V+yLXkE7M6uR7xJEsxbG6c/V9v043qurwVJB9r9UTnoSioFDoz1i1VOydpWGmJpfVZbg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
es-array-method-boxes-properly: 1.0.0
+ es-object-atoms: 1.0.0
is-string: 1.0.7
dev: true
@@ -11650,11 +11218,6 @@ packages:
/async@3.2.5:
resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
- /asynciterator.prototype@1.0.0:
- resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==}
- dependencies:
- has-symbols: 1.0.3
-
/asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@@ -11678,7 +11241,7 @@ packages:
engines: {node: '>=8.0.0'}
dev: false
- /autoprefixer@10.4.18(postcss@8.4.35):
+ /autoprefixer@10.4.18(postcss@8.4.36):
resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
@@ -11686,11 +11249,11 @@ packages:
postcss: ^8.1.0
dependencies:
browserslist: 4.23.0
- caniuse-lite: 1.0.30001596
+ caniuse-lite: 1.0.30001599
fraction.js: 4.3.7
normalize-range: 0.1.2
picocolors: 1.0.0
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
@@ -11707,15 +11270,15 @@ packages:
/axios@0.21.4:
resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==}
dependencies:
- follow-redirects: 1.15.5
+ follow-redirects: 1.15.6
transitivePeerDependencies:
- debug
dev: true
- /axios@1.6.7:
- resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==}
+ /axios@1.6.8:
+ resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==}
dependencies:
- follow-redirects: 1.15.5
+ follow-redirects: 1.15.6
form-data: 4.0.0
proxy-from-env: 1.1.0
transitivePeerDependencies:
@@ -11753,33 +11316,7 @@ packages:
loader-utils: 2.0.4
make-dir: 3.1.0
schema-utils: 2.7.1
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
- dev: true
-
- /babel-loader@9.1.3(@babel/core@7.24.0)(webpack@5.90.2):
- resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==}
- engines: {node: '>= 14.15.0'}
- peerDependencies:
- '@babel/core': ^7.12.0
- webpack: '>=5'
- dependencies:
- '@babel/core': 7.24.0
- find-cache-dir: 4.0.0
- schema-utils: 4.2.0
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
- dev: true
-
- /babel-plugin-istanbul@6.1.1:
- resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==}
- engines: {node: '>=8'}
- dependencies:
- '@babel/helper-plugin-utils': 7.24.0
- '@istanbuljs/load-nyc-config': 1.1.0
- '@istanbuljs/schema': 0.1.3
- istanbul-lib-instrument: 5.2.1
- test-exclude: 6.0.0
- transitivePeerDependencies:
- - supports-color
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/babel-plugin-macros@3.1.0:
@@ -11791,14 +11328,14 @@ packages:
resolve: 1.22.8
dev: true
- /babel-plugin-polyfill-corejs2@0.4.8(@babel/core@7.24.0):
- resolution: {integrity: sha512-OtIuQfafSzpo/LhnJaykc0R/MMnuLSSVjVYy9mHArIZ9qTCSZ6TpWCuEKZYVoN//t8HqBNScHrOtCrIK5IaGLg==}
+ /babel-plugin-polyfill-corejs2@0.4.10(@babel/core@7.24.0):
+ resolution: {integrity: sha512-rpIuu//y5OX6jVU+a5BCn1R5RSZYWAl2Nar76iwaOdycqb6JPxediskWFMMl7stfwNJR4b7eiQvh5fB5TEQJTQ==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
dependencies:
'@babel/compat-data': 7.23.5
'@babel/core': 7.24.0
- '@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0)
+ '@babel/helper-define-polyfill-provider': 0.6.1(@babel/core@7.24.0)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
@@ -11811,7 +11348,7 @@ packages:
dependencies:
'@babel/core': 7.24.0
'@babel/helper-define-polyfill-provider': 0.1.5(@babel/core@7.24.0)
- core-js-compat: 3.36.0
+ core-js-compat: 3.36.1
transitivePeerDependencies:
- supports-color
dev: true
@@ -11823,7 +11360,7 @@ packages:
dependencies:
'@babel/core': 7.24.0
'@babel/helper-define-polyfill-provider': 0.5.0(@babel/core@7.24.0)
- core-js-compat: 3.36.0
+ core-js-compat: 3.36.1
transitivePeerDependencies:
- supports-color
dev: true
@@ -11869,6 +11406,11 @@ packages:
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+ /base64url@3.0.1:
+ resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==}
+ engines: {node: '>=6.0.0'}
+ dev: false
+
/base@0.11.2:
resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==}
engines: {node: '>=0.10.0'}
@@ -11918,8 +11460,8 @@ packages:
dev: true
optional: true
- /binary-extensions@2.2.0:
- resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+ /binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
/bindings@1.5.0:
@@ -11959,25 +11501,6 @@ packages:
resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
dev: true
- /body-parser@1.20.1:
- resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
- engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- dependencies:
- bytes: 3.1.2
- content-type: 1.0.5
- debug: 2.6.9
- depd: 2.0.0
- destroy: 1.2.0
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- on-finished: 2.4.1
- qs: 6.11.0
- raw-body: 2.5.1
- type-is: 1.6.18
- unpipe: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
/body-parser@1.20.2:
resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@@ -12136,17 +11659,11 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001596
- electron-to-chromium: 1.4.695
+ caniuse-lite: 1.0.30001599
+ electron-to-chromium: 1.4.710
node-releases: 2.0.14
update-browserslist-db: 1.0.13(browserslist@4.23.0)
- /bser@2.1.1:
- resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
- dependencies:
- node-int64: 0.4.0
- dev: true
-
/buffer-crc32@0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
dev: false
@@ -12282,7 +11799,7 @@ packages:
es-errors: 1.3.0
function-bind: 1.1.2
get-intrinsic: 1.2.4
- set-function-length: 1.2.1
+ set-function-length: 1.2.2
/call-me-maybe@1.0.2:
resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==}
@@ -12337,13 +11854,13 @@ packages:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
dependencies:
browserslist: 4.23.0
- caniuse-lite: 1.0.30001596
+ caniuse-lite: 1.0.30001599
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
dev: true
- /caniuse-lite@1.0.30001596:
- resolution: {integrity: sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==}
+ /caniuse-lite@1.0.30001599:
+ resolution: {integrity: sha512-LRAQHZ4yT1+f9LemSMeqdMpMxZcc4RMWdj4tiFe3G8tNkWK+E58g+/tzotb5cU6TbcVJLr4fySiAW7XmxQvZQA==}
/case-sensitive-paths-webpack-plugin@2.4.0:
resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==}
@@ -12561,7 +12078,7 @@ packages:
resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==}
dependencies:
'@types/validator': 13.11.9
- libphonenumber-js: 1.10.57
+ libphonenumber-js: 1.10.58
validator: 13.11.0
/class-variance-authority@0.7.0:
@@ -12591,9 +12108,6 @@ packages:
/clean-stack@2.2.0:
resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
engines: {node: '>=6'}
- requiresBuild: true
- dev: false
- optional: true
/cli-boxes@2.2.1:
resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==}
@@ -12705,17 +12219,19 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
- /cmdk@0.2.1(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-U6//9lQ6JvT47+6OF6Gi8BvkxYQ8SCRRSKIJkthIMsFsLZRG0cKvTtuTaefyIKMQb8rvvXy0wGdpTNq/jPtm+g==}
+ /cmdk@1.0.0(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-gDzVf0a09TvoJ5jnuPvygTB77+XdOSwEmJ88L6XPFPlv7T3RxbP9jgenfylrAMD0+Le1aO0nVjQUzl2g+vjz5Q==}
peerDependencies:
react: ^18.0.0
react-dom: ^18.0.0
dependencies:
- '@radix-ui/react-dialog': 1.0.0(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
+ '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.21)(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
transitivePeerDependencies:
- '@types/react'
+ - '@types/react-dom'
dev: false
/code-block-writer@12.0.0:
@@ -12858,10 +12374,6 @@ packages:
engines: {node: '>= 12.0.0'}
dev: false
- /common-path-prefix@3.0.0:
- resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==}
- dev: true
-
/commondir@1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
@@ -13039,11 +12551,11 @@ packages:
normalize-path: 3.0.0
schema-utils: 4.2.0
serialize-javascript: 6.0.2
- webpack: 5.90.2(@swc/core@1.4.5)
+ webpack: 5.90.2(@swc/core@1.4.8)
dev: true
- /core-js-compat@3.36.0:
- resolution: {integrity: sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==}
+ /core-js-compat@3.36.1:
+ resolution: {integrity: sha512-Dk997v9ZCt3X/npqzyGdTlq6t7lDBhZwGvV94PKzDArjp7BTRm7WlDAXYd/OWdeFHO8OChQYRJNJvUCqCbrtKA==}
dependencies:
browserslist: 4.23.0
dev: true
@@ -13062,7 +12574,7 @@ packages:
object-assign: 4.1.1
vary: 1.1.2
- /cosmiconfig-typescript-loader@5.0.0(@types/node@20.9.0)(cosmiconfig@8.3.6)(typescript@5.4.2):
+ /cosmiconfig-typescript-loader@5.0.0(@types/node@20.9.0)(cosmiconfig@9.0.0)(typescript@5.4.2):
resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==}
engines: {node: '>=v16'}
peerDependencies:
@@ -13071,7 +12583,7 @@ packages:
typescript: '>=4'
dependencies:
'@types/node': 20.9.0
- cosmiconfig: 8.3.6(typescript@5.4.2)
+ cosmiconfig: 9.0.0(typescript@5.4.2)
jiti: 1.21.0
typescript: 5.4.2
dev: true
@@ -13130,6 +12642,22 @@ packages:
typescript: 5.4.2
dev: true
+ /cosmiconfig@9.0.0(typescript@5.4.2):
+ resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ env-paths: 2.2.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ typescript: 5.4.2
+ dev: true
+
/create-ecdh@4.0.4:
resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==}
dependencies:
@@ -13211,34 +12739,39 @@ packages:
randomfill: 1.0.4
dev: true
- /css-blank-pseudo@6.0.1(postcss@8.4.35):
+ /crypto-random-string@2.0.0:
+ resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /css-blank-pseudo@6.0.1(postcss@8.4.36):
resolution: {integrity: sha512-goSnEITByxTzU4Oh5oJZrEWudxTqk7L6IXj1UW69pO6Hv0UdX+Vsrt02FFu5DweRh2bLu6WpX/+zsQCu5O1gKw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /css-declaration-sorter@6.4.1(postcss@8.4.35):
+ /css-declaration-sorter@6.4.1(postcss@8.4.36):
resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==}
engines: {node: ^10 || ^12 || >=14}
peerDependencies:
postcss: ^8.0.9
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /css-has-pseudo@6.0.2(postcss@8.4.35):
+ /css-has-pseudo@6.0.2(postcss@8.4.36):
resolution: {integrity: sha512-Z2Qm5yyOvJRTy6THdUlnGIX6PW/1wOc4FHWlfkcBkfkpZ3oz6lPdG+h+J7t1HZHT4uSSVR8XatXiMpqMUADXow==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15)
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.16)
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
dev: true
@@ -13267,7 +12800,7 @@ packages:
postcss-value-parser: 4.2.0
schema-utils: 2.7.1
semver: 6.3.1
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/css-loader@5.2.7(webpack@5.90.2):
@@ -13276,17 +12809,17 @@ packages:
peerDependencies:
webpack: ^4.27.0 || ^5.0.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.35)
+ icss-utils: 5.1.0(postcss@8.4.36)
loader-utils: 2.0.4
- postcss: 8.4.35
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.35)
- postcss-modules-local-by-default: 4.0.4(postcss@8.4.35)
- postcss-modules-scope: 3.1.1(postcss@8.4.35)
- postcss-modules-values: 4.0.0(postcss@8.4.35)
+ postcss: 8.4.36
+ postcss-modules-extract-imports: 3.0.0(postcss@8.4.36)
+ postcss-modules-local-by-default: 4.0.4(postcss@8.4.36)
+ postcss-modules-scope: 3.1.1(postcss@8.4.36)
+ postcss-modules-values: 4.0.0(postcss@8.4.36)
postcss-value-parser: 4.2.0
schema-utils: 3.3.0
semver: 7.6.0
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/css-loader@6.10.0(webpack@5.90.2):
@@ -13301,24 +12834,24 @@ packages:
webpack:
optional: true
dependencies:
- icss-utils: 5.1.0(postcss@8.4.35)
- postcss: 8.4.35
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.35)
- postcss-modules-local-by-default: 4.0.4(postcss@8.4.35)
- postcss-modules-scope: 3.1.1(postcss@8.4.35)
- postcss-modules-values: 4.0.0(postcss@8.4.35)
+ icss-utils: 5.1.0(postcss@8.4.36)
+ postcss: 8.4.36
+ postcss-modules-extract-imports: 3.0.0(postcss@8.4.36)
+ postcss-modules-local-by-default: 4.0.4(postcss@8.4.36)
+ postcss-modules-scope: 3.1.1(postcss@8.4.36)
+ postcss-modules-values: 4.0.0(postcss@8.4.36)
postcss-value-parser: 4.2.0
semver: 7.6.0
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
- /css-prefers-color-scheme@9.0.1(postcss@8.4.35):
+ /css-prefers-color-scheme@9.0.1(postcss@8.4.36):
resolution: {integrity: sha512-iFit06ochwCKPRiWagbTa1OAWCvWWVdEnIFd8BaRrgO8YrrNh4RAWUQTFcYX5tdFZgFl1DJ3iiULchZyEbnF4g==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
/css-select@4.3.0:
@@ -13352,7 +12885,7 @@ packages:
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
dependencies:
mdn-data: 2.0.28
- source-map-js: 1.0.2
+ source-map-js: 1.1.0
dev: true
/css-tree@2.3.1:
@@ -13360,7 +12893,7 @@ packages:
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
dependencies:
mdn-data: 2.0.30
- source-map-js: 1.0.2
+ source-map-js: 1.1.0
dev: true
/css-what@6.1.0:
@@ -13371,8 +12904,8 @@ packages:
resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
dev: true
- /cssdb@7.11.1:
- resolution: {integrity: sha512-F0nEoX/Rv8ENTHsjMPGHd9opdjGfXkgRBafSUGnQKPzGZFB7Lm0BbT10x21TMOCrKLbVsJ0NoCDMk6AfKqw8/A==}
+ /cssdb@7.11.2:
+ resolution: {integrity: sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==}
dev: true
/cssesc@3.0.0:
@@ -13380,62 +12913,62 @@ packages:
engines: {node: '>=4'}
hasBin: true
- /cssnano-preset-default@5.2.14(postcss@8.4.35):
+ /cssnano-preset-default@5.2.14(postcss@8.4.36):
resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- css-declaration-sorter: 6.4.1(postcss@8.4.35)
- cssnano-utils: 3.1.0(postcss@8.4.35)
- postcss: 8.4.35
- postcss-calc: 8.2.4(postcss@8.4.35)
- postcss-colormin: 5.3.1(postcss@8.4.35)
- postcss-convert-values: 5.1.3(postcss@8.4.35)
- postcss-discard-comments: 5.1.2(postcss@8.4.35)
- postcss-discard-duplicates: 5.1.0(postcss@8.4.35)
- postcss-discard-empty: 5.1.1(postcss@8.4.35)
- postcss-discard-overridden: 5.1.0(postcss@8.4.35)
- postcss-merge-longhand: 5.1.7(postcss@8.4.35)
- postcss-merge-rules: 5.1.4(postcss@8.4.35)
- postcss-minify-font-values: 5.1.0(postcss@8.4.35)
- postcss-minify-gradients: 5.1.1(postcss@8.4.35)
- postcss-minify-params: 5.1.4(postcss@8.4.35)
- postcss-minify-selectors: 5.2.1(postcss@8.4.35)
- postcss-normalize-charset: 5.1.0(postcss@8.4.35)
- postcss-normalize-display-values: 5.1.0(postcss@8.4.35)
- postcss-normalize-positions: 5.1.1(postcss@8.4.35)
- postcss-normalize-repeat-style: 5.1.1(postcss@8.4.35)
- postcss-normalize-string: 5.1.0(postcss@8.4.35)
- postcss-normalize-timing-functions: 5.1.0(postcss@8.4.35)
- postcss-normalize-unicode: 5.1.1(postcss@8.4.35)
- postcss-normalize-url: 5.1.0(postcss@8.4.35)
- postcss-normalize-whitespace: 5.1.1(postcss@8.4.35)
- postcss-ordered-values: 5.1.3(postcss@8.4.35)
- postcss-reduce-initial: 5.1.2(postcss@8.4.35)
- postcss-reduce-transforms: 5.1.0(postcss@8.4.35)
- postcss-svgo: 5.1.0(postcss@8.4.35)
- postcss-unique-selectors: 5.1.1(postcss@8.4.35)
- dev: true
-
- /cssnano-utils@3.1.0(postcss@8.4.35):
+ css-declaration-sorter: 6.4.1(postcss@8.4.36)
+ cssnano-utils: 3.1.0(postcss@8.4.36)
+ postcss: 8.4.36
+ postcss-calc: 8.2.4(postcss@8.4.36)
+ postcss-colormin: 5.3.1(postcss@8.4.36)
+ postcss-convert-values: 5.1.3(postcss@8.4.36)
+ postcss-discard-comments: 5.1.2(postcss@8.4.36)
+ postcss-discard-duplicates: 5.1.0(postcss@8.4.36)
+ postcss-discard-empty: 5.1.1(postcss@8.4.36)
+ postcss-discard-overridden: 5.1.0(postcss@8.4.36)
+ postcss-merge-longhand: 5.1.7(postcss@8.4.36)
+ postcss-merge-rules: 5.1.4(postcss@8.4.36)
+ postcss-minify-font-values: 5.1.0(postcss@8.4.36)
+ postcss-minify-gradients: 5.1.1(postcss@8.4.36)
+ postcss-minify-params: 5.1.4(postcss@8.4.36)
+ postcss-minify-selectors: 5.2.1(postcss@8.4.36)
+ postcss-normalize-charset: 5.1.0(postcss@8.4.36)
+ postcss-normalize-display-values: 5.1.0(postcss@8.4.36)
+ postcss-normalize-positions: 5.1.1(postcss@8.4.36)
+ postcss-normalize-repeat-style: 5.1.1(postcss@8.4.36)
+ postcss-normalize-string: 5.1.0(postcss@8.4.36)
+ postcss-normalize-timing-functions: 5.1.0(postcss@8.4.36)
+ postcss-normalize-unicode: 5.1.1(postcss@8.4.36)
+ postcss-normalize-url: 5.1.0(postcss@8.4.36)
+ postcss-normalize-whitespace: 5.1.1(postcss@8.4.36)
+ postcss-ordered-values: 5.1.3(postcss@8.4.36)
+ postcss-reduce-initial: 5.1.2(postcss@8.4.36)
+ postcss-reduce-transforms: 5.1.0(postcss@8.4.36)
+ postcss-svgo: 5.1.0(postcss@8.4.36)
+ postcss-unique-selectors: 5.1.1(postcss@8.4.36)
+ dev: true
+
+ /cssnano-utils@3.1.0(postcss@8.4.36):
resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /cssnano@5.1.15(postcss@8.4.35):
+ /cssnano@5.1.15(postcss@8.4.36):
resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- cssnano-preset-default: 5.2.14(postcss@8.4.35)
+ cssnano-preset-default: 5.2.14(postcss@8.4.36)
lilconfig: 2.1.0
- postcss: 8.4.35
+ postcss: 8.4.36
yaml: 1.10.2
dev: true
@@ -13610,6 +13143,30 @@ packages:
engines: {node: '>= 12'}
dev: true
+ /data-view-buffer@1.0.1:
+ resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ /data-view-byte-length@1.0.1:
+ resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
+ /data-view-byte-offset@1.0.0:
+ resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ call-bind: 1.0.7
+ es-errors: 1.3.0
+ is-data-view: 1.0.1
+
/dataloader@1.4.0:
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
dev: true
@@ -13725,8 +13282,8 @@ packages:
regexp.prototype.flags: 1.5.2
side-channel: 1.0.6
which-boxed-primitive: 1.0.2
- which-collection: 1.0.1
- which-typed-array: 1.1.14
+ which-collection: 1.0.2
+ which-typed-array: 1.1.15
dev: true
/deep-extend@0.6.0:
@@ -13790,6 +13347,20 @@ packages:
isobject: 3.0.1
dev: true
+ /del@6.1.1:
+ resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==}
+ engines: {node: '>=10'}
+ dependencies:
+ globby: 11.1.0
+ graceful-fs: 4.2.11
+ is-glob: 4.0.3
+ is-path-cwd: 2.2.0
+ is-path-inside: 3.0.3
+ p-map: 4.0.0
+ rimraf: 3.0.2
+ slash: 3.0.0
+ dev: true
+
/delayed-stream@1.0.0:
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
engines: {node: '>=0.4.0'}
@@ -13840,6 +13411,7 @@ packages:
/detect-node-es@1.1.0:
resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==}
+ dev: false
/detect-node@2.1.0:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
@@ -14104,8 +13676,8 @@ packages:
dependencies:
jake: 10.8.7
- /electron-to-chromium@1.4.695:
- resolution: {integrity: sha512-eMijZmeqPtm774pCZIOrfUHMs/7ls++W1sLhxwqgu8KQ8E2WmMtzwyqOMt0XXUJ3HTIPfuwlfwF+I5cwnfItBA==}
+ /electron-to-chromium@1.4.710:
+ resolution: {integrity: sha512-w+9yAVHoHhysCa+gln7AzbO9CdjFcL/wN/5dd+XW/Msl2d/4+WisEaCF1nty0xbAKaxdaJfgLB2296U7zZB7BA==}
/elliptic@6.5.5:
resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==}
@@ -14173,8 +13745,8 @@ packages:
tapable: 1.1.3
dev: true
- /enhanced-resolve@5.15.1:
- resolution: {integrity: sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==}
+ /enhanced-resolve@5.16.0:
+ resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==}
engines: {node: '>=10.13.0'}
dependencies:
graceful-fs: 4.2.11
@@ -14198,9 +13770,6 @@ packages:
/env-paths@2.2.1:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
- requiresBuild: true
- dev: false
- optional: true
/err-code@2.0.3:
resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
@@ -14247,7 +13816,7 @@ packages:
has-property-descriptors: 1.0.2
has-proto: 1.0.3
has-symbols: 1.0.3
- hasown: 2.0.1
+ hasown: 2.0.2
internal-slot: 1.0.7
is-array-buffer: 3.0.4
is-callable: 1.2.7
@@ -14261,20 +13830,72 @@ packages:
object-keys: 1.1.1
object.assign: 4.1.5
regexp.prototype.flags: 1.5.2
- safe-array-concat: 1.1.0
+ safe-array-concat: 1.1.2
safe-regex-test: 1.0.3
- string.prototype.trim: 1.2.8
- string.prototype.trimend: 1.0.7
+ string.prototype.trim: 1.2.9
+ string.prototype.trimend: 1.0.8
string.prototype.trimstart: 1.0.7
typed-array-buffer: 1.0.2
typed-array-byte-length: 1.0.1
typed-array-byte-offset: 1.0.2
typed-array-length: 1.0.5
unbox-primitive: 1.0.2
- which-typed-array: 1.1.14
+ which-typed-array: 1.1.15
+
+ /es-abstract@1.23.2:
+ resolution: {integrity: sha512-60s3Xv2T2p1ICykc7c+DNDPLDMm9t4QxCOUU0K9JxiLjM3C1zB9YVdN7tjxrFd4+AkZ8CdX1ovUga4P2+1e+/w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ array-buffer-byte-length: 1.0.1
+ arraybuffer.prototype.slice: 1.0.3
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.7
+ data-view-buffer: 1.0.1
+ data-view-byte-length: 1.0.1
+ data-view-byte-offset: 1.0.0
+ es-define-property: 1.0.0
+ es-errors: 1.3.0
+ es-object-atoms: 1.0.0
+ es-set-tostringtag: 2.0.3
+ es-to-primitive: 1.2.1
+ function.prototype.name: 1.1.6
+ get-intrinsic: 1.2.4
+ get-symbol-description: 1.0.2
+ globalthis: 1.0.3
+ gopd: 1.0.1
+ has-property-descriptors: 1.0.2
+ has-proto: 1.0.3
+ has-symbols: 1.0.3
+ hasown: 2.0.2
+ internal-slot: 1.0.7
+ is-array-buffer: 3.0.4
+ is-callable: 1.2.7
+ is-data-view: 1.0.1
+ is-negative-zero: 2.0.3
+ is-regex: 1.1.4
+ is-shared-array-buffer: 1.0.3
+ is-string: 1.0.7
+ is-typed-array: 1.1.13
+ is-weakref: 1.0.2
+ object-inspect: 1.13.1
+ object-keys: 1.1.1
+ object.assign: 4.1.5
+ regexp.prototype.flags: 1.5.2
+ safe-array-concat: 1.1.2
+ safe-regex-test: 1.0.3
+ string.prototype.trim: 1.2.9
+ string.prototype.trimend: 1.0.8
+ string.prototype.trimstart: 1.0.7
+ typed-array-buffer: 1.0.2
+ typed-array-byte-length: 1.0.1
+ typed-array-byte-offset: 1.0.2
+ typed-array-length: 1.0.5
+ unbox-primitive: 1.0.2
+ which-typed-array: 1.1.15
/es-array-method-boxes-properly@1.0.0:
resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==}
+ dev: true
/es-check@7.1.1:
resolution: {integrity: sha512-rgwR2wdJp437Exq28Emwc4x5+Qn6ORDliN9daWo0wTCg5jOQxJsIZieqxVi4AfDEIN4OwMwYhld9b13mnRocUQ==}
@@ -14305,21 +13926,20 @@ packages:
get-intrinsic: 1.2.4
has-symbols: 1.0.3
is-arguments: 1.1.1
- is-map: 2.0.2
- is-set: 2.0.2
+ is-map: 2.0.3
+ is-set: 2.0.3
is-string: 1.0.7
isarray: 2.0.5
stop-iteration-iterator: 1.0.0
dev: true
- /es-iterator-helpers@1.0.17:
- resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==}
+ /es-iterator-helpers@1.0.18:
+ resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==}
engines: {node: '>= 0.4'}
dependencies:
- asynciterator.prototype: 1.0.0
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
es-errors: 1.3.0
es-set-tostringtag: 2.0.3
function-bind: 1.1.2
@@ -14330,24 +13950,30 @@ packages:
has-symbols: 1.0.3
internal-slot: 1.0.7
iterator.prototype: 1.1.2
- safe-array-concat: 1.1.0
+ safe-array-concat: 1.1.2
- /es-module-lexer@1.4.1:
- resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==}
+ /es-module-lexer@1.4.2:
+ resolution: {integrity: sha512-7nOqkomXZEaxUDJw21XZNtRk739QvrPSoZoRtbsEfcii00vdzZUh6zh1CQwHhrib8MdEtJfv5rJiGeb4KuV/vw==}
dev: true
+ /es-object-atoms@1.0.0:
+ resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ es-errors: 1.3.0
+
/es-set-tostringtag@2.0.3:
resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
engines: {node: '>= 0.4'}
dependencies:
get-intrinsic: 1.2.4
has-tostringtag: 1.0.2
- hasown: 2.0.1
+ hasown: 2.0.2
/es-shim-unscopables@1.0.2:
resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
/es-to-primitive@1.2.1:
resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
@@ -14370,47 +13996,17 @@ packages:
resolution: {integrity: sha512-Twf7I2v4/1tLoIXMT8HlqaBSS5H2wQTs2wx3MNYCI8K1R1/clXyCazrcVCPm/FuO9cyV8+leEaZOWD5C253NDg==}
dev: true
- /esbuild-register@3.5.0(esbuild@0.18.20):
+ /esbuild-register@3.5.0(esbuild@0.20.2):
resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==}
peerDependencies:
esbuild: '>=0.12 <1'
dependencies:
debug: 4.3.4
- esbuild: 0.18.20
+ esbuild: 0.20.2
transitivePeerDependencies:
- supports-color
dev: true
- /esbuild@0.18.20:
- resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
- engines: {node: '>=12'}
- hasBin: true
- requiresBuild: true
- optionalDependencies:
- '@esbuild/android-arm': 0.18.20
- '@esbuild/android-arm64': 0.18.20
- '@esbuild/android-x64': 0.18.20
- '@esbuild/darwin-arm64': 0.18.20
- '@esbuild/darwin-x64': 0.18.20
- '@esbuild/freebsd-arm64': 0.18.20
- '@esbuild/freebsd-x64': 0.18.20
- '@esbuild/linux-arm': 0.18.20
- '@esbuild/linux-arm64': 0.18.20
- '@esbuild/linux-ia32': 0.18.20
- '@esbuild/linux-loong64': 0.18.20
- '@esbuild/linux-mips64el': 0.18.20
- '@esbuild/linux-ppc64': 0.18.20
- '@esbuild/linux-riscv64': 0.18.20
- '@esbuild/linux-s390x': 0.18.20
- '@esbuild/linux-x64': 0.18.20
- '@esbuild/netbsd-x64': 0.18.20
- '@esbuild/openbsd-x64': 0.18.20
- '@esbuild/sunos-x64': 0.18.20
- '@esbuild/win32-arm64': 0.18.20
- '@esbuild/win32-ia32': 0.18.20
- '@esbuild/win32-x64': 0.18.20
- dev: true
-
/esbuild@0.19.12:
resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
engines: {node: '>=12'}
@@ -14442,6 +14038,37 @@ packages:
'@esbuild/win32-x64': 0.19.12
dev: true
+ /esbuild@0.20.2:
+ resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.20.2
+ '@esbuild/android-arm': 0.20.2
+ '@esbuild/android-arm64': 0.20.2
+ '@esbuild/android-x64': 0.20.2
+ '@esbuild/darwin-arm64': 0.20.2
+ '@esbuild/darwin-x64': 0.20.2
+ '@esbuild/freebsd-arm64': 0.20.2
+ '@esbuild/freebsd-x64': 0.20.2
+ '@esbuild/linux-arm': 0.20.2
+ '@esbuild/linux-arm64': 0.20.2
+ '@esbuild/linux-ia32': 0.20.2
+ '@esbuild/linux-loong64': 0.20.2
+ '@esbuild/linux-mips64el': 0.20.2
+ '@esbuild/linux-ppc64': 0.20.2
+ '@esbuild/linux-riscv64': 0.20.2
+ '@esbuild/linux-s390x': 0.20.2
+ '@esbuild/linux-x64': 0.20.2
+ '@esbuild/netbsd-x64': 0.20.2
+ '@esbuild/openbsd-x64': 0.20.2
+ '@esbuild/sunos-x64': 0.20.2
+ '@esbuild/win32-arm64': 0.20.2
+ '@esbuild/win32-ia32': 0.20.2
+ '@esbuild/win32-x64': 0.20.2
+ dev: true
+
/escalade@3.1.2:
resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==}
engines: {node: '>=6'}
@@ -14534,7 +14161,7 @@ packages:
eslint-plugin-import: '*'
dependencies:
debug: 4.3.4
- enhanced-resolve: 5.15.1
+ enhanced-resolve: 5.16.0
eslint: 8.57.0
eslint-module-utils: 2.8.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
@@ -14549,7 +14176,7 @@ packages:
- supports-color
dev: true
- /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.0.2)(eslint-plugin-import@2.29.1)(eslint@8.57.0):
+ /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0):
resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
@@ -14557,10 +14184,10 @@ packages:
eslint-plugin-import: '*'
dependencies:
debug: 4.3.4
- enhanced-resolve: 5.15.1
+ enhanced-resolve: 5.16.0
eslint: 8.57.0
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
- eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
fast-glob: 3.3.2
get-tsconfig: 4.7.3
is-core-module: 2.13.1
@@ -14626,7 +14253,7 @@ packages:
- supports-color
dev: true
- /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
+ /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==}
engines: {node: '>=4'}
peerDependencies:
@@ -14647,11 +14274,11 @@ packages:
eslint-import-resolver-webpack:
optional: true
dependencies:
- '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.4.2)
+ '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
debug: 3.2.7
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.0.2)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.2.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0)
transitivePeerDependencies:
- supports-color
@@ -14674,14 +14301,14 @@ packages:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
- hasown: 2.0.1
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ hasown: 2.0.2
is-core-module: 2.13.1
is-glob: 4.0.3
minimatch: 3.1.2
- object.fromentries: 2.0.7
- object.groupby: 1.0.2
- object.values: 1.1.7
+ object.fromentries: 2.0.8
+ object.groupby: 1.0.3
+ object.values: 1.2.0
semver: 6.3.1
tsconfig-paths: 3.15.0
transitivePeerDependencies:
@@ -14690,7 +14317,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
+ /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0):
resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
engines: {node: '>=4'}
peerDependencies:
@@ -14700,7 +14327,7 @@ packages:
'@typescript-eslint/parser':
optional: true
dependencies:
- '@typescript-eslint/parser': 7.0.2(eslint@8.57.0)(typescript@5.4.2)
+ '@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.4.2)
array-includes: 3.1.7
array.prototype.findlastindex: 1.2.4
array.prototype.flat: 1.3.2
@@ -14709,14 +14336,14 @@ packages:
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.0.2)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
- hasown: 2.0.1
+ eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+ hasown: 2.0.2
is-core-module: 2.13.1
is-glob: 4.0.3
minimatch: 3.1.2
- object.fromentries: 2.0.7
- object.groupby: 1.0.2
- object.values: 1.1.7
+ object.fromentries: 2.0.8
+ object.groupby: 1.0.3
+ object.values: 1.2.0
semver: 6.3.1
tsconfig-paths: 3.15.0
transitivePeerDependencies:
@@ -14733,7 +14360,7 @@ packages:
eslint: 8.57.0
dev: false
- /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.0.2)(eslint@8.57.0)(typescript@5.4.2):
+ /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.2.0)(eslint@8.57.0)(typescript@5.4.2):
resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
peerDependencies:
@@ -14746,7 +14373,7 @@ packages:
jest:
optional: true
dependencies:
- '@typescript-eslint/eslint-plugin': 7.0.2(@typescript-eslint/parser@7.0.2)(eslint@8.57.0)(typescript@5.4.2)
+ '@typescript-eslint/eslint-plugin': 7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2)
'@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.2)
eslint: 8.57.0
transitivePeerDependencies:
@@ -14769,14 +14396,14 @@ packages:
axobject-query: 3.2.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- es-iterator-helpers: 1.0.17
+ es-iterator-helpers: 1.0.18
eslint: 8.57.0
- hasown: 2.0.1
+ hasown: 2.0.2
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
minimatch: 3.1.2
- object.entries: 1.1.7
- object.fromentries: 2.0.7
+ object.entries: 1.1.8
+ object.fromentries: 2.0.8
/eslint-plugin-markdown@3.0.1(eslint@8.57.0):
resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==}
@@ -14820,7 +14447,7 @@ packages:
optional: true
dependencies:
eslint: 8.57.0
- eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.0.2)(eslint@8.57.0)(typescript@5.4.2)
+ eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.2.0)(eslint@8.57.0)(typescript@5.4.2)
globals: 13.24.0
dev: false
@@ -14863,15 +14490,15 @@ packages:
array.prototype.flatmap: 1.3.2
array.prototype.tosorted: 1.1.3
doctrine: 2.1.0
- es-iterator-helpers: 1.0.17
+ es-iterator-helpers: 1.0.18
eslint: 8.57.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.5
minimatch: 3.1.2
- object.entries: 1.1.7
- object.fromentries: 2.0.7
+ object.entries: 1.1.8
+ object.fromentries: 2.0.8
object.hasown: 1.1.3
- object.values: 1.1.7
+ object.values: 1.2.0
prop-types: 15.8.1
resolve: 2.0.0-next.5
semver: 6.3.1
@@ -14925,7 +14552,7 @@ packages:
tailwindcss: ^3.4.0
dependencies:
fast-glob: 3.3.2
- postcss: 8.4.35
+ postcss: 8.4.36
tailwindcss: 3.4.1(ts-node@10.9.2)
dev: true
@@ -15155,6 +14782,21 @@ packages:
strip-eof: 1.0.0
dev: false
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
/execa@7.2.0:
resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
@@ -15236,44 +14878,6 @@ packages:
- supports-color
dev: false
- /express@4.18.2:
- resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
- engines: {node: '>= 0.10.0'}
- dependencies:
- accepts: 1.3.8
- array-flatten: 1.1.1
- body-parser: 1.20.1
- content-disposition: 0.5.4
- content-type: 1.0.5
- cookie: 0.5.0
- cookie-signature: 1.0.6
- debug: 2.6.9
- depd: 2.0.0
- encodeurl: 1.0.2
- escape-html: 1.0.3
- etag: 1.8.1
- finalhandler: 1.2.0
- fresh: 0.5.2
- http-errors: 2.0.0
- merge-descriptors: 1.0.1
- methods: 1.1.2
- on-finished: 2.4.1
- parseurl: 1.3.3
- path-to-regexp: 0.1.7
- proxy-addr: 2.0.7
- qs: 6.11.0
- range-parser: 1.2.1
- safe-buffer: 5.2.1
- send: 0.18.0
- serve-static: 1.15.0
- setprototypeof: 1.2.0
- statuses: 2.0.1
- type-is: 1.6.18
- utils-merge: 1.0.1
- vary: 1.1.2
- transitivePeerDependencies:
- - supports-color
-
/express@4.18.3:
resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==}
engines: {node: '>= 0.10.0'}
@@ -15363,8 +14967,8 @@ packages:
- supports-color
dev: true
- /fast-copy@3.0.1:
- resolution: {integrity: sha512-Knr7NOtK3HWRYGtHoJrjkaWepqT8thIVGAwt0p0aUs1zqkAzXZV4vo9fFNwyb5fcqK1GKYFYxldQdIDVKhUAfA==}
+ /fast-copy@3.0.2:
+ resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==}
dev: false
/fast-deep-equal@3.1.3:
@@ -15407,8 +15011,8 @@ packages:
resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==}
dev: false
- /fast-redact@3.3.0:
- resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==}
+ /fast-redact@3.4.0:
+ resolution: {integrity: sha512-2gwPvyna0zwBdxKnng1suu/dTL5s8XEy2ZqH8mwDUwJdDkV8w5kp+JV26mupdK68HmPMbm6yjW9m7/Ys/BHEHg==}
engines: {node: '>=6'}
dev: false
@@ -15419,8 +15023,8 @@ packages:
resolution: {integrity: sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw==}
dev: false
- /fast-xml-parser@4.3.5:
- resolution: {integrity: sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==}
+ /fast-xml-parser@4.3.6:
+ resolution: {integrity: sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==}
hasBin: true
dependencies:
strnum: 1.0.5
@@ -15441,12 +15045,6 @@ packages:
format: 0.2.2
dev: false
- /fb-watchman@2.0.2:
- resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
- dependencies:
- bser: 2.1.1
- dev: true
-
/fecha@4.2.3:
resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==}
@@ -15586,14 +15184,6 @@ packages:
pkg-dir: 4.2.0
dev: true
- /find-cache-dir@4.0.0:
- resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==}
- engines: {node: '>=14.16'}
- dependencies:
- common-path-prefix: 3.0.0
- pkg-dir: 7.0.0
- dev: true
-
/find-up@3.0.0:
resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==}
engines: {node: '>=6'}
@@ -15616,14 +15206,6 @@ packages:
locate-path: 6.0.0
path-exists: 4.0.0
- /find-up@6.3.0:
- resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- dependencies:
- locate-path: 7.2.0
- path-exists: 5.0.0
- dev: true
-
/find-up@7.0.0:
resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==}
engines: {node: '>=18'}
@@ -15674,8 +15256,8 @@ packages:
resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==}
dev: true
- /follow-redirects@1.15.5:
- resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==}
+ /follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
engines: {node: '>=4.0'}
peerDependencies:
debug: '*'
@@ -15756,7 +15338,7 @@ packages:
semver: 7.6.0
tapable: 2.2.1
typescript: 5.4.2
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.90.1):
@@ -15779,7 +15361,7 @@ packages:
semver: 7.6.0
tapable: 2.2.1
typescript: 5.3.3
- webpack: 5.90.1(@swc/core@1.4.5)
+ webpack: 5.90.1(@swc/core@1.4.8)
dev: true
/form-data@4.0.0:
@@ -15967,8 +15549,8 @@ packages:
engines: {node: '>=10'}
dev: false
- /fx@31.0.0:
- resolution: {integrity: sha512-OoeYSPKqNKmfnH4s+rGYI0c8OZmqqOOXsUtqy0YyHqQQoQSDiDs3m3M9uXKx5OQR+jDx7/FhYqpO3kl/As/xgg==}
+ /fx@33.0.0:
+ resolution: {integrity: sha512-uW/UAi9G04+o7dD/RyIH7mP9Cyf12TdiaWQ19QbvnxkKQ2yiffXiZMz65zqbWMstLd2vwla++G9lMabG3nXxYQ==}
hasBin: true
dev: true
@@ -16038,11 +15620,12 @@ packages:
function-bind: 1.1.2
has-proto: 1.0.3
has-symbols: 1.0.3
- hasown: 2.0.1
+ hasown: 2.0.2
/get-nonce@1.0.1:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines: {node: '>=6'}
+ dev: false
/get-own-enumerable-property-symbols@3.0.2:
resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
@@ -16051,6 +15634,7 @@ packages:
/get-package-type@0.1.0:
resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
engines: {node: '>=8.0.0'}
+ dev: false
/get-port@3.2.0:
resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==}
@@ -16113,8 +15697,8 @@ packages:
resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
dev: false
- /github-slugger@1.5.0:
- resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==}
+ /github-slugger@2.0.0:
+ resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
dev: true
/gl-matrix@3.4.3:
@@ -16320,8 +15904,8 @@ packages:
optionalDependencies:
uglify-js: 3.17.4
- /happy-dom@13.6.2:
- resolution: {integrity: sha512-Ku+wDqcF/KwFA0dI+xIMZd9Jn020RXjuSil/Vz7gu2yhDC3FsDYZ55qqV9k+SGC4opwb4acisXqVSRxUJMlPbQ==}
+ /happy-dom@14.0.0:
+ resolution: {integrity: sha512-XdxaqufN4QZs0WFuo7L4vGkKpj08gmpEpSMFxDtvYo4OipZLssz7VlavE03FuLabHBTJAWxcR6MlKyOQZM9e0w==}
engines: {node: '>=16.0.0'}
dependencies:
entities: 4.5.0
@@ -16438,12 +16022,24 @@ packages:
minimalistic-assert: 1.0.1
dev: true
- /hasown@2.0.1:
- resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==}
+ /hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
dependencies:
function-bind: 1.1.2
+ /hast-util-heading-rank@3.0.0:
+ resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+ dependencies:
+ '@types/hast': 3.0.4
+ dev: true
+
+ /hast-util-is-element@3.0.0:
+ resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+ dependencies:
+ '@types/hast': 3.0.4
+ dev: true
+
/hast-util-parse-selector@2.2.5:
resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==}
dev: false
@@ -16459,7 +16055,7 @@ packages:
estree-util-is-identifier-name: 3.0.0
hast-util-whitespace: 3.0.0
mdast-util-mdx-expression: 2.0.0
- mdast-util-mdx-jsx: 3.1.1
+ mdast-util-mdx-jsx: 3.1.2
mdast-util-mdxjs-esm: 2.0.1
property-information: 6.4.1
space-separated-tokens: 2.0.2
@@ -16470,6 +16066,12 @@ packages:
- supports-color
dev: false
+ /hast-util-to-string@3.0.0:
+ resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==}
+ dependencies:
+ '@types/hast': 3.0.4
+ dev: true
+
/hast-util-whitespace@3.0.0:
resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
dependencies:
@@ -16544,7 +16146,7 @@ packages:
he: 1.2.0
param-case: 3.0.4
relateurl: 0.2.7
- terser: 5.29.1
+ terser: 5.29.2
dev: true
/html-minifier@4.0.0:
@@ -16604,7 +16206,7 @@ packages:
lodash: 4.17.21
pretty-error: 4.0.0
tapable: 2.2.1
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/htmlparser2@5.0.1:
@@ -16708,6 +16310,11 @@ packages:
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
dev: true
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
/human-signals@4.3.1:
resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
engines: {node: '>=14.18.0'}
@@ -16740,8 +16347,8 @@ packages:
resolution: {integrity: sha512-tvfXskmG/9o+TJ5Fxu54sSO5OkY6d+uMn+K6JiUGLJrwxAVfer+8V3nU8jq3ts9Pe5lXJv4b1N7foIjJ8Iy2Gg==}
dev: false
- /i18next@23.10.0:
- resolution: {integrity: sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==}
+ /i18next@23.10.1:
+ resolution: {integrity: sha512-NDiIzFbcs3O9PXpfhkjyf7WdqFn5Vq6mhzhtkXzj51aOcNuPNcTwuYNuXCpHsanZGHlHKL35G7huoFeVic1hng==}
dependencies:
'@babel/runtime': 7.24.0
dev: false
@@ -16770,13 +16377,13 @@ packages:
postcss: 7.0.39
dev: true
- /icss-utils@5.1.0(postcss@8.4.35):
+ /icss-utils@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
/ieee754@1.2.1:
@@ -16794,8 +16401,8 @@ packages:
resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
dev: false
- /immer@10.0.3:
- resolution: {integrity: sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==}
+ /immer@10.0.4:
+ resolution: {integrity: sha512-cuBuGK40P/sk5IzWa9QPUaAdvPHjkk1c+xYsd9oZw+YQQEV+10G0P5uMpGctZZKnyQ+ibRO08bD25nWLmYi2pw==}
dev: false
/import-cwd@3.0.0:
@@ -16906,7 +16513,7 @@ packages:
resolution: {integrity: sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==}
engines: {node: '>=14.18.0'}
dependencies:
- '@ljharb/through': 2.3.12
+ '@ljharb/through': 2.3.13
ansi-escapes: 4.3.2
chalk: 5.3.0
cli-cursor: 3.1.0
@@ -16932,7 +16539,7 @@ packages:
engines: {node: '>= 0.4'}
dependencies:
es-errors: 1.3.0
- hasown: 2.0.1
+ hasown: 2.0.2
side-channel: 1.0.6
/internmap@2.0.3:
@@ -16953,6 +16560,7 @@ packages:
resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==}
dependencies:
loose-envify: 1.4.0
+ dev: false
/ioredis@5.3.2:
resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==}
@@ -16990,9 +16598,9 @@ packages:
engines: {node: '>= 10'}
dev: false
- /is-absolute-url@3.0.3:
- resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==}
- engines: {node: '>=8'}
+ /is-absolute-url@4.0.1:
+ resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dev: true
/is-absolute@1.0.0:
@@ -17007,7 +16615,7 @@ packages:
resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==}
engines: {node: '>= 0.10'}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
dev: true
/is-alphabetical@1.0.4:
@@ -17077,7 +16685,7 @@ packages:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
dependencies:
- binary-extensions: 2.2.0
+ binary-extensions: 2.3.0
/is-boolean-object@1.1.2:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
@@ -17097,15 +16705,21 @@ packages:
/is-core-module@2.13.1:
resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
/is-data-descriptor@1.0.1:
resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==}
engines: {node: '>= 0.4'}
dependencies:
- hasown: 2.0.1
+ hasown: 2.0.2
dev: true
+ /is-data-view@1.0.1:
+ resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ is-typed-array: 1.1.13
+
/is-date-object@1.0.5:
resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
engines: {node: '>= 0.4'}
@@ -17243,8 +16857,9 @@ packages:
resolution: {integrity: sha512-pgF+L5bxC+10hLBgf6R2P4ZZUBOQIIacbdo8YvuCP8/JvsWxG7aZ9p10DYuLtifFci4l3VITphhMlMV4Y+urPw==}
dev: false
- /is-map@2.0.2:
- resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
+ /is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
/is-module@1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
@@ -17289,6 +16904,11 @@ packages:
engines: {node: '>=8'}
dev: true
+ /is-path-cwd@2.2.0:
+ resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
+ engines: {node: '>=6'}
+ dev: true
+
/is-path-inside@3.0.3:
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
engines: {node: '>=8'}
@@ -17347,8 +16967,9 @@ packages:
is-unc-path: 1.0.0
dev: true
- /is-set@2.0.2:
- resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
+ /is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
/is-shared-array-buffer@1.0.3:
resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
@@ -17401,7 +17022,7 @@ packages:
resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
engines: {node: '>= 0.4'}
dependencies:
- which-typed-array: 1.1.14
+ which-typed-array: 1.1.15
/is-unc-path@1.0.0:
resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==}
@@ -17420,16 +17041,18 @@ packages:
engines: {node: '>=12'}
dev: true
- /is-weakmap@2.0.1:
- resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
+ /is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
/is-weakref@1.0.2:
resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
dependencies:
call-bind: 1.0.7
- /is-weakset@2.0.2:
- resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
+ /is-weakset@2.0.3:
+ resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==}
+ engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
get-intrinsic: 1.2.4
@@ -17481,19 +17104,34 @@ packages:
engines: {node: '>=8'}
dev: true
- /istanbul-lib-instrument@5.2.1:
- resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
- engines: {node: '>=8'}
+ /istanbul-lib-report@3.0.1:
+ resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
+ engines: {node: '>=10'}
dependencies:
- '@babel/core': 7.24.0
- '@babel/parser': 7.24.0
- '@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.2
- semver: 6.3.1
+ make-dir: 4.0.0
+ supports-color: 7.2.0
+ dev: true
+
+ /istanbul-lib-source-maps@5.0.4:
+ resolution: {integrity: sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==}
+ engines: {node: '>=10'}
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ debug: 4.3.4
+ istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
dev: true
+ /istanbul-reports@3.1.7:
+ resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==}
+ engines: {node: '>=8'}
+ dependencies:
+ html-escaper: 2.0.2
+ istanbul-lib-report: 3.0.1
+ dev: true
+
/iterare@1.2.1:
resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==}
engines: {node: '>=6'}
@@ -17515,7 +17153,7 @@ packages:
define-properties: 1.2.1
get-intrinsic: 1.2.4
has-symbols: 1.0.3
- reflect.getprototypeof: 1.0.5
+ reflect.getprototypeof: 1.0.6
set-function-name: 2.0.2
/jackspeak@2.3.6:
@@ -17536,42 +17174,6 @@ packages:
filelist: 1.0.4
minimatch: 3.1.2
- /jest-haste-map@29.7.0:
- resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- '@types/graceful-fs': 4.1.9
- '@types/node': 20.9.0
- anymatch: 3.1.3
- fb-watchman: 2.0.2
- graceful-fs: 4.2.11
- jest-regex-util: 29.6.3
- jest-util: 29.7.0
- jest-worker: 29.7.0
- micromatch: 4.0.5
- walker: 1.0.8
- optionalDependencies:
- fsevents: 2.3.3
- dev: true
-
- /jest-regex-util@29.6.3:
- resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
-
- /jest-util@29.7.0:
- resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@jest/types': 29.6.3
- '@types/node': 20.9.0
- chalk: 4.1.2
- ci-info: 3.9.0
- graceful-fs: 4.2.11
- picomatch: 2.3.1
- dev: true
-
/jest-worker@26.6.2:
resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
engines: {node: '>= 10.13.0'}
@@ -17590,16 +17192,6 @@ packages:
supports-color: 8.1.1
dev: true
- /jest-worker@29.7.0:
- resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
- engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dependencies:
- '@types/node': 20.9.0
- jest-util: 29.7.0
- merge-stream: 2.0.0
- supports-color: 8.1.1
- dev: true
-
/jiti@1.21.0:
resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
hasBin: true
@@ -17805,7 +17397,7 @@ packages:
array-includes: 3.1.7
array.prototype.flat: 1.3.2
object.assign: 4.1.5
- object.values: 1.1.7
+ object.values: 1.2.0
/juice@10.0.0:
resolution: {integrity: sha512-9f68xmhGrnIi6DBkiiP3rUrQN33SEuaKu1+njX6VgMP+jwZAsnT33WIzlrWICL9matkhYu3OyrqSUP55YTIdGg==}
@@ -17991,8 +17583,8 @@ packages:
libqp: 2.1.0
dev: false
- /libphonenumber-js@1.10.57:
- resolution: {integrity: sha512-OjsEd9y4LgcX+Ig09SbxWqcGESxliDDFNVepFhB9KEsQZTrnk3UdEU+cO0sW1APvLprHstQpS23OQpZ3bwxy6Q==}
+ /libphonenumber-js@1.10.58:
+ resolution: {integrity: sha512-53A0IpJFL9LdHbpeatwizf8KSwPICrqn9H0g3Y7WQ+Jgeu9cQ4Ew3WrRtrLBu/CX2lXd5+rgT01/tGlkbkzOjw==}
/libqp@2.0.1:
resolution: {integrity: sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==}
@@ -18369,8 +17961,8 @@ packages:
dependencies:
yallist: 4.0.0
- /lucide-react@0.349.0(react@18.2.0):
- resolution: {integrity: sha512-Sa+5bRi0RYcyOUU2ifTtNXNiHs87JvdE78DbSfcqWk7JmGsomnFnvzmAhyPjfaCZf3HJMAqHCJOMXGRbB89Q1g==}
+ /lucide-react@0.358.0(react@18.2.0):
+ resolution: {integrity: sha512-rBSptRjZTMBm24zsFhR6pK/NgbT18JegZGKcH4+1H3+UigMSRpeoWLtR/fAwMYwYnlJOZB+y8WpeHne9D6X6Kg==}
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0
dependencies:
@@ -18409,6 +18001,14 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: true
+ /magicast@0.3.3:
+ resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==}
+ dependencies:
+ '@babel/parser': 7.24.0
+ '@babel/types': 7.24.0
+ source-map-js: 1.1.0
+ dev: true
+
/mailparser@3.6.9:
resolution: {integrity: sha512-1fIDZlgN1NnuzmTSEUxkaViquXYkw5NbQehVc+kz55QRy98QgLdTtRSKv289Jy4NrCiDchRx6zAijB4HrPsvkA==}
dependencies:
@@ -18446,6 +18046,13 @@ packages:
dependencies:
semver: 6.3.1
+ /make-dir@4.0.0:
+ resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+ engines: {node: '>=10'}
+ dependencies:
+ semver: 7.6.0
+ dev: true
+
/make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
@@ -18476,12 +18083,6 @@ packages:
dev: false
optional: true
- /makeerror@1.0.12:
- resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
- dependencies:
- tmpl: 1.0.5
- dev: true
-
/map-age-cleaner@0.1.3:
resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==}
engines: {node: '>=6'}
@@ -18523,8 +18124,8 @@ packages:
resolution: {integrity: sha512-0Q2ua8+oDN7/3r5UXMnbVq8C+LRfT2pzVKA+h4nXTLEMBFQDwp7qJZOe7DkBa79C7V2cSBXJyScxJ7vYs9kE2w==}
dev: false
- /markdown-it@14.0.0:
- resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==}
+ /markdown-it@14.1.0:
+ resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
dependencies:
argparse: 2.0.1
@@ -18539,8 +18140,8 @@ packages:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false
- /markdown-to-jsx@7.4.1(react@18.2.0):
- resolution: {integrity: sha512-GbrbkTnHp9u6+HqbPRFJbObi369AgJNXi/sGqq5HRsoZW063xR1XDCaConqq+whfEIAlzB1YPnOgsPc7B7bc/A==}
+ /markdown-to-jsx@7.3.2(react@18.2.0):
+ resolution: {integrity: sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==}
engines: {node: '>= 10'}
peerDependencies:
react: '>= 0.14.0'
@@ -18566,12 +18167,6 @@ packages:
safe-buffer: 5.2.1
dev: true
- /mdast-util-definitions@4.0.0:
- resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==}
- dependencies:
- unist-util-visit: 2.0.3
- dev: true
-
/mdast-util-find-and-replace@3.0.1:
resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
dependencies:
@@ -18692,8 +18287,8 @@ packages:
transitivePeerDependencies:
- supports-color
- /mdast-util-mdx-jsx@3.1.1:
- resolution: {integrity: sha512-Di63TQEHbiApe6CFp/qQXCORHMHnmW2JFdr5PYH57LuEIPjijRHicAmL5wQu+B0/Q4p0qJaEOE1EkhiwxiNmAQ==}
+ /mdast-util-mdx-jsx@3.1.2:
+ resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==}
dependencies:
'@types/estree-jsx': 1.0.5
'@types/hast': 3.0.4
@@ -18716,7 +18311,7 @@ packages:
dependencies:
mdast-util-from-markdown: 2.0.0
mdast-util-mdx-expression: 2.0.0
- mdast-util-mdx-jsx: 3.1.1
+ mdast-util-mdx-jsx: 3.1.2
mdast-util-mdxjs-esm: 2.0.1
mdast-util-to-markdown: 2.1.0
transitivePeerDependencies:
@@ -18767,10 +18362,6 @@ packages:
unist-util-visit: 5.0.0
zwitch: 2.0.4
- /mdast-util-to-string@1.1.0:
- resolution: {integrity: sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==}
- dev: true
-
/mdast-util-to-string@2.0.0:
resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==}
dev: true
@@ -18902,7 +18493,7 @@ packages:
'@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1)
'@surma/rollup-plugin-off-main-thread': 2.2.3
asyncro: 3.0.0
- autoprefixer: 10.4.18(postcss@8.4.35)
+ autoprefixer: 10.4.18(postcss@8.4.36)
babel-plugin-macros: 3.1.0
babel-plugin-transform-async-to-promises: 0.8.18
babel-plugin-transform-replace-expressions: 0.2.0(@babel/core@7.24.0)
@@ -18914,16 +18505,16 @@ packages:
gzip-size: 6.0.0
kleur: 4.1.5
lodash.merge: 4.6.2
- postcss: 8.4.35
+ postcss: 8.4.36
pretty-bytes: 5.6.0
rollup: 2.79.1
rollup-plugin-bundle-size: 1.0.3
- rollup-plugin-postcss: 4.0.2(postcss@8.4.35)
+ rollup-plugin-postcss: 4.0.2(postcss@8.4.36)
rollup-plugin-terser: 7.0.2(rollup@2.79.1)
rollup-plugin-typescript2: 0.32.1(rollup@2.79.1)(typescript@4.9.5)
rollup-plugin-visualizer: 5.12.0(rollup@2.79.1)
sade: 1.8.1
- terser: 5.29.1
+ terser: 5.29.2
tiny-glob: 0.2.9
tslib: 2.6.2
typescript: 4.9.5
@@ -19409,7 +19000,7 @@ packages:
block-stream2: 2.1.0
browser-or-node: 2.1.1
buffer-crc32: 0.2.13
- fast-xml-parser: 4.3.5
+ fast-xml-parser: 4.3.6
ipaddr.js: 2.1.0
json-stream: 1.0.0
lodash: 4.17.21
@@ -19949,7 +19540,7 @@ packages:
acorn: 8.11.3
pathe: 1.1.2
pkg-types: 1.0.3
- ufo: 1.4.0
+ ufo: 1.5.2
dev: true
/module-details-from-path@1.0.3:
@@ -20104,7 +19695,7 @@ packages:
/neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
- /nest-knexjs@0.0.21(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(knex@3.1.0)(reflect-metadata@0.2.1)(rxjs@7.8.1):
+ /nest-knexjs@0.0.21(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(knex@3.1.0)(reflect-metadata@0.2.1)(rxjs@7.8.1):
resolution: {integrity: sha512-nlEG/Ao8gu8IVP1nudpTFXgqxRyYlezxtKAwojwpMMFkthGuNRk3nq46MwpjwQPJoupcjm4TX0jkSpfHQGx7cg==}
peerDependencies:
'@nestjs/common': ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
@@ -20113,15 +19704,15 @@ packages:
reflect-metadata: ^0.1.13 || ^0.2.0
rxjs: ^6.6.3 || ^7.2.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
knex: 3.1.0
reflect-metadata: 0.2.1
rxjs: 7.8.1
dev: false
- /nestjs-cls@4.2.0(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1):
- resolution: {integrity: sha512-sdvdhBmM9eb9d1URtcK7642S3ufD9ZWaKRt4Ouf1gIGmd73YniiKCxxOFwChRqDU+sr7hwxT560JaA27R/7RJQ==}
+ /nestjs-cls@4.2.1(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1):
+ resolution: {integrity: sha512-q5vkFK/DE1KpoHj6neiEmFshvjdqOJSCmuCGnbcvQ8qw03MGrGeGUCEdYDGzmPixnW5IEkFW4XJmjhpGAg4Ufw==}
engines: {node: '>=16'}
peerDependencies:
'@nestjs/common': '> 7.0.0 < 11'
@@ -20129,13 +19720,13 @@ packages:
reflect-metadata: '*'
rxjs: '>= 7'
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
reflect-metadata: 0.2.1
rxjs: 7.8.1
dev: false
- /nestjs-pino@4.0.0(@nestjs/common@10.3.3)(pino-http@9.0.0):
+ /nestjs-pino@4.0.0(@nestjs/common@10.3.4)(pino-http@9.0.0):
resolution: {integrity: sha512-XhCg/R+l3w0BFP6MHyR6lU/BHVEV0tV9z24G0vuA9FD3sv+TQNvnO9uVsF1l/oVspgGfQ9Qulmb2UbsfYlI0+g==}
engines: {node: '>= 14'}
requiresBuild: true
@@ -20143,11 +19734,11 @@ packages:
'@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0
pino-http: ^6.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
dependencies:
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
pino-http: 9.0.0
dev: false
- /nestjs-redoc@2.2.2(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(@nestjs/swagger@7.3.0)(reflect-metadata@0.2.1):
+ /nestjs-redoc@2.2.2(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(@nestjs/swagger@7.3.0)(reflect-metadata@0.2.1):
resolution: {integrity: sha512-BubUvDhBXQ2/PEkI14ASxEut+MLKaW4S2tFX78LFB2WjZsdmBM7EEgWBp+8nGO64bZsAApA+kUPZgQ17x4yaQA==}
peerDependencies:
'@nestjs/common': ^8.0.0
@@ -20156,15 +19747,15 @@ packages:
reflect-metadata: ^0.1.12
dependencies:
'@hapi/joi': 17.1.1
- '@nestjs/common': 10.3.3(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/core': 10.3.3(@nestjs/common@10.3.3)(@nestjs/platform-express@10.3.3)(@nestjs/websockets@10.3.3)(reflect-metadata@0.2.1)(rxjs@7.8.1)
- '@nestjs/swagger': 7.3.0(@nestjs/common@10.3.3)(@nestjs/core@10.3.3)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)
+ '@nestjs/common': 10.3.4(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/core': 10.3.4(@nestjs/common@10.3.4)(@nestjs/platform-express@10.3.4)(@nestjs/websockets@10.3.4)(reflect-metadata@0.2.1)(rxjs@7.8.1)
+ '@nestjs/swagger': 7.3.0(@nestjs/common@10.3.4)(@nestjs/core@10.3.4)(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.1)
express-basic-auth: 1.2.1
express-handlebars: 5.3.5
reflect-metadata: 0.2.1
dev: false
- /next-i18next@15.2.0(i18next@23.10.0)(next@14.1.3)(react-i18next@14.0.8)(react@18.2.0):
+ /next-i18next@15.2.0(i18next@23.10.1)(next@14.1.3)(react-i18next@14.1.0)(react@18.2.0):
resolution: {integrity: sha512-Rl5yZ4oGffsB0AjRykZ5PzNQ2M6am54MaMayldGmH/UKZisrIxk2SKEPJvaHhKlWe1qgdNi2FkodwK8sEjfEmg==}
engines: {node: '>=14'}
peerDependencies:
@@ -20177,11 +19768,11 @@ packages:
'@types/hoist-non-react-statics': 3.3.5
core-js: 3.36.0
hoist-non-react-statics: 3.3.2
- i18next: 23.10.0
+ i18next: 23.10.1
i18next-fs-backend: 2.3.1
next: 14.1.3(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
- react-i18next: 14.0.8(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0)
+ react-i18next: 14.1.0(i18next@23.10.1)(react-dom@18.2.0)(react@18.2.0)
dev: false
/next-secure-headers@2.2.0:
@@ -20201,14 +19792,12 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /next-themes@0.2.1(next@14.1.3)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==}
+ /next-themes@0.3.0(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-/QHIrsYpd6Kfk7xakK4svpDI5mmXP0gfvCoJdGpZQ2TOrQZmsW0QxjaiLn8wbIKjtm4BTSqLoix4lxYYOnLJ/w==}
peerDependencies:
- next: '*'
- react: '*'
- react-dom: '*'
+ react: ^16.8 || ^17 || ^18
+ react-dom: ^16.8 || ^17 || ^18
dependencies:
- next: 14.1.3(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -20216,7 +19805,7 @@ packages:
/next-transpile-modules@10.0.1:
resolution: {integrity: sha512-4VX/LCMofxIYAVV58UmD+kr8jQflpLWvas/BQ4Co0qWLWzVh06FoZkECkrX5eEZT6oJFqie6+kfbTA3EZCVtdQ==}
dependencies:
- enhanced-resolve: 5.15.1
+ enhanced-resolve: 5.16.0
dev: false
/next@14.1.3(@babel/core@7.24.0)(react-dom@18.2.0)(react@18.2.0):
@@ -20237,7 +19826,7 @@ packages:
'@next/env': 14.1.3
'@swc/helpers': 0.5.2
busboy: 1.6.0
- caniuse-lite: 1.0.30001596
+ caniuse-lite: 1.0.30001599
graceful-fs: 4.2.11
postcss: 8.4.31
react: 18.2.0
@@ -20277,7 +19866,7 @@ packages:
'@opentelemetry/api': 1.8.0
'@swc/helpers': 0.5.2
busboy: 1.6.0
- caniuse-lite: 1.0.30001596
+ caniuse-lite: 1.0.30001599
graceful-fs: 4.2.11
postcss: 8.4.31
react: 18.2.0
@@ -20395,10 +19984,6 @@ packages:
dev: false
optional: true
- /node-int64@0.4.0:
- resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
- dev: true
-
/node-libs-browser@2.2.1:
resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==}
dependencies:
@@ -20435,6 +20020,11 @@ packages:
engines: {node: '>=6.0.0'}
dev: false
+ /nodemailer@6.9.12:
+ resolution: {integrity: sha512-pnLo7g37Br3jXbF0bl5DekBJihm2q+3bB3l2o/B060sWmb5l+VqeScAQCBqaQ+5ezRZFzW5SciZNGdRDEbq89w==}
+ engines: {node: '>=6.0.0'}
+ dev: false
+
/nopt@5.0.0:
resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==}
engines: {node: '>=6'}
@@ -20507,6 +20097,13 @@ packages:
path-key: 2.0.1
dev: false
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
/npm-run-path@5.3.0:
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -20548,6 +20145,10 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /oauth@0.10.0:
+ resolution: {integrity: sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==}
+ dev: false
+
/object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -20596,21 +20197,22 @@ packages:
has-symbols: 1.0.3
object-keys: 1.1.1
- /object.entries@1.1.7:
- resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
+ /object.entries@1.1.8:
+ resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-object-atoms: 1.0.0
- /object.fromentries@2.0.7:
- resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
+ /object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
+ es-object-atoms: 1.0.0
/object.getownpropertydescriptors@2.1.7:
resolution: {integrity: sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==}
@@ -20620,17 +20222,16 @@ packages:
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.5
- safe-array-concat: 1.1.0
+ safe-array-concat: 1.1.2
dev: true
- /object.groupby@1.0.2:
- resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==}
+ /object.groupby@1.0.3:
+ resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
+ engines: {node: '>= 0.4'}
dependencies:
- array.prototype.filter: 1.0.3
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
- es-errors: 1.3.0
+ es-abstract: 1.23.2
/object.hasown@1.1.3:
resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
@@ -20645,13 +20246,13 @@ packages:
isobject: 3.0.1
dev: true
- /object.values@1.1.7:
- resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
+ /object.values@1.2.0:
+ resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-object-atoms: 1.0.0
/on-exit-leak-free@2.1.2:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
@@ -20718,8 +20319,8 @@ packages:
json-pointer: 0.6.2
dev: false
- /openapi-typescript@6.7.4:
- resolution: {integrity: sha512-EZyeW9Wy7UDCKv0iYmKrq2pVZtquXiD/YHiUClAKqiMi42nodx/EQH11K6fLqjt1IZlJmVokrAsExsBMM2RROQ==}
+ /openapi-typescript@6.7.5:
+ resolution: {integrity: sha512-ZD6dgSZi0u1QCP55g8/2yS5hNJfIpgqsSGHLxxdOjvY7eIrXzj271FJEQw33VwsZ6RCtO/NOuhxa7GBWmEudyA==}
hasBin: true
dependencies:
ansi-colors: 4.1.3
@@ -20884,11 +20485,8 @@ packages:
/p-map@4.0.0:
resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
engines: {node: '>=10'}
- requiresBuild: true
dependencies:
aggregate-error: 3.1.0
- dev: false
- optional: true
/p-queue@6.6.2:
resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
@@ -21042,6 +20640,20 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
+ /passport-github2@0.1.12:
+ resolution: {integrity: sha512-3nPUCc7ttF/3HSP/k9sAXjz3SkGv5Nki84I05kSQPo01Jqq1NzJACgMblCK0fGcv9pKCG/KXU3AJRDGLqHLoIw==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ passport-oauth2: 1.8.0
+ dev: false
+
+ /passport-google-oauth20@2.0.0:
+ resolution: {integrity: sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==}
+ engines: {node: '>= 0.4.0'}
+ dependencies:
+ passport-oauth2: 1.8.0
+ dev: false
+
/passport-jwt@4.0.1:
resolution: {integrity: sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==}
dependencies:
@@ -21056,6 +20668,17 @@ packages:
passport-strategy: 1.0.0
dev: false
+ /passport-oauth2@1.8.0:
+ resolution: {integrity: sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==}
+ engines: {node: '>= 0.4.0'}
+ dependencies:
+ base64url: 3.0.1
+ oauth: 0.10.0
+ passport-strategy: 1.0.0
+ uid2: 0.0.4
+ utils-merge: 1.0.1
+ dev: false
+
/passport-strategy@1.0.0:
resolution: {integrity: sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==}
engines: {node: '>= 0.4.0'}
@@ -21241,7 +20864,7 @@ packages:
dependencies:
colorette: 2.0.20
dateformat: 4.6.3
- fast-copy: 3.0.1
+ fast-copy: 3.0.2
fast-safe-stringify: 2.1.1
help-me: 5.0.0
joycon: 3.1.1
@@ -21264,7 +20887,7 @@ packages:
hasBin: true
dependencies:
atomic-sleep: 1.0.0
- fast-redact: 3.3.0
+ fast-redact: 3.4.0
on-exit-leak-free: 2.1.2
pino-abstract-transport: 1.1.0
pino-std-serializers: 6.2.2
@@ -21301,13 +20924,6 @@ packages:
find-up: 5.0.0
dev: true
- /pkg-dir@7.0.0:
- resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
- engines: {node: '>=14.16'}
- dependencies:
- find-up: 6.3.0
- dev: true
-
/pkg-types@1.0.3:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
dependencies:
@@ -21358,73 +20974,73 @@ packages:
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
engines: {node: '>= 0.4'}
- /postcss-attribute-case-insensitive@6.0.3(postcss@8.4.35):
+ /postcss-attribute-case-insensitive@6.0.3(postcss@8.4.36):
resolution: {integrity: sha512-KHkmCILThWBRtg+Jn1owTnHPnFit4OkqS+eKiGEOPIGke54DCeYGJ6r0Fx/HjfE9M9kznApCLcU0DvnPchazMQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-calc@8.2.4(postcss@8.4.35):
+ /postcss-calc@8.2.4(postcss@8.4.36):
resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==}
peerDependencies:
postcss: ^8.2.2
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
dev: true
- /postcss-clamp@4.1.0(postcss@8.4.35):
+ /postcss-clamp@4.1.0(postcss@8.4.36):
resolution: {integrity: sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==}
engines: {node: '>=7.6.0'}
peerDependencies:
postcss: ^8.4.6
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-color-functional-notation@6.0.5(postcss@8.4.35):
- resolution: {integrity: sha512-aTFsIy89ftjyclwUHRwvz1IxucLzVrzmmcXmtbPWT9GdyYeaJEKeAwbaZzOZn7AQlXg4xfwgkYhKsofC4aLIwg==}
+ /postcss-color-functional-notation@6.0.7(postcss@8.4.36):
+ resolution: {integrity: sha512-VwzaVfu1kEYDK2yM8ixeKA/QbgQ8k0uxpRevLH9Wam+R3C1sg68vnRB7m2AMhYfjqb5khp4p0EQk5aO90ASAkw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /postcss-color-hex-alpha@9.0.4(postcss@8.4.35):
+ /postcss-color-hex-alpha@9.0.4(postcss@8.4.36):
resolution: {integrity: sha512-XQZm4q4fNFqVCYMGPiBjcqDhuG7Ey2xrl99AnDJMyr5eDASsAGalndVgHZF8i97VFNy1GQeZc4q2ydagGmhelQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-color-rebeccapurple@9.0.3(postcss@8.4.35):
+ /postcss-color-rebeccapurple@9.0.3(postcss@8.4.36):
resolution: {integrity: sha512-ruBqzEFDYHrcVq3FnW3XHgwRqVMrtEPLBtD7K2YmsLKVc2jbkxzzNEctJKsPCpDZ+LeMHLKRDoSShVefGc+CkQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-colormin@5.3.1(postcss@8.4.35):
+ /postcss-colormin@5.3.1(postcss@8.4.36):
resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
@@ -21433,210 +21049,210 @@ packages:
browserslist: 4.23.0
caniuse-api: 3.0.0
colord: 2.9.3
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-convert-values@5.1.3(postcss@8.4.35):
+ /postcss-convert-values@5.1.3(postcss@8.4.36):
resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.23.0
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-custom-media@10.0.3(postcss@8.4.35):
- resolution: {integrity: sha512-wfJ9nKpLn/Qy7LASKu0Rj9Iq2uMzlRt27P4FAE1889IKRMdYUgy8SqvdXfAOs7LJLQX9Fjm0mZ+TSFphD/mKwA==}
+ /postcss-custom-media@10.0.4(postcss@8.4.36):
+ resolution: {integrity: sha512-Ubs7O3wj2prghaKRa68VHBvuy3KnTQ0zbGwqDYY1mntxJD0QL2AeiAy+AMfl3HBedTCVr2IcFNktwty9YpSskA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/cascade-layer-name-parser': 1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/media-query-list-parser': 2.1.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- postcss: 8.4.35
+ '@csstools/cascade-layer-name-parser': 1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/media-query-list-parser': 2.1.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ postcss: 8.4.36
dev: true
- /postcss-custom-properties@13.3.5(postcss@8.4.35):
- resolution: {integrity: sha512-xHg8DTCMfN2nrqs2CQTF+0m5jgnzKL5zrW5Y05KF6xBRO0uDPxiplBm/xcr1o49SLbyJXkMuaRJKhRzkrquKnQ==}
+ /postcss-custom-properties@13.3.6(postcss@8.4.36):
+ resolution: {integrity: sha512-vVVIwQbJiIz+PBLMIWA6XMi53Zg66/f474KolA7x0Das6EwkATc/9ZvM6zZx2gs7ZhcgVHjmWBbHkK9FlCgLeA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/cascade-layer-name-parser': 1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/cascade-layer-name-parser': 1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-custom-selectors@7.1.7(postcss@8.4.35):
- resolution: {integrity: sha512-N19MpExaR+hYTXU59VO02xE42zLoAUYSVcupwkKlWWLteOb+sWCWHw5FhV7u7gVLTzaGULy7nZP3DNTHgOZAPA==}
+ /postcss-custom-selectors@7.1.8(postcss@8.4.36):
+ resolution: {integrity: sha512-fqDkGSEsO7+oQaqdRdR8nwwqH+N2uk6LE/2g4myVJJYz/Ly418lHKEleKTdV/GzjBjFcG4n0dbfuH/Pd2BE8YA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/cascade-layer-name-parser': 1.0.8(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ '@csstools/cascade-layer-name-parser': 1.0.9(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-dir-pseudo-class@8.0.1(postcss@8.4.35):
+ /postcss-dir-pseudo-class@8.0.1(postcss@8.4.36):
resolution: {integrity: sha512-uULohfWBBVoFiZXgsQA24JV6FdKIidQ+ZqxOouhWwdE+qJlALbkS5ScB43ZTjPK+xUZZhlaO/NjfCt5h4IKUfw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-discard-comments@5.1.2(postcss@8.4.35):
+ /postcss-discard-comments@5.1.2(postcss@8.4.36):
resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-discard-duplicates@5.1.0(postcss@8.4.35):
+ /postcss-discard-duplicates@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-discard-empty@5.1.1(postcss@8.4.35):
+ /postcss-discard-empty@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-discard-overridden@5.1.0(postcss@8.4.35):
+ /postcss-discard-overridden@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-double-position-gradients@5.0.4(postcss@8.4.35):
- resolution: {integrity: sha512-xOH2QhazCPeYR+ziYaDcGlpo7Bpw8PVoggOFfU/xPkmBRUQH8MR2eWoPY1CZM93CB0WKs2mxq3ORo83QGIooLw==}
+ /postcss-double-position-gradients@5.0.5(postcss@8.4.36):
+ resolution: {integrity: sha512-26Tx4BfoxMNO9C89Nk56bfGv4jAwdDVgrQOyHZOP/6/D+xuOBf306KzTjHC2oBzaIIVtX+famOWHv4raxMjJMQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-flexbugs-fixes@5.0.2(postcss@8.4.35):
+ /postcss-flexbugs-fixes@5.0.2(postcss@8.4.36):
resolution: {integrity: sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==}
peerDependencies:
postcss: ^8.1.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-focus-visible@9.0.1(postcss@8.4.35):
+ /postcss-focus-visible@9.0.1(postcss@8.4.36):
resolution: {integrity: sha512-N2VQ5uPz3Z9ZcqI5tmeholn4d+1H14fKXszpjogZIrFbhaq0zNAtq8sAnw6VLiqGbL8YBzsnu7K9bBkTqaRimQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-focus-within@8.0.1(postcss@8.4.35):
+ /postcss-focus-within@8.0.1(postcss@8.4.36):
resolution: {integrity: sha512-NFU3xcY/xwNaapVb+1uJ4n23XImoC86JNwkY/uduytSl2s9Ekc2EpzmRR63+ExitnW3Mab3Fba/wRPCT5oDILA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-font-variant@5.0.0(postcss@8.4.35):
+ /postcss-font-variant@5.0.0(postcss@8.4.36):
resolution: {integrity: sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-gap-properties@5.0.1(postcss@8.4.35):
+ /postcss-gap-properties@5.0.1(postcss@8.4.36):
resolution: {integrity: sha512-k2z9Cnngc24c0KF4MtMuDdToROYqGMMUQGcE6V0odwjHyOHtaDBlLeRBV70y9/vF7KIbShrTRZ70JjsI1BZyWw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-image-set-function@6.0.3(postcss@8.4.35):
+ /postcss-image-set-function@6.0.3(postcss@8.4.36):
resolution: {integrity: sha512-i2bXrBYzfbRzFnm+pVuxVePSTCRiNmlfssGI4H0tJQvDue+yywXwUxe68VyzXs7cGtMaH6MCLY6IbCShrSroCw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-import@15.1.0(postcss@8.4.35):
+ /postcss-import@15.1.0(postcss@8.4.36):
resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
engines: {node: '>=14.0.0'}
peerDependencies:
postcss: ^8.0.0
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
read-cache: 1.0.0
resolve: 1.22.8
- /postcss-js@4.0.1(postcss@8.4.35):
+ /postcss-js@4.0.1(postcss@8.4.36):
resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
engines: {node: ^12 || ^14 || >= 16}
peerDependencies:
postcss: ^8.4.21
dependencies:
camelcase-css: 2.0.1
- postcss: 8.4.35
+ postcss: 8.4.36
- /postcss-lab-function@6.0.10(postcss@8.4.35):
- resolution: {integrity: sha512-Csvw/CwwuwTojK2O3Ad0SvYKrfnAKy+uvT+1Fjk6igR+n8gHuJHIwdj1A2s46EZZojg3RkibdMBuv1vMvR6Sng==}
+ /postcss-lab-function@6.0.12(postcss@8.4.36):
+ resolution: {integrity: sha512-flHW2jdRCRe8ClhMgrylR1BCiyyqLLvp1qKfO5wuAclUihldfRsoDIFQWFVW7rJbruil9/LCoHNUvY9JwTlLPw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/css-color-parser': 1.5.2(@csstools/css-parser-algorithms@2.6.0)(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-parser-algorithms': 2.6.0(@csstools/css-tokenizer@2.2.3)
- '@csstools/css-tokenizer': 2.2.3
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/utilities': 1.0.0(postcss@8.4.35)
- postcss: 8.4.35
+ '@csstools/css-color-parser': 1.6.2(@csstools/css-parser-algorithms@2.6.1)(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-parser-algorithms': 2.6.1(@csstools/css-tokenizer@2.2.4)
+ '@csstools/css-tokenizer': 2.2.4
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/utilities': 1.0.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /postcss-load-config@3.1.4(postcss@8.4.35):
+ /postcss-load-config@3.1.4(postcss@8.4.36):
resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==}
engines: {node: '>= 10'}
peerDependencies:
@@ -21649,11 +21265,11 @@ packages:
optional: true
dependencies:
lilconfig: 2.1.0
- postcss: 8.4.35
+ postcss: 8.4.36
yaml: 1.10.2
dev: true
- /postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2):
+ /postcss-load-config@4.0.2(postcss@8.4.36)(ts-node@10.9.2):
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
engines: {node: '>= 14'}
peerDependencies:
@@ -21666,8 +21282,8 @@ packages:
optional: true
dependencies:
lilconfig: 3.1.1
- postcss: 8.4.35
- ts-node: 10.9.2(@swc/core@1.4.5)(@types/node@20.9.0)(typescript@5.4.2)
+ postcss: 8.4.36
+ ts-node: 10.9.2(@swc/core@1.4.8)(@types/node@20.9.0)(typescript@5.4.2)
yaml: 2.4.1
/postcss-loader@4.3.0(postcss@7.0.39)(webpack@5.90.2):
@@ -21683,31 +21299,31 @@ packages:
postcss: 7.0.39
schema-utils: 3.3.0
semver: 7.6.0
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
- /postcss-logical@7.0.1(postcss@8.4.35):
+ /postcss-logical@7.0.1(postcss@8.4.36):
resolution: {integrity: sha512-8GwUQZE0ri0K0HJHkDv87XOLC8DE0msc+HoWLeKdtjDZEwpZ5xuK3QdV6FhmHSQW40LPkg43QzvATRAI3LsRkg==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-merge-longhand@5.1.7(postcss@8.4.35):
+ /postcss-merge-longhand@5.1.7(postcss@8.4.36):
resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
- stylehacks: 5.1.1(postcss@8.4.35)
+ stylehacks: 5.1.1(postcss@8.4.36)
dev: true
- /postcss-merge-rules@5.1.4(postcss@8.4.35):
+ /postcss-merge-rules@5.1.4(postcss@8.4.36):
resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
@@ -21715,53 +21331,53 @@ packages:
dependencies:
browserslist: 4.23.0
caniuse-api: 3.0.0
- cssnano-utils: 3.1.0(postcss@8.4.35)
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ cssnano-utils: 3.1.0(postcss@8.4.36)
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-minify-font-values@5.1.0(postcss@8.4.35):
+ /postcss-minify-font-values@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-gradients@5.1.1(postcss@8.4.35):
+ /postcss-minify-gradients@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
colord: 2.9.3
- cssnano-utils: 3.1.0(postcss@8.4.35)
- postcss: 8.4.35
+ cssnano-utils: 3.1.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-params@5.1.4(postcss@8.4.35):
+ /postcss-minify-params@5.1.4(postcss@8.4.36):
resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.23.0
- cssnano-utils: 3.1.0(postcss@8.4.35)
- postcss: 8.4.35
+ cssnano-utils: 3.1.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-minify-selectors@5.2.1(postcss@8.4.35):
+ /postcss-minify-selectors@5.2.1(postcss@8.4.36):
resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-modules-extract-imports@2.0.0:
@@ -21771,13 +21387,13 @@ packages:
postcss: 7.0.39
dev: true
- /postcss-modules-extract-imports@3.0.0(postcss@8.4.35):
+ /postcss-modules-extract-imports@3.0.0(postcss@8.4.36):
resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
/postcss-modules-local-by-default@3.0.3:
@@ -21786,19 +21402,19 @@ packages:
dependencies:
icss-utils: 4.1.1
postcss: 7.0.39
- postcss-selector-parser: 6.0.15
+ postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
dev: true
- /postcss-modules-local-by-default@4.0.4(postcss@8.4.35):
+ /postcss-modules-local-by-default@4.0.4(postcss@8.4.36):
resolution: {integrity: sha512-L4QzMnOdVwRm1Qb8m4x8jsZzKAaPAgrUF1r/hjDR2Xj7R+8Zsf97jAlSQzWtKx5YNiNGN8QxmPFIc/sh+RQl+Q==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.35)
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ icss-utils: 5.1.0(postcss@8.4.36)
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
postcss-value-parser: 4.2.0
dev: true
@@ -21807,17 +21423,17 @@ packages:
engines: {node: '>= 6'}
dependencies:
postcss: 7.0.39
- postcss-selector-parser: 6.0.15
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-modules-scope@3.1.1(postcss@8.4.35):
+ /postcss-modules-scope@3.1.1(postcss@8.4.36):
resolution: {integrity: sha512-uZgqzdTleelWjzJY+Fhti6F3C9iF1JR/dODLs/JDefozYcKTBCdD8BIl6nNPbTbcLnGrk56hzwZC2DaGNvYjzA==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-modules-values@3.0.0:
@@ -21827,17 +21443,17 @@ packages:
postcss: 7.0.39
dev: true
- /postcss-modules-values@4.0.0(postcss@8.4.35):
+ /postcss-modules-values@4.0.0(postcss@8.4.36):
resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==}
engines: {node: ^10 || ^12 || >= 14}
peerDependencies:
postcss: ^8.1.0
dependencies:
- icss-utils: 5.1.0(postcss@8.4.35)
- postcss: 8.4.35
+ icss-utils: 5.1.0(postcss@8.4.36)
+ postcss: 8.4.36
dev: true
- /postcss-modules@4.3.1(postcss@8.4.35):
+ /postcss-modules@4.3.1(postcss@8.4.36):
resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==}
peerDependencies:
postcss: ^8.0.0
@@ -21845,254 +21461,254 @@ packages:
generic-names: 4.0.0
icss-replace-symbols: 1.1.0
lodash.camelcase: 4.3.0
- postcss: 8.4.35
- postcss-modules-extract-imports: 3.0.0(postcss@8.4.35)
- postcss-modules-local-by-default: 4.0.4(postcss@8.4.35)
- postcss-modules-scope: 3.1.1(postcss@8.4.35)
- postcss-modules-values: 4.0.0(postcss@8.4.35)
+ postcss: 8.4.36
+ postcss-modules-extract-imports: 3.0.0(postcss@8.4.36)
+ postcss-modules-local-by-default: 4.0.4(postcss@8.4.36)
+ postcss-modules-scope: 3.1.1(postcss@8.4.36)
+ postcss-modules-values: 4.0.0(postcss@8.4.36)
string-hash: 1.1.3
dev: true
- /postcss-nested@6.0.1(postcss@8.4.35):
+ /postcss-nested@6.0.1(postcss@8.4.36):
resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
engines: {node: '>=12.0'}
peerDependencies:
postcss: ^8.2.14
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
- /postcss-nesting@12.1.0(postcss@8.4.35):
+ /postcss-nesting@12.1.0(postcss@8.4.36):
resolution: {integrity: sha512-QOYnosaZ+mlP6plQrAxFw09UUp2Sgtxj1BVHN+rSVbtV0Yx48zRt9/9F/ZOoxOKBBEsaJk2MYhhVRjeRRw5yuw==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.15)
- '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.15)
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ '@csstools/selector-resolve-nested': 1.1.0(postcss-selector-parser@6.0.16)
+ '@csstools/selector-specificity': 3.0.2(postcss-selector-parser@6.0.16)
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-normalize-charset@5.1.0(postcss@8.4.35):
+ /postcss-normalize-charset@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-normalize-display-values@5.1.0(postcss@8.4.35):
+ /postcss-normalize-display-values@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-positions@5.1.1(postcss@8.4.35):
+ /postcss-normalize-positions@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-repeat-style@5.1.1(postcss@8.4.35):
+ /postcss-normalize-repeat-style@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-string@5.1.0(postcss@8.4.35):
+ /postcss-normalize-string@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-timing-functions@5.1.0(postcss@8.4.35):
+ /postcss-normalize-timing-functions@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-unicode@5.1.1(postcss@8.4.35):
+ /postcss-normalize-unicode@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.23.0
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-url@5.1.0(postcss@8.4.35):
+ /postcss-normalize-url@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
normalize-url: 6.1.0
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize-whitespace@5.1.1(postcss@8.4.35):
+ /postcss-normalize-whitespace@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-opacity-percentage@2.0.0(postcss@8.4.35):
+ /postcss-opacity-percentage@2.0.0(postcss@8.4.36):
resolution: {integrity: sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.2
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-ordered-values@5.1.3(postcss@8.4.35):
+ /postcss-ordered-values@5.1.3(postcss@8.4.36):
resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- cssnano-utils: 3.1.0(postcss@8.4.35)
- postcss: 8.4.35
+ cssnano-utils: 3.1.0(postcss@8.4.36)
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-overflow-shorthand@5.0.1(postcss@8.4.35):
+ /postcss-overflow-shorthand@5.0.1(postcss@8.4.36):
resolution: {integrity: sha512-XzjBYKLd1t6vHsaokMV9URBt2EwC9a7nDhpQpjoPk2HRTSQfokPfyAS/Q7AOrzUu6q+vp/GnrDBGuj/FCaRqrQ==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-page-break@3.0.4(postcss@8.4.35):
+ /postcss-page-break@3.0.4(postcss@8.4.36):
resolution: {integrity: sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==}
peerDependencies:
postcss: ^8
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-place@9.0.1(postcss@8.4.35):
+ /postcss-place@9.0.1(postcss@8.4.36):
resolution: {integrity: sha512-JfL+paQOgRQRMoYFc2f73pGuG/Aw3tt4vYMR6UA3cWVMxivviPTnMFnFTczUJOA4K2Zga6xgQVE+PcLs64WC8Q==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-preset-env@9.5.0(postcss@8.4.35):
- resolution: {integrity: sha512-ZTrTWCSqKVYSABB1GerMBb6F8Uto5YWIq1nqi+TKOHPzrXMcyJNuJTc0v2lp5WjG4Sfvwdo7HF/7/3j7HskRog==}
+ /postcss-preset-env@9.5.2(postcss@8.4.36):
+ resolution: {integrity: sha512-/KIAHELdg5BxsKA/Vc6Nok/66EM7lps8NulKcQWX2S52HdzxAqh+6HcuAFj7trRSW587vlOA4zCjlRFgR+W6Ag==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- '@csstools/postcss-cascade-layers': 4.0.3(postcss@8.4.35)
- '@csstools/postcss-color-function': 3.0.10(postcss@8.4.35)
- '@csstools/postcss-color-mix-function': 2.0.10(postcss@8.4.35)
- '@csstools/postcss-exponential-functions': 1.0.4(postcss@8.4.35)
- '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.4.35)
- '@csstools/postcss-gamut-mapping': 1.0.3(postcss@8.4.35)
- '@csstools/postcss-gradients-interpolation-method': 4.0.11(postcss@8.4.35)
- '@csstools/postcss-hwb-function': 3.0.9(postcss@8.4.35)
- '@csstools/postcss-ic-unit': 3.0.4(postcss@8.4.35)
- '@csstools/postcss-initial': 1.0.1(postcss@8.4.35)
- '@csstools/postcss-is-pseudo-class': 4.0.5(postcss@8.4.35)
- '@csstools/postcss-light-dark-function': 1.0.0(postcss@8.4.35)
- '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.35)
- '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.35)
- '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.35)
- '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.35)
- '@csstools/postcss-logical-viewport-units': 2.0.6(postcss@8.4.35)
- '@csstools/postcss-media-minmax': 1.1.3(postcss@8.4.35)
- '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.6(postcss@8.4.35)
- '@csstools/postcss-nested-calc': 3.0.2(postcss@8.4.35)
- '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.35)
- '@csstools/postcss-oklab-function': 3.0.10(postcss@8.4.35)
- '@csstools/postcss-progressive-custom-properties': 3.1.0(postcss@8.4.35)
- '@csstools/postcss-relative-color-syntax': 2.0.10(postcss@8.4.35)
- '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.35)
- '@csstools/postcss-stepped-value-functions': 3.0.5(postcss@8.4.35)
- '@csstools/postcss-text-decoration-shorthand': 3.0.4(postcss@8.4.35)
- '@csstools/postcss-trigonometric-functions': 3.0.5(postcss@8.4.35)
- '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.35)
- autoprefixer: 10.4.18(postcss@8.4.35)
+ '@csstools/postcss-cascade-layers': 4.0.3(postcss@8.4.36)
+ '@csstools/postcss-color-function': 3.0.12(postcss@8.4.36)
+ '@csstools/postcss-color-mix-function': 2.0.12(postcss@8.4.36)
+ '@csstools/postcss-exponential-functions': 1.0.5(postcss@8.4.36)
+ '@csstools/postcss-font-format-keywords': 3.0.2(postcss@8.4.36)
+ '@csstools/postcss-gamut-mapping': 1.0.5(postcss@8.4.36)
+ '@csstools/postcss-gradients-interpolation-method': 4.0.13(postcss@8.4.36)
+ '@csstools/postcss-hwb-function': 3.0.11(postcss@8.4.36)
+ '@csstools/postcss-ic-unit': 3.0.5(postcss@8.4.36)
+ '@csstools/postcss-initial': 1.0.1(postcss@8.4.36)
+ '@csstools/postcss-is-pseudo-class': 4.0.5(postcss@8.4.36)
+ '@csstools/postcss-light-dark-function': 1.0.1(postcss@8.4.36)
+ '@csstools/postcss-logical-float-and-clear': 2.0.1(postcss@8.4.36)
+ '@csstools/postcss-logical-overflow': 1.0.1(postcss@8.4.36)
+ '@csstools/postcss-logical-overscroll-behavior': 1.0.1(postcss@8.4.36)
+ '@csstools/postcss-logical-resize': 2.0.1(postcss@8.4.36)
+ '@csstools/postcss-logical-viewport-units': 2.0.7(postcss@8.4.36)
+ '@csstools/postcss-media-minmax': 1.1.4(postcss@8.4.36)
+ '@csstools/postcss-media-queries-aspect-ratio-number-values': 2.0.7(postcss@8.4.36)
+ '@csstools/postcss-nested-calc': 3.0.2(postcss@8.4.36)
+ '@csstools/postcss-normalize-display-values': 3.0.2(postcss@8.4.36)
+ '@csstools/postcss-oklab-function': 3.0.12(postcss@8.4.36)
+ '@csstools/postcss-progressive-custom-properties': 3.1.1(postcss@8.4.36)
+ '@csstools/postcss-relative-color-syntax': 2.0.12(postcss@8.4.36)
+ '@csstools/postcss-scope-pseudo-class': 3.0.1(postcss@8.4.36)
+ '@csstools/postcss-stepped-value-functions': 3.0.6(postcss@8.4.36)
+ '@csstools/postcss-text-decoration-shorthand': 3.0.4(postcss@8.4.36)
+ '@csstools/postcss-trigonometric-functions': 3.0.6(postcss@8.4.36)
+ '@csstools/postcss-unset-value': 3.0.1(postcss@8.4.36)
+ autoprefixer: 10.4.18(postcss@8.4.36)
browserslist: 4.23.0
- css-blank-pseudo: 6.0.1(postcss@8.4.35)
- css-has-pseudo: 6.0.2(postcss@8.4.35)
- css-prefers-color-scheme: 9.0.1(postcss@8.4.35)
- cssdb: 7.11.1
- postcss: 8.4.35
- postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.35)
- postcss-clamp: 4.1.0(postcss@8.4.35)
- postcss-color-functional-notation: 6.0.5(postcss@8.4.35)
- postcss-color-hex-alpha: 9.0.4(postcss@8.4.35)
- postcss-color-rebeccapurple: 9.0.3(postcss@8.4.35)
- postcss-custom-media: 10.0.3(postcss@8.4.35)
- postcss-custom-properties: 13.3.5(postcss@8.4.35)
- postcss-custom-selectors: 7.1.7(postcss@8.4.35)
- postcss-dir-pseudo-class: 8.0.1(postcss@8.4.35)
- postcss-double-position-gradients: 5.0.4(postcss@8.4.35)
- postcss-focus-visible: 9.0.1(postcss@8.4.35)
- postcss-focus-within: 8.0.1(postcss@8.4.35)
- postcss-font-variant: 5.0.0(postcss@8.4.35)
- postcss-gap-properties: 5.0.1(postcss@8.4.35)
- postcss-image-set-function: 6.0.3(postcss@8.4.35)
- postcss-lab-function: 6.0.10(postcss@8.4.35)
- postcss-logical: 7.0.1(postcss@8.4.35)
- postcss-nesting: 12.1.0(postcss@8.4.35)
- postcss-opacity-percentage: 2.0.0(postcss@8.4.35)
- postcss-overflow-shorthand: 5.0.1(postcss@8.4.35)
- postcss-page-break: 3.0.4(postcss@8.4.35)
- postcss-place: 9.0.1(postcss@8.4.35)
- postcss-pseudo-class-any-link: 9.0.1(postcss@8.4.35)
- postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.35)
- postcss-selector-not: 7.0.2(postcss@8.4.35)
- dev: true
-
- /postcss-pseudo-class-any-link@9.0.1(postcss@8.4.35):
+ css-blank-pseudo: 6.0.1(postcss@8.4.36)
+ css-has-pseudo: 6.0.2(postcss@8.4.36)
+ css-prefers-color-scheme: 9.0.1(postcss@8.4.36)
+ cssdb: 7.11.2
+ postcss: 8.4.36
+ postcss-attribute-case-insensitive: 6.0.3(postcss@8.4.36)
+ postcss-clamp: 4.1.0(postcss@8.4.36)
+ postcss-color-functional-notation: 6.0.7(postcss@8.4.36)
+ postcss-color-hex-alpha: 9.0.4(postcss@8.4.36)
+ postcss-color-rebeccapurple: 9.0.3(postcss@8.4.36)
+ postcss-custom-media: 10.0.4(postcss@8.4.36)
+ postcss-custom-properties: 13.3.6(postcss@8.4.36)
+ postcss-custom-selectors: 7.1.8(postcss@8.4.36)
+ postcss-dir-pseudo-class: 8.0.1(postcss@8.4.36)
+ postcss-double-position-gradients: 5.0.5(postcss@8.4.36)
+ postcss-focus-visible: 9.0.1(postcss@8.4.36)
+ postcss-focus-within: 8.0.1(postcss@8.4.36)
+ postcss-font-variant: 5.0.0(postcss@8.4.36)
+ postcss-gap-properties: 5.0.1(postcss@8.4.36)
+ postcss-image-set-function: 6.0.3(postcss@8.4.36)
+ postcss-lab-function: 6.0.12(postcss@8.4.36)
+ postcss-logical: 7.0.1(postcss@8.4.36)
+ postcss-nesting: 12.1.0(postcss@8.4.36)
+ postcss-opacity-percentage: 2.0.0(postcss@8.4.36)
+ postcss-overflow-shorthand: 5.0.1(postcss@8.4.36)
+ postcss-page-break: 3.0.4(postcss@8.4.36)
+ postcss-place: 9.0.1(postcss@8.4.36)
+ postcss-pseudo-class-any-link: 9.0.1(postcss@8.4.36)
+ postcss-replace-overflow-wrap: 4.0.0(postcss@8.4.36)
+ postcss-selector-not: 7.0.2(postcss@8.4.36)
+ dev: true
+
+ /postcss-pseudo-class-any-link@9.0.1(postcss@8.4.36):
resolution: {integrity: sha512-cKYGGZ9yzUZi+dZd7XT2M8iSDfo+T2Ctbpiizf89uBTBfIpZpjvTavzIJXpCReMVXSKROqzpxClNu6fz4DHM0Q==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-reduce-initial@5.1.2(postcss@8.4.35):
+ /postcss-reduce-initial@5.1.2(postcss@8.4.36):
resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
@@ -22100,63 +21716,63 @@ packages:
dependencies:
browserslist: 4.23.0
caniuse-api: 3.0.0
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-reduce-transforms@5.1.0(postcss@8.4.35):
+ /postcss-reduce-transforms@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
dev: true
- /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.35):
+ /postcss-replace-overflow-wrap@4.0.0(postcss@8.4.36):
resolution: {integrity: sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==}
peerDependencies:
postcss: ^8.0.3
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
dev: true
- /postcss-selector-not@7.0.2(postcss@8.4.35):
+ /postcss-selector-not@7.0.2(postcss@8.4.36):
resolution: {integrity: sha512-/SSxf/90Obye49VZIfc0ls4H0P6i6V1iHv0pzZH8SdgvZOPFkF37ef1r5cyWcMflJSFJ5bfuoluTnFnBBFiuSA==}
engines: {node: ^14 || ^16 || >=18}
peerDependencies:
postcss: ^8.4
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
- /postcss-selector-parser@6.0.15:
- resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==}
+ /postcss-selector-parser@6.0.16:
+ resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==}
engines: {node: '>=4'}
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
- /postcss-svgo@5.1.0(postcss@8.4.35):
+ /postcss-svgo@5.1.0(postcss@8.4.36):
resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
+ postcss: 8.4.36
postcss-value-parser: 4.2.0
svgo: 2.8.0
dev: true
- /postcss-unique-selectors@5.1.1(postcss@8.4.35):
+ /postcss-unique-selectors@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
/postcss-value-parser@4.2.0:
@@ -22176,16 +21792,16 @@ packages:
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
- source-map-js: 1.0.2
+ source-map-js: 1.1.0
dev: false
- /postcss@8.4.35:
- resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==}
+ /postcss@8.4.36:
+ resolution: {integrity: sha512-/n7eumA6ZjFHAsbX30yhHup/IMkOmlmvtEi7P+6RMYf+bGJSUHc3geH4a0NSZxAz/RJfiS9tooCTs9LAVYUZKw==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.7
picocolors: 1.0.0
- source-map-js: 1.0.2
+ source-map-js: 1.1.0
/prebuild-install@7.1.2:
resolution: {integrity: sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==}
@@ -22289,7 +21905,7 @@ packages:
fixpack: 4.0.0
get-port: 5.1.1
mailparser: 3.6.9
- nodemailer: 6.9.11
+ nodemailer: 6.9.12
open: 7.4.2
p-event: 4.2.0
p-wait-for: 3.2.0
@@ -22297,13 +21913,13 @@ packages:
uuid: 9.0.1
dev: false
- /prisma@5.10.2:
- resolution: {integrity: sha512-hqb/JMz9/kymRE25pMWCxkdyhbnIWrq+h7S6WysJpdnCvhstbJSNP/S6mScEcqiB8Qv2F+0R3yG+osRaWqZacQ==}
+ /prisma@5.11.0:
+ resolution: {integrity: sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g==}
engines: {node: '>=16.13'}
hasBin: true
requiresBuild: true
dependencies:
- '@prisma/engines': 5.10.2
+ '@prisma/engines': 5.11.0
dev: false
/prismjs@1.27.0:
@@ -22370,7 +21986,7 @@ packages:
resolution: {integrity: sha512-hezvKvQQmsFkOdrZfYxUxkyxl8mgFQeT259Ajj9PXdbg9VzBCWrItOev72JyWxkCD5VSSqAeHmlN3tWx4DlmsA==}
engines: {node: '>= 0.4'}
dependencies:
- array.prototype.map: 1.0.6
+ array.prototype.map: 1.0.7
call-bind: 1.0.7
define-properties: 1.2.1
es-abstract: 1.22.5
@@ -22692,15 +22308,6 @@ packages:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
- /raw-body@2.5.1:
- resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
- engines: {node: '>= 0.8'}
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
-
/raw-body@2.5.2:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
@@ -22863,8 +22470,8 @@ packages:
react: 18.2.0
dev: false
- /react-hook-form@7.51.0(react@18.2.0):
- resolution: {integrity: sha512-BggOy5j58RdhdMzzRUHGOYhSz1oeylFAv6jUSG86OvCIvlAvS7KvnRY7yoAf2pfEiPN7BesnR0xx73nEk3qIiw==}
+ /react-hook-form@7.51.1(react@18.2.0):
+ resolution: {integrity: sha512-ifnBjl+kW0ksINHd+8C/Gp6a4eZOdWyvRv0UBaByShwU8JbVx5hTcTWEcd5VdybvmPTATkVVXk9npXArHmo56w==}
engines: {node: '>=12.22.0'}
peerDependencies:
react: ^16.8.0 || ^17 || ^18
@@ -22882,8 +22489,8 @@ packages:
react-dom: 18.2.0(react@18.2.0)
dev: false
- /react-i18next@14.0.8(i18next@23.10.0)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-1HKM41/Q8c/nQ2rYNNZlFmrjF2aubZT8sMBmY9aH/xa1/gsrTZ+hPwuLv4V7Cr8fYIh0GQ7vv5C1jCx104uNig==}
+ /react-i18next@14.1.0(i18next@23.10.1)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-3KwX6LHpbvGQ+sBEntjV4sYW3Zovjjl3fpoHbUwSgFHf0uRBcbeCBLR5al6ikncI5+W0EFb71QXZmfop+J6NrQ==}
peerDependencies:
i18next: '>= 23.2.3'
react: '>= 16.8.0'
@@ -22897,7 +22504,7 @@ packages:
dependencies:
'@babel/runtime': 7.24.0
html-parse-stringify: 3.0.1
- i18next: 23.10.0
+ i18next: 23.10.1
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
dev: false
@@ -22927,8 +22534,8 @@ packages:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
dev: true
- /react-joyride@2.7.4(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-7MPuqM/z3g9iqCJZnmKNM2RArNgqYBpM8iknny4KjrHp/2wXlPtFL0LpqGiBhtiC0dCC2xe3pNpD9GdLZ2NxMA==}
+ /react-joyride@2.8.0(@types/react@18.2.64)(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-h/z3QS6dk+KKw1RuVnDJKFRuoHy/L4eyqZSGZ4S9vIn+/c4lec3svhGQBUhcjvBjl/fFPkN9Uag+l6PPKkj66A==}
peerDependencies:
react: 15 - 18
react-dom: 15 - 18
@@ -22946,7 +22553,7 @@ packages:
scroll: 3.0.1
scrollparent: 2.1.0
tree-changes: 0.11.2
- type-fest: 4.11.1
+ type-fest: 4.12.0
transitivePeerDependencies:
- '@types/react'
dev: false
@@ -22973,23 +22580,8 @@ packages:
- supports-color
dev: false
- /react-remove-scroll-bar@2.3.5(@types/react@18.2.64)(react@18.2.0):
- resolution: {integrity: sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==}
- engines: {node: '>=10'}
- peerDependencies:
- '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
- react: ^16.8.0 || ^17.0.0 || ^18.0.0
- peerDependenciesMeta:
- '@types/react':
- optional: true
- dependencies:
- '@types/react': 18.2.64
- react: 18.2.0
- react-style-singleton: 2.2.1(@types/react@18.2.64)(react@18.2.0)
- tslib: 2.6.2
-
- /react-remove-scroll@2.5.4(@types/react@18.2.64)(react@18.2.0):
- resolution: {integrity: sha512-xGVKJJr0SJGQVirVFAUZ2k1QLyO6m+2fy0l8Qawbp5Jgrv3DeLalrfMNBFSlmz5kriGGzsVBtGVnf4pTKIhhWA==}
+ /react-remove-scroll-bar@2.3.6(@types/react@18.2.64)(react@18.2.0):
+ resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==}
engines: {node: '>=10'}
peerDependencies:
'@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0
@@ -23000,11 +22592,8 @@ packages:
dependencies:
'@types/react': 18.2.64
react: 18.2.0
- react-remove-scroll-bar: 2.3.5(@types/react@18.2.64)(react@18.2.0)
react-style-singleton: 2.2.1(@types/react@18.2.64)(react@18.2.0)
tslib: 2.6.2
- use-callback-ref: 1.3.1(@types/react@18.2.64)(react@18.2.0)
- use-sidecar: 1.1.2(@types/react@18.2.64)(react@18.2.0)
dev: false
/react-remove-scroll@2.5.5(@types/react@18.2.64)(react@18.2.0):
@@ -23019,14 +22608,15 @@ packages:
dependencies:
'@types/react': 18.2.64
react: 18.2.0
- react-remove-scroll-bar: 2.3.5(@types/react@18.2.64)(react@18.2.0)
+ react-remove-scroll-bar: 2.3.6(@types/react@18.2.64)(react@18.2.0)
react-style-singleton: 2.2.1(@types/react@18.2.64)(react@18.2.0)
tslib: 2.6.2
use-callback-ref: 1.3.1(@types/react@18.2.64)(react@18.2.0)
use-sidecar: 1.1.2(@types/react@18.2.64)(react@18.2.0)
+ dev: false
- /react-resizable-panels@2.0.12(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-m0cfwlVQ+460iQbOSVfs3MljVniHI/LGpHGQBa7aNCYUYwaERHcf5W/lCTsoRhbGQfMW9An0M8gxUHILA53Jeg==}
+ /react-resizable-panels@2.0.13(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-DZxLv5Pc6rfuqkgQ+2JW3eLPiX3BgAAR38Cd0lXuCVHXEZLrD+3W4Nag5TqCoNgEM/4IUU9L/pLM2toOUOd6UQ==}
peerDependencies:
react: ^16.14.0 || ^17.0.0 || ^18.0.0
react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0
@@ -23096,6 +22686,7 @@ packages:
invariant: 2.2.4
react: 18.2.0
tslib: 2.6.2
+ dev: false
/react-syntax-highlighter@15.5.0(react@18.2.0):
resolution: {integrity: sha512-+zq2myprEnQmH5yw6Gqc8lD55QHnpKaU8TOcFeC/Lg/MQSs8UknEA0JC4nTZGFAXC2J2Hyj/ijJ7NlabyPi2gg==}
@@ -23282,8 +22873,8 @@ packages:
engines: {node: '>= 12.13.0'}
dev: false
- /recast@0.23.5:
- resolution: {integrity: sha512-M67zIddJiwXdfPQRYKJ0qZO1SLdH1I0hYeb0wzxA+pNOvAZiQHulWzuk+fYsEWRQ8VfZrgjyucqsCOtCyM01/A==}
+ /recast@0.23.6:
+ resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==}
engines: {node: '>= 4'}
dependencies:
ast-types: 0.16.1
@@ -23299,8 +22890,8 @@ packages:
decimal.js-light: 2.5.1
dev: false
- /recharts@2.12.2(react-dom@18.2.0)(react@18.2.0):
- resolution: {integrity: sha512-9bpxjXSF5g81YsKkTSlaX7mM4b6oYI1mIYck6YkUcWuL3tomADccI51/6thY4LmvhYuRTwpfrOvE80Zc3oBRfQ==}
+ /recharts@2.12.3(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-vE/F7wTlokf5mtCqVDJlVKelCjliLSJ+DJxj79XlMREm7gpV7ljwbrwE3CfeaoDlOaLX+6iwHaVRn9587YkwIg==}
engines: {node: '>=14'}
peerDependencies:
react: ^16.0.0 || ^17.0.0 || ^18.0.0
@@ -23315,7 +22906,7 @@ packages:
react-smooth: 4.0.0(react-dom@18.2.0)(react@18.2.0)
recharts-scale: 0.4.5
tiny-invariant: 1.3.3
- victory-vendor: 36.9.1
+ victory-vendor: 36.9.2
dev: false
/rechoir@0.6.2:
@@ -23377,13 +22968,13 @@ packages:
/reflect-metadata@0.2.1:
resolution: {integrity: sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==}
- /reflect.getprototypeof@1.0.5:
- resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==}
+ /reflect.getprototypeof@1.0.6:
+ resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
es-errors: 1.3.0
get-intrinsic: 1.2.4
globalthis: 1.0.3
@@ -23469,20 +23060,31 @@ packages:
resolution: {integrity: sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==}
dev: false
- /relateurl@0.2.7:
- resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
- engines: {node: '>= 0.10'}
+ /rehype-external-links@3.0.0:
+ resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==}
+ dependencies:
+ '@types/hast': 3.0.4
+ '@ungap/structured-clone': 1.2.0
+ hast-util-is-element: 3.0.0
+ is-absolute-url: 4.0.1
+ space-separated-tokens: 2.0.2
+ unist-util-visit: 5.0.0
+ dev: true
- /remark-external-links@8.0.0:
- resolution: {integrity: sha512-5vPSX0kHoSsqtdftSHhIYofVINC8qmp0nctkeU9YoJwV3YfiBRiI6cbFRJ0oI/1F9xS+bopXG0m2KS8VFscuKA==}
+ /rehype-slug@6.0.0:
+ resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
dependencies:
- extend: 3.0.2
- is-absolute-url: 3.0.3
- mdast-util-definitions: 4.0.0
- space-separated-tokens: 1.1.5
- unist-util-visit: 2.0.3
+ '@types/hast': 3.0.4
+ github-slugger: 2.0.0
+ hast-util-heading-rank: 3.0.0
+ hast-util-to-string: 3.0.0
+ unist-util-visit: 5.0.0
dev: true
+ /relateurl@0.2.7:
+ resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
+ engines: {node: '>= 0.10'}
+
/remark-gfm@4.0.0:
resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
dependencies:
@@ -23525,14 +23127,6 @@ packages:
vfile: 6.0.1
dev: false
- /remark-slug@6.1.0:
- resolution: {integrity: sha512-oGCxDF9deA8phWvxFuyr3oSJsdyUAxMFbA0mZ7Y1Sas+emILtO+e5WutF9564gDsEN4IXaQXm5pFo6MLH+YmwQ==}
- dependencies:
- github-slugger: 1.5.0
- mdast-util-to-string: 1.1.0
- unist-util-visit: 2.0.3
- dev: true
-
/remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
dependencies:
@@ -23582,8 +23176,8 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- /require-in-the-middle@7.2.0:
- resolution: {integrity: sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==}
+ /require-in-the-middle@7.2.1:
+ resolution: {integrity: sha512-u5XngygsJ+XV2dBV/Pl4SrcNpUXQfmYmXtuFeHDXfzk4i4NnGnret6xKWkkJHjMHS/16yMV9pEAlAunqmjllkA==}
engines: {node: '>=8.6.0'}
dependencies:
debug: 4.3.4
@@ -23717,7 +23311,7 @@ packages:
maxmin: 2.1.0
dev: true
- /rollup-plugin-postcss@4.0.2(postcss@8.4.35):
+ /rollup-plugin-postcss@4.0.2(postcss@8.4.36):
resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==}
engines: {node: '>=10'}
peerDependencies:
@@ -23725,13 +23319,13 @@ packages:
dependencies:
chalk: 4.1.2
concat-with-sourcemaps: 1.1.0
- cssnano: 5.1.15(postcss@8.4.35)
+ cssnano: 5.1.15(postcss@8.4.36)
import-cwd: 3.0.0
p-queue: 6.6.2
pify: 5.0.0
- postcss: 8.4.35
- postcss-load-config: 3.1.4(postcss@8.4.35)
- postcss-modules: 4.3.1(postcss@8.4.35)
+ postcss: 8.4.36
+ postcss-load-config: 3.1.4(postcss@8.4.36)
+ postcss-modules: 4.3.1(postcss@8.4.36)
promise.series: 0.2.0
resolve: 1.22.8
rollup-pluginutils: 2.8.2
@@ -23751,7 +23345,7 @@ packages:
jest-worker: 26.6.2
rollup: 2.79.1
serialize-javascript: 4.0.0
- terser: 5.29.1
+ terser: 5.29.2
dev: true
/rollup-plugin-typescript2@0.32.1(rollup@2.79.1)(typescript@4.9.5):
@@ -23798,6 +23392,7 @@ packages:
hasBin: true
optionalDependencies:
fsevents: 2.3.3
+ dev: false
/rollup@2.79.1:
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
@@ -23807,26 +23402,26 @@ packages:
fsevents: 2.3.3
dev: true
- /rollup@4.12.1:
- resolution: {integrity: sha512-ggqQKvx/PsB0FaWXhIvVkSWh7a/PCLQAsMjBc+nA2M8Rv2/HG0X6zvixAB7KyZBRtifBUhy5k8voQX/mRnABPg==}
+ /rollup@4.13.0:
+ resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
dependencies:
'@types/estree': 1.0.5
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.12.1
- '@rollup/rollup-android-arm64': 4.12.1
- '@rollup/rollup-darwin-arm64': 4.12.1
- '@rollup/rollup-darwin-x64': 4.12.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.12.1
- '@rollup/rollup-linux-arm64-gnu': 4.12.1
- '@rollup/rollup-linux-arm64-musl': 4.12.1
- '@rollup/rollup-linux-riscv64-gnu': 4.12.1
- '@rollup/rollup-linux-x64-gnu': 4.12.1
- '@rollup/rollup-linux-x64-musl': 4.12.1
- '@rollup/rollup-win32-arm64-msvc': 4.12.1
- '@rollup/rollup-win32-ia32-msvc': 4.12.1
- '@rollup/rollup-win32-x64-msvc': 4.12.1
+ '@rollup/rollup-android-arm-eabi': 4.13.0
+ '@rollup/rollup-android-arm64': 4.13.0
+ '@rollup/rollup-darwin-arm64': 4.13.0
+ '@rollup/rollup-darwin-x64': 4.13.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.13.0
+ '@rollup/rollup-linux-arm64-gnu': 4.13.0
+ '@rollup/rollup-linux-arm64-musl': 4.13.0
+ '@rollup/rollup-linux-riscv64-gnu': 4.13.0
+ '@rollup/rollup-linux-x64-gnu': 4.13.0
+ '@rollup/rollup-linux-x64-musl': 4.13.0
+ '@rollup/rollup-win32-arm64-msvc': 4.13.0
+ '@rollup/rollup-win32-ia32-msvc': 4.13.0
+ '@rollup/rollup-win32-x64-msvc': 4.13.0
fsevents: 2.3.3
dev: true
@@ -23876,8 +23471,8 @@ packages:
mri: 1.2.0
dev: true
- /safe-array-concat@1.1.0:
- resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==}
+ /safe-array-concat@1.1.2:
+ resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
engines: {node: '>=0.4'}
dependencies:
call-bind: 1.0.7
@@ -24073,8 +23668,8 @@ packages:
/set-blocking@2.0.0:
resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
- /set-function-length@1.2.1:
- resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==}
+ /set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
dependencies:
define-data-property: 1.1.4
@@ -24142,7 +23737,7 @@ packages:
node-fetch: 3.3.2
ora: 6.3.1
prompts: 2.4.2
- recast: 0.23.5
+ recast: 0.23.6
ts-morph: 18.0.0
tsconfig-paths: 4.2.0
zod: 3.22.4
@@ -24299,7 +23894,7 @@ packages:
resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
engines: {node: '>= 10'}
dependencies:
- '@polka/url': 1.0.0-next.24
+ '@polka/url': 1.0.0-next.25
mrmime: 2.0.0
totalist: 3.0.1
dev: true
@@ -24308,14 +23903,15 @@ packages:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
dev: true
- /size-limit@11.0.2:
- resolution: {integrity: sha512-iFZ8iTR/3zPqxSwEIdGnTVYVU0F2nhodLQG/G6zpi/NxECYAK9ntq2lNr+prXH7h3gyBjx2Umt2D/oS2Qzz+eg==}
+ /size-limit@11.1.1:
+ resolution: {integrity: sha512-0d06gwp+hBuhNQyAyewalfMLhGCnjt15MyDxqouzxN4+85vjAUdRKSNuR1kcyxaS9Ml98q120U0PgRPocPJWiw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
dependencies:
bytes-iec: 3.1.1
chokidar: 3.6.0
globby: 14.0.1
+ jiti: 1.21.0
lilconfig: 3.1.1
nanospinner: 1.1.0
picocolors: 1.0.0
@@ -24457,8 +24053,8 @@ packages:
resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==}
dev: true
- /source-map-js@1.0.2:
- resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ /source-map-js@1.1.0:
+ resolution: {integrity: sha512-9vC2SfsJzlej6MAaMPLu8HiBSHGdRAJ9hVFYN1ibZoNkeanmDmLUcIrj6G9DGL7XMJ54AKg/G75akXl1/izTOw==}
engines: {node: '>=0.10.0'}
/source-map-resolve@0.5.3:
@@ -24510,10 +24106,10 @@ packages:
/space-separated-tokens@1.1.5:
resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==}
+ dev: false
/space-separated-tokens@2.0.2:
resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
- dev: false
/spawndamnit@2.0.0:
resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==}
@@ -24803,29 +24399,31 @@ packages:
es-abstract: 1.22.5
dev: true
- /string.prototype.padstart@3.1.5:
- resolution: {integrity: sha512-R57IsE3JIfModQWrVXYZ8ZHWMBNDpIoniDwhYCR1nx+iHwDkjjk26a8xM9BYgf7SAXJO7sdNPng5J+0ccr5LFQ==}
+ /string.prototype.padstart@3.1.6:
+ resolution: {integrity: sha512-1y15lz7otgfRTAVK5qbp3eHIga+w8j7+jIH+7HpUrOfnLVl6n0hbspi4EXf4tR+PNOpBjPstltemkx0SvViOCg==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
+ es-object-atoms: 1.0.0
dev: true
- /string.prototype.trim@1.2.8:
- resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
+ /string.prototype.trim@1.2.9:
+ resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
engines: {node: '>= 0.4'}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-abstract: 1.23.2
+ es-object-atoms: 1.0.0
- /string.prototype.trimend@1.0.7:
- resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
+ /string.prototype.trimend@1.0.8:
+ resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
dependencies:
call-bind: 1.0.7
define-properties: 1.2.1
- es-abstract: 1.22.5
+ es-object-atoms: 1.0.0
/string.prototype.trimstart@1.0.7:
resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
@@ -24887,6 +24485,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
/strip-final-newline@3.0.0:
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
engines: {node: '>=12'}
@@ -24930,7 +24533,7 @@ packages:
dependencies:
loader-utils: 2.0.4
schema-utils: 2.7.1
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/style-loader@2.0.0(webpack@5.90.2):
@@ -24941,7 +24544,7 @@ packages:
dependencies:
loader-utils: 2.0.4
schema-utils: 3.3.0
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/style-loader@3.3.4(webpack@5.90.2):
@@ -24950,7 +24553,7 @@ packages:
peerDependencies:
webpack: ^5.0.0
dependencies:
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/style-mod@4.1.2:
@@ -24981,15 +24584,15 @@ packages:
react: 18.2.0
dev: false
- /stylehacks@5.1.1(postcss@8.4.35):
+ /stylehacks@5.1.1(postcss@8.4.36):
resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==}
engines: {node: ^10 || ^12 || >=14.0}
peerDependencies:
postcss: ^8.2.15
dependencies:
browserslist: 4.23.0
- postcss: 8.4.35
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-selector-parser: 6.0.16
dev: true
/stylis@4.3.1:
@@ -25078,17 +24681,6 @@ packages:
resolution: {integrity: sha512-jQG0cRgJNMZ7aCoiFofnoojeSaa/+KgWaDlfgs8QN+BXoGMpxeMVY5OEnjq4OlNvF3yjftO8c9GRAgcHlO+u7A==}
dev: false
- /swc-loader@0.2.6(@swc/core@1.4.5)(webpack@5.90.2):
- resolution: {integrity: sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==}
- peerDependencies:
- '@swc/core': ^1.2.147
- webpack: '>=2'
- dependencies:
- '@swc/core': 1.4.5
- '@swc/counter': 0.1.3
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
- dev: true
-
/symbol-observable@4.0.0:
resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==}
engines: {node: '>=0.10'}
@@ -25145,8 +24737,8 @@ packages:
tslib: 2.6.2
dev: true
- /tailwind-merge@2.2.1:
- resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==}
+ /tailwind-merge@2.2.2:
+ resolution: {integrity: sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==}
dependencies:
'@babel/runtime': 7.24.0
dev: false
@@ -25187,12 +24779,12 @@ packages:
normalize-path: 3.0.0
object-hash: 3.0.0
picocolors: 1.0.0
- postcss: 8.4.35
- postcss-import: 15.1.0(postcss@8.4.35)
- postcss-js: 4.0.1(postcss@8.4.35)
- postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2)
- postcss-nested: 6.0.1(postcss@8.4.35)
- postcss-selector-parser: 6.0.15
+ postcss: 8.4.36
+ postcss-import: 15.1.0(postcss@8.4.36)
+ postcss-js: 4.0.1(postcss@8.4.36)
+ postcss-load-config: 4.0.2(postcss@8.4.36)(ts-node@10.9.2)
+ postcss-nested: 6.0.1(postcss@8.4.36)
+ postcss-selector-parser: 6.0.16
resolve: 1.22.8
sucrase: 3.35.0
transitivePeerDependencies:
@@ -25262,6 +24854,22 @@ packages:
memoizerific: 1.11.3
dev: true
+ /temp-dir@2.0.0:
+ resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /tempy@1.0.1:
+ resolution: {integrity: sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==}
+ engines: {node: '>=10'}
+ dependencies:
+ del: 6.1.1
+ is-stream: 2.0.1
+ temp-dir: 2.0.0
+ type-fest: 0.16.0
+ unique-string: 2.0.0
+ dev: true
+
/term-size@2.2.1:
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
engines: {node: '>=8'}
@@ -25285,7 +24893,7 @@ packages:
worker-farm: 1.7.0
dev: true
- /terser-webpack-plugin@5.3.10(@swc/core@1.4.5)(esbuild@0.18.20)(webpack@5.90.2):
+ /terser-webpack-plugin@5.3.10(@swc/core@1.4.8)(webpack@5.90.1):
resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -25302,16 +24910,15 @@ packages:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- '@swc/core': 1.4.5
- esbuild: 0.18.20
+ '@swc/core': 1.4.8
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.2
- terser: 5.29.1
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ terser: 5.29.2
+ webpack: 5.90.1(@swc/core@1.4.8)
dev: true
- /terser-webpack-plugin@5.3.10(@swc/core@1.4.5)(webpack@5.90.1):
+ /terser-webpack-plugin@5.3.10(@swc/core@1.4.8)(webpack@5.90.2):
resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -25328,15 +24935,15 @@ packages:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- '@swc/core': 1.4.5
+ '@swc/core': 1.4.8
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.2
- terser: 5.29.1
- webpack: 5.90.1(@swc/core@1.4.5)
+ terser: 5.29.2
+ webpack: 5.90.2(@swc/core@1.4.8)
dev: true
- /terser-webpack-plugin@5.3.10(@swc/core@1.4.5)(webpack@5.90.2):
+ /terser-webpack-plugin@5.3.10(esbuild@0.20.2)(webpack@5.90.2):
resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==}
engines: {node: '>= 10.13.0'}
peerDependencies:
@@ -25353,12 +24960,12 @@ packages:
optional: true
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- '@swc/core': 1.4.5
+ esbuild: 0.20.2
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.2
- terser: 5.29.1
- webpack: 5.90.2(@swc/core@1.4.5)
+ terser: 5.29.2
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/terser@4.8.1:
@@ -25372,12 +24979,12 @@ packages:
source-map-support: 0.5.21
dev: true
- /terser@5.29.1:
- resolution: {integrity: sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==}
+ /terser@5.29.2:
+ resolution: {integrity: sha512-ZiGkhUBIM+7LwkNjXYJq8svgkd+QK3UUr0wJqY4MieaezBSAIPgbSPZyIx0idM6XWK5CMzSWa8MJIzmRcB8Caw==}
engines: {node: '>=10'}
hasBin: true
dependencies:
- '@jridgewell/source-map': 0.3.5
+ '@jridgewell/source-map': 0.3.6
acorn: 8.11.3
commander: 2.20.3
source-map-support: 0.5.21
@@ -25500,10 +25107,6 @@ packages:
os-tmpdir: 1.0.2
dev: true
- /tmpl@1.0.5:
- resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
- dev: true
-
/to-arraybuffer@1.0.1:
resolution: {integrity: sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==}
dev: true
@@ -25612,8 +25215,8 @@ packages:
/trough@2.2.0:
resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
- /ts-api-utils@1.2.1(typescript@5.4.2):
- resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==}
+ /ts-api-utils@1.3.0(typescript@5.4.2):
+ resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==}
engines: {node: '>=16'}
peerDependencies:
typescript: '>=4.2.0'
@@ -25658,12 +25261,12 @@ packages:
webpack: ^5.0.0
dependencies:
chalk: 4.1.2
- enhanced-resolve: 5.15.1
+ enhanced-resolve: 5.16.0
micromatch: 4.0.5
semver: 7.6.0
source-map: 0.7.4
typescript: 5.4.2
- webpack: 5.90.2(@swc/core@1.4.5)
+ webpack: 5.90.2(@swc/core@1.4.8)
dev: true
/ts-mixer@6.0.4:
@@ -25677,7 +25280,7 @@ packages:
code-block-writer: 12.0.0
dev: true
- /ts-node@10.9.2(@swc/core@1.4.5)(@types/node@20.9.0)(typescript@5.4.2):
+ /ts-node@10.9.2(@swc/core@1.4.8)(@types/node@20.9.0)(typescript@5.4.2):
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
peerDependencies:
@@ -25692,7 +25295,7 @@ packages:
optional: true
dependencies:
'@cspotcode/source-map-support': 0.8.1
- '@swc/core': 1.4.5
+ '@swc/core': 1.4.8
'@tsconfig/node10': 1.0.9
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
@@ -25712,8 +25315,8 @@ packages:
resolution: {integrity: sha512-aafbuAQOTEeWmA7wtcL94w6I89EgLD7F+IlWkr596wYxeb0oveWDO5dQpv85YP0CGbxXT/qXBIeV6IYLcoZ2uA==}
dev: false
- /tsconfck@3.0.2(typescript@5.4.2):
- resolution: {integrity: sha512-6lWtFjwuhS3XI4HsX4Zg0izOI3FU/AI9EGVlPEUMDIhvLPMD4wkiof0WCoDgW7qY+Dy198g4d9miAqUHWHFH6Q==}
+ /tsconfck@3.0.3(typescript@5.4.2):
+ resolution: {integrity: sha512-4t0noZX9t6GcPTfBAbIbbIU4pfpCwh0ueq3S4O/5qXI1VwK1outmxhe9dOiEWqMz3MW2LKgDTpqWV+37IWuVbA==}
engines: {node: ^18 || >=20}
hasBin: true
peerDependencies:
@@ -25730,7 +25333,7 @@ packages:
engines: {node: '>=10.13.0'}
dependencies:
chalk: 4.1.2
- enhanced-resolve: 5.15.1
+ enhanced-resolve: 5.16.0
tsconfig-paths: 4.2.0
dev: true
@@ -25753,7 +25356,6 @@ packages:
/tslib@1.14.1:
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
- dev: false
/tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
@@ -25831,6 +25433,11 @@ packages:
engines: {node: '>=10'}
dev: true
+ /type-fest@0.16.0:
+ resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
+ engines: {node: '>=10'}
+ dev: true
+
/type-fest@0.20.2:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
@@ -25865,8 +25472,8 @@ packages:
engines: {node: '>=14.16'}
dev: true
- /type-fest@4.11.1:
- resolution: {integrity: sha512-MFMf6VkEVZAETidGGSYW2B1MjXbGX+sWIywn2QPEaJ3j08V+MwVRHMXtf2noB8ENJaD0LIun9wh5Z6OPNf1QzQ==}
+ /type-fest@4.12.0:
+ resolution: {integrity: sha512-5Y2/pp2wtJk8o08G0CMkuFPCO354FGwk/vbidxrdhRGZfd0tFnb4Qb8anp9XxXriwBgVPjdWbKpGl4J9lJY2jQ==}
engines: {node: '>=16'}
dev: false
@@ -25941,8 +25548,8 @@ packages:
resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
dev: false
- /ufo@1.4.0:
- resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==}
+ /ufo@1.5.2:
+ resolution: {integrity: sha512-eiutMaL0J2MKdhcOM1tUy13pIrYnyR87fEd8STJQFrrAwImwvlXkxlZEjaKah8r2viPohld08lt73QfLG1NxMg==}
dev: true
/uglify-js@3.17.4:
@@ -25957,6 +25564,10 @@ packages:
random-bytes: 1.0.0
dev: false
+ /uid2@0.0.4:
+ resolution: {integrity: sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==}
+ dev: false
+
/uid@2.0.2:
resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==}
engines: {node: '>=8'}
@@ -26077,16 +25688,19 @@ packages:
dependencies:
imurmurhash: 0.1.4
+ /unique-string@2.0.0:
+ resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
+ engines: {node: '>=8'}
+ dependencies:
+ crypto-random-string: 2.0.0
+ dev: true
+
/unist-util-inspect@8.0.0:
resolution: {integrity: sha512-/3Wn/wU6/H6UEo4FoYUeo8KUePN8ERiZpQYFWYoihOsr1DoDuv80PeB0hobVZyYSvALa2e556bG1A1/AbwU4yg==}
dependencies:
'@types/unist': 3.0.2
dev: true
- /unist-util-is@4.1.0:
- resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==}
- dev: true
-
/unist-util-is@6.0.0:
resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
dependencies:
@@ -26121,27 +25735,12 @@ packages:
dependencies:
'@types/unist': 3.0.2
- /unist-util-visit-parents@3.1.1:
- resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==}
- dependencies:
- '@types/unist': 2.0.10
- unist-util-is: 4.1.0
- dev: true
-
/unist-util-visit-parents@6.0.1:
resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
dependencies:
'@types/unist': 3.0.2
unist-util-is: 6.0.0
- /unist-util-visit@2.0.3:
- resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==}
- dependencies:
- '@types/unist': 2.0.10
- unist-util-is: 4.1.0
- unist-util-visit-parents: 3.1.1
- dev: true
-
/unist-util-visit@5.0.0:
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
dependencies:
@@ -26162,21 +25761,21 @@ packages:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
- /unplugin-swc@1.4.4(@swc/core@1.4.5):
+ /unplugin-swc@1.4.4(@swc/core@1.4.8):
resolution: {integrity: sha512-S2mgLIQVNR1+UGIk379/wD3tmkTJfm9QJFyZgXutMDNsSJrcPNJUdSXUNGE/+1Zde9i/I0r0BvDqxGgTkg+eJQ==}
peerDependencies:
'@swc/core': ^1.2.108
dependencies:
- '@rollup/pluginutils': 5.1.0(rollup@2.78.0)
- '@swc/core': 1.4.5
+ '@rollup/pluginutils': 5.1.0(rollup@2.79.1)
+ '@swc/core': 1.4.8
load-tsconfig: 0.2.5
- unplugin: 1.8.3
+ unplugin: 1.10.0
transitivePeerDependencies:
- rollup
dev: true
- /unplugin@1.8.3:
- resolution: {integrity: sha512-ZlLteXGDcyJgsbN2g4sZ3Dw6fpX1O5rjgeaA5MmQhhA2YxnTxsh43f8nDQgFOzcir0iv8GYMjtCV8MtyNnrhEg==}
+ /unplugin@1.10.0:
+ resolution: {integrity: sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==}
engines: {node: '>=14.0.0'}
dependencies:
acorn: 8.11.3
@@ -26244,6 +25843,7 @@ packages:
'@types/react': 18.2.64
react: 18.2.0
tslib: 2.6.2
+ dev: false
/use-composed-ref@1.3.0(react@18.2.0):
resolution: {integrity: sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==}
@@ -26289,6 +25889,7 @@ packages:
'@juggle/resize-observer': 3.4.0
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
+ dev: false
/use-sidecar@1.1.2(@types/react@18.2.64)(react@18.2.0):
resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==}
@@ -26304,6 +25905,7 @@ packages:
detect-node-es: 1.1.0
react: 18.2.0
tslib: 2.6.2
+ dev: false
/use-sync-external-store@1.2.0(react@18.2.0):
resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==}
@@ -26340,7 +25942,7 @@ packages:
is-arguments: 1.1.1
is-generator-function: 1.0.10
is-typed-array: 1.1.13
- which-typed-array: 1.1.14
+ which-typed-array: 1.1.15
/utila@0.4.0:
resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==}
@@ -26368,6 +25970,15 @@ packages:
/v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+ /v8-to-istanbul@9.2.0:
+ resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==}
+ engines: {node: '>=10.12.0'}
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.25
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+ dev: true
+
/valid-data-url@3.0.1:
resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==}
engines: {node: '>=10'}
@@ -26428,8 +26039,8 @@ packages:
unist-util-stringify-position: 4.0.0
vfile-message: 4.0.2
- /victory-vendor@36.9.1:
- resolution: {integrity: sha512-+pZIP+U3pEJdDCeFmsXwHzV7vNHQC/eIbHklfe2ZCZqayYRH7lQbHcVgsJ0XOOv27hWs4jH4MONgXxHMObTMSA==}
+ /victory-vendor@36.9.2:
+ resolution: {integrity: sha512-PnpQQMuxlwYdocC8fIJqVXvkeViHYzotI+NJrCuav0ZYFoq912ZHBk3mCeuj+5/VpodOjPe1z0Fk2ihgzlXqjQ==}
dependencies:
'@types/d3-array': 3.2.1
'@types/d3-ease': 3.0.2
@@ -26447,8 +26058,8 @@ packages:
d3-timer: 3.0.1
dev: false
- /vite-node@1.3.1(@types/node@20.9.0):
- resolution: {integrity: sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==}
+ /vite-node@1.4.0(@types/node@20.9.0):
+ resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
dependencies:
@@ -26456,7 +26067,7 @@ packages:
debug: 4.3.4
pathe: 1.1.2
picocolors: 1.0.0
- vite: 5.1.5(@types/node@20.9.0)
+ vite: 5.1.6(@types/node@20.9.0)
transitivePeerDependencies:
- '@types/node'
- less
@@ -26468,7 +26079,7 @@ packages:
- terser
dev: true
- /vite-plugin-svgr@4.2.0(rollup@2.79.1)(typescript@5.4.2)(vite@5.1.5):
+ /vite-plugin-svgr@4.2.0(rollup@2.79.1)(typescript@5.4.2)(vite@5.1.6):
resolution: {integrity: sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==}
peerDependencies:
vite: ^2.6.0 || 3 || 4 || 5
@@ -26476,30 +26087,15 @@ packages:
'@rollup/pluginutils': 5.1.0(rollup@2.79.1)
'@svgr/core': 8.1.0(typescript@5.4.2)
'@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0)
- vite: 5.1.5(@types/node@20.9.0)
- transitivePeerDependencies:
- - rollup
- - supports-color
- - typescript
- dev: true
-
- /vite-plugin-svgr@4.2.0(typescript@5.4.2)(vite@5.1.5):
- resolution: {integrity: sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==}
- peerDependencies:
- vite: ^2.6.0 || 3 || 4 || 5
- dependencies:
- '@rollup/pluginutils': 5.1.0(rollup@2.78.0)
- '@svgr/core': 8.1.0(typescript@5.4.2)
- '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0)
- vite: 5.1.5(@types/node@20.9.0)
+ vite: 5.1.6(@types/node@20.9.0)
transitivePeerDependencies:
- rollup
- supports-color
- typescript
dev: true
- /vite-tsconfig-paths@4.3.1(typescript@5.4.2)(vite@5.1.5):
- resolution: {integrity: sha512-cfgJwcGOsIxXOLU/nELPny2/LUD/lcf1IbfyeKTv2bsupVbTH/xpFtdQlBmIP1GEK2CjjLxYhFfB+QODFAx5aw==}
+ /vite-tsconfig-paths@4.3.2(typescript@5.4.2)(vite@5.1.6):
+ resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==}
peerDependencies:
vite: '*'
peerDependenciesMeta:
@@ -26508,15 +26104,15 @@ packages:
dependencies:
debug: 4.3.4
globrex: 0.1.2
- tsconfck: 3.0.2(typescript@5.4.2)
- vite: 5.1.5(@types/node@20.9.0)
+ tsconfck: 3.0.3(typescript@5.4.2)
+ vite: 5.1.6(@types/node@20.9.0)
transitivePeerDependencies:
- supports-color
- typescript
dev: true
- /vite@5.1.5(@types/node@20.9.0):
- resolution: {integrity: sha512-BdN1xh0Of/oQafhU+FvopafUp6WaYenLU/NFoL5WyJL++GxkNfieKzBhM24H3HVsPQrlAqB7iJYTHabzaRed5Q==}
+ /vite@5.1.6(@types/node@20.9.0):
+ resolution: {integrity: sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
@@ -26545,13 +26141,13 @@ packages:
dependencies:
'@types/node': 20.9.0
esbuild: 0.19.12
- postcss: 8.4.35
- rollup: 4.12.1
+ postcss: 8.4.36
+ rollup: 4.13.0
optionalDependencies:
fsevents: 2.3.3
dev: true
- /vitest-mock-extended@1.3.1(typescript@5.4.2)(vitest@1.3.1):
+ /vitest-mock-extended@1.3.1(typescript@5.4.2)(vitest@1.4.0):
resolution: {integrity: sha512-OpghYjh4BDuQ/Mzs3lFMQ1QRk9D8/2O9T47MLUA5eLn7K4RWIy+MfIivYOWEyxjTENjsBnzgMihDjyNalN/K0Q==}
peerDependencies:
typescript: 3.x || 4.x || 5.x
@@ -26559,18 +26155,18 @@ packages:
dependencies:
ts-essentials: 9.4.1(typescript@5.4.2)
typescript: 5.4.2
- vitest: 1.3.1(@types/node@20.9.0)(happy-dom@13.6.2)
+ vitest: 1.4.0(@types/node@20.9.0)(happy-dom@14.0.0)
dev: true
- /vitest@1.3.1(@types/node@20.9.0)(happy-dom@13.6.2):
- resolution: {integrity: sha512-/1QJqXs8YbCrfv/GPQ05wAZf2eakUPLPa18vkJAKE7RXOKfVHqMZZ1WlTjiwl6Gcn65M5vpNUB6EFLnEdRdEXQ==}
+ /vitest@1.4.0(@types/node@20.9.0)(happy-dom@14.0.0):
+ resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==}
engines: {node: ^18.0.0 || >=20.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@types/node': ^18.0.0 || >=20.0.0
- '@vitest/browser': 1.3.1
- '@vitest/ui': 1.3.1
+ '@vitest/browser': 1.4.0
+ '@vitest/ui': 1.4.0
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -26588,16 +26184,16 @@ packages:
optional: true
dependencies:
'@types/node': 20.9.0
- '@vitest/expect': 1.3.1
- '@vitest/runner': 1.3.1
- '@vitest/snapshot': 1.3.1
- '@vitest/spy': 1.3.1
- '@vitest/utils': 1.3.1
+ '@vitest/expect': 1.4.0
+ '@vitest/runner': 1.4.0
+ '@vitest/snapshot': 1.4.0
+ '@vitest/spy': 1.4.0
+ '@vitest/utils': 1.4.0
acorn-walk: 8.3.2
chai: 4.4.1
debug: 4.3.4
execa: 8.0.1
- happy-dom: 13.6.2
+ happy-dom: 14.0.0
local-pkg: 0.5.0
magic-string: 0.30.8
pathe: 1.1.2
@@ -26606,8 +26202,8 @@ packages:
strip-literal: 2.0.0
tinybench: 2.6.0
tinypool: 0.8.2
- vite: 5.1.5(@types/node@20.9.0)
- vite-node: 1.3.1(@types/node@20.9.0)
+ vite: 5.1.6(@types/node@20.9.0)
+ vite-node: 1.4.0(@types/node@20.9.0)
why-is-node-running: 2.2.2
transitivePeerDependencies:
- less
@@ -26636,12 +26232,6 @@ packages:
resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==}
dev: true
- /walker@1.0.8:
- resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
- dependencies:
- makeerror: 1.0.12
- dev: true
-
/watchpack-chokidar2@2.0.1:
resolution: {integrity: sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==}
requiresBuild: true
@@ -26664,8 +26254,8 @@ packages:
- supports-color
dev: true
- /watchpack@2.4.0:
- resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+ /watchpack@2.4.1:
+ resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==}
engines: {node: '>=10.13.0'}
dependencies:
glob-to-regexp: 0.4.1
@@ -26753,7 +26343,7 @@ packages:
mime-types: 2.1.35
range-parser: 1.2.1
schema-utils: 3.3.0
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/webpack-dev-middleware@6.1.1(webpack@5.90.2):
@@ -26770,7 +26360,7 @@ packages:
mime-types: 2.1.35
range-parser: 1.2.1
schema-utils: 4.2.0
- webpack: 5.90.2(@swc/core@1.4.5)(esbuild@0.18.20)
+ webpack: 5.90.2(esbuild@0.20.2)
dev: true
/webpack-hot-middleware@2.26.1:
@@ -26849,7 +26439,7 @@ packages:
- supports-color
dev: true
- /webpack@5.90.1(@swc/core@1.4.5):
+ /webpack@5.90.1(@swc/core@1.4.8):
resolution: {integrity: sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==}
engines: {node: '>=10.13.0'}
hasBin: true
@@ -26861,15 +26451,15 @@ packages:
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.5
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/wasm-edit': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/wasm-edit': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
acorn: 8.11.3
acorn-import-assertions: 1.9.0(acorn@8.11.3)
browserslist: 4.23.0
chrome-trace-event: 1.0.3
- enhanced-resolve: 5.15.1
- es-module-lexer: 1.4.1
+ enhanced-resolve: 5.16.0
+ es-module-lexer: 1.4.2
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
@@ -26880,8 +26470,8 @@ packages:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.10(@swc/core@1.4.5)(webpack@5.90.1)
- watchpack: 2.4.0
+ terser-webpack-plugin: 5.3.10(@swc/core@1.4.8)(webpack@5.90.1)
+ watchpack: 2.4.1
webpack-sources: 3.2.3
transitivePeerDependencies:
- '@swc/core'
@@ -26889,7 +26479,7 @@ packages:
- uglify-js
dev: true
- /webpack@5.90.2(@swc/core@1.4.5):
+ /webpack@5.90.2(@swc/core@1.4.8):
resolution: {integrity: sha512-ziXu8ABGr0InCMEYFnHrYweinHK2PWrMqnwdHk2oK3rRhv/1B+2FnfwYv5oD+RrknK/Pp/Hmyvu+eAsaMYhzCw==}
engines: {node: '>=10.13.0'}
hasBin: true
@@ -26901,15 +26491,15 @@ packages:
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.5
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/wasm-edit': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/wasm-edit': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
acorn: 8.11.3
acorn-import-assertions: 1.9.0(acorn@8.11.3)
browserslist: 4.23.0
chrome-trace-event: 1.0.3
- enhanced-resolve: 5.15.1
- es-module-lexer: 1.4.1
+ enhanced-resolve: 5.16.0
+ es-module-lexer: 1.4.2
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
@@ -26920,8 +26510,8 @@ packages:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.10(@swc/core@1.4.5)(webpack@5.90.2)
- watchpack: 2.4.0
+ terser-webpack-plugin: 5.3.10(@swc/core@1.4.8)(webpack@5.90.2)
+ watchpack: 2.4.1
webpack-sources: 3.2.3
transitivePeerDependencies:
- '@swc/core'
@@ -26929,7 +26519,7 @@ packages:
- uglify-js
dev: true
- /webpack@5.90.2(@swc/core@1.4.5)(esbuild@0.18.20):
+ /webpack@5.90.2(esbuild@0.20.2):
resolution: {integrity: sha512-ziXu8ABGr0InCMEYFnHrYweinHK2PWrMqnwdHk2oK3rRhv/1B+2FnfwYv5oD+RrknK/Pp/Hmyvu+eAsaMYhzCw==}
engines: {node: '>=10.13.0'}
hasBin: true
@@ -26941,15 +26531,15 @@ packages:
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.5
- '@webassemblyjs/ast': 1.11.6
- '@webassemblyjs/wasm-edit': 1.11.6
- '@webassemblyjs/wasm-parser': 1.11.6
+ '@webassemblyjs/ast': 1.12.1
+ '@webassemblyjs/wasm-edit': 1.12.1
+ '@webassemblyjs/wasm-parser': 1.12.1
acorn: 8.11.3
acorn-import-assertions: 1.9.0(acorn@8.11.3)
browserslist: 4.23.0
chrome-trace-event: 1.0.3
- enhanced-resolve: 5.15.1
- es-module-lexer: 1.4.1
+ enhanced-resolve: 5.16.0
+ es-module-lexer: 1.4.2
eslint-scope: 5.1.1
events: 3.3.0
glob-to-regexp: 0.4.1
@@ -26960,8 +26550,8 @@ packages:
neo-async: 2.6.2
schema-utils: 3.3.0
tapable: 2.2.1
- terser-webpack-plugin: 5.3.10(@swc/core@1.4.5)(esbuild@0.18.20)(webpack@5.90.2)
- watchpack: 2.4.0
+ terser-webpack-plugin: 5.3.10(esbuild@0.20.2)(webpack@5.90.2)
+ watchpack: 2.4.1
webpack-sources: 3.2.3
transitivePeerDependencies:
- '@swc/core'
@@ -27008,16 +26598,17 @@ packages:
is-weakref: 1.0.2
isarray: 2.0.5
which-boxed-primitive: 1.0.2
- which-collection: 1.0.1
- which-typed-array: 1.1.14
+ which-collection: 1.0.2
+ which-typed-array: 1.1.15
- /which-collection@1.0.1:
- resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
+ /which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
dependencies:
- is-map: 2.0.2
- is-set: 2.0.2
- is-weakmap: 2.0.1
- is-weakset: 2.0.2
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.3
/which-module@2.0.1:
resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
@@ -27031,8 +26622,8 @@ packages:
path-exists: 4.0.0
dev: true
- /which-typed-array@1.1.14:
- resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==}
+ /which-typed-array@1.1.15:
+ resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
engines: {node: '>= 0.4'}
dependencies:
available-typed-arrays: 1.0.7
@@ -27166,14 +26757,6 @@ packages:
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- /write-file-atomic@4.0.2:
- resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==}
- engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
- dependencies:
- imurmurhash: 0.1.4
- signal-exit: 3.0.7
- dev: true
-
/ws@7.5.9:
resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
engines: {node: '>=8.3.0'}
@@ -27326,7 +26909,7 @@ packages:
tslib: 2.3.0
dev: false
- /zustand@4.5.2(@types/react@18.2.64)(immer@10.0.3)(react@18.2.0):
+ /zustand@4.5.2(@types/react@18.2.64)(immer@10.0.4)(react@18.2.0):
resolution: {integrity: sha512-2cN1tPkDVkwCy5ickKrI7vijSjPksFRfqS6237NzT0vqSsztTNnQdHw9mmN7uBdk3gceVXU0a+21jFzFzAc9+g==}
engines: {node: '>=12.7.0'}
peerDependencies:
@@ -27342,7 +26925,7 @@ packages:
optional: true
dependencies:
'@types/react': 18.2.64
- immer: 10.0.3
+ immer: 10.0.4
react: 18.2.0
use-sync-external-store: 1.2.0(react@18.2.0)
dev: false
@@ -27357,12 +26940,12 @@ packages:
dependencies:
'@types/fs-extra': 11.0.4
'@types/minimist': 1.2.5
- '@types/node': 18.19.22
+ '@types/node': 18.19.25
'@types/ps-tree': 1.1.6
'@types/which': 3.0.3
chalk: 5.3.0
fs-extra: 11.2.0
- fx: 31.0.0
+ fx: 33.0.0
globby: 13.2.2
minimist: 1.2.8
node-fetch: 3.3.1
@@ -27371,3 +26954,11 @@ packages:
which: 3.0.1
yaml: 2.4.1
dev: true
+
+ '@cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz':
+ resolution: {tarball: https://cdn.sheetjs.com/xlsx-0.20.1/xlsx-0.20.1.tgz}
+ name: xlsx
+ version: 0.20.1
+ engines: {node: '>=0.8'}
+ hasBin: true
+ dev: false
diff --git a/scripts/build-image.mjs b/scripts/build-image.mjs
index 5cac894c9..28c6afe2a 100755
--- a/scripts/build-image.mjs
+++ b/scripts/build-image.mjs
@@ -19,6 +19,7 @@
*/
const env = $.env;
+let isCi = ['true', '1'].includes(env?.CI ?? '');
const getSemver = async () => {
// console.log('all environment variables: ', env);
@@ -29,6 +30,7 @@ const getSemver = async () => {
if (env.GITHUB_ACTIONS) {
// github action
+ isCi = true;
const refType = env.GITHUB_REF_TYPE;
const runNumber = env.GITHUB_RUN_NUMBER;
const sha = env.GITHUB_SHA.substring(0, 7);
@@ -47,20 +49,20 @@ const getSemver = async () => {
};
const toArray = (input, commaSplit = false, newlineSplit = false) => {
- if (input === undefined) {
- return [];
- }
- if (typeof input === 'string') {
- if (commaSplit) {
- return input.split(',').map((item) => item.trim());
- } else if (newlineSplit) {
- return input.split('\n').map((item) => item.trim());
+ if (input === undefined) return [];
+
+ const delimiter = commaSplit ? ',' : newlineSplit ? '\n' : null;
+
+ const items = Array.isArray(input) ? input : [input];
+
+ return items.flatMap((item) => {
+ if (typeof item === 'string' && delimiter) {
+ return item.split(delimiter).map((part) => part.trim());
+ } else if (typeof item === 'string') {
+ return item.trim();
}
- }
- if (Array.isArray(input)) {
- return input.map((item) => (typeof item === 'string' ? item.trim() : item));
- }
- return [input];
+ return item;
+ });
};
const toBoolean = (input) => Boolean(input);
const asyncForEach = async (array, callback) => {
@@ -75,6 +77,7 @@ const {
'cache-from': cacheFromArg,
'cache-to': cacheToArg,
tag,
+ 'tag-suffix': tagSuffix,
platforms: platformsArg,
push: pushArg,
} = argv;
@@ -107,7 +110,7 @@ if (platforms.length > 0) {
command.push('--platform', platforms.join(','));
}
await asyncForEach(tags, async (tag) => {
- command.push('--tag', tag);
+ command.push('--tag', `${tag}${tagSuffix ?? ''}`);
});
if (push) {
@@ -115,6 +118,6 @@ if (push) {
}
command.push('.');
+command.push('--progress=plain');
-console.log(command.join(' '));
await $`${command}`;
diff --git a/scripts/db-migrate.mjs b/scripts/db-migrate.mjs
index 41f9cb9b5..ab6942379 100755
--- a/scripts/db-migrate.mjs
+++ b/scripts/db-migrate.mjs
@@ -1,8 +1,11 @@
#!/usr/bin/env zx
-import { $ } from 'zx';
import { parseDsn as parse } from '@soluble/dsn-parser';
-const databaseUrl = process.env.PRISMA_DATABASE_URL;
+const env = $.env;
+let isCi = ['true', '1'].includes(env?.CI ?? '');
+
+const buildVersion = env.BUILD_VERSION;
+const databaseUrl = env.PRISMA_DATABASE_URL;
const parseDsn = (dsn) => {
const parsedDsn = parse(dsn);
@@ -26,6 +29,7 @@ const killMe = async () => {
await $`exit 0`;
};
+console.log(`DB Migrate Version: ${buildVersion}`);
await $`prisma -v`;
const { driver, host, port } = parseDsn(databaseUrl);