diff --git a/docker-compose.yml b/docker-compose.yml
index 5bf17ec8a..ba56ee24e 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -7,10 +7,12 @@ services:
- "${POSTGRES_PORT:-5432}:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
+ - ./scripts/docker/postgresql.conf:/etc/postgresql/postgresql.conf:ro
environment:
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres}
- POSTGRES_DB=${POSTGRES_DB:-surfsense}
+ command: postgres -c config_file=/etc/postgresql/postgresql.conf
pgadmin:
image: dpage/pgadmin4
@@ -110,6 +112,24 @@ services:
# - redis
# - celery_worker
+ electric:
+ image: electricsql/electric:latest
+ ports:
+ - "${ELECTRIC_PORT:-5133}:5133"
+ environment:
+ - DATABASE_URL=postgresql://electric:electric_password@db:5432/${POSTGRES_DB:-surfsense}?sslmode=disable
+ - AUTH_MODE=insecure
+ - ELECTRIC_WRITE_TO_PG_MODE=direct
+ - ELECTRIC_READ_FROM_PG_MODE=direct
+ depends_on:
+ - db
+ restart: unless-stopped
+ healthcheck:
+ test: ["CMD", "curl", "-f", "http://localhost:5133/api/health"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+
frontend:
build:
context: ./surfsense_web
@@ -122,8 +142,12 @@ services:
- "${FRONTEND_PORT:-3000}:3000"
env_file:
- ./surfsense_web/.env
+ environment:
+ - NEXT_PUBLIC_ELECTRIC_URL=${NEXT_PUBLIC_ELECTRIC_URL:-http://localhost:5133}
+ - NEXT_PUBLIC_ELECTRIC_AUTH_MODE=insecure
depends_on:
- backend
+ - electric
volumes:
postgres_data:
diff --git a/scripts/docker/electrify-tables.sql b/scripts/docker/electrify-tables.sql
new file mode 100644
index 000000000..98822ebbb
--- /dev/null
+++ b/scripts/docker/electrify-tables.sql
@@ -0,0 +1,11 @@
+-- Electrify tables for Electric SQL sync
+-- This tells Electric SQL which tables to sync
+-- Run this after running migrations
+
+-- Electrify notifications table
+ALTER TABLE notifications ENABLE ELECTRIC;
+
+-- You can electrify other tables as needed:
+-- ALTER TABLE documents ENABLE ELECTRIC;
+-- ALTER TABLE logs ENABLE ELECTRIC;
+
diff --git a/scripts/docker/init-electric-user.sql b/scripts/docker/init-electric-user.sql
new file mode 100644
index 000000000..a0b9a6325
--- /dev/null
+++ b/scripts/docker/init-electric-user.sql
@@ -0,0 +1,23 @@
+-- Create Electric SQL replication user
+-- This script is run during PostgreSQL initialization
+
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT FROM pg_user WHERE usename = 'electric') THEN
+ CREATE USER electric WITH REPLICATION PASSWORD 'electric_password';
+ END IF;
+END
+$$;
+
+-- Grant necessary permissions
+GRANT CONNECT ON DATABASE surfsense TO electric;
+GRANT USAGE ON SCHEMA public TO electric;
+GRANT SELECT ON ALL TABLES IN SCHEMA public TO electric;
+GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO electric;
+
+-- Grant permissions on future tables
+ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO electric;
+ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO electric;
+
+-- Note: Electric SQL will create its own publications automatically
+-- We don't need to create publications here
diff --git a/scripts/docker/init-postgres.sh b/scripts/docker/init-postgres.sh
index 3d2a15f46..a184e87b6 100644
--- a/scripts/docker/init-postgres.sh
+++ b/scripts/docker/init-postgres.sh
@@ -23,8 +23,18 @@ fi
# Configure PostgreSQL
cat >> "$PGDATA/postgresql.conf" << EOF
listen_addresses = '*'
-max_connections = 100
-shared_buffers = 128MB
+max_connections = 200
+shared_buffers = 256MB
+
+# Enable logical replication (required for Electric SQL)
+wal_level = logical
+max_replication_slots = 10
+max_wal_senders = 10
+
+# Performance settings
+checkpoint_timeout = 10min
+max_wal_size = 1GB
+min_wal_size = 80MB
EOF
cat >> "$PGDATA/pg_hba.conf" << EOF
@@ -45,6 +55,15 @@ CREATE USER $POSTGRES_USER WITH PASSWORD '$POSTGRES_PASSWORD' SUPERUSER;
CREATE DATABASE $POSTGRES_DB OWNER $POSTGRES_USER;
\c $POSTGRES_DB
CREATE EXTENSION IF NOT EXISTS vector;
+
+-- Create Electric SQL replication user
+CREATE USER electric WITH REPLICATION PASSWORD 'electric_password';
+GRANT CONNECT ON DATABASE $POSTGRES_DB TO electric;
+GRANT USAGE ON SCHEMA public TO electric;
+GRANT SELECT ON ALL TABLES IN SCHEMA public TO electric;
+GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO electric;
+ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO electric;
+ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON SEQUENCES TO electric;
EOF
echo "PostgreSQL initialized successfully."
diff --git a/scripts/docker/postgresql.conf b/scripts/docker/postgresql.conf
new file mode 100644
index 000000000..99b29ba30
--- /dev/null
+++ b/scripts/docker/postgresql.conf
@@ -0,0 +1,20 @@
+# PostgreSQL configuration for Electric SQL
+# This file is mounted into the PostgreSQL container
+
+listen_addresses = '*'
+max_connections = 200
+shared_buffers = 256MB
+
+# Enable logical replication (required for Electric SQL)
+wal_level = logical
+max_replication_slots = 10
+max_wal_senders = 10
+
+# Performance settings
+checkpoint_timeout = 10min
+max_wal_size = 1GB
+min_wal_size = 80MB
+
+# Logging (optional, for debugging)
+# log_statement = 'all'
+# log_replication_commands = on
diff --git a/surfsense_backend/alembic/versions/60_add_notifications_table.py b/surfsense_backend/alembic/versions/60_add_notifications_table.py
new file mode 100644
index 000000000..2de5acc46
--- /dev/null
+++ b/surfsense_backend/alembic/versions/60_add_notifications_table.py
@@ -0,0 +1,51 @@
+"""Add notifications table
+
+Revision ID: 60
+Revises: 59
+"""
+from collections.abc import Sequence
+
+from alembic import op
+
+# revision identifiers, used by Alembic.
+revision: str = "60"
+down_revision: str | None = "59"
+branch_labels: str | Sequence[str] | None = None
+depends_on: str | Sequence[str] | None = None
+
+
+def upgrade() -> None:
+ """Upgrade schema - add notifications table."""
+ # Create notifications table
+ op.execute(
+ """
+ CREATE TABLE IF NOT EXISTS notifications (
+ id SERIAL PRIMARY KEY,
+ user_id UUID NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
+ search_space_id INTEGER REFERENCES searchspaces(id) ON DELETE CASCADE,
+ type VARCHAR(50) NOT NULL,
+ title VARCHAR(200) NOT NULL,
+ message TEXT NOT NULL,
+ read BOOLEAN NOT NULL DEFAULT FALSE,
+ metadata JSONB DEFAULT '{}',
+ created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
+ updated_at TIMESTAMPTZ
+ );
+ """
+ )
+
+ # Create indexes
+ op.create_index("ix_notifications_user_id", "notifications", ["user_id"])
+ op.create_index("ix_notifications_read", "notifications", ["read"])
+ op.create_index("ix_notifications_created_at", "notifications", ["created_at"])
+ op.create_index("ix_notifications_user_read", "notifications", ["user_id", "read"])
+
+
+def downgrade() -> None:
+ """Downgrade schema - remove notifications table."""
+ op.drop_index("ix_notifications_user_read", table_name="notifications")
+ op.drop_index("ix_notifications_created_at", table_name="notifications")
+ op.drop_index("ix_notifications_read", table_name="notifications")
+ op.drop_index("ix_notifications_user_id", table_name="notifications")
+ op.drop_table("notifications")
+
diff --git a/surfsense_backend/app/db.py b/surfsense_backend/app/db.py
index d54254f9c..a677611c7 100644
--- a/surfsense_backend/app/db.py
+++ b/surfsense_backend/app/db.py
@@ -492,6 +492,12 @@ class SearchSpace(BaseModel, TimestampMixin):
order_by="Log.id",
cascade="all, delete-orphan",
)
+ notifications = relationship(
+ "Notification",
+ back_populates="search_space",
+ order_by="Notification.created_at.desc()",
+ cascade="all, delete-orphan",
+ )
search_source_connectors = relationship(
"SearchSourceConnector",
back_populates="search_space",
@@ -629,6 +635,25 @@ class Log(BaseModel, TimestampMixin):
search_space = relationship("SearchSpace", back_populates="logs")
+class Notification(BaseModel, TimestampMixin):
+ __tablename__ = "notifications"
+
+ user_id = Column(
+ UUID(as_uuid=True), ForeignKey("user.id", ondelete="CASCADE"), nullable=False, index=True
+ )
+ search_space_id = Column(
+ Integer, ForeignKey("searchspaces.id", ondelete="CASCADE"), nullable=True
+ )
+ type = Column(String(50), nullable=False) # 'document_processed', 'connector_indexed', 'user_mentioned', etc.
+ title = Column(String(200), nullable=False)
+ message = Column(Text, nullable=False)
+ read = Column(Boolean, nullable=False, default=False, server_default=text("false"), index=True)
+ notification_metadata = Column("metadata", JSONB, nullable=True, default={})
+
+ user = relationship("User", back_populates="notifications")
+ search_space = relationship("SearchSpace", back_populates="notifications")
+
+
class SearchSpaceRole(BaseModel, TimestampMixin):
"""
Custom roles that can be defined per search space.
@@ -773,6 +798,12 @@ if config.AUTH_TYPE == "GOOGLE":
"OAuthAccount", lazy="joined"
)
search_spaces = relationship("SearchSpace", back_populates="user")
+ notifications = relationship(
+ "Notification",
+ back_populates="user",
+ order_by="Notification.created_at.desc()",
+ cascade="all, delete-orphan",
+ )
# RBAC relationships
search_space_memberships = relationship(
@@ -799,6 +830,12 @@ else:
class User(SQLAlchemyBaseUserTableUUID, Base):
search_spaces = relationship("SearchSpace", back_populates="user")
+ notifications = relationship(
+ "Notification",
+ back_populates="user",
+ order_by="Notification.created_at.desc()",
+ cascade="all, delete-orphan",
+ )
# RBAC relationships
search_space_memberships = relationship(
diff --git a/surfsense_backend/app/services/notification_service.py b/surfsense_backend/app/services/notification_service.py
new file mode 100644
index 000000000..d1fb177c9
--- /dev/null
+++ b/surfsense_backend/app/services/notification_service.py
@@ -0,0 +1,140 @@
+"""Service for creating and managing notifications."""
+
+import logging
+from typing import Any
+from uuid import UUID
+
+from sqlalchemy.ext.asyncio import AsyncSession
+
+from app.db import Notification
+
+logger = logging.getLogger(__name__)
+
+
+class NotificationService:
+ """Service for creating notifications that sync via Electric SQL."""
+
+ @staticmethod
+ async def create_notification(
+ session: AsyncSession,
+ user_id: UUID,
+ notification_type: str,
+ title: str,
+ message: str,
+ search_space_id: int | None = None,
+ notification_metadata: dict[str, Any] | None = None,
+ ) -> Notification:
+ """
+ Create a notification - Electric SQL will automatically sync it to frontend.
+
+ Args:
+ session: Database session
+ user_id: User to notify
+ notification_type: Type of notification (e.g., 'document_processed', 'connector_indexed')
+ title: Notification title
+ message: Notification message
+ search_space_id: Optional search space ID
+ notification_metadata: Optional metadata dictionary
+
+ Returns:
+ Notification: The created notification
+ """
+ notification = Notification(
+ user_id=user_id,
+ search_space_id=search_space_id,
+ type=notification_type,
+ title=title,
+ message=message,
+ notification_metadata=notification_metadata or {},
+ )
+ session.add(notification)
+ await session.commit()
+ await session.refresh(notification)
+ logger.info(f"Created notification {notification.id} for user {user_id}")
+ return notification
+
+ @staticmethod
+ async def create_document_processed_notification(
+ session: AsyncSession,
+ user_id: UUID,
+ document_id: int,
+ document_title: str,
+ status: str,
+ search_space_id: int,
+ ) -> Notification:
+ """
+ Create notification when document processing completes.
+
+ Args:
+ session: Database session
+ user_id: User to notify
+ document_id: ID of the processed document
+ document_title: Title of the document
+ status: Processing status ('SUCCESS', 'FAILED')
+ search_space_id: Search space ID
+
+ Returns:
+ Notification: The created notification
+ """
+ status_lower = status.lower()
+ title = f"Document processed: {document_title}"
+ message = f'Your document "{document_title}" has been {status_lower}.'
+
+ return await NotificationService.create_notification(
+ session=session,
+ user_id=user_id,
+ notification_type="document_processed",
+ title=title,
+ message=message,
+ search_space_id=search_space_id,
+ notification_metadata={
+ "document_id": document_id,
+ "status": status,
+ },
+ )
+
+ @staticmethod
+ async def create_connector_indexed_notification(
+ session: AsyncSession,
+ user_id: UUID,
+ connector_name: str,
+ connector_type: str,
+ status: str,
+ search_space_id: int,
+ indexed_count: int | None = None,
+ ) -> Notification:
+ """
+ Create notification when connector indexing completes.
+
+ Args:
+ session: Database session
+ user_id: User to notify
+ connector_name: Name of the connector
+ connector_type: Type of connector
+ status: Indexing status ('SUCCESS', 'FAILED')
+ search_space_id: Search space ID
+ indexed_count: Number of items indexed (optional)
+
+ Returns:
+ Notification: The created notification
+ """
+ status_lower = status.lower()
+ title = f"Connector indexed: {connector_name}"
+ message = f'Your connector "{connector_name}" has finished indexing ({status_lower}).'
+ if indexed_count is not None:
+ message += f" {indexed_count} items indexed."
+
+ return await NotificationService.create_notification(
+ session=session,
+ user_id=user_id,
+ notification_type="connector_indexed",
+ title=title,
+ message=message,
+ search_space_id=search_space_id,
+ notification_metadata={
+ "connector_name": connector_name,
+ "connector_type": connector_type,
+ "status": status,
+ "indexed_count": indexed_count,
+ },
+ )
diff --git a/surfsense_web/.env.example b/surfsense_web/.env.example
index 157bfaa37..dfb8c2ede 100644
--- a/surfsense_web/.env.example
+++ b/surfsense_web/.env.example
@@ -1,5 +1,10 @@
NEXT_PUBLIC_FASTAPI_BACKEND_URL=http://localhost:8000
NEXT_PUBLIC_FASTAPI_BACKEND_AUTH_TYPE=LOCAL or GOOGLE
NEXT_PUBLIC_ETL_SERVICE=UNSTRUCTURED or LLAMACLOUD or DOCLING
+
+# Electric SQL
+NEXT_PUBLIC_ELECTRIC_URL=http://localhost:5133
+NEXT_PUBLIC_ELECTRIC_AUTH_MODE=insecure
+
# Contact Form Vars - OPTIONAL
DATABASE_URL=postgresql://postgres:[YOUR-PASSWORD]@db.sdsf.supabase.co:5432/postgres
\ No newline at end of file
diff --git a/surfsense_web/app/layout.tsx b/surfsense_web/app/layout.tsx
index d952ad1a7..2f9921629 100644
--- a/surfsense_web/app/layout.tsx
+++ b/surfsense_web/app/layout.tsx
@@ -2,6 +2,7 @@ import type { Metadata } from "next";
import "./globals.css";
import { RootProvider } from "fumadocs-ui/provider/next";
import { Roboto } from "next/font/google";
+import { ElectricProvider } from "@/components/providers/ElectricProvider";
import { I18nProvider } from "@/components/providers/I18nProvider";
import { PostHogProvider } from "@/components/providers/PostHogProvider";
import { ThemeProvider } from "@/components/theme/theme-provider";
@@ -102,7 +103,9 @@ export default function RootLayout({
defaultTheme="light"
>
- {children}
+
+ {children}
+
diff --git a/surfsense_web/components/providers/ElectricProvider.tsx b/surfsense_web/components/providers/ElectricProvider.tsx
new file mode 100644
index 000000000..41926358a
--- /dev/null
+++ b/surfsense_web/components/providers/ElectricProvider.tsx
@@ -0,0 +1,43 @@
+"use client"
+
+import { useEffect, useState } from 'react'
+import { initElectric } from '@/lib/electric/client'
+
+interface ElectricProviderProps {
+ children: React.ReactNode
+}
+
+export function ElectricProvider({ children }: ElectricProviderProps) {
+ const [initialized, setInitialized] = useState(false)
+ const [error, setError] = useState(null)
+
+ useEffect(() => {
+ async function init() {
+ try {
+ await initElectric()
+ setInitialized(true)
+ setError(null)
+ } catch (err) {
+ console.error('Failed to initialize Electric SQL:', err)
+ setError(err instanceof Error ? err : new Error('Failed to initialize Electric SQL'))
+ // Don't block rendering if Electric SQL fails - app can still work
+ setInitialized(true)
+ }
+ }
+
+ init()
+ }, [])
+
+ // Show loading state only briefly, then render children
+ // Electric SQL will sync in the background
+ if (!initialized) {
+ return (
+
+ )
+ }
+
+ return <>{children}>
+}
+
diff --git a/surfsense_web/electric.config.ts b/surfsense_web/electric.config.ts
new file mode 100644
index 000000000..08b786da8
--- /dev/null
+++ b/surfsense_web/electric.config.ts
@@ -0,0 +1,17 @@
+import { defineConfig } from '@electric-sql/cli'
+
+export default defineConfig({
+ connection: {
+ host: process.env.ELECTRIC_HOST || 'localhost',
+ port: parseInt(process.env.ELECTRIC_PORT || '5133', 10),
+ database: process.env.POSTGRES_DB || 'surfsense',
+ user: process.env.ELECTRIC_USER || 'electric',
+ password: process.env.ELECTRIC_PASSWORD || 'electric_password',
+ },
+ outDir: './lib/electric/generated',
+ service: {
+ host: process.env.ELECTRIC_HOST || 'localhost',
+ port: parseInt(process.env.ELECTRIC_PORT || '5133', 10),
+ },
+})
+
diff --git a/surfsense_web/hooks/use-notifications.ts b/surfsense_web/hooks/use-notifications.ts
new file mode 100644
index 000000000..c52ea37b9
--- /dev/null
+++ b/surfsense_web/hooks/use-notifications.ts
@@ -0,0 +1,110 @@
+"use client"
+
+import { useEffect, useState, useCallback } from 'react'
+import { useLiveQuery } from 'electric-sql/react'
+import { initElectric, getElectric, isElectricInitialized } from '@/lib/electric/client'
+
+export interface Notification {
+ id: number
+ user_id: string
+ search_space_id: number | null
+ type: string
+ title: string
+ message: string
+ read: boolean
+ metadata: Record
+ created_at: string
+ updated_at: string | null
+}
+
+export function useNotifications(userId: string | null) {
+ const [electric, setElectric] = useState(null)
+ const [initialized, setInitialized] = useState(false)
+ const [error, setError] = useState(null)
+
+ // Initialize Electric SQL
+ useEffect(() => {
+ if (!userId || initialized) return
+
+ async function init() {
+ try {
+ const electricClient = await initElectric()
+ setElectric(electricClient)
+ setInitialized(true)
+ setError(null)
+ } catch (err) {
+ console.error('Failed to initialize Electric SQL:', err)
+ setError(err instanceof Error ? err : new Error('Failed to initialize Electric SQL'))
+ }
+ }
+
+ init()
+ }, [userId, initialized])
+
+ // Use live query to get notifications
+ const { results: notifications } = useLiveQuery(
+ electric?.db.notifications?.liveMany({
+ where: {
+ user_id: userId || '',
+ read: false,
+ },
+ orderBy: {
+ created_at: 'desc',
+ },
+ })
+ ) ?? { results: [] }
+
+ // Mark notification as read
+ const markAsRead = useCallback(
+ async (notificationId: number) => {
+ if (!electric || !isElectricInitialized()) {
+ console.warn('Electric SQL not initialized')
+ return false
+ }
+
+ try {
+ await electric.db.notifications.update({
+ data: { read: true },
+ where: { id: notificationId },
+ })
+ return true
+ } catch (err) {
+ console.error('Failed to mark notification as read:', err)
+ return false
+ }
+ },
+ [electric]
+ )
+
+ // Mark all notifications as read
+ const markAllAsRead = useCallback(async () => {
+ if (!electric || !isElectricInitialized()) {
+ console.warn('Electric SQL not initialized')
+ return false
+ }
+
+ try {
+ const unread = (notifications || []).filter((n: Notification) => !n.read)
+ for (const notification of unread) {
+ await markAsRead(notification.id)
+ }
+ return true
+ } catch (err) {
+ console.error('Failed to mark all notifications as read:', err)
+ return false
+ }
+ }, [electric, notifications, markAsRead])
+
+ // Get unread count
+ const unreadCount = (notifications || []).filter((n: Notification) => !n.read).length
+
+ return {
+ notifications: (notifications || []) as Notification[],
+ unreadCount,
+ markAsRead,
+ markAllAsRead,
+ loading: !initialized,
+ error,
+ }
+}
+
diff --git a/surfsense_web/lib/electric/auth.ts b/surfsense_web/lib/electric/auth.ts
new file mode 100644
index 000000000..eb2ffba3f
--- /dev/null
+++ b/surfsense_web/lib/electric/auth.ts
@@ -0,0 +1,21 @@
+/**
+ * Get auth token for Electric SQL
+ * In production, this should get the token from your auth system
+ */
+
+export async function getElectricAuthToken(): Promise {
+ // For insecure mode (development), return empty string
+ if (process.env.NEXT_PUBLIC_ELECTRIC_AUTH_MODE === 'insecure') {
+ return ''
+ }
+
+ // In production, get token from your auth system
+ // This should match your backend auth token
+ if (typeof window !== 'undefined') {
+ const token = localStorage.getItem('surfsense_bearer_token')
+ return token || ''
+ }
+
+ return ''
+}
+
diff --git a/surfsense_web/lib/electric/client.ts b/surfsense_web/lib/electric/client.ts
new file mode 100644
index 000000000..fb90bed54
--- /dev/null
+++ b/surfsense_web/lib/electric/client.ts
@@ -0,0 +1,86 @@
+/**
+ * Electric SQL client setup
+ * This initializes the Electric SQL client with local PGlite database (PostgreSQL in browser)
+ */
+
+import { PGlite } from '@electric-sql/pglite'
+import { electrify } from 'electric-sql/pglite'
+import { getElectricAuthToken } from './auth'
+
+// We'll generate the schema after running electric:generate
+// For now, we'll use a placeholder type
+type Electric = any
+type Schema = any
+
+let electric: Electric | null = null
+let isInitializing = false
+let initPromise: Promise | null = null
+
+export async function initElectric(): Promise {
+ if (electric) {
+ return electric
+ }
+
+ if (isInitializing && initPromise) {
+ return initPromise
+ }
+
+ isInitializing = true
+ initPromise = (async () => {
+ try {
+ const config = {
+ auth: {
+ token: await getElectricAuthToken(),
+ },
+ url: process.env.NEXT_PUBLIC_ELECTRIC_URL || 'http://localhost:5133',
+ }
+
+ // Initialize PGlite database (PostgreSQL in browser)
+ // Use idb:// prefix for IndexedDB storage in browser
+ // relaxedDurability improves responsiveness by scheduling flush after query returns
+ const conn = new PGlite('idb://surfsense.db', {
+ relaxedDurability: true,
+ })
+
+ // Import schema (will be generated by electric:generate)
+ // For now, we'll use a dynamic import that will work after schema generation
+ let schema: Schema
+ try {
+ const schemaModule = await import('./generated/schema')
+ schema = schemaModule.schema
+ } catch (error) {
+ console.warn(
+ 'Electric SQL schema not found. Run "pnpm electric:generate" to generate it.',
+ error
+ )
+ // Return a mock electric client for now
+ return null as any
+ }
+
+ // Electrify the PGlite database connection
+ electric = await electrify(conn, schema, config)
+
+ console.log('Electric SQL initialized successfully with PGlite')
+ return electric
+ } catch (error) {
+ console.error('Failed to initialize Electric SQL:', error)
+ throw error
+ } finally {
+ isInitializing = false
+ }
+ })()
+
+ return initPromise
+}
+
+export function getElectric(): Electric {
+ if (!electric) {
+ throw new Error('Electric not initialized. Call initElectric() first.')
+ }
+ return electric
+}
+
+export function isElectricInitialized(): boolean {
+ return electric !== null
+}
+
diff --git a/surfsense_web/lib/electric/config.ts b/surfsense_web/lib/electric/config.ts
new file mode 100644
index 000000000..5342888c1
--- /dev/null
+++ b/surfsense_web/lib/electric/config.ts
@@ -0,0 +1,19 @@
+/**
+ * Electric SQL configuration
+ * This file will be used by @electric-sql/cli to generate the schema
+ */
+
+export const electricConfig = {
+ connection: {
+ host: process.env.ELECTRIC_HOST || 'localhost',
+ port: parseInt(process.env.ELECTRIC_PORT || '5133', 10),
+ database: process.env.POSTGRES_DB || 'surfsense',
+ user: process.env.ELECTRIC_USER || 'electric',
+ password: process.env.ELECTRIC_PASSWORD || 'electric_password',
+ },
+ service: {
+ host: process.env.ELECTRIC_HOST || 'localhost',
+ port: parseInt(process.env.ELECTRIC_PORT || '5133', 10),
+ },
+}
+
diff --git a/surfsense_web/package.json b/surfsense_web/package.json
index 3c98c47e0..a5539be8e 100644
--- a/surfsense_web/package.json
+++ b/surfsense_web/package.json
@@ -18,7 +18,9 @@
"db:migrate": "drizzle-kit migrate",
"db:push": "drizzle-kit push",
"db:studio": "drizzle-kit studio",
- "format:fix": "npx @biomejs/biome check --fix"
+ "format:fix": "npx @biomejs/biome check --fix",
+ "electric:generate": "electric generate",
+ "electric:watch": "electric watch"
},
"dependencies": {
"@ai-sdk/react": "^1.2.12",
@@ -29,6 +31,8 @@
"@blocknote/mantine": "^0.45.0",
"@blocknote/react": "^0.45.0",
"@blocknote/server-util": "^0.45.0",
+ "@electric-sql/client": "^1.4.0",
+ "@electric-sql/pglite": "^0.2.17",
"@hookform/resolvers": "^5.2.2",
"@number-flow/react": "^0.5.10",
"@posthog/react": "^1.5.2",
@@ -67,6 +71,7 @@
"date-fns": "^4.1.0",
"dotenv": "^17.2.3",
"drizzle-orm": "^0.44.5",
+ "electric-sql": "^0.12.1",
"emblor": "^1.4.8",
"fumadocs-core": "^16.3.1",
"fumadocs-mdx": "^14.2.1",
@@ -105,6 +110,7 @@
},
"devDependencies": {
"@biomejs/biome": "2.1.2",
+ "@electric-sql/cli": "0.11.4-canary.cb19c58",
"@eslint/eslintrc": "^3.3.1",
"@tailwindcss/postcss": "^4.1.11",
"@tailwindcss/typography": "^0.5.16",
diff --git a/surfsense_web/pnpm-lock.yaml b/surfsense_web/pnpm-lock.yaml
index a184b6cd0..b13ec87b0 100644
--- a/surfsense_web/pnpm-lock.yaml
+++ b/surfsense_web/pnpm-lock.yaml
@@ -32,6 +32,12 @@ importers:
'@blocknote/server-util':
specifier: ^0.45.0
version: 0.45.0(@floating-ui/dom@1.7.4)(@tiptap/extensions@3.14.0(@tiptap/core@3.14.0(@tiptap/pm@3.14.0))(@tiptap/pm@3.14.0))(@types/hast@3.0.4)(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(highlight.js@11.11.1)(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ '@electric-sql/client':
+ specifier: ^1.4.0
+ version: 1.4.0
+ '@electric-sql/pglite':
+ specifier: ^0.2.17
+ version: 0.2.17
'@hookform/resolvers':
specifier: ^5.2.2
version: 5.2.2(react-hook-form@7.69.0(react@19.2.3))
@@ -145,7 +151,10 @@ importers:
version: 17.2.3
drizzle-orm:
specifier: ^0.44.5
- version: 0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3)(postgres@3.4.7)
+ version: 0.44.7(@electric-sql/pglite@0.2.17)(@opentelemetry/api@1.9.0)(@prisma/client@4.8.1)(@types/pg@8.16.0)(better-sqlite3@11.10.0)(pg@8.16.3)(postgres@3.4.7)
+ electric-sql:
+ specifier: ^0.12.1
+ version: 0.12.1(@electric-sql/pglite@0.2.17)(pg@8.16.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.2.1)
emblor:
specifier: ^1.4.8
version: 1.4.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -255,6 +264,9 @@ importers:
'@biomejs/biome':
specifier: 2.1.2
version: 2.1.2
+ '@electric-sql/cli':
+ specifier: 0.11.4-canary.cb19c58
+ version: 0.11.4-canary.cb19c58(@electric-sql/pglite@0.2.17)(pg@8.16.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
'@eslint/eslintrc':
specifier: ^3.3.1
version: 3.3.3
@@ -550,6 +562,25 @@ packages:
'@drizzle-team/brocli@0.10.2':
resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==}
+ '@electric-sql/cli@0.11.4-canary.cb19c58':
+ resolution: {integrity: sha512-5B8V3CwUOVp+p6WARTFIc9EkLLSiXH14FG66Y7Ct7s5+05IErQZIGQ41OQY29iHMIY24JMjo2UxZu/aBDUd6Kg==}
+ hasBin: true
+ peerDependencies:
+ prisma: 4.8.1
+ peerDependenciesMeta:
+ prisma:
+ optional: true
+
+ '@electric-sql/client@1.4.0':
+ resolution: {integrity: sha512-JTJxm3r5KXhpSEJ+C89gWbGzIH+UnPlzD92iNdtkXYx2gkoJcgd2h0YfaBF2Tu1k3yVG/pje/6CeFlHI9JrsCQ==}
+
+ '@electric-sql/pglite@0.2.17':
+ resolution: {integrity: sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw==}
+
+ '@electric-sql/prisma-generator@1.1.5':
+ resolution: {integrity: sha512-O7+DCq1QDmFY7Y5BfeD9e7ftUWpKLAQ+lz2qRuExtMtkfsvZPwAOmu6HhTBaLdo+/rZz1wnAEdnzksFv4LlgAw==}
+ hasBin: true
+
'@emnapi/core@1.7.1':
resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
@@ -1320,6 +1351,9 @@ packages:
'@mermaid-js/parser@0.6.3':
resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==}
+ '@microsoft/fetch-event-source@2.0.1':
+ resolution: {integrity: sha512-W6CLUJ2eBMw3Rec70qrsEW0jOm/3twwJv21mrmj2yORiaVmVYGS4sSS5yUwvQc1ZlDLYGPnClVWmUUMagKNsfA==}
+
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
@@ -1502,6 +1536,54 @@ packages:
'@types/react':
optional: true
+ '@prisma/client@4.8.1':
+ resolution: {integrity: sha512-d4xhZhETmeXK/yZ7K0KcVOzEfI5YKGGEr4F5SBV04/MU4ncN/HcE28sy3e4Yt8UFW0ZuImKFQJE+9rWt9WbGSQ==}
+ engines: {node: '>=14.17'}
+ peerDependencies:
+ prisma: '*'
+ peerDependenciesMeta:
+ prisma:
+ optional: true
+
+ '@prisma/debug@4.16.2':
+ resolution: {integrity: sha512-7L7WbG0qNNZYgLpsVB8rCHCXEyHFyIycRlRDNwkVfjQmACC2OW6AWCYCbfdjQhkF/t7+S3njj8wAWAocSs+Brw==}
+
+ '@prisma/engines-version@4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe':
+ resolution: {integrity: sha512-MHSOSexomRMom8QN4t7bu87wPPD+pa+hW9+71JnVcF3DqyyO/ycCLhRL1we3EojRpZxKvuyGho2REQsMCvxcJw==}
+
+ '@prisma/generator-helper@4.16.2':
+ resolution: {integrity: sha512-bMOH7y73Ui7gpQrioFeavMQA+Tf8ksaVf8Nhs9rQNzuSg8SSV6E9baczob0L5KGZTSgYoqnrRxuo03kVJYrnIg==}
+
+ '@protobufjs/aspromise@1.1.2':
+ resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==}
+
+ '@protobufjs/base64@1.1.2':
+ resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==}
+
+ '@protobufjs/codegen@2.0.4':
+ resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==}
+
+ '@protobufjs/eventemitter@1.1.0':
+ resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==}
+
+ '@protobufjs/fetch@1.1.0':
+ resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==}
+
+ '@protobufjs/float@1.0.2':
+ resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==}
+
+ '@protobufjs/inquire@1.1.0':
+ resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==}
+
+ '@protobufjs/path@1.1.2':
+ resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==}
+
+ '@protobufjs/pool@1.1.0':
+ resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==}
+
+ '@protobufjs/utf8@1.1.0':
+ resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==}
+
'@radix-ui/number@1.1.1':
resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==}
@@ -2329,6 +2411,11 @@ packages:
'@remirror/core-constants@3.0.0':
resolution: {integrity: sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==}
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==}
+ cpu: [arm64]
+ os: [darwin]
+
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
@@ -2682,6 +2769,9 @@ packages:
'@types/canvas-confetti@1.9.0':
resolution: {integrity: sha512-aBGj/dULrimR1XDZLtG9JwxX1b4HPRF6CX9Yfwh3NvstZEm1ZL7RBnel4keCPSqs1ANRu1u2Aoz9R+VmtjYuTg==}
+ '@types/cross-spawn@6.0.2':
+ resolution: {integrity: sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==}
+
'@types/d3-array@3.2.2':
resolution: {integrity: sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==}
@@ -2778,6 +2868,9 @@ packages:
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ '@types/debug@4.1.8':
+ resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==}
+
'@types/diff-match-patch@1.0.36':
resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==}
@@ -3049,6 +3142,10 @@ packages:
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
@@ -3113,6 +3210,9 @@ packages:
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
engines: {node: '>= 0.4'}
+ async-mutex@0.4.1:
+ resolution: {integrity: sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==}
+
asynckit@0.4.0:
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
@@ -3138,10 +3238,28 @@ packages:
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ base-64@1.0.0:
+ resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
baseline-browser-mapping@2.9.11:
resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
hasBin: true
+ better-sqlite3@11.10.0:
+ resolution: {integrity: sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==}
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ bl@1.2.3:
+ resolution: {integrity: sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==}
+
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
brace-expansion@1.1.12:
resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
@@ -3152,9 +3270,24 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
+ buffer-alloc-unsafe@1.1.0:
+ resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
+
+ buffer-alloc@1.2.0:
+ resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
+
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
+ buffer-fill@1.0.0:
+ resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
+
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ buffer@5.7.1:
+ resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
call-bind-apply-helpers@1.0.2:
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
@@ -3221,6 +3354,9 @@ packages:
resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
engines: {node: '>= 20.19.0'}
+ chownr@1.1.4:
+ resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
class-variance-authority@0.7.1:
resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==}
@@ -3246,6 +3382,9 @@ packages:
react: ^18 || ^19 || ^19.0.0-rc
react-dom: ^18 || ^19 || ^19.0.0-rc
+ code-block-writer@11.0.3:
+ resolution: {integrity: sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==}
+
collapse-white-space@2.1.0:
resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
@@ -3266,6 +3405,13 @@ packages:
comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'}
@@ -3286,6 +3432,9 @@ packages:
core-js@3.47.0:
resolution: {integrity: sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg==}
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
cose-base@1.0.3:
resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==}
@@ -3300,6 +3449,13 @@ packages:
engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'}
hasBin: true
+ cross-fetch@3.2.0:
+ resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==}
+
+ cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -3508,6 +3664,24 @@ packages:
supports-color:
optional: true
+ debug@4.3.1:
+ resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
debug@4.4.3:
resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
engines: {node: '>=6.0'}
@@ -3523,6 +3697,34 @@ packages:
decode-named-character-reference@1.2.0:
resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
+ decompress-response@6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+
+ decompress-tar@4.1.1:
+ resolution: {integrity: sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==}
+ engines: {node: '>=4'}
+
+ decompress-tarbz2@4.1.1:
+ resolution: {integrity: sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==}
+ engines: {node: '>=4'}
+
+ decompress-targz@4.1.1:
+ resolution: {integrity: sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==}
+ engines: {node: '>=4'}
+
+ decompress-unzip@4.0.1:
+ resolution: {integrity: sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==}
+ engines: {node: '>=4'}
+
+ decompress@4.2.1:
+ resolution: {integrity: sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==}
+ engines: {node: '>=4'}
+
+ deep-extend@0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+
deep-is@0.1.4:
resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
@@ -3570,6 +3772,14 @@ packages:
dompurify@3.3.1:
resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==}
+ dotenv-flow@4.1.0:
+ resolution: {integrity: sha512-0cwP9jpQBQfyHwvE0cRhraZMkdV45TQedA8AAUZMsFzvmLcQyc1HPv+oX0OOYwLFjIlvgVepQ+WuQHbqDaHJZg==}
+ engines: {node: '>= 12.0.0'}
+
+ dotenv@16.6.1:
+ resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
+ engines: {node: '>=12'}
+
dotenv@17.2.3:
resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==}
engines: {node: '>=12'}
@@ -3674,6 +3884,56 @@ packages:
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
engines: {node: '>= 0.4'}
+ electric-sql@0.12.1:
+ resolution: {integrity: sha512-d9THXiZSIX+B255uJwR1HFsD3RjZcQrZHAFdmIQvFSGzIrEXVhreMrrCOB+CcbETFZg1ARdZEhGSe4MBXGC6/g==}
+ deprecated: We've rebuilt the sync engine. See https://next.electric-sql.com/about for more info and the quickstart there for getting started with the new system
+ hasBin: true
+ peerDependencies:
+ '@capacitor-community/sqlite': '>= 5.6.2'
+ '@electric-sql/pglite': '>= 0.1.5'
+ '@op-engineering/op-sqlite': '>= 2.0.16'
+ '@tauri-apps/plugin-sql': 2.0.0-alpha.5
+ embedded-postgres: 16.1.1-beta.9
+ expo-sqlite: '>= 13.0.0'
+ pg: ^8.11.3
+ prisma: 4.8.1
+ react: '>= 16.8.0'
+ react-dom: '>= 16.8.0'
+ react-native: '>= 0.68.0'
+ typeorm: '>=0.3.0'
+ vue: '>=3.0.0'
+ wa-sqlite: rhashimoto/wa-sqlite#semver:^0.9.8
+ zod: 3.21.1
+ peerDependenciesMeta:
+ '@capacitor-community/sqlite':
+ optional: true
+ '@electric-sql/pglite':
+ optional: true
+ '@op-engineering/op-sqlite':
+ optional: true
+ '@tauri-apps/plugin-sql':
+ optional: true
+ embedded-postgres:
+ optional: true
+ expo-sqlite:
+ optional: true
+ pg:
+ optional: true
+ prisma:
+ optional: true
+ react:
+ optional: true
+ react-dom:
+ optional: true
+ react-native:
+ optional: true
+ typeorm:
+ optional: true
+ vue:
+ optional: true
+ wa-sqlite:
+ optional: true
+
emblor@1.4.8:
resolution: {integrity: sha512-Vqtz4Gepa7CIkmplQ+kvJnsSZJ4sAyHvQqqX2iCmgoRo5iRQFxr+5FJkk6QuLVNH5vrbBZEYxg7sMZuDCnQ/PQ==}
peerDependencies:
@@ -3686,6 +3946,9 @@ packages:
emoji-regex@9.2.2:
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ end-of-stream@1.4.5:
+ resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
enhanced-resolve@5.18.4:
resolution: {integrity: sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==}
engines: {node: '>=10.13.0'}
@@ -3907,10 +4170,21 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
eventsource-parser@3.0.6:
resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==}
engines: {node: '>=18.0.0'}
+ expand-template@2.0.3:
+ resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
+ engines: {node: '>=6'}
+
+ exponential-backoff@3.1.3:
+ resolution: {integrity: sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==}
+
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -3937,6 +4211,9 @@ packages:
fault@1.0.4:
resolution: {integrity: sha512-CJ0HCB5tL5fYTEA7ToAq5+kTwd++Borf1/bifxd9iT70QcXr4MRrO3Llf8Ifs70q+SJcGHFtnIE/Nw6giCtECA==}
+ fd-slicer@1.1.0:
+ resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
+
fdir@6.5.0:
resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
engines: {node: '>=12.0.0'}
@@ -3957,6 +4234,21 @@ packages:
resolution: {integrity: sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==}
engines: {node: '>= 12'}
+ file-type@3.9.0:
+ resolution: {integrity: sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==}
+ engines: {node: '>=0.10.0'}
+
+ file-type@5.2.0:
+ resolution: {integrity: sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==}
+ engines: {node: '>=4'}
+
+ file-type@6.2.0:
+ resolution: {integrity: sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==}
+ engines: {node: '>=4'}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -3984,6 +4276,10 @@ packages:
resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
engines: {node: '>=0.4.x'}
+ frame-stream@3.0.1:
+ resolution: {integrity: sha512-Fu8Cdbt2hHfb7wp2HBG5AOfMO5qaglHoJuoiEoQKHS+mZtO/IsMiac3wEQtBVDmOLVmCmDeoutXbrfPlpwMiqg==}
+ engines: {node: '>=14'}
+
framer-motion@12.23.26:
resolution: {integrity: sha512-cPcIhgR42xBn1Uj+PzOyheMtZ73H927+uWPDVhUMqxy8UHt6Okavb6xIz9J/phFUHUj0OncR6UvMfJTXoc/LKA==}
peerDependencies:
@@ -3998,6 +4294,9 @@ packages:
react-dom:
optional: true
+ fs-constants@1.0.0:
+ resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -4107,10 +4406,18 @@ packages:
resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==}
engines: {node: '>=6'}
+ get-port@7.1.0:
+ resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==}
+ engines: {node: '>=16'}
+
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
+ get-stream@2.3.1:
+ resolution: {integrity: sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==}
+ engines: {node: '>=0.10.0'}
+
get-symbol-description@1.1.0:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
@@ -4118,6 +4425,9 @@ packages:
get-tsconfig@4.13.0:
resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
+ github-from-package@0.0.0:
+ resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+
github-slugger@2.0.0:
resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
@@ -4288,6 +4598,9 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
ignore@5.3.2:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
@@ -4309,6 +4622,12 @@ packages:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
engines: {node: '>=0.8.19'}
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
inline-style-parser@0.2.7:
resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==}
@@ -4326,6 +4645,10 @@ packages:
intl-messageformat@10.7.18:
resolution: {integrity: sha512-m3Ofv/X/tV8Y3tHXLohcuVuhWKo7BBq62cqY15etqmLxg2DZ34AGGgQDeR+SCta2+zICb1NX83af0GJmbQ1++g==}
+ ip-regex@4.3.0:
+ resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==}
+ engines: {node: '>=8'}
+
is-alphabetical@1.0.4:
resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==}
@@ -4405,6 +4728,9 @@ packages:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
+ is-natural-number@4.0.1:
+ resolution: {integrity: sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==}
+
is-negative-zero@2.0.3:
resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
engines: {node: '>= 0.4'}
@@ -4436,6 +4762,10 @@ packages:
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
engines: {node: '>= 0.4'}
+ is-stream@1.1.0:
+ resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==}
+ engines: {node: '>=0.10.0'}
+
is-string@1.1.1:
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
engines: {node: '>= 0.4'}
@@ -4448,6 +4778,9 @@ packages:
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
engines: {node: '>= 0.4'}
+ is-url@1.2.4:
+ resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
+
is-weakmap@2.0.2:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
@@ -4460,6 +4793,13 @@ packages:
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
engines: {node: '>= 0.4'}
+ is2@2.0.9:
+ resolution: {integrity: sha512-rZkHeBn9Zzq52sd9IUIV3a5mfwBY+o2HePMh0wkGBM4z4qjvy2GwVxQ6nNXSfw6MmVP6gf1QIlWjiOavhM3x5g==}
+ engines: {node: '>=v0.10.0'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -4477,6 +4817,9 @@ packages:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
+ jose@4.15.9:
+ resolution: {integrity: sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==}
+
jotai-tanstack-query@0.11.0:
resolution: {integrity: sha512-Ys0u0IuuS6/okUJOulFTdCVfVaeKbm1+lKVSN9zHhIxtrAXl9FM4yu7fNvxM6fSz/NCE9tZOKR0MQ3hvplaH8A==}
peerDependencies:
@@ -4559,6 +4902,14 @@ packages:
khroma@2.1.0:
resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
+ kleur@3.0.3:
+ resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+ engines: {node: '>=6'}
+
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
langium@3.3.1:
resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
engines: {node: '>=16.0.0'}
@@ -4671,9 +5022,48 @@ packages:
lodash-es@4.17.22:
resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==}
+ lodash.flow@3.5.0:
+ resolution: {integrity: sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==}
+
+ lodash.groupby@4.6.0:
+ resolution: {integrity: sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==}
+
+ lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
+
+ lodash.mapvalues@4.6.0:
+ resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==}
+
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ lodash.omitby@4.6.0:
+ resolution: {integrity: sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==}
+
+ lodash.partition@4.6.0:
+ resolution: {integrity: sha512-35L3dSF3Q6V1w5j6V3NhNlQjzsRDC/pYKCTdYTmwqSib+Q8ponkAmt/PwEOq3EmI38DSCl+SkIVwLd+uSlVdrg==}
+
+ lodash.pick@4.4.0:
+ resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==}
+ deprecated: This package is deprecated. Use destructuring assignment syntax instead.
+
+ lodash.throttle@4.1.1:
+ resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==}
+
+ lodash.uniqwith@4.5.0:
+ resolution: {integrity: sha512-7lYL8bLopMoy4CTICbxygAUq6CdRJ36vFc80DucPueUee+d5NBRxz3FdT9Pes/HEx5mPoT9jwnsEJWz1N7uq7Q==}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ loglevel@1.9.2:
+ resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==}
+ engines: {node: '>= 0.6.0'}
+
+ long@5.3.2:
+ resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==}
+
longest-streak@3.1.0:
resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
@@ -4700,6 +5090,10 @@ packages:
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+ make-dir@1.3.0:
+ resolution: {integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==}
+ engines: {node: '>=4'}
+
markdown-extensions@2.0.0:
resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
engines: {node: '>=16'}
@@ -4930,6 +5324,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mimic-response@3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+
minimatch@3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
@@ -4940,6 +5338,9 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ mkdirp-classic@0.5.3:
+ resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
@@ -4963,6 +5364,9 @@ packages:
react-dom:
optional: true
+ ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -4976,6 +5380,9 @@ packages:
engines: {node: ^18 || >=20}
hasBin: true
+ napi-build-utils@2.0.0:
+ resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==}
+
napi-postinstall@0.3.4:
resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
@@ -5028,9 +5435,22 @@ packages:
sass:
optional: true
+ node-abi@3.85.0:
+ resolution: {integrity: sha512-zsFhmbkAzwhTft6nd3VxcG0cvJsT70rL+BIGHWVq5fi6MwGrHwzqKaxXE+Hl2GmnGItnDKPPkO5/LQqjVkIdFg==}
+ engines: {node: '>=10'}
+
node-addon-api@7.1.1:
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
npm-to-yarn@3.0.1:
resolution: {integrity: sha512-tt6PvKu4WyzPwWUzy/hvPFqn+uwXO0K1ZHka8az3NnrhWJDmSqI8ncWq0fkL0k/lmmi5tAC11FXwXuh0rFbt1A==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -5069,10 +5489,20 @@ packages:
resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
engines: {node: '>= 0.4'}
+ object.hasown@1.1.4:
+ resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==}
+ engines: {node: '>= 0.4'}
+
object.values@1.2.1:
resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
engines: {node: '>= 0.4'}
+ ohash@1.1.6:
+ resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
oniguruma-parser@0.12.1:
resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==}
@@ -5134,6 +5564,9 @@ packages:
pathe@2.0.3:
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+ pend@1.2.0:
+ resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==}
+
pg-cloudflare@1.2.7:
resolution: {integrity: sha512-YgCtzMH0ptvZJslLM1ffsY4EuGaU0cx4XSdXLRFae8bPP4dS5xL1tNB3k2o/N64cHJpwU7dxKli/nZ2lUa5fLg==}
@@ -5179,6 +5612,22 @@ packages:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pify@3.0.0:
+ resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+ engines: {node: '>=4'}
+
+ pinkie-promise@2.0.1:
+ resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==}
+ engines: {node: '>=0.10.0'}
+
+ pinkie@2.0.4:
+ resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==}
+ engines: {node: '>=0.10.0'}
+
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
@@ -5241,6 +5690,11 @@ packages:
preact@10.28.1:
resolution: {integrity: sha512-u1/ixq/lVQI0CakKNvLDEcW5zfCjUQfZdK9qqWuIJtsezuyG6pk9TWj75GMuI/EzRSZB/VAE43sNWWZfiy8psw==}
+ prebuild-install@7.1.3:
+ resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==}
+ engines: {node: '>=10'}
+ hasBin: true
+
prelude-ls@1.2.1:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
@@ -5253,6 +5707,13 @@ packages:
resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==}
engines: {node: '>=6'}
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ prompts@2.4.2:
+ resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+ engines: {node: '>= 6'}
+
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
@@ -5355,6 +5816,13 @@ packages:
prosemirror-view@1.41.4:
resolution: {integrity: sha512-WkKgnyjNncri03Gjaz3IFWvCAE94XoiEgvtr0/r2Xw7R8/IjK3sKLSiDoCHWcsXSAinVaKlGRZDvMCsF1kbzjA==}
+ protobufjs@7.5.4:
+ resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==}
+ engines: {node: '>=12.0.0'}
+
+ pump@3.0.3:
+ resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
+
punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
@@ -5366,6 +5834,10 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ rc@1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+
react-day-picker@9.13.0:
resolution: {integrity: sha512-euzj5Hlq+lOHqI53NiuNhCP8HWgsPf/bBAVijR50hNaY1XwjKjShAnIe8jm8RD2W9IJUvihDIZ+KrmqfFzNhFQ==}
engines: {node: '>=18'}
@@ -5498,6 +5970,13 @@ packages:
resolution: {integrity: sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==}
engines: {node: '>=0.10.0'}
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
readdirp@5.0.0:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'}
@@ -5655,6 +6134,12 @@ packages:
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
engines: {node: '>=0.4'}
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
safe-push-apply@1.0.0:
resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
engines: {node: '>= 0.4'}
@@ -5682,6 +6167,10 @@ packages:
secure-json-parse@4.1.0:
resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
+ seek-bzip@1.0.6:
+ resolution: {integrity: sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==}
+ hasBin: true
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -5737,6 +6226,15 @@ packages:
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
engines: {node: '>= 0.4'}
+ simple-concat@1.0.1:
+ resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+
+ simple-get@4.0.1:
+ resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
sonner@2.0.7:
resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==}
peerDependencies:
@@ -5768,6 +6266,11 @@ packages:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
+ squel@5.13.0:
+ resolution: {integrity: sha512-Fzd8zqbuqNwzodO3yO6MkX8qiDoVBuwqAaa3eKNz4idhBf24IQHbatBhLUiHAGGl962eGvPVRxzRuFWZlSf49w==}
+ engines: {node: '>= 0.12.0'}
+ deprecated: No longer maintained
+
stable-hash@0.0.5:
resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==}
@@ -5803,13 +6306,30 @@ packages:
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
engines: {node: '>= 0.4'}
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
stringify-entities@4.0.4:
resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
strip-bom@3.0.0:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
+ strip-dirs@2.1.0:
+ resolution: {integrity: sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==}
+
+ strip-json-comments@2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+
strip-json-comments@3.1.1:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
@@ -5870,10 +6390,30 @@ packages:
resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==}
engines: {node: '>=6'}
+ tar-fs@2.1.4:
+ resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==}
+
+ tar-stream@1.6.2:
+ resolution: {integrity: sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==}
+ engines: {node: '>= 0.8.0'}
+
+ tar-stream@2.2.0:
+ resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+ engines: {node: '>=6'}
+
+ tcp-port-used@1.0.2:
+ resolution: {integrity: sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA==}
+
+ text-encoder-lite@2.0.0:
+ resolution: {integrity: sha512-bo08ND8LlBwPeU23EluRUcO3p2Rsb/eN5EIfOVqfRmblNDEVKK5IzM9Qfidvo+odT0hhV8mpXQcP/M5MMzABXw==}
+
throttleit@2.1.0:
resolution: {integrity: sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==}
engines: {node: '>=18'}
+ through@2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
tinyexec@1.0.2:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
@@ -5889,6 +6429,10 @@ packages:
resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
hasBin: true
+ to-buffer@1.2.2:
+ resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==}
+ engines: {node: '>= 0.4'}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -5897,6 +6441,9 @@ packages:
resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
engines: {node: '>=16'}
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
tr46@5.1.1:
resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
engines: {node: '>=18'}
@@ -5931,6 +6478,9 @@ packages:
engines: {node: '>=18.0.0'}
hasBin: true
+ tunnel-agent@0.6.0:
+ resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -5970,6 +6520,9 @@ packages:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
+ unbzip2-stream@1.4.3:
+ resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
+
undici-types@6.21.0:
resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
@@ -6116,6 +6669,9 @@ packages:
web-vitals@4.2.4:
resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==}
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
webidl-conversions@7.0.0:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'}
@@ -6132,6 +6688,9 @@ packages:
resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
engines: {node: '>=18'}
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
which-boxed-primitive@1.1.1:
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
engines: {node: '>= 0.4'}
@@ -6157,6 +6716,9 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
ws@8.18.3:
resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
engines: {node: '>=10.0.0'}
@@ -6196,6 +6758,9 @@ packages:
peerDependencies:
yjs: ^13.0.0
+ yauzl@2.10.0:
+ resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+
yjs@13.6.28:
resolution: {integrity: sha512-EgnDOXs8+hBVm6mq3/S89Kiwzh5JRbn7w2wXwbrMRyKy/8dOFsLvuIfC+x19ZdtaDc0tA9rQmdZzbqqNHG44wA==}
engines: {node: '>=16.0.0', npm: '>=8.0.0'}
@@ -6209,6 +6774,9 @@ packages:
peerDependencies:
zod: ^3.25 || ^4
+ zod@3.21.1:
+ resolution: {integrity: sha512-+dTu2m6gmCbO9Ahm4ZBDapx2O6ZY9QSPXst2WXjcznPMwf2YNpn3RevLx4KkZp1OPW/ouFcoBtBzFz/LeY69oA==}
+
zod@4.2.1:
resolution: {integrity: sha512-0wZ1IRqGGhMP76gLqz8EyfBXKk0J2qo2+H3fi4mcUP/KtTocoX08nmIAHl1Z2kJIZbZee8KOpBCSNPRgauucjw==}
@@ -6579,6 +7147,54 @@ snapshots:
'@drizzle-team/brocli@0.10.2': {}
+ '@electric-sql/cli@0.11.4-canary.cb19c58(@electric-sql/pglite@0.2.17)(pg@8.16.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)':
+ dependencies:
+ '@electric-sql/prisma-generator': 1.1.5
+ '@prisma/client': 4.8.1
+ commander: 11.1.0
+ decompress: 4.2.1
+ dotenv-flow: 4.1.0
+ electric-sql: 0.12.1(@electric-sql/pglite@0.2.17)(pg@8.16.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@3.21.1)
+ get-port: 7.1.0
+ ts-dedent: 2.2.0
+ ws: 8.18.3
+ zod: 3.21.1
+ transitivePeerDependencies:
+ - '@capacitor-community/sqlite'
+ - '@electric-sql/pglite'
+ - '@op-engineering/op-sqlite'
+ - '@tauri-apps/plugin-sql'
+ - bufferutil
+ - embedded-postgres
+ - encoding
+ - expo-sqlite
+ - pg
+ - react
+ - react-dom
+ - react-native
+ - supports-color
+ - typeorm
+ - utf-8-validate
+ - vue
+ - wa-sqlite
+
+ '@electric-sql/client@1.4.0':
+ dependencies:
+ '@microsoft/fetch-event-source': 2.0.1
+ optionalDependencies:
+ '@rollup/rollup-darwin-arm64': 4.55.1
+
+ '@electric-sql/pglite@0.2.17': {}
+
+ '@electric-sql/prisma-generator@1.1.5':
+ dependencies:
+ '@prisma/generator-helper': 4.16.2
+ code-block-writer: 11.0.3
+ lodash: 4.17.21
+ zod: 3.21.1
+ transitivePeerDependencies:
+ - supports-color
+
'@emnapi/core@1.7.1':
dependencies:
'@emnapi/wasi-threads': 1.1.0
@@ -7162,6 +7778,8 @@ snapshots:
dependencies:
langium: 3.3.1
+ '@microsoft/fetch-event-source@2.0.1': {}
+
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
'@emnapi/core': 1.7.1
@@ -7295,6 +7913,52 @@ snapshots:
optionalDependencies:
'@types/react': 19.2.7
+ '@prisma/client@4.8.1':
+ dependencies:
+ '@prisma/engines-version': 4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe
+
+ '@prisma/debug@4.16.2':
+ dependencies:
+ '@types/debug': 4.1.8
+ debug: 4.3.4
+ strip-ansi: 6.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@prisma/engines-version@4.8.0-61.d6e67a83f971b175a593ccc12e15c4a757f93ffe': {}
+
+ '@prisma/generator-helper@4.16.2':
+ dependencies:
+ '@prisma/debug': 4.16.2
+ '@types/cross-spawn': 6.0.2
+ cross-spawn: 7.0.3
+ kleur: 4.1.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@protobufjs/aspromise@1.1.2': {}
+
+ '@protobufjs/base64@1.1.2': {}
+
+ '@protobufjs/codegen@2.0.4': {}
+
+ '@protobufjs/eventemitter@1.1.0': {}
+
+ '@protobufjs/fetch@1.1.0':
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/inquire': 1.1.0
+
+ '@protobufjs/float@1.0.2': {}
+
+ '@protobufjs/inquire@1.1.0': {}
+
+ '@protobufjs/path@1.1.2': {}
+
+ '@protobufjs/pool@1.1.0': {}
+
+ '@protobufjs/utf8@1.1.0': {}
+
'@radix-ui/number@1.1.1': {}
'@radix-ui/primitive@1.0.0':
@@ -8172,6 +8836,9 @@ snapshots:
'@remirror/core-constants@3.0.0': {}
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ optional: true
+
'@rtsao/scc@1.1.0': {}
'@rushstack/eslint-patch@1.15.0': {}
@@ -8509,6 +9176,10 @@ snapshots:
'@types/canvas-confetti@1.9.0': {}
+ '@types/cross-spawn@6.0.2':
+ dependencies:
+ '@types/node': 20.19.27
+
'@types/d3-array@3.2.2': {}
'@types/d3-axis@3.0.6':
@@ -8630,6 +9301,10 @@ snapshots:
dependencies:
'@types/ms': 2.1.0
+ '@types/debug@4.1.8':
+ dependencies:
+ '@types/ms': 2.1.0
+
'@types/diff-match-patch@1.0.36': {}
'@types/estree-jsx@1.0.5':
@@ -8893,6 +9568,8 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ansi-regex@5.0.1: {}
+
ansi-styles@4.3.0:
dependencies:
color-convert: 2.0.1
@@ -8988,6 +9665,10 @@ snapshots:
async-function@1.0.0: {}
+ async-mutex@0.4.1:
+ dependencies:
+ tslib: 2.8.1
+
asynckit@0.4.0: {}
attr-accept@2.2.5: {}
@@ -9004,8 +9685,32 @@ snapshots:
balanced-match@1.0.2: {}
+ base-64@1.0.0: {}
+
+ base64-js@1.5.1: {}
+
baseline-browser-mapping@2.9.11: {}
+ better-sqlite3@11.10.0:
+ dependencies:
+ bindings: 1.5.0
+ prebuild-install: 7.1.3
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ bl@1.2.3:
+ dependencies:
+ readable-stream: 2.3.8
+ safe-buffer: 5.2.1
+
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
brace-expansion@1.1.12:
dependencies:
balanced-match: 1.0.2
@@ -9019,8 +9724,24 @@ snapshots:
dependencies:
fill-range: 7.1.1
+ buffer-alloc-unsafe@1.1.0: {}
+
+ buffer-alloc@1.2.0:
+ dependencies:
+ buffer-alloc-unsafe: 1.1.0
+ buffer-fill: 1.0.0
+
+ buffer-crc32@0.2.13: {}
+
+ buffer-fill@1.0.0: {}
+
buffer-from@1.1.2: {}
+ buffer@5.7.1:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
@@ -9085,6 +9806,8 @@ snapshots:
dependencies:
readdirp: 5.0.0
+ chownr@1.1.4: {}
+
class-variance-authority@0.7.1:
dependencies:
clsx: 2.1.1
@@ -9115,6 +9838,8 @@ snapshots:
- '@types/react'
- '@types/react-dom'
+ code-block-writer@11.0.3: {}
+
collapse-white-space@2.1.0: {}
color-convert@2.0.1:
@@ -9131,6 +9856,10 @@ snapshots:
comma-separated-tokens@2.0.3: {}
+ commander@11.1.0: {}
+
+ commander@2.20.3: {}
+
commander@7.2.0: {}
commander@8.3.0: {}
@@ -9143,6 +9872,8 @@ snapshots:
core-js@3.47.0: {}
+ core-util-is@1.0.3: {}
+
cose-base@1.0.3:
dependencies:
layout-base: 1.0.2
@@ -9157,6 +9888,18 @@ snapshots:
dependencies:
cross-spawn: 7.0.6
+ cross-fetch@3.2.0:
+ dependencies:
+ node-fetch: 2.7.0
+ transitivePeerDependencies:
+ - encoding
+
+ cross-spawn@7.0.3:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -9391,6 +10134,14 @@ snapshots:
dependencies:
ms: 2.1.3
+ debug@4.3.1:
+ dependencies:
+ ms: 2.1.2
+
+ debug@4.3.4:
+ dependencies:
+ ms: 2.1.2
+
debug@4.4.3:
dependencies:
ms: 2.1.3
@@ -9401,6 +10152,50 @@ snapshots:
dependencies:
character-entities: 2.0.2
+ decompress-response@6.0.0:
+ dependencies:
+ mimic-response: 3.1.0
+
+ decompress-tar@4.1.1:
+ dependencies:
+ file-type: 5.2.0
+ is-stream: 1.1.0
+ tar-stream: 1.6.2
+
+ decompress-tarbz2@4.1.1:
+ dependencies:
+ decompress-tar: 4.1.1
+ file-type: 6.2.0
+ is-stream: 1.1.0
+ seek-bzip: 1.0.6
+ unbzip2-stream: 1.4.3
+
+ decompress-targz@4.1.1:
+ dependencies:
+ decompress-tar: 4.1.1
+ file-type: 5.2.0
+ is-stream: 1.1.0
+
+ decompress-unzip@4.0.1:
+ dependencies:
+ file-type: 3.9.0
+ get-stream: 2.3.1
+ pify: 2.3.0
+ yauzl: 2.10.0
+
+ decompress@4.2.1:
+ dependencies:
+ decompress-tar: 4.1.1
+ decompress-tarbz2: 4.1.1
+ decompress-targz: 4.1.1
+ decompress-unzip: 4.0.1
+ graceful-fs: 4.2.11
+ make-dir: 1.3.0
+ pify: 2.3.0
+ strip-dirs: 2.1.0
+
+ deep-extend@0.6.0: {}
+
deep-is@0.1.4: {}
define-data-property@1.1.4:
@@ -9443,6 +10238,12 @@ snapshots:
optionalDependencies:
'@types/trusted-types': 2.0.7
+ dotenv-flow@4.1.0:
+ dependencies:
+ dotenv: 16.6.1
+
+ dotenv@16.6.1: {}
+
dotenv@17.2.3: {}
drizzle-kit@0.31.8:
@@ -9454,10 +10255,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- drizzle-orm@0.44.7(@opentelemetry/api@1.9.0)(@types/pg@8.16.0)(pg@8.16.3)(postgres@3.4.7):
+ drizzle-orm@0.44.7(@electric-sql/pglite@0.2.17)(@opentelemetry/api@1.9.0)(@prisma/client@4.8.1)(@types/pg@8.16.0)(better-sqlite3@11.10.0)(pg@8.16.3)(postgres@3.4.7):
optionalDependencies:
+ '@electric-sql/pglite': 0.2.17
'@opentelemetry/api': 1.9.0
+ '@prisma/client': 4.8.1
'@types/pg': 8.16.0
+ better-sqlite3: 11.10.0
pg: 8.16.3
postgres: 3.4.7
@@ -9467,6 +10271,102 @@ snapshots:
es-errors: 1.3.0
gopd: 1.2.0
+ electric-sql@0.12.1(@electric-sql/pglite@0.2.17)(pg@8.16.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@3.21.1):
+ dependencies:
+ '@electric-sql/prisma-generator': 1.1.5
+ '@prisma/client': 4.8.1
+ async-mutex: 0.4.1
+ base-64: 1.0.0
+ better-sqlite3: 11.10.0
+ commander: 11.1.0
+ cross-fetch: 3.2.0
+ decompress: 4.2.1
+ dotenv-flow: 4.1.0
+ events: 3.3.0
+ exponential-backoff: 3.1.3
+ frame-stream: 3.0.1
+ get-port: 7.1.0
+ jose: 4.15.9
+ lodash.flow: 3.5.0
+ lodash.groupby: 4.6.0
+ lodash.isequal: 4.5.0
+ lodash.mapvalues: 4.6.0
+ lodash.omitby: 4.6.0
+ lodash.partition: 4.6.0
+ lodash.pick: 4.4.0
+ lodash.throttle: 4.1.1
+ lodash.uniqwith: 4.5.0
+ loglevel: 1.9.2
+ long: 5.3.2
+ object.hasown: 1.1.4
+ ohash: 1.1.6
+ prompts: 2.4.2
+ protobufjs: 7.5.4
+ squel: 5.13.0
+ tcp-port-used: 1.0.2
+ text-encoder-lite: 2.0.0
+ ts-dedent: 2.2.0
+ ws: 8.18.3
+ zod: 3.21.1
+ optionalDependencies:
+ '@electric-sql/pglite': 0.2.17
+ pg: 8.16.3
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
+ electric-sql@0.12.1(@electric-sql/pglite@0.2.17)(pg@8.16.3)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(zod@4.2.1):
+ dependencies:
+ '@electric-sql/prisma-generator': 1.1.5
+ '@prisma/client': 4.8.1
+ async-mutex: 0.4.1
+ base-64: 1.0.0
+ better-sqlite3: 11.10.0
+ commander: 11.1.0
+ cross-fetch: 3.2.0
+ decompress: 4.2.1
+ dotenv-flow: 4.1.0
+ events: 3.3.0
+ exponential-backoff: 3.1.3
+ frame-stream: 3.0.1
+ get-port: 7.1.0
+ jose: 4.15.9
+ lodash.flow: 3.5.0
+ lodash.groupby: 4.6.0
+ lodash.isequal: 4.5.0
+ lodash.mapvalues: 4.6.0
+ lodash.omitby: 4.6.0
+ lodash.partition: 4.6.0
+ lodash.pick: 4.4.0
+ lodash.throttle: 4.1.1
+ lodash.uniqwith: 4.5.0
+ loglevel: 1.9.2
+ long: 5.3.2
+ object.hasown: 1.1.4
+ ohash: 1.1.6
+ prompts: 2.4.2
+ protobufjs: 7.5.4
+ squel: 5.13.0
+ tcp-port-used: 1.0.2
+ text-encoder-lite: 2.0.0
+ ts-dedent: 2.2.0
+ ws: 8.18.3
+ zod: 4.2.1
+ optionalDependencies:
+ '@electric-sql/pglite': 0.2.17
+ pg: 8.16.3
+ react: 19.2.3
+ react-dom: 19.2.3(react@19.2.3)
+ transitivePeerDependencies:
+ - bufferutil
+ - encoding
+ - supports-color
+ - utf-8-validate
+
emblor@1.4.8(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
'@radix-ui/react-dialog': 1.0.4(@types/react-dom@19.2.3(@types/react@19.2.7))(@types/react@19.2.7)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
@@ -9487,6 +10387,10 @@ snapshots:
emoji-regex@9.2.2: {}
+ end-of-stream@1.4.5:
+ dependencies:
+ once: 1.4.0
+
enhanced-resolve@5.18.4:
dependencies:
graceful-fs: 4.2.11
@@ -9940,8 +10844,14 @@ snapshots:
esutils@2.0.3: {}
+ events@3.3.0: {}
+
eventsource-parser@3.0.6: {}
+ expand-template@2.0.3: {}
+
+ exponential-backoff@3.1.3: {}
+
extend@3.0.2: {}
fast-deep-equal@3.1.3: {}
@@ -9968,6 +10878,10 @@ snapshots:
dependencies:
format: 0.2.2
+ fd-slicer@1.1.0:
+ dependencies:
+ pend: 1.2.0
+
fdir@6.5.0(picomatch@4.0.3):
optionalDependencies:
picomatch: 4.0.3
@@ -9982,6 +10896,14 @@ snapshots:
dependencies:
tslib: 2.8.1
+ file-type@3.9.0: {}
+
+ file-type@5.2.0: {}
+
+ file-type@6.2.0: {}
+
+ file-uri-to-path@1.0.0: {}
+
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@@ -10012,6 +10934,8 @@ snapshots:
format@0.2.2: {}
+ frame-stream@3.0.1: {}
+
framer-motion@12.23.26(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
motion-dom: 12.23.23
@@ -10021,6 +10945,8 @@ snapshots:
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
+ fs-constants@1.0.0: {}
+
fsevents@2.3.3:
optional: true
@@ -10152,11 +11078,18 @@ snapshots:
get-nonce@1.0.1: {}
+ get-port@7.1.0: {}
+
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
es-object-atoms: 1.1.1
+ get-stream@2.3.1:
+ dependencies:
+ object-assign: 4.1.1
+ pinkie-promise: 2.0.1
+
get-symbol-description@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -10167,6 +11100,8 @@ snapshots:
dependencies:
resolve-pkg-maps: 1.0.0
+ github-from-package@0.0.0: {}
+
github-slugger@2.0.0: {}
glob-parent@5.1.2:
@@ -10466,6 +11401,8 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ ieee754@1.2.1: {}
+
ignore@5.3.2: {}
ignore@7.0.5: {}
@@ -10479,6 +11416,10 @@ snapshots:
imurmurhash@0.1.4: {}
+ inherits@2.0.4: {}
+
+ ini@1.3.8: {}
+
inline-style-parser@0.2.7: {}
internal-slot@1.1.0:
@@ -10498,6 +11439,8 @@ snapshots:
'@formatjs/icu-messageformat-parser': 2.11.4
tslib: 2.8.1
+ ip-regex@4.3.0: {}
+
is-alphabetical@1.0.4: {}
is-alphabetical@2.0.1: {}
@@ -10584,6 +11527,8 @@ snapshots:
is-map@2.0.3: {}
+ is-natural-number@4.0.1: {}
+
is-negative-zero@2.0.3: {}
is-number-object@1.1.1:
@@ -10610,6 +11555,8 @@ snapshots:
dependencies:
call-bound: 1.0.4
+ is-stream@1.1.0: {}
+
is-string@1.1.1:
dependencies:
call-bound: 1.0.4
@@ -10625,6 +11572,8 @@ snapshots:
dependencies:
which-typed-array: 1.1.19
+ is-url@1.2.4: {}
+
is-weakmap@2.0.2: {}
is-weakref@1.1.1:
@@ -10636,6 +11585,14 @@ snapshots:
call-bound: 1.0.4
get-intrinsic: 1.3.0
+ is2@2.0.9:
+ dependencies:
+ deep-is: 0.1.4
+ ip-regex: 4.3.0
+ is-url: 1.2.4
+
+ isarray@1.0.0: {}
+
isarray@2.0.5: {}
isexe@2.0.0: {}
@@ -10653,6 +11610,8 @@ snapshots:
jiti@2.6.1: {}
+ jose@4.15.9: {}
+
jotai-tanstack-query@0.11.0(@tanstack/query-core@5.90.12)(@tanstack/react-query@5.90.12(react@19.2.3))(jotai@2.16.0(@types/react@19.2.7)(react@19.2.3))(react@19.2.3):
dependencies:
'@tanstack/query-core': 5.90.12
@@ -10735,6 +11694,10 @@ snapshots:
khroma@2.1.0: {}
+ kleur@3.0.3: {}
+
+ kleur@4.1.5: {}
+
langium@3.3.1:
dependencies:
chevrotain: 11.0.3
@@ -10825,8 +11788,32 @@ snapshots:
lodash-es@4.17.22: {}
+ lodash.flow@3.5.0: {}
+
+ lodash.groupby@4.6.0: {}
+
+ lodash.isequal@4.5.0: {}
+
+ lodash.mapvalues@4.6.0: {}
+
lodash.merge@4.6.2: {}
+ lodash.omitby@4.6.0: {}
+
+ lodash.partition@4.6.0: {}
+
+ lodash.pick@4.4.0: {}
+
+ lodash.throttle@4.1.1: {}
+
+ lodash.uniqwith@4.5.0: {}
+
+ lodash@4.17.21: {}
+
+ loglevel@1.9.2: {}
+
+ long@5.3.2: {}
+
longest-streak@3.1.0: {}
loose-envify@1.4.0:
@@ -10852,6 +11839,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
+ make-dir@1.3.0:
+ dependencies:
+ pify: 3.0.0
+
markdown-extensions@2.0.0: {}
markdown-it@14.1.0:
@@ -11388,6 +12379,8 @@ snapshots:
dependencies:
mime-db: 1.52.0
+ mimic-response@3.1.0: {}
+
minimatch@3.1.2:
dependencies:
brace-expansion: 1.1.12
@@ -11398,6 +12391,8 @@ snapshots:
minimist@1.2.8: {}
+ mkdirp-classic@0.5.3: {}
+
mlly@1.8.0:
dependencies:
acorn: 8.15.0
@@ -11419,12 +12414,16 @@ snapshots:
react: 19.2.3
react-dom: 19.2.3(react@19.2.3)
+ ms@2.1.2: {}
+
ms@2.1.3: {}
nanoid@3.3.11: {}
nanoid@5.1.6: {}
+ napi-build-utils@2.0.0: {}
+
napi-postinstall@0.3.4: {}
natural-compare@1.4.0: {}
@@ -11479,8 +12478,16 @@ snapshots:
- '@babel/core'
- babel-plugin-macros
+ node-abi@3.85.0:
+ dependencies:
+ semver: 7.7.3
+
node-addon-api@7.1.1: {}
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
npm-to-yarn@3.0.1: {}
number-flow@0.5.8:
@@ -11524,6 +12531,12 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.24.1
+ object.hasown@1.1.4:
+ dependencies:
+ define-properties: 1.2.1
+ es-abstract: 1.24.1
+ es-object-atoms: 1.1.1
+
object.values@1.2.1:
dependencies:
call-bind: 1.0.8
@@ -11531,6 +12544,12 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ ohash@1.1.6: {}
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
oniguruma-parser@0.12.1: {}
oniguruma-to-es@4.3.4:
@@ -11605,6 +12624,8 @@ snapshots:
pathe@2.0.3: {}
+ pend@1.2.0: {}
+
pg-cloudflare@1.2.7:
optional: true
@@ -11646,6 +12667,16 @@ snapshots:
picomatch@4.0.3: {}
+ pify@2.3.0: {}
+
+ pify@3.0.0: {}
+
+ pinkie-promise@2.0.1:
+ dependencies:
+ pinkie: 2.0.4
+
+ pinkie@2.0.4: {}
+
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
@@ -11711,12 +12742,34 @@ snapshots:
preact@10.28.1: {}
+ prebuild-install@7.1.3:
+ dependencies:
+ detect-libc: 2.1.2
+ expand-template: 2.0.3
+ github-from-package: 0.0.0
+ minimist: 1.2.8
+ mkdirp-classic: 0.5.3
+ napi-build-utils: 2.0.0
+ node-abi: 3.85.0
+ pump: 3.0.3
+ rc: 1.2.8
+ simple-get: 4.0.1
+ tar-fs: 2.1.4
+ tunnel-agent: 0.6.0
+
prelude-ls@1.2.1: {}
prismjs@1.27.0: {}
prismjs@1.30.0: {}
+ process-nextick-args@2.0.1: {}
+
+ prompts@2.4.2:
+ dependencies:
+ kleur: 3.0.3
+ sisteransi: 1.0.5
+
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
@@ -11842,12 +12895,39 @@ snapshots:
prosemirror-state: 1.4.4
prosemirror-transform: 1.10.5
+ protobufjs@7.5.4:
+ dependencies:
+ '@protobufjs/aspromise': 1.1.2
+ '@protobufjs/base64': 1.1.2
+ '@protobufjs/codegen': 2.0.4
+ '@protobufjs/eventemitter': 1.1.0
+ '@protobufjs/fetch': 1.1.0
+ '@protobufjs/float': 1.0.2
+ '@protobufjs/inquire': 1.1.0
+ '@protobufjs/path': 1.1.2
+ '@protobufjs/pool': 1.1.0
+ '@protobufjs/utf8': 1.1.0
+ '@types/node': 20.19.27
+ long: 5.3.2
+
+ pump@3.0.3:
+ dependencies:
+ end-of-stream: 1.4.5
+ once: 1.4.0
+
punycode.js@2.3.1: {}
punycode@2.3.1: {}
queue-microtask@1.2.3: {}
+ rc@1.2.8:
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+
react-day-picker@9.13.0(react@19.2.3):
dependencies:
'@date-fns/tz': 1.4.1
@@ -11989,6 +13069,22 @@ snapshots:
react@19.2.3: {}
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.3.0
+ util-deprecate: 1.0.2
+
readdirp@5.0.0: {}
recma-build-jsx@1.0.0:
@@ -12247,6 +13343,10 @@ snapshots:
has-symbols: 1.1.0
isarray: 2.0.5
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
safe-push-apply@1.0.0:
dependencies:
es-errors: 1.3.0
@@ -12274,6 +13374,10 @@ snapshots:
secure-json-parse@4.1.0: {}
+ seek-bzip@1.0.6:
+ dependencies:
+ commander: 2.20.3
+
semver@6.3.1: {}
semver@7.7.3: {}
@@ -12379,6 +13483,16 @@ snapshots:
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
+ simple-concat@1.0.1: {}
+
+ simple-get@4.0.1:
+ dependencies:
+ decompress-response: 6.0.0
+ once: 1.4.0
+ simple-concat: 1.0.1
+
+ sisteransi@1.0.5: {}
+
sonner@2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
react: 19.2.3
@@ -12401,6 +13515,8 @@ snapshots:
split2@4.2.0: {}
+ squel@5.13.0: {}
+
stable-hash@0.0.5: {}
stop-iteration-iterator@1.1.0:
@@ -12489,13 +13605,31 @@ snapshots:
define-properties: 1.2.1
es-object-atoms: 1.1.1
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
stringify-entities@4.0.4:
dependencies:
character-entities-html4: 2.1.0
character-entities-legacy: 3.0.0
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
strip-bom@3.0.0: {}
+ strip-dirs@2.1.0:
+ dependencies:
+ is-natural-number: 4.0.1
+
+ strip-json-comments@2.0.1: {}
+
strip-json-comments@3.1.1: {}
style-to-js@1.1.21:
@@ -12539,8 +13673,44 @@ snapshots:
tapable@2.3.0: {}
+ tar-fs@2.1.4:
+ dependencies:
+ chownr: 1.1.4
+ mkdirp-classic: 0.5.3
+ pump: 3.0.3
+ tar-stream: 2.2.0
+
+ tar-stream@1.6.2:
+ dependencies:
+ bl: 1.2.3
+ buffer-alloc: 1.2.0
+ end-of-stream: 1.4.5
+ fs-constants: 1.0.0
+ readable-stream: 2.3.8
+ to-buffer: 1.2.2
+ xtend: 4.0.2
+
+ tar-stream@2.2.0:
+ dependencies:
+ bl: 4.1.0
+ end-of-stream: 1.4.5
+ fs-constants: 1.0.0
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
+ tcp-port-used@1.0.2:
+ dependencies:
+ debug: 4.3.1
+ is2: 2.0.9
+ transitivePeerDependencies:
+ - supports-color
+
+ text-encoder-lite@2.0.0: {}
+
throttleit@2.1.0: {}
+ through@2.3.8: {}
+
tinyexec@1.0.2: {}
tinyglobby@0.2.15:
@@ -12554,6 +13724,12 @@ snapshots:
dependencies:
tldts-core: 6.1.86
+ to-buffer@1.2.2:
+ dependencies:
+ isarray: 2.0.5
+ safe-buffer: 5.2.1
+ typed-array-buffer: 1.0.3
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -12562,6 +13738,8 @@ snapshots:
dependencies:
tldts: 6.1.86
+ tr46@0.0.3: {}
+
tr46@5.1.1:
dependencies:
punycode: 2.3.1
@@ -12594,6 +13772,10 @@ snapshots:
optionalDependencies:
fsevents: 2.3.3
+ tunnel-agent@0.6.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
@@ -12646,6 +13828,11 @@ snapshots:
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
+ unbzip2-stream@1.4.3:
+ dependencies:
+ buffer: 5.7.1
+ through: 2.3.8
+
undici-types@6.21.0: {}
unified@11.0.5:
@@ -12816,6 +14003,8 @@ snapshots:
web-vitals@4.2.4: {}
+ webidl-conversions@3.0.1: {}
+
webidl-conversions@7.0.0: {}
whatwg-encoding@3.1.1:
@@ -12829,6 +14018,11 @@ snapshots:
tr46: 5.1.1
webidl-conversions: 7.0.0
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
@@ -12876,6 +14070,8 @@ snapshots:
word-wrap@1.2.5: {}
+ wrappy@1.0.2: {}
+
ws@8.18.3: {}
xml-name-validator@5.0.0: {}
@@ -12898,6 +14094,11 @@ snapshots:
lib0: 0.2.115
yjs: 13.6.28
+ yauzl@2.10.0:
+ dependencies:
+ buffer-crc32: 0.2.13
+ fd-slicer: 1.1.0
+
yjs@13.6.28:
dependencies:
lib0: 0.2.115
@@ -12908,6 +14109,8 @@ snapshots:
dependencies:
zod: 4.2.1
+ zod@3.21.1: {}
+
zod@4.2.1: {}
zustand@5.0.9(@types/react@19.2.7)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3)):