Compare commits
2 Commits
01c7e9118b
...
7f623d3e9f
| Author | SHA1 | Date |
|---|---|---|
|
|
7f623d3e9f | |
|
|
28481aa27c |
|
|
@ -2,6 +2,15 @@
|
|||
|
||||
本项目默认使用 `.env` 读取配置。请复制 `backend/.env.example` 到 `backend/.env` 后填写。
|
||||
|
||||
## Database Support
|
||||
- Default: PostgreSQL (DB_TYPE=postgresql)
|
||||
- Supported: MySQL (set `DB_TYPE=mysql` in `.env`)
|
||||
|
||||
## PostgreSQL
|
||||
- Version 12+
|
||||
- Default port: 5432
|
||||
- Use `backend/scripts/convert_sql.py` to convert MySQL dumps if needed.
|
||||
|
||||
## MySQL
|
||||
- 开发环境 MySQL 5.7,生产 MySQL 8.0+
|
||||
- 表字符集:`utf8mb4`,排序规则:`utf8mb4_unicode_ci`
|
||||
|
|
|
|||
|
|
@ -17,6 +17,11 @@ if config.config_file_name is not None:
|
|||
|
||||
def get_url() -> str:
|
||||
settings = get_settings()
|
||||
if settings.db_type == "postgresql":
|
||||
return (
|
||||
f"postgresql+psycopg2://{settings.db_user}:{settings.db_password}"
|
||||
f"@{settings.db_host}:{settings.db_port}/{settings.db_name}"
|
||||
)
|
||||
return (
|
||||
f"mysql+pymysql://{settings.db_user}:{settings.db_password}"
|
||||
f"@{settings.db_host}:{settings.db_port}/{settings.db_name}"
|
||||
|
|
|
|||
|
|
@ -61,17 +61,14 @@ def _get_disk_usage(path: Path) -> float:
|
|||
|
||||
@router.get("/summary", response_model=DashboardSummary)
|
||||
def get_dashboard_summary(db: Session = Depends(get_db), redis: Redis = Depends(get_redis)):
|
||||
total_users = db.query(func.count(User.user_id)).filter(User.is_deleted.is_(False)).scalar() or 0
|
||||
|
||||
now = datetime.now()
|
||||
start = datetime(now.year, now.month, now.day)
|
||||
end = start + timedelta(days=1)
|
||||
new_today = (
|
||||
db.query(func.count(User.user_id))
|
||||
.filter(User.is_deleted.is_(False), User.created_at >= start, User.created_at < end)
|
||||
.scalar()
|
||||
or 0
|
||||
)
|
||||
total_users = db.query(User).filter(User.is_deleted == 0).count()
|
||||
|
||||
# 2. 今日新增
|
||||
today_start = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0)
|
||||
new_today = db.query(User).filter(
|
||||
User.created_at >= today_start,
|
||||
User.is_deleted == 0
|
||||
).count()
|
||||
|
||||
try:
|
||||
online = len(redis.keys("auth:online:*"))
|
||||
|
|
|
|||
|
|
@ -35,11 +35,11 @@ def list_prompts(
|
|||
# 系统管理入口:仅展示系统级模板
|
||||
if not is_admin(current_user):
|
||||
raise HTTPException(status_code=403, detail="无权访问系统模板库")
|
||||
filters.append(PromptTemplate.is_system == True)
|
||||
filters.append(PromptTemplate.is_system == 1)
|
||||
else:
|
||||
# 个人管理入口:展示已发布的系统模板 + 自己的个人模板
|
||||
accessibility_filter = or_(
|
||||
and_(PromptTemplate.is_system == True, PromptTemplate.status == 1),
|
||||
and_(PromptTemplate.is_system == 1, PromptTemplate.status == 1),
|
||||
PromptTemplate.user_id == current_user.user_id
|
||||
)
|
||||
filters.append(accessibility_filter)
|
||||
|
|
@ -67,7 +67,7 @@ def list_prompts(
|
|||
out = []
|
||||
for template, is_active, user_sort_order in results:
|
||||
item = PromptTemplateOut.model_validate(template)
|
||||
item.is_active = is_active if is_active is not None else True
|
||||
item.is_active = is_active if is_active is not None else 1
|
||||
item.user_sort_order = user_sort_order if user_sort_order is not None else template.sort_order
|
||||
out.append(item)
|
||||
|
||||
|
|
@ -94,7 +94,7 @@ def create_prompt(
|
|||
item_data["user_id"] = None
|
||||
else:
|
||||
item_data["user_id"] = current_user.user_id
|
||||
item_data["is_system"] = False
|
||||
item_data["is_system"] = 0
|
||||
|
||||
item = PromptTemplate(**item_data)
|
||||
db.add(item)
|
||||
|
|
|
|||
|
|
@ -53,8 +53,11 @@ def delete_role(role_id: int, db: Session = Depends(get_db)):
|
|||
if not role:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Role not found")
|
||||
|
||||
# Check if users are assigned
|
||||
user_count = db.query(UserRole).filter(UserRole.role_id == role_id).count()
|
||||
# 检查是否有用户关联了该角色
|
||||
user_count = db.query(User).filter(
|
||||
User.role_ids.contains([role_id]),
|
||||
User.is_deleted == 0
|
||||
).count()
|
||||
if user_count > 0:
|
||||
raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Cannot delete role with assigned users")
|
||||
|
||||
|
|
@ -91,7 +94,7 @@ def get_role_users(role_id: int, db: Session = Depends(get_db)):
|
|||
users = (
|
||||
db.query(User)
|
||||
.join(UserRole, UserRole.user_id == User.user_id)
|
||||
.filter(UserRole.role_id == role_id, User.is_deleted.is_(False))
|
||||
.filter(UserRole.role_id == role_id, User.is_deleted == 0)
|
||||
.all()
|
||||
)
|
||||
return users
|
||||
|
|
@ -80,7 +80,8 @@ def upload_avatar(
|
|||
|
||||
@router.get("", response_model=list[UserOut])
|
||||
def list_users(db: Session = Depends(get_db)):
|
||||
return db.query(User).filter(User.is_deleted.is_(False)).all()
|
||||
query = db.query(User).filter(User.is_deleted == 0)
|
||||
return query.all()
|
||||
|
||||
|
||||
@router.post("", response_model=UserOut)
|
||||
|
|
@ -97,7 +98,7 @@ def create_user(payload: UserCreate, db: Session = Depends(get_db)):
|
|||
phone=payload.phone,
|
||||
password_hash=hash_password(password),
|
||||
status=payload.status,
|
||||
is_deleted=False,
|
||||
is_deleted=0,
|
||||
)
|
||||
db.add(user)
|
||||
db.flush()
|
||||
|
|
@ -112,7 +113,7 @@ def create_user(payload: UserCreate, db: Session = Depends(get_db)):
|
|||
|
||||
@router.put("/{user_id}", response_model=UserOut)
|
||||
def update_user(user_id: int, payload: UserUpdate, db: Session = Depends(get_db)):
|
||||
user = db.query(User).filter(User.user_id == user_id, User.is_deleted.is_(False)).first()
|
||||
user = db.query(User).filter(User.user_id == user_id, User.is_deleted == 0).first()
|
||||
if not user:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
|
||||
|
||||
|
|
@ -137,7 +138,7 @@ def update_user(user_id: int, payload: UserUpdate, db: Session = Depends(get_db)
|
|||
|
||||
@router.delete("/{user_id}")
|
||||
def delete_user(user_id: int, db: Session = Depends(get_db)):
|
||||
user = db.query(User).filter(User.user_id == user_id, User.is_deleted.is_(False)).first()
|
||||
user = db.query(User).filter(User.user_id == user_id, User.is_deleted == 0).first()
|
||||
if not user:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
|
||||
user.is_deleted = True
|
||||
|
|
@ -167,7 +168,7 @@ def update_user_roles(user_id: int, role_ids: list[int], db: Session = Depends(g
|
|||
|
||||
@router.post("/{user_id}/reset-password")
|
||||
def reset_password(user_id: int, password: str, db: Session = Depends(get_db)):
|
||||
user = db.query(User).filter(User.user_id == user_id, User.is_deleted.is_(False)).first()
|
||||
user = db.query(User).filter(User.user_id == user_id, User.is_deleted == 0).first()
|
||||
if not user:
|
||||
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
|
||||
user.password_hash = hash_password(password)
|
||||
|
|
|
|||
|
|
@ -13,10 +13,11 @@ class Settings(BaseSettings):
|
|||
api_v1_prefix: str = "/api/v1"
|
||||
|
||||
# Database
|
||||
db_type: str = "postgresql" # mysql or postgresql
|
||||
db_host: str = "127.0.0.1"
|
||||
db_port: int = 3306
|
||||
db_user: str = "root"
|
||||
db_password: str = ""
|
||||
db_port: int = 5432
|
||||
db_user: str = "postgres"
|
||||
db_password: str = "postgres"
|
||||
db_name: str = "nex_basse"
|
||||
db_echo: bool = False
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@ settings = get_settings()
|
|||
|
||||
|
||||
def build_db_url() -> str:
|
||||
if settings.db_type == "postgresql":
|
||||
return (
|
||||
f"postgresql+psycopg2://{settings.db_user}:{settings.db_password}"
|
||||
f"@{settings.db_host}:{settings.db_port}/{settings.db_name}"
|
||||
)
|
||||
return (
|
||||
f"mysql+pymysql://{settings.db_user}:{settings.db_password}"
|
||||
f"@{settings.db_host}:{settings.db_port}/{settings.db_name}"
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ def get_current_user(
|
|||
redis.setex(online_key, found_ttl, "1")
|
||||
else:
|
||||
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Session expired")
|
||||
user = db.query(User).filter(User.user_id == int(user_id), User.is_deleted.is_(False)).first()
|
||||
user = db.query(User).filter(User.user_id == int(user_id), User.is_deleted == 0).first()
|
||||
if not user or user.status != int(StatusEnum.ENABLED):
|
||||
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="User disabled")
|
||||
|
||||
|
|
|
|||
|
|
@ -43,5 +43,5 @@ if __name__ == "__main__":
|
|||
import uvicorn
|
||||
# When running as 'python app/main.py', the app is in the current module's 'app' variable,
|
||||
# but uvicorn.run("app.main:app") is better for reload support.
|
||||
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)
|
||||
uvicorn.run("app.main:app", host="0.0.0.0", port=8001, reload=True)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from sqlalchemy import String, Integer, Boolean, JSON
|
||||
from sqlalchemy import String, Integer, SmallInteger, JSON
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from .base import Base, TimestampMixin, MYSQL_TABLE_ARGS
|
||||
|
||||
|
|
@ -15,5 +15,6 @@ class AIModel(Base, TimestampMixin):
|
|||
base_url: Mapped[str | None] = mapped_column(String(255))
|
||||
api_path: Mapped[str | None] = mapped_column(String(100))
|
||||
config: Mapped[dict | None] = mapped_column(JSON)
|
||||
is_default: Mapped[bool] = mapped_column(Boolean, default=False)
|
||||
# Changed Boolean to SmallInteger
|
||||
is_default: Mapped[int] = mapped_column(SmallInteger, default=0)
|
||||
status: Mapped[int] = mapped_column(Integer, default=1)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from sqlalchemy import String, Integer, Text, Boolean
|
||||
from sqlalchemy import String, Integer, Text, SmallInteger
|
||||
from sqlalchemy.orm import Mapped, mapped_column
|
||||
from sqlalchemy import Enum, UniqueConstraint
|
||||
from .base import Base, TimestampMixin, MYSQL_TABLE_ARGS
|
||||
|
|
@ -21,5 +21,6 @@ class SystemParam(Base, TimestampMixin):
|
|||
nullable=False,
|
||||
)
|
||||
status: Mapped[int] = mapped_column(Integer, default=StatusEnum.ENABLED, nullable=False)
|
||||
is_system: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
|
||||
# Changed Boolean to SmallInteger
|
||||
is_system: Mapped[int] = mapped_column(SmallInteger, default=0, nullable=False)
|
||||
description: Mapped[str | None] = mapped_column(Text)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from sqlalchemy import String, Integer, Boolean, Text
|
||||
from sqlalchemy import String, Integer, SmallInteger, Text
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from sqlalchemy import Enum, JSON
|
||||
from .base import Base, TimestampMixin, MYSQL_TABLE_ARGS
|
||||
|
|
@ -21,7 +21,7 @@ class Permission(Base, TimestampMixin):
|
|||
path: Mapped[str | None] = mapped_column(String(255))
|
||||
icon: Mapped[str | None] = mapped_column(String(100))
|
||||
sort_order: Mapped[int] = mapped_column(Integer, default=0, nullable=False)
|
||||
is_visible: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False)
|
||||
is_visible: Mapped[int] = mapped_column(SmallInteger, default=1, nullable=False)
|
||||
status: Mapped[int] = mapped_column(Integer, default=StatusEnum.ENABLED, nullable=False)
|
||||
description: Mapped[str | None] = mapped_column(Text)
|
||||
meta: Mapped[dict | None] = mapped_column(JSON)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from datetime import datetime
|
||||
from sqlalchemy import String, Integer, Boolean, Text, ForeignKey, UniqueConstraint, DateTime
|
||||
from sqlalchemy import String, Integer, SmallInteger, Text, ForeignKey, UniqueConstraint, DateTime
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from .base import Base, TimestampMixin, MYSQL_TABLE_ARGS
|
||||
|
||||
|
|
@ -14,10 +14,11 @@ class PromptTemplate(Base, TimestampMixin):
|
|||
content: Mapped[str] = mapped_column(Text, nullable=False)
|
||||
description: Mapped[str | None] = mapped_column(String(255))
|
||||
user_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("sys_user.user_id", ondelete="SET NULL"), index=True)
|
||||
is_system: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
|
||||
# Changed Boolean to SmallInteger
|
||||
is_system: Mapped[int] = mapped_column(SmallInteger, default=0, nullable=False)
|
||||
status: Mapped[int] = mapped_column(Integer, default=1, nullable=False)
|
||||
sort_order: Mapped[int] = mapped_column(Integer, default=0, nullable=False)
|
||||
|
||||
|
||||
user_configs = relationship("UserPromptConfig", back_populates="template", cascade="all, delete-orphan")
|
||||
|
||||
|
||||
|
|
@ -31,7 +32,8 @@ class UserPromptConfig(Base, TimestampMixin):
|
|||
id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
|
||||
user_id: Mapped[int] = mapped_column(Integer, ForeignKey("sys_user.user_id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
template_id: Mapped[int] = mapped_column(Integer, ForeignKey("biz_prompt_template.id", ondelete="CASCADE"), nullable=False, index=True)
|
||||
is_active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False)
|
||||
# Changed Boolean to SmallInteger
|
||||
is_active: Mapped[int] = mapped_column(SmallInteger, default=1, nullable=False)
|
||||
user_sort_order: Mapped[int] = mapped_column(Integer, default=0, nullable=False)
|
||||
|
||||
template = relationship("PromptTemplate", back_populates="user_configs")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
from sqlalchemy import String, Boolean, Integer
|
||||
from sqlalchemy import String, Integer, SmallInteger
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from .base import Base, TimestampMixin, MYSQL_TABLE_ARGS
|
||||
from .enums import StatusEnum
|
||||
|
|
@ -16,6 +16,7 @@ class User(Base, TimestampMixin):
|
|||
password_hash: Mapped[str] = mapped_column(String(255), nullable=False)
|
||||
avatar: Mapped[str | None] = mapped_column(String(255))
|
||||
status: Mapped[int] = mapped_column(Integer, default=StatusEnum.ENABLED, nullable=False)
|
||||
is_deleted: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False)
|
||||
# Changed Boolean to SmallInteger for compatibility with existing data (0/1)
|
||||
is_deleted: Mapped[int] = mapped_column(SmallInteger, default=0, nullable=False)
|
||||
|
||||
roles = relationship("UserRole", back_populates="user")
|
||||
|
|
|
|||
|
|
@ -13,11 +13,11 @@ settings = get_settings()
|
|||
|
||||
|
||||
def authenticate_user(db: Session, username: str, password: str) -> User | None:
|
||||
user = (
|
||||
db.query(User)
|
||||
.filter(User.username == username, User.status == int(StatusEnum.ENABLED), User.is_deleted.is_(False))
|
||||
.first()
|
||||
)
|
||||
user = db.query(User).filter(
|
||||
User.username == username,
|
||||
User.is_deleted == 0,
|
||||
User.status == 1
|
||||
).first()
|
||||
if not user:
|
||||
return None
|
||||
if not verify_password(password, user.password_hash):
|
||||
|
|
@ -61,7 +61,7 @@ def refresh_access_token(db: Session, redis: Redis, refresh_token: str) -> tuple
|
|||
if not user_id:
|
||||
raise ValueError("Refresh token expired")
|
||||
|
||||
user = db.query(User).filter(User.user_id == int(user_id), User.is_deleted.is_(False)).first()
|
||||
user = db.query(User).filter(User.user_id == int(user_id), User.is_deleted == 0).first()
|
||||
if not user or user.status != int(StatusEnum.ENABLED):
|
||||
raise ValueError("User not found")
|
||||
|
||||
|
|
|
|||
|
|
@ -11,3 +11,6 @@ python-jose[cryptography]==3.3.0
|
|||
redis==5.1.1
|
||||
pymysql==1.1.1
|
||||
psutil==5.9.8
|
||||
psycopg2-binary==2.9.9
|
||||
python-multipart
|
||||
httpx
|
||||
|
|
|
|||
|
|
@ -0,0 +1,176 @@
|
|||
import re
|
||||
import sys
|
||||
|
||||
def convert_mysql_to_pg(input_file, output_file):
|
||||
with open(input_file, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# 1. Pre-process: Remove comments and basic cleanup
|
||||
lines = content.splitlines()
|
||||
filtered_lines = []
|
||||
|
||||
for line in lines:
|
||||
stripped = line.strip()
|
||||
if stripped.startswith('/*') or stripped.startswith('--') or stripped == '':
|
||||
continue
|
||||
if stripped.startswith('SET ') or stripped.startswith('LOCK TABLES') or stripped.startswith('UNLOCK TABLES'):
|
||||
continue
|
||||
|
||||
filtered_lines.append(line)
|
||||
|
||||
content = '\n'.join(filtered_lines)
|
||||
|
||||
# 2. Global replacements (safe ones)
|
||||
# Backticks to double quotes
|
||||
content = content.replace('`', '"')
|
||||
|
||||
# 3. Line-by-line processing for schema definitions
|
||||
lines = content.splitlines()
|
||||
final_lines = []
|
||||
|
||||
current_table = None
|
||||
deferred_indexes = []
|
||||
deferred_fks = []
|
||||
|
||||
for line in lines:
|
||||
stripped = line.strip()
|
||||
|
||||
# Track current table
|
||||
table_match = re.match(r'CREATE TABLE "(\w+)"', stripped)
|
||||
if table_match:
|
||||
current_table = table_match.group(1)
|
||||
|
||||
# Identify if this line is likely a column definition
|
||||
# It should start with whitespace and a quoted identifier
|
||||
# And NOT be an INSERT statement
|
||||
is_column_def = stripped.startswith('"') and 'INSERT INTO' not in line
|
||||
|
||||
if is_column_def:
|
||||
# Data types
|
||||
# tinyint(1) -> SMALLINT
|
||||
line = re.sub(r'tinyint\(1\)', 'SMALLINT', line, flags=re.IGNORECASE)
|
||||
# tinyint -> SMALLINT (catch-all for other widths or no width)
|
||||
line = re.sub(r'\btinyint(\(\d+\))?', 'SMALLINT', line, flags=re.IGNORECASE)
|
||||
|
||||
line = re.sub(r'int\(\d+\)', 'INTEGER', line, flags=re.IGNORECASE)
|
||||
# Standalone int -> INTEGER (only in column defs)
|
||||
line = re.sub(r'\bint\b', 'INTEGER', line, flags=re.IGNORECASE)
|
||||
# datetime -> TIMESTAMP
|
||||
line = re.sub(r'\bdatetime\b', 'TIMESTAMP', line, flags=re.IGNORECASE)
|
||||
|
||||
# Varchar case
|
||||
line = re.sub(r'varchar\(\d+\)', lambda m: m.group(0).upper(), line, flags=re.IGNORECASE)
|
||||
|
||||
# Remove MySQL specific column attributes
|
||||
line = re.sub(r'\s+CHARACTER\s+SET\s+[\w]+', '', line, flags=re.IGNORECASE)
|
||||
line = re.sub(r'\s+COLLATE\s+[\w]+', '', line, flags=re.IGNORECASE)
|
||||
|
||||
# AUTO_INCREMENT -> SERIAL
|
||||
# Pattern: "id" INTEGER NOT NULL AUTO_INCREMENT
|
||||
# We want: "id" SERIAL
|
||||
if 'AUTO_INCREMENT' in line:
|
||||
# Handle INTEGER
|
||||
line = re.sub(r'("[\w]+")\s+INTEGER\s+NOT\s+NULL\s+AUTO_INCREMENT', r'\1 SERIAL', line, flags=re.IGNORECASE)
|
||||
# Handle BIGINT
|
||||
line = re.sub(r'("[\w]+")\s+bigint\s+NOT\s+NULL\s+AUTO_INCREMENT', r'\1 BIGSERIAL', line, flags=re.IGNORECASE)
|
||||
# Remove AUTO_INCREMENT if still present (e.g. not matched above)
|
||||
line = re.sub(r'\s+AUTO_INCREMENT', '', line, flags=re.IGNORECASE)
|
||||
|
||||
# Remove COMMENT
|
||||
line = re.sub(r"\s+COMMENT\s+'[^']*'", "", line, flags=re.IGNORECASE)
|
||||
|
||||
# Remove ON UPDATE ...
|
||||
line = re.sub(r'\s+ON\s+UPDATE\s+CURRENT_TIMESTAMP', '', line, flags=re.IGNORECASE)
|
||||
|
||||
# Handle Keys
|
||||
# PRIMARY KEY is usually fine: PRIMARY KEY ("id")
|
||||
|
||||
# UNIQUE KEY "name" (...) -> CONSTRAINT "name" UNIQUE (...)
|
||||
if 'UNIQUE KEY' in line:
|
||||
line = re.sub(r'UNIQUE KEY\s+"(\w+)"\s+(\(.*\))', r'CONSTRAINT "\1" UNIQUE \2', line, flags=re.IGNORECASE)
|
||||
|
||||
# KEY "name" (...) -> Extract to CREATE INDEX (skip PRIMARY, UNIQUE, FOREIGN)
|
||||
# MySQL: KEY "idx_name" ("col1", "col2")
|
||||
# Postgres: CREATE INDEX "idx_name" ON "table_name" ("col1", "col2");
|
||||
if re.search(r'^\s*KEY\s+"', line) and 'PRIMARY' not in line and 'UNIQUE' not in line and 'FOREIGN' not in line:
|
||||
key_match = re.search(r'^\s*KEY\s+"(\w+)"\s+(\(.*\))', line)
|
||||
if key_match and current_table:
|
||||
idx_name = key_match.group(1)
|
||||
idx_cols = key_match.group(2)
|
||||
deferred_indexes.append(f'CREATE INDEX "{idx_name}" ON "{current_table}" {idx_cols};')
|
||||
continue # Skip this line in CREATE TABLE
|
||||
else:
|
||||
# Fallback if regex fails, just comment it out to avoid syntax error
|
||||
line = "-- " + line
|
||||
|
||||
# CREATE TABLE line cleanup
|
||||
if stripped.startswith('CREATE TABLE'):
|
||||
# usually fine, but check for modifiers?
|
||||
pass
|
||||
|
||||
# Foreign Key Cleanup
|
||||
if 'FOREIGN KEY' in line:
|
||||
# Remove db.table references like "nex_docus"."users" -> "users"
|
||||
line = re.sub(r'"[\w]+"\."([\w]+)"', r'"\1"', line)
|
||||
# Fix "users" -> "sys_user" if applicable
|
||||
line = line.replace('"users"', '"sys_user"')
|
||||
|
||||
# Fix sys_user PK reference (id -> user_id)
|
||||
if 'REFERENCES "sys_user"' in line:
|
||||
line = line.replace('("id")', '("user_id")')
|
||||
|
||||
# Extract CONSTRAINT definition to defer it
|
||||
# Remove trailing comma
|
||||
constraint_def = line.strip().rstrip(',')
|
||||
if current_table:
|
||||
deferred_fks.append(f'ALTER TABLE "{current_table}" ADD {constraint_def};')
|
||||
continue # Skip adding to CREATE TABLE
|
||||
|
||||
# Remove USING BTREE
|
||||
line = re.sub(r'\s+USING\s+BTREE', '', line, flags=re.IGNORECASE)
|
||||
|
||||
# End of table definition cleanup
|
||||
if stripped.startswith(') ENGINE='):
|
||||
line = ');'
|
||||
elif stripped.startswith(') DEFAULT CHARSET='):
|
||||
line = ');'
|
||||
elif ') ENGINE=' in line:
|
||||
line = re.sub(r'\)\s*ENGINE=[^;]+;', ');', line, flags=re.IGNORECASE)
|
||||
|
||||
# Global string escaping for INSERTs
|
||||
if 'INSERT INTO' in line:
|
||||
line = line.replace(r'\"', '"')
|
||||
line = line.replace(r"\'", "''")
|
||||
|
||||
# Ensure json type is spaced (if json keyword appears)
|
||||
if 'json' in line.lower() and is_column_def:
|
||||
line = re.sub(r'\bjson\b', 'JSON', line, flags=re.IGNORECASE)
|
||||
|
||||
final_lines.append(line)
|
||||
|
||||
# Append deferred indexes
|
||||
if deferred_indexes:
|
||||
final_lines.append("\n-- Deferred Indexes")
|
||||
final_lines.extend(deferred_indexes)
|
||||
|
||||
# Append deferred FKs
|
||||
if deferred_fks:
|
||||
final_lines.append("\n-- Deferred Foreign Keys")
|
||||
final_lines.extend(deferred_fks)
|
||||
|
||||
content = '\n'.join(final_lines)
|
||||
|
||||
# Fix trailing commas before );
|
||||
# Regex to find comma followed by newline and );
|
||||
# Or just comma followed by whitespace and );
|
||||
content = re.sub(r',\s*\);', ');', content)
|
||||
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
f.write(content)
|
||||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: python convert_sql.py <input_file> <output_file>")
|
||||
sys.exit(1)
|
||||
|
||||
convert_mysql_to_pg(sys.argv[1], sys.argv[2])
|
||||
|
|
@ -1,25 +1,15 @@
|
|||
import os
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import Session
|
||||
from app.core.config import get_settings
|
||||
from app.core.security import hash_password
|
||||
from app.core.db import engine
|
||||
from app.models import User, Role, UserRole
|
||||
|
||||
|
||||
def build_db_url() -> str:
|
||||
settings = get_settings()
|
||||
return (
|
||||
f"mysql+pymysql://{settings.db_user}:{settings.db_password}"
|
||||
f"@{settings.db_host}:{settings.db_port}/{settings.db_name}"
|
||||
"?charset=utf8mb4"
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
username = os.getenv("INIT_ADMIN_USERNAME", "admin")
|
||||
password = os.getenv("INIT_ADMIN_PASSWORD", "123456")
|
||||
|
||||
engine = create_engine(build_db_url(), pool_pre_ping=True)
|
||||
with Session(engine) as db:
|
||||
role = db.query(Role).filter(Role.role_code == "admin").first()
|
||||
if not role:
|
||||
|
|
@ -36,13 +26,14 @@ def main():
|
|||
phone=None,
|
||||
password_hash=hash_password(password),
|
||||
status=1,
|
||||
is_deleted=False,
|
||||
is_deleted=0,
|
||||
)
|
||||
db.add(user)
|
||||
db.flush()
|
||||
else:
|
||||
user.password_hash = hash_password(password)
|
||||
user.status = 1
|
||||
user.is_deleted = 0
|
||||
|
||||
exist_link = db.query(UserRole).filter(UserRole.user_id == user.user_id, UserRole.role_id == role.role_id).first()
|
||||
if not exist_link:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
import sys
|
||||
import os
|
||||
|
||||
# Add backend to path
|
||||
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
||||
|
||||
from app.core.db import SessionLocal
|
||||
from app.models import Meeting, User, SummarizeTask, TranscriptTask
|
||||
from sqlalchemy import desc
|
||||
|
||||
def test_tasks():
|
||||
db = SessionLocal()
|
||||
try:
|
||||
print("Querying SummarizeTask...")
|
||||
sum_query = db.query(SummarizeTask, Meeting.title, User.username).join(
|
||||
Meeting, SummarizeTask.meeting_id == Meeting.meeting_id
|
||||
).join(
|
||||
User, Meeting.user_id == User.user_id
|
||||
)
|
||||
|
||||
results = sum_query.order_by(desc(SummarizeTask.created_at)).limit(50).all()
|
||||
print(f"Found {len(results)} summarize tasks")
|
||||
for t, m_title, username in results:
|
||||
print(f"Task: {t.task_id}, Meeting: {m_title}, User: {username}, Created: {t.created_at}")
|
||||
|
||||
print("\nQuerying TranscriptTask...")
|
||||
trans_query = db.query(TranscriptTask, Meeting.title, User.username).join(
|
||||
Meeting, TranscriptTask.meeting_id == Meeting.meeting_id
|
||||
).join(
|
||||
User, Meeting.user_id == User.user_id
|
||||
)
|
||||
|
||||
results = trans_query.order_by(desc(TranscriptTask.created_at)).limit(50).all()
|
||||
print(f"Found {len(results)} transcript tasks")
|
||||
for t, m_title, username in results:
|
||||
print(f"Task: {t.task_id}, Meeting: {m_title}, User: {username}, Created: {t.created_at}")
|
||||
|
||||
except Exception as e:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
db.close()
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_tasks()
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
|
@ -10,6 +10,7 @@
|
|||
},
|
||||
"dependencies": {
|
||||
"@ant-design/icons": "^5.5.1",
|
||||
"@uiw/react-md-editor": "^4.0.11",
|
||||
"antd": "^5.21.6",
|
||||
"antd-img-crop": "^4.29.0",
|
||||
"d3": "^7.9.0",
|
||||
|
|
@ -21,6 +22,7 @@
|
|||
"react-router-dom": "^6.27.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@rollup/rollup-linux-arm64-gnu": "^4.59.0",
|
||||
"@types/react": "^18.3.12",
|
||||
"@types/react-dom": "^18.3.1",
|
||||
"@vitejs/plugin-react": "^4.3.3",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { getAccessToken, getRefreshToken, setTokens, clearTokens } from "./auth";
|
||||
|
||||
const API_BASE = import.meta.env.VITE_API_BASE || "http://localhost:8000/api/v1";
|
||||
const API_BASE = import.meta.env.VITE_API_BASE || "http://localhost:8001/api/v1";
|
||||
|
||||
async function request<T>(path: string, options: RequestInit = {}): Promise<T> {
|
||||
const headers: Record<string, string> = {
|
||||
|
|
|
|||
|
|
@ -175,7 +175,7 @@ export default function DashboardPage() {
|
|||
|
||||
{/* Task Monitor Section */}
|
||||
<Card
|
||||
bordered={false}
|
||||
variant="borderless"
|
||||
style={{ marginTop: 24, borderRadius: '16px', boxShadow: '0 4px 20px rgba(0,0,0,0.05)' }}
|
||||
title={
|
||||
<div style={{ display: 'flex', justifyContent: 'space-between', alignItems: 'center' }}>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import React, { useState, useEffect } from 'react';
|
||||
import { Button, Card, Tag, Space, Form, Input, InputNumber, Switch, message, Select, Modal, Tooltip, Divider } from 'antd';
|
||||
import { PlusOutlined, EditOutlined, DeleteOutlined, FileTextOutlined, SearchOutlined, SaveOutlined } from '@ant-design/icons';
|
||||
import MDEditor from '@uiw/react-md-editor';
|
||||
import { api } from '../api';
|
||||
import DetailDrawer from '../components/DetailDrawer/DetailDrawer';
|
||||
import ListTable from '../components/ListTable/ListTable';
|
||||
|
|
@ -133,7 +134,7 @@ const GlobalPromptManage: React.FC = () => {
|
|||
return (
|
||||
<div className="page-wrapper" style={{ padding: '24px' }}>
|
||||
<Card
|
||||
bordered={false}
|
||||
variant="borderless"
|
||||
title={
|
||||
<Space size="large">
|
||||
<Space><FileTextOutlined style={{ color: '#1890ff' }} /><strong>系统模板库管理</strong></Space>
|
||||
|
|
@ -161,9 +162,11 @@ const GlobalPromptManage: React.FC = () => {
|
|||
<Form form={form} layout="vertical">
|
||||
<Form.Item name="name" label="模板名称" rules={[{ required: true }]}><Input /></Form.Item>
|
||||
<Form.Item name="category" label="分类" rules={[{ required: true }]}>
|
||||
<Select>{categories.map(c => <Option key={c.id} value={c.item_value}>{c.item_label}</Option>)}</Select>
|
||||
<Select>{categories.map(c => <Option key={c.item_value} value={c.item_value}>{c.item_label}</Option>)}</Select>
|
||||
</Form.Item>
|
||||
<Form.Item name="content" label="Prompt 内容" rules={[{ required: true }]}>
|
||||
<MDEditor height={400} data-color-mode="light" />
|
||||
</Form.Item>
|
||||
<Form.Item name="content" label="Prompt 内容" rules={[{ required: true }]}><Input.TextArea rows={12} /></Form.Item>
|
||||
<Form.Item name="description" label="详细描述"><Input.TextArea rows={3} /></Form.Item>
|
||||
<Divider />
|
||||
<Space size="large">
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ export default function LogManagePage() {
|
|||
description="查看系统用户的操作记录和审计日志"
|
||||
/>
|
||||
|
||||
<Card bordered={false} className="shadow-card" style={{ marginTop: 24, marginBottom: 24 }}>
|
||||
<Card variant="borderless" className="shadow-card" style={{ marginTop: 24, marginBottom: 24 }}>
|
||||
<Form form={form} layout="inline">
|
||||
<Form.Item name="username" label="用户">
|
||||
<Input placeholder="请输入用户名" />
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ const ModelManage: React.FC = () => {
|
|||
|
||||
return (
|
||||
<div className="settings-container" style={{ padding: '24px', background: '#f5f7f9', minHeight: '100vh' }}>
|
||||
<Card bordered={false} styles={{ body: { padding: 0 } }} style={{ borderRadius: '12px', overflow: 'hidden' }}>
|
||||
<Card variant="borderless" styles={{ body: { padding: 0 } }} style={{ borderRadius: '12px', overflow: 'hidden' }}>
|
||||
<Tabs
|
||||
activeKey={activeTab}
|
||||
onChange={setActiveTab}
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ const PromptManage: React.FC = () => {
|
|||
return (
|
||||
<div className="page-wrapper" style={{ padding: '24px' }}>
|
||||
<Card
|
||||
bordered={false}
|
||||
variant="borderless"
|
||||
title={
|
||||
<Space size="large">
|
||||
<Space><FileTextOutlined style={{ color: '#1890ff' }} /><strong>我的提示词库</strong></Space>
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ const TaskMonitor: React.FC = () => {
|
|||
</Space>
|
||||
</div>
|
||||
|
||||
<Card bordered={false} styles={{ body: { padding: 0 } }}>
|
||||
<Card variant="borderless" styles={{ body: { padding: 0 } }}>
|
||||
<ListTable
|
||||
columns={columns}
|
||||
dataSource={tasks}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
const API_BASE = import.meta.env.VITE_API_BASE || "http://localhost:8000/api/v1";
|
||||
const API_BASE = import.meta.env.VITE_API_BASE || "http://localhost:8001/api/v1";
|
||||
|
||||
/**
|
||||
* Resolves a backend URL.
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@
|
|||
dependencies:
|
||||
"@babel/helper-plugin-utils" "^7.27.1"
|
||||
|
||||
"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.16.7", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.5", "@babel/runtime@^7.22.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7", "@babel/runtime@^7.24.8", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0":
|
||||
"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.14.6", "@babel/runtime@^7.16.7", "@babel/runtime@^7.17.2", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.21.5", "@babel/runtime@^7.22.5", "@babel/runtime@^7.22.6", "@babel/runtime@^7.23.2", "@babel/runtime@^7.23.6", "@babel/runtime@^7.23.9", "@babel/runtime@^7.24.4", "@babel/runtime@^7.24.7", "@babel/runtime@^7.24.8", "@babel/runtime@^7.25.7", "@babel/runtime@^7.26.0":
|
||||
version "7.28.6"
|
||||
resolved "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.28.6.tgz"
|
||||
integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==
|
||||
|
|
@ -238,11 +238,6 @@
|
|||
resolved "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.7.5.tgz"
|
||||
integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==
|
||||
|
||||
"@esbuild/darwin-arm64@0.21.5":
|
||||
version "0.21.5"
|
||||
resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz"
|
||||
integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
|
||||
|
||||
"@gera2ld/jsx-dom@^2.2.2":
|
||||
version "2.2.2"
|
||||
resolved "https://registry.npmmirror.com/@gera2ld/jsx-dom/-/jsx-dom-2.2.2.tgz"
|
||||
|
|
@ -374,10 +369,20 @@
|
|||
resolved "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz"
|
||||
integrity sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==
|
||||
|
||||
"@rollup/rollup-darwin-arm64@4.57.1":
|
||||
"@rollup/rollup-linux-arm64-gnu@^4.59.0":
|
||||
version "4.59.0"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz"
|
||||
integrity sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==
|
||||
|
||||
"@rollup/rollup-linux-arm64-gnu@4.57.1":
|
||||
version "4.57.1"
|
||||
resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.57.1.tgz"
|
||||
integrity sha512-crNPrwJOrRxagUYeMn/DZwqN88SDmwaJ8Cvi/TN1HnWBU7GwknckyosC2gd0IqYRsHDEnXf328o9/HC6OkPgOg==
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.57.1.tgz"
|
||||
integrity sha512-MMtej3YHWeg/0klK2Qodf3yrNzz6CGjo2UntLvk2RSPlhzgLvYEB3frRvbEF2wRKh1Z2fDIg9KRPe1fawv7C+g==
|
||||
|
||||
"@rollup/rollup-linux-arm64-musl@4.57.1":
|
||||
version "4.57.1"
|
||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.57.1.tgz"
|
||||
integrity sha512-1a/qhaaOXhqXGpMFMET9VqwZakkljWHLmZOX48R0I/YLbhdxr1m4gtG1Hq7++VhVUmf+L3sTAf9op4JlhQ5u1Q==
|
||||
|
||||
"@types/babel__core@^7.20.5":
|
||||
version "7.20.5"
|
||||
|
|
@ -431,6 +436,13 @@
|
|||
resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz"
|
||||
integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==
|
||||
|
||||
"@types/hast@^2.0.0":
|
||||
version "2.3.10"
|
||||
resolved "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz"
|
||||
integrity sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==
|
||||
dependencies:
|
||||
"@types/unist" "^2"
|
||||
|
||||
"@types/hast@^3.0.0":
|
||||
version "3.0.4"
|
||||
resolved "https://registry.npmmirror.com/@types/hast/-/hast-3.0.4.tgz"
|
||||
|
|
@ -450,6 +462,11 @@
|
|||
resolved "https://registry.npmmirror.com/@types/ms/-/ms-2.1.0.tgz"
|
||||
integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==
|
||||
|
||||
"@types/prismjs@^1.0.0":
|
||||
version "1.26.6"
|
||||
resolved "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.6.tgz"
|
||||
integrity sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==
|
||||
|
||||
"@types/prop-types@*":
|
||||
version "15.7.15"
|
||||
resolved "https://registry.npmmirror.com/@types/prop-types/-/prop-types-15.7.15.tgz"
|
||||
|
|
@ -473,11 +490,50 @@
|
|||
resolved "https://registry.npmmirror.com/@types/unist/-/unist-3.0.3.tgz"
|
||||
integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==
|
||||
|
||||
"@types/unist@^2":
|
||||
version "2.0.11"
|
||||
resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz"
|
||||
integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
|
||||
|
||||
"@types/unist@^2.0.0":
|
||||
version "2.0.11"
|
||||
resolved "https://registry.npmmirror.com/@types/unist/-/unist-2.0.11.tgz"
|
||||
integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==
|
||||
|
||||
"@uiw/copy-to-clipboard@~1.0.12":
|
||||
version "1.0.20"
|
||||
resolved "https://registry.npmjs.org/@uiw/copy-to-clipboard/-/copy-to-clipboard-1.0.20.tgz"
|
||||
integrity sha512-IFQhS62CLNon1YgYJTEzXR2N3WVXg7V1FaBRDLMlzU6JY5X6Hr3OPAcw4WNoKcz2XcFD6XCgwEjlsmj+JA0mWA==
|
||||
|
||||
"@uiw/react-markdown-preview@^5.0.6":
|
||||
version "5.1.5"
|
||||
resolved "https://registry.npmjs.org/@uiw/react-markdown-preview/-/react-markdown-preview-5.1.5.tgz"
|
||||
integrity sha512-DNOqx1a6gJR7Btt57zpGEKTfHRlb7rWbtctMRO2f82wWcuoJsxPBrM+JWebDdOD0LfD8oe2CQvW2ICQJKHQhZg==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.17.2"
|
||||
"@uiw/copy-to-clipboard" "~1.0.12"
|
||||
react-markdown "~9.0.1"
|
||||
rehype-attr "~3.0.1"
|
||||
rehype-autolink-headings "~7.1.0"
|
||||
rehype-ignore "^2.0.0"
|
||||
rehype-prism-plus "2.0.0"
|
||||
rehype-raw "^7.0.0"
|
||||
rehype-rewrite "~4.0.0"
|
||||
rehype-slug "~6.0.0"
|
||||
remark-gfm "~4.0.0"
|
||||
remark-github-blockquote-alert "^1.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
|
||||
"@uiw/react-md-editor@^4.0.11":
|
||||
version "4.0.11"
|
||||
resolved "https://registry.npmjs.org/@uiw/react-md-editor/-/react-md-editor-4.0.11.tgz"
|
||||
integrity sha512-F0OR5O1v54EkZYvJj3ew0I7UqLiPeU34hMAY4MdXS3hI86rruYi5DHVkG/VuvLkUZW7wIETM2QFtZ459gKIjQA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.14.6"
|
||||
"@uiw/react-markdown-preview" "^5.0.6"
|
||||
rehype "~13.0.0"
|
||||
rehype-prism-plus "~2.0.0"
|
||||
|
||||
"@ungap/structured-clone@^1.0.0":
|
||||
version "1.3.0"
|
||||
resolved "https://registry.npmmirror.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz"
|
||||
|
|
@ -580,6 +636,11 @@ baseline-browser-mapping@^2.9.0:
|
|||
resolved "https://registry.npmmirror.com/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz"
|
||||
integrity sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==
|
||||
|
||||
bcp-47-match@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/bcp-47-match/-/bcp-47-match-2.0.3.tgz"
|
||||
integrity sha512-JtTezzbAibu8G0R9op9zb3vcWZd9JF6M0xOYGPn0fNCd7wOpRB1mU2mH9T8gaBGbAAyIIVgB2G7xG0GP98zMAQ==
|
||||
|
||||
boolbase@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz"
|
||||
|
|
@ -703,6 +764,11 @@ css-select@^5.1.0:
|
|||
domutils "^3.0.1"
|
||||
nth-check "^2.0.1"
|
||||
|
||||
css-selector-parser@^3.0.0:
|
||||
version "3.3.0"
|
||||
resolved "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-3.3.0.tgz"
|
||||
integrity sha512-Y2asgMGFqJKF4fq4xHDSlFYIkeVfRsm69lQC1q9kbEsH5XtnINTMrweLkjYMeaUgiXBy/uvKeO/a1JHTNnmB2g==
|
||||
|
||||
css-what@^6.1.0:
|
||||
version "6.2.2"
|
||||
resolved "https://registry.npmmirror.com/css-what/-/css-what-6.2.2.tgz"
|
||||
|
|
@ -995,6 +1061,11 @@ devlop@^1.0.0, devlop@^1.1.0:
|
|||
dependencies:
|
||||
dequal "^2.0.0"
|
||||
|
||||
direction@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/direction/-/direction-2.0.1.tgz"
|
||||
integrity sha512-9S6m9Sukh1cZNknO1CWAr2QAWsbKLafQiyM5gZ7VgXHeuaoUwffKN4q6NC4A/Mf9iiPlOXQEKW/Mv/mh9/3YFA==
|
||||
|
||||
dom-serializer@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-2.0.0.tgz"
|
||||
|
|
@ -1082,6 +1153,11 @@ escalade@^3.2.0:
|
|||
resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz"
|
||||
integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==
|
||||
|
||||
escape-string-regexp@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz"
|
||||
integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
|
||||
|
||||
estree-util-is-identifier-name@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz"
|
||||
|
|
@ -1092,16 +1168,134 @@ extend@^3.0.0:
|
|||
resolved "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz"
|
||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||
|
||||
fsevents@~2.3.2, fsevents@~2.3.3:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz"
|
||||
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
|
||||
|
||||
gensync@^1.0.0-beta.2:
|
||||
version "1.0.0-beta.2"
|
||||
resolved "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz"
|
||||
integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
|
||||
|
||||
github-slugger@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz"
|
||||
integrity sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==
|
||||
|
||||
hast-util-from-html@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz"
|
||||
integrity sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
devlop "^1.1.0"
|
||||
hast-util-from-parse5 "^8.0.0"
|
||||
parse5 "^7.0.0"
|
||||
vfile "^6.0.0"
|
||||
vfile-message "^4.0.0"
|
||||
|
||||
hast-util-from-parse5@^8.0.0:
|
||||
version "8.0.3"
|
||||
resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz"
|
||||
integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/unist" "^3.0.0"
|
||||
devlop "^1.0.0"
|
||||
hastscript "^9.0.0"
|
||||
property-information "^7.0.0"
|
||||
vfile "^6.0.0"
|
||||
vfile-location "^5.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
|
||||
hast-util-has-property@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-3.0.0.tgz"
|
||||
integrity sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
|
||||
hast-util-heading-rank@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz"
|
||||
integrity sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
|
||||
hast-util-is-element@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz"
|
||||
integrity sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
|
||||
hast-util-parse-selector@^3.0.0:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-3.1.1.tgz"
|
||||
integrity sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
|
||||
hast-util-parse-selector@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz"
|
||||
integrity sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
|
||||
hast-util-raw@^9.0.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz"
|
||||
integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/unist" "^3.0.0"
|
||||
"@ungap/structured-clone" "^1.0.0"
|
||||
hast-util-from-parse5 "^8.0.0"
|
||||
hast-util-to-parse5 "^8.0.0"
|
||||
html-void-elements "^3.0.0"
|
||||
mdast-util-to-hast "^13.0.0"
|
||||
parse5 "^7.0.0"
|
||||
unist-util-position "^5.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
vfile "^6.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
zwitch "^2.0.0"
|
||||
|
||||
hast-util-select@^6.0.0:
|
||||
version "6.0.4"
|
||||
resolved "https://registry.npmjs.org/hast-util-select/-/hast-util-select-6.0.4.tgz"
|
||||
integrity sha512-RqGS1ZgI0MwxLaKLDxjprynNzINEkRHY2i8ln4DDjgv9ZhcYVIHN9rlpiYsqtFwrgpYU361SyWDQcGNIBVu3lw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/unist" "^3.0.0"
|
||||
bcp-47-match "^2.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
css-selector-parser "^3.0.0"
|
||||
devlop "^1.0.0"
|
||||
direction "^2.0.0"
|
||||
hast-util-has-property "^3.0.0"
|
||||
hast-util-to-string "^3.0.0"
|
||||
hast-util-whitespace "^3.0.0"
|
||||
nth-check "^2.0.0"
|
||||
property-information "^7.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
zwitch "^2.0.0"
|
||||
|
||||
hast-util-to-html@^9.0.0:
|
||||
version "9.0.5"
|
||||
resolved "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz"
|
||||
integrity sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/unist" "^3.0.0"
|
||||
ccount "^2.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
hast-util-whitespace "^3.0.0"
|
||||
html-void-elements "^3.0.0"
|
||||
mdast-util-to-hast "^13.0.0"
|
||||
property-information "^7.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
stringify-entities "^4.0.0"
|
||||
zwitch "^2.0.4"
|
||||
|
||||
hast-util-to-jsx-runtime@^2.0.0:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.npmmirror.com/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz"
|
||||
|
|
@ -1123,6 +1317,26 @@ hast-util-to-jsx-runtime@^2.0.0:
|
|||
unist-util-position "^5.0.0"
|
||||
vfile-message "^4.0.0"
|
||||
|
||||
hast-util-to-parse5@^8.0.0:
|
||||
version "8.0.1"
|
||||
resolved "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.1.tgz"
|
||||
integrity sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
devlop "^1.0.0"
|
||||
property-information "^7.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
web-namespaces "^2.0.0"
|
||||
zwitch "^2.0.0"
|
||||
|
||||
hast-util-to-string@^3.0.0, hast-util-to-string@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz"
|
||||
integrity sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
|
||||
hast-util-whitespace@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmmirror.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz"
|
||||
|
|
@ -1130,6 +1344,28 @@ hast-util-whitespace@^3.0.0:
|
|||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
|
||||
hastscript@^7.0.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.npmjs.org/hastscript/-/hastscript-7.2.0.tgz"
|
||||
integrity sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
hast-util-parse-selector "^3.0.0"
|
||||
property-information "^6.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
|
||||
hastscript@^9.0.0:
|
||||
version "9.0.1"
|
||||
resolved "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz"
|
||||
integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
comma-separated-tokens "^2.0.0"
|
||||
hast-util-parse-selector "^4.0.0"
|
||||
property-information "^7.0.0"
|
||||
space-separated-tokens "^2.0.0"
|
||||
|
||||
highlight.js@^11.8.0:
|
||||
version "11.11.1"
|
||||
resolved "https://registry.npmmirror.com/highlight.js/-/highlight.js-11.11.1.tgz"
|
||||
|
|
@ -1140,6 +1376,11 @@ html-url-attributes@^3.0.0:
|
|||
resolved "https://registry.npmmirror.com/html-url-attributes/-/html-url-attributes-3.0.1.tgz"
|
||||
integrity sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==
|
||||
|
||||
html-void-elements@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz"
|
||||
integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==
|
||||
|
||||
htmlparser2@^9.1.0:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-9.1.0.tgz"
|
||||
|
|
@ -1282,6 +1523,11 @@ markdown-it@^14.1.0:
|
|||
punycode.js "^2.3.1"
|
||||
uc.micro "^2.1.0"
|
||||
|
||||
markdown-table@^3.0.0:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz"
|
||||
integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==
|
||||
|
||||
markmap-common@*:
|
||||
version "0.18.9"
|
||||
resolved "https://registry.npmmirror.com/markmap-common/-/markmap-common-0.18.9.tgz"
|
||||
|
|
@ -1326,6 +1572,16 @@ markmap-view@^0.18.12, markmap-view@0.18.12:
|
|||
"@babel/runtime" "^7.22.6"
|
||||
d3 "^7.8.5"
|
||||
|
||||
mdast-util-find-and-replace@^3.0.0:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz"
|
||||
integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
escape-string-regexp "^5.0.0"
|
||||
unist-util-is "^6.0.0"
|
||||
unist-util-visit-parents "^6.0.0"
|
||||
|
||||
mdast-util-from-markdown@^2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmmirror.com/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz"
|
||||
|
|
@ -1344,6 +1600,71 @@ mdast-util-from-markdown@^2.0.0:
|
|||
micromark-util-types "^2.0.0"
|
||||
unist-util-stringify-position "^4.0.0"
|
||||
|
||||
mdast-util-gfm-autolink-literal@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz"
|
||||
integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
ccount "^2.0.0"
|
||||
devlop "^1.0.0"
|
||||
mdast-util-find-and-replace "^3.0.0"
|
||||
micromark-util-character "^2.0.0"
|
||||
|
||||
mdast-util-gfm-footnote@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz"
|
||||
integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
devlop "^1.1.0"
|
||||
mdast-util-from-markdown "^2.0.0"
|
||||
mdast-util-to-markdown "^2.0.0"
|
||||
micromark-util-normalize-identifier "^2.0.0"
|
||||
|
||||
mdast-util-gfm-strikethrough@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz"
|
||||
integrity sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
mdast-util-from-markdown "^2.0.0"
|
||||
mdast-util-to-markdown "^2.0.0"
|
||||
|
||||
mdast-util-gfm-table@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz"
|
||||
integrity sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
devlop "^1.0.0"
|
||||
markdown-table "^3.0.0"
|
||||
mdast-util-from-markdown "^2.0.0"
|
||||
mdast-util-to-markdown "^2.0.0"
|
||||
|
||||
mdast-util-gfm-task-list-item@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz"
|
||||
integrity sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
devlop "^1.0.0"
|
||||
mdast-util-from-markdown "^2.0.0"
|
||||
mdast-util-to-markdown "^2.0.0"
|
||||
|
||||
mdast-util-gfm@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz"
|
||||
integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==
|
||||
dependencies:
|
||||
mdast-util-from-markdown "^2.0.0"
|
||||
mdast-util-gfm-autolink-literal "^2.0.0"
|
||||
mdast-util-gfm-footnote "^2.0.0"
|
||||
mdast-util-gfm-strikethrough "^2.0.0"
|
||||
mdast-util-gfm-table "^2.0.0"
|
||||
mdast-util-gfm-task-list-item "^2.0.0"
|
||||
mdast-util-to-markdown "^2.0.0"
|
||||
|
||||
mdast-util-mdx-expression@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz"
|
||||
|
|
@ -1458,6 +1779,85 @@ micromark-core-commonmark@^2.0.0:
|
|||
micromark-util-symbol "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-extension-gfm-autolink-literal@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz"
|
||||
integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==
|
||||
dependencies:
|
||||
micromark-util-character "^2.0.0"
|
||||
micromark-util-sanitize-uri "^2.0.0"
|
||||
micromark-util-symbol "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-extension-gfm-footnote@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz"
|
||||
integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==
|
||||
dependencies:
|
||||
devlop "^1.0.0"
|
||||
micromark-core-commonmark "^2.0.0"
|
||||
micromark-factory-space "^2.0.0"
|
||||
micromark-util-character "^2.0.0"
|
||||
micromark-util-normalize-identifier "^2.0.0"
|
||||
micromark-util-sanitize-uri "^2.0.0"
|
||||
micromark-util-symbol "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-extension-gfm-strikethrough@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz"
|
||||
integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==
|
||||
dependencies:
|
||||
devlop "^1.0.0"
|
||||
micromark-util-chunked "^2.0.0"
|
||||
micromark-util-classify-character "^2.0.0"
|
||||
micromark-util-resolve-all "^2.0.0"
|
||||
micromark-util-symbol "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-extension-gfm-table@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz"
|
||||
integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==
|
||||
dependencies:
|
||||
devlop "^1.0.0"
|
||||
micromark-factory-space "^2.0.0"
|
||||
micromark-util-character "^2.0.0"
|
||||
micromark-util-symbol "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-extension-gfm-tagfilter@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz"
|
||||
integrity sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==
|
||||
dependencies:
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-extension-gfm-task-list-item@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz"
|
||||
integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==
|
||||
dependencies:
|
||||
devlop "^1.0.0"
|
||||
micromark-factory-space "^2.0.0"
|
||||
micromark-util-character "^2.0.0"
|
||||
micromark-util-symbol "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-extension-gfm@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz"
|
||||
integrity sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==
|
||||
dependencies:
|
||||
micromark-extension-gfm-autolink-literal "^2.0.0"
|
||||
micromark-extension-gfm-footnote "^2.0.0"
|
||||
micromark-extension-gfm-strikethrough "^2.0.0"
|
||||
micromark-extension-gfm-table "^2.0.0"
|
||||
micromark-extension-gfm-tagfilter "^2.0.0"
|
||||
micromark-extension-gfm-task-list-item "^2.0.0"
|
||||
micromark-util-combine-extensions "^2.0.0"
|
||||
micromark-util-types "^2.0.0"
|
||||
|
||||
micromark-factory-destination@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmmirror.com/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz"
|
||||
|
|
@ -1655,7 +2055,7 @@ npm2url@^0.2.4:
|
|||
resolved "https://registry.npmmirror.com/npm2url/-/npm2url-0.2.4.tgz"
|
||||
integrity sha512-arzGp/hQz0Ey+ZGhF64XVH7Xqwd+1Q/po5uGiBbzph8ebX6T0uvt3N7c1nBHQNsQVykQgHhqoRTX7JFcHecGuw==
|
||||
|
||||
nth-check@^2.0.1:
|
||||
nth-check@^2.0.0, nth-check@^2.0.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz"
|
||||
integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
|
||||
|
|
@ -1675,6 +2075,11 @@ parse-entities@^4.0.0:
|
|||
is-decimal "^2.0.0"
|
||||
is-hexadecimal "^2.0.0"
|
||||
|
||||
parse-numeric-range@^1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz"
|
||||
integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==
|
||||
|
||||
parse5-htmlparser2-tree-adapter@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz"
|
||||
|
|
@ -1716,6 +2121,11 @@ prismjs@^1.29.0:
|
|||
resolved "https://registry.npmmirror.com/prismjs/-/prismjs-1.30.0.tgz"
|
||||
integrity sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==
|
||||
|
||||
property-information@^6.0.0:
|
||||
version "6.5.0"
|
||||
resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz"
|
||||
integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==
|
||||
|
||||
property-information@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.npmmirror.com/property-information/-/property-information-7.1.0.tgz"
|
||||
|
|
@ -2115,6 +2525,22 @@ react-markdown@^10.1.0:
|
|||
unist-util-visit "^5.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
react-markdown@~9.0.1:
|
||||
version "9.0.3"
|
||||
resolved "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.3.tgz"
|
||||
integrity sha512-Yk7Z94dbgYTOrdk41Z74GoKA7rThnsbbqBTRYuxoe08qvfQ9tJVhmAKw6BJS/ZORG7kTy/s1QvYzSuaoBA1qfw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
devlop "^1.0.0"
|
||||
hast-util-to-jsx-runtime "^2.0.0"
|
||||
html-url-attributes "^3.0.0"
|
||||
mdast-util-to-hast "^13.0.0"
|
||||
remark-parse "^11.0.0"
|
||||
remark-rehype "^11.0.0"
|
||||
unified "^11.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
react-refresh@^0.17.0:
|
||||
version "0.17.0"
|
||||
resolved "https://registry.npmmirror.com/react-refresh/-/react-refresh-0.17.0.tgz"
|
||||
|
|
@ -2142,6 +2568,155 @@ react@*, react@^18.3.1, react@>=16.0.0, react@>=16.11.0, react@>=16.4.0, react@>
|
|||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
|
||||
refractor@^4.8.0:
|
||||
version "4.9.0"
|
||||
resolved "https://registry.npmjs.org/refractor/-/refractor-4.9.0.tgz"
|
||||
integrity sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og==
|
||||
dependencies:
|
||||
"@types/hast" "^2.0.0"
|
||||
"@types/prismjs" "^1.0.0"
|
||||
hastscript "^7.0.0"
|
||||
parse-entities "^4.0.0"
|
||||
|
||||
refractor@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/refractor/-/refractor-5.0.0.tgz"
|
||||
integrity sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@types/prismjs" "^1.0.0"
|
||||
hastscript "^9.0.0"
|
||||
parse-entities "^4.0.0"
|
||||
|
||||
rehype-attr@~3.0.1:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.npmjs.org/rehype-attr/-/rehype-attr-3.0.3.tgz"
|
||||
integrity sha512-Up50Xfra8tyxnkJdCzLBIBtxOcB2M1xdeKe1324U06RAvSjYm7ULSeoM+b/nYPQPVd7jsXJ9+39IG1WAJPXONw==
|
||||
dependencies:
|
||||
unified "~11.0.0"
|
||||
unist-util-visit "~5.0.0"
|
||||
|
||||
rehype-autolink-headings@~7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.npmjs.org/rehype-autolink-headings/-/rehype-autolink-headings-7.1.0.tgz"
|
||||
integrity sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
"@ungap/structured-clone" "^1.0.0"
|
||||
hast-util-heading-rank "^3.0.0"
|
||||
hast-util-is-element "^3.0.0"
|
||||
unified "^11.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
|
||||
rehype-ignore@^2.0.0:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.npmjs.org/rehype-ignore/-/rehype-ignore-2.0.3.tgz"
|
||||
integrity sha512-IzhP6/u/6sm49sdktuYSmeIuObWB+5yC/5eqVws8BhuGA9kY25/byz6uCy/Ravj6lXUShEd2ofHM5MyAIj86Sg==
|
||||
dependencies:
|
||||
hast-util-select "^6.0.0"
|
||||
unified "^11.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
|
||||
rehype-parse@^9.0.0, rehype-parse@^9.0.1:
|
||||
version "9.0.1"
|
||||
resolved "https://registry.npmjs.org/rehype-parse/-/rehype-parse-9.0.1.tgz"
|
||||
integrity sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
hast-util-from-html "^2.0.0"
|
||||
unified "^11.0.0"
|
||||
|
||||
rehype-prism-plus@~2.0.0:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.npmjs.org/rehype-prism-plus/-/rehype-prism-plus-2.0.2.tgz"
|
||||
integrity sha512-jTHb8ZtQHd2VWAAKeCINgv/8zNEF0+LesmwJak69GemoPVN9/8fGEARTvqOpKqmN57HwaM9z8UKBVNVJe8zggw==
|
||||
dependencies:
|
||||
hast-util-to-string "^3.0.1"
|
||||
parse-numeric-range "^1.3.0"
|
||||
refractor "^5.0.0"
|
||||
rehype-parse "^9.0.1"
|
||||
unist-util-filter "^5.0.1"
|
||||
unist-util-visit "^5.1.0"
|
||||
|
||||
rehype-prism-plus@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.npmjs.org/rehype-prism-plus/-/rehype-prism-plus-2.0.0.tgz"
|
||||
integrity sha512-FeM/9V2N7EvDZVdR2dqhAzlw5YI49m9Tgn7ZrYJeYHIahM6gcXpH0K1y2gNnKanZCydOMluJvX2cB9z3lhY8XQ==
|
||||
dependencies:
|
||||
hast-util-to-string "^3.0.0"
|
||||
parse-numeric-range "^1.3.0"
|
||||
refractor "^4.8.0"
|
||||
rehype-parse "^9.0.0"
|
||||
unist-util-filter "^5.0.0"
|
||||
unist-util-visit "^5.0.0"
|
||||
|
||||
rehype-raw@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz"
|
||||
integrity sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
hast-util-raw "^9.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
rehype-rewrite@~4.0.0:
|
||||
version "4.0.4"
|
||||
resolved "https://registry.npmjs.org/rehype-rewrite/-/rehype-rewrite-4.0.4.tgz"
|
||||
integrity sha512-L/FO96EOzSA6bzOam4DVu61/PB3AGKcSPXpa53yMIozoxH4qg1+bVZDF8zh1EsuxtSauAhzt5cCnvoplAaSLrw==
|
||||
dependencies:
|
||||
hast-util-select "^6.0.0"
|
||||
unified "^11.0.3"
|
||||
unist-util-visit "^5.0.0"
|
||||
|
||||
rehype-slug@~6.0.0:
|
||||
version "6.0.0"
|
||||
resolved "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz"
|
||||
integrity sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
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"
|
||||
|
||||
rehype-stringify@^10.0.0:
|
||||
version "10.0.1"
|
||||
resolved "https://registry.npmjs.org/rehype-stringify/-/rehype-stringify-10.0.1.tgz"
|
||||
integrity sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
hast-util-to-html "^9.0.0"
|
||||
unified "^11.0.0"
|
||||
|
||||
rehype@~13.0.0:
|
||||
version "13.0.2"
|
||||
resolved "https://registry.npmjs.org/rehype/-/rehype-13.0.2.tgz"
|
||||
integrity sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==
|
||||
dependencies:
|
||||
"@types/hast" "^3.0.0"
|
||||
rehype-parse "^9.0.0"
|
||||
rehype-stringify "^10.0.0"
|
||||
unified "^11.0.0"
|
||||
|
||||
remark-gfm@~4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz"
|
||||
integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
mdast-util-gfm "^3.0.0"
|
||||
micromark-extension-gfm "^3.0.0"
|
||||
remark-parse "^11.0.0"
|
||||
remark-stringify "^11.0.0"
|
||||
unified "^11.0.0"
|
||||
|
||||
remark-github-blockquote-alert@^1.0.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.npmjs.org/remark-github-blockquote-alert/-/remark-github-blockquote-alert-1.3.1.tgz"
|
||||
integrity sha512-OPNnimcKeozWN1w8KVQEuHOxgN3L4rah8geMOLhA5vN9wITqU4FWD+G26tkEsCGHiOVDbISx+Se5rGZ+D1p0Jg==
|
||||
dependencies:
|
||||
unist-util-visit "^5.0.0"
|
||||
|
||||
remark-parse@^11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.npmmirror.com/remark-parse/-/remark-parse-11.0.0.tgz"
|
||||
|
|
@ -2163,6 +2738,15 @@ remark-rehype@^11.0.0:
|
|||
unified "^11.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
remark-stringify@^11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz"
|
||||
integrity sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==
|
||||
dependencies:
|
||||
"@types/mdast" "^4.0.0"
|
||||
mdast-util-to-markdown "^2.0.0"
|
||||
unified "^11.0.0"
|
||||
|
||||
resize-observer-polyfill@^1.5.1:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz"
|
||||
|
|
@ -2318,7 +2902,7 @@ undici@^6.19.5:
|
|||
resolved "https://registry.npmmirror.com/undici/-/undici-6.23.0.tgz"
|
||||
integrity sha512-VfQPToRA5FZs/qJxLIinmU59u0r7LXqoJkCzinq3ckNJp3vKEh7jTWN589YQ5+aoAC/TGRLyJLCPKcLQbM8r9g==
|
||||
|
||||
unified@^11.0.0:
|
||||
unified@^11.0.0, unified@^11.0.3, unified@~11.0.0:
|
||||
version "11.0.5"
|
||||
resolved "https://registry.npmmirror.com/unified/-/unified-11.0.5.tgz"
|
||||
integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==
|
||||
|
|
@ -2331,6 +2915,15 @@ unified@^11.0.0:
|
|||
trough "^2.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
unist-util-filter@^5.0.0, unist-util-filter@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.npmjs.org/unist-util-filter/-/unist-util-filter-5.0.1.tgz"
|
||||
integrity sha512-pHx7D4Zt6+TsfwylH9+lYhBhzyhEnCXs/lbq/Hstxno5z4gVdyc2WEW0asfjGKPyG4pEKrnBv5hdkO6+aRnQJw==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
unist-util-is "^6.0.0"
|
||||
unist-util-visit-parents "^6.0.0"
|
||||
|
||||
unist-util-is@^6.0.0:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.npmmirror.com/unist-util-is/-/unist-util-is-6.0.1.tgz"
|
||||
|
|
@ -2360,7 +2953,7 @@ unist-util-visit-parents@^6.0.0:
|
|||
"@types/unist" "^3.0.0"
|
||||
unist-util-is "^6.0.0"
|
||||
|
||||
unist-util-visit@^5.0.0:
|
||||
unist-util-visit@^5.0.0, unist-util-visit@^5.1.0:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.npmmirror.com/unist-util-visit/-/unist-util-visit-5.1.0.tgz"
|
||||
integrity sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==
|
||||
|
|
@ -2369,6 +2962,15 @@ unist-util-visit@^5.0.0:
|
|||
unist-util-is "^6.0.0"
|
||||
unist-util-visit-parents "^6.0.0"
|
||||
|
||||
unist-util-visit@~5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz"
|
||||
integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
unist-util-is "^6.0.0"
|
||||
unist-util-visit-parents "^6.0.0"
|
||||
|
||||
update-browserslist-db@^1.2.0:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz"
|
||||
|
|
@ -2377,6 +2979,14 @@ update-browserslist-db@^1.2.0:
|
|||
escalade "^3.2.0"
|
||||
picocolors "^1.1.1"
|
||||
|
||||
vfile-location@^5.0.0:
|
||||
version "5.0.3"
|
||||
resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz"
|
||||
integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==
|
||||
dependencies:
|
||||
"@types/unist" "^3.0.0"
|
||||
vfile "^6.0.0"
|
||||
|
||||
vfile-message@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.npmmirror.com/vfile-message/-/vfile-message-4.0.3.tgz"
|
||||
|
|
@ -2404,6 +3014,11 @@ vfile@^6.0.0:
|
|||
optionalDependencies:
|
||||
fsevents "~2.3.3"
|
||||
|
||||
web-namespaces@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz"
|
||||
integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
|
||||
|
||||
whatwg-encoding@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.npmmirror.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz"
|
||||
|
|
@ -2426,7 +3041,7 @@ yaml@^2.5.1:
|
|||
resolved "https://registry.npmmirror.com/yaml/-/yaml-2.8.2.tgz"
|
||||
integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==
|
||||
|
||||
zwitch@^2.0.0:
|
||||
zwitch@^2.0.0, zwitch@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.npmmirror.com/zwitch/-/zwitch-2.0.4.tgz"
|
||||
integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==
|
||||
|
|
|
|||
Loading…
Reference in New Issue