From a3798db1e6b485122dabc156f831d1b1d045d5ba Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Thu, 9 Oct 2025 20:13:15 +0530 Subject: [PATCH] fix: cli init --- README.md | 43 +- SECURITY.md | 10 +- .../app/components/common/styled-markdown.tsx | 4 +- packages/cli/.eslintrc.cjs | 85 + packages/cli/.prettierrc.json | 4 + packages/cli/README.md | 0 packages/cli/package.json | 95 ++ packages/cli/src/cli/common.ts | 70 + packages/cli/src/cli/index.ts | 14 + packages/cli/src/commands/init.ts | 29 + packages/cli/src/consts.ts | 11 + packages/cli/src/index.ts | 20 + packages/cli/src/utilities/axios.ts | 14 + packages/cli/src/utilities/cliOutput.ts | 124 ++ packages/cli/src/utilities/configFiles.ts | 93 ++ .../cli/src/utilities/configValidation.ts | 84 + packages/cli/src/utilities/fileSystem.ts | 113 ++ .../utilities/getEnviromentVariableFactory.ts | 68 + packages/cli/src/utilities/getVersion.ts | 14 + packages/cli/src/utilities/initialBanner.ts | 30 + packages/cli/src/utilities/logger.ts | 147 ++ packages/cli/tsconfig.json | 33 + packages/cli/tsup.config.ts | 26 + packages/cli/types.d.ts | 14 + pnpm-lock.yaml | 1368 ++++++++++++++++- 25 files changed, 2433 insertions(+), 80 deletions(-) create mode 100644 packages/cli/.eslintrc.cjs create mode 100644 packages/cli/.prettierrc.json create mode 100644 packages/cli/README.md create mode 100644 packages/cli/package.json create mode 100644 packages/cli/src/cli/common.ts create mode 100644 packages/cli/src/cli/index.ts create mode 100644 packages/cli/src/commands/init.ts create mode 100644 packages/cli/src/consts.ts create mode 100644 packages/cli/src/index.ts create mode 100644 packages/cli/src/utilities/axios.ts create mode 100644 packages/cli/src/utilities/cliOutput.ts create mode 100644 packages/cli/src/utilities/configFiles.ts create mode 100644 packages/cli/src/utilities/configValidation.ts create mode 100644 packages/cli/src/utilities/fileSystem.ts create mode 100644 packages/cli/src/utilities/getEnviromentVariableFactory.ts create mode 100644 packages/cli/src/utilities/getVersion.ts create mode 100644 packages/cli/src/utilities/initialBanner.ts create mode 100644 packages/cli/src/utilities/logger.ts create mode 100644 packages/cli/tsconfig.json create mode 100644 packages/cli/tsup.config.ts create mode 100644 packages/cli/types.d.ts diff --git a/README.md b/README.md index 36d0f3a..8d43300 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ CORE memory achieves **88.24%** average accuracy in Locomo dataset across all re ## Overview -**Problem** +**Problem** Developers waste time re-explaining context to AI tools. Hit token limits in Claude? Start fresh and lose everything. Switch from ChatGPT/Claude to Cursor? Explain your context again. Your conversations, decisions, and insights vanish between sessions. With every new AI tool, the cost of context switching grows. @@ -64,17 +64,17 @@ Developers waste time re-explaining context to AI tools. Hit token limits in Cla CORE is an open-source unified, persistent memory layer for all your AI tools. Your context follows you from Cursor to Claude to ChatGPT to Claude Code. One knowledge graph remembers who said what, when, and why. Connect once, remember everywhere. Stop managing context and start building. ## 🚀 Get Started + **Build your unified memory graph in 5 minutes:** 1. **Sign Up** at [core.heysol.ai](https://core.heysol.ai) and create your account 2. **Add your first memory** - share context about yourself - first-memory - +first-memory 3. **Visualize your memory graph** and see how CORE automatically forms connections between facts -5. **Test it out** - ask "What do you know about me?" in conversatio section -6. Connect to your tools: +4. **Test it out** - ask "What do you know about me?" in conversatio section +5. Connect to your tools: - [Claude](https://docs.heysol.ai/providers/claude) & [Cursor](https://docs.heysol.ai/providers/cursor) - coding with context - [CLaude Code CLI](https://docs.heysol.ai/providers/claude-code) & [Codex CLI](https://docs.heysol.ai/providers/codex) - terminal-based coding with memory - [Add Browser Extension](https://docs.heysol.ai/providers/browser-extension) - bring your memory to any website @@ -82,24 +82,24 @@ CORE is an open-source unified, persistent memory layer for all your AI tools. Y ## 🧩 Key Features -### 🧠 **Unified, Portable Memory**: +### 🧠 **Unified, Portable Memory**: + Add and recall your memory across **Cursor, Windsurf, Claude Desktop, Claude Code, Gemini CLI, AWS's Kiro, VS Code, and Roo Code** via MCP ![core-claude](https://github.com/user-attachments/assets/56c98288-ee87-4cd0-8b02-860aca1c7f9a) - -### 🕸️ **Temporal + Reified Knowledge Graph**: +### 🕸️ **Temporal + Reified Knowledge Graph**: Remember the story behind every fact—track who said what, when, and why with rich relationships and full provenance, not just flat storage ![core-memory-graph](https://github.com/user-attachments/assets/5d1ee659-d519-4624-85d1-e0497cbdd60a) - -### 🌐 **Browser Extension**: +### 🌐 **Browser Extension**: Save conversations and content from ChatGPT, Grok, Gemini, Twitter, YouTube, blog posts, and any webpage directly into your CORE memory. **How to Use Extension** + 1. [Download the Extension](https://chromewebstore.google.com/detail/core-extension/cglndoindnhdbfcbijikibfjoholdjcc) from the Chrome Web Store. 2. Login to [CORE dashboard](https://core.heysol.ai) - Navigate to Settings (bottom left) @@ -108,13 +108,12 @@ Save conversations and content from ChatGPT, Grok, Gemini, Twitter, YouTube, blo https://github.com/user-attachments/assets/6e629834-1b9d-4fe6-ae58-a9068986036a +### 💬 **Chat with Memory**: -### 💬 **Chat with Memory**: Ask questions like "What are my writing preferences?" with instant insights from your connected knowledge ![chat-with-memory](https://github.com/user-attachments/assets/d798802f-bd51-4daf-b2b5-46de7d206f66) - ### ⚡ **Auto-Sync from Apps**: Automatically capture relevant context from Linear, Slack, Notion, GitHub and other connected apps into your CORE memory @@ -123,16 +122,12 @@ Automatically capture relevant context from Linear, Slack, Notion, GitHub and ot ![core-slack](https://github.com/user-attachments/assets/d5fefe38-221e-4076-8a44-8ed673960f03) - -### 🔗 **MCP Integration Hub**: +### 🔗 **MCP Integration Hub**: Connect Linear, Slack, GitHub, Notion once to CORE—then use all their tools in Claude, Cursor, or any MCP client with a single URL - ![core-linear-claude](https://github.com/user-attachments/assets/7d59d92b-8c56-4745-a7ab-9a3c0341aa32) - - ## How CORE create memory memory-ingest-diagram @@ -146,7 +141,6 @@ CORE’s ingestion pipeline has four phases designed to capture evolving context The Result: Instead of a flat database, CORE gives you a memory that grows and changes with you - preserving context, evolution, and ownership so agents can actually use it. - ![memory-ingest-eg](https://github.com/user-attachments/assets/1d0a8007-153a-4842-9586-f6f4de43e647) ## How CORE recalls from memory @@ -171,7 +165,7 @@ Explore our documentation to get the most out of CORE - [Connect Core MCP with Claude](https://docs.heysol.ai/providers/claude) - [Connect Core MCP with Cursor](https://docs.heysol.ai/providers/cursor) - [Connect Core MCP with Claude Code](https://docs.heysol.ai/providers/claude-code) -- [Connect Core MCP with Codex](https://docs.heysol.ai/providers/codex) +- [Connect Core MCP with Codex](https://docs.heysol.ai/providers/codex) - [Basic Concepts](https://docs.heysol.ai/overview) - [API Reference](https://docs.heysol.ai/api-reference/get-user-profile) @@ -183,7 +177,7 @@ CORE takes security seriously. We implement industry-standard security practices - **Data Encryption**: All data in transit (TLS 1.3) and at rest (AES-256) - **Authentication**: OAuth 2.0 and magic link authentication - **Access Control**: Workspace-based isolation and role-based permissions -- **Vulnerability Reporting**: Please report security issues to harshith@tegon.ai +- **Vulnerability Reporting**: Please report security issues to harshith@poozle.dev For detailed security information, see our [Security Policy](SECURITY.md). @@ -216,12 +210,3 @@ Have questions or feedback? We're here to help: - - - - - - - - - diff --git a/SECURITY.md b/SECURITY.md index 70cbf0b..09443ce 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -19,9 +19,10 @@ We appreciate responsible disclosure of security vulnerabilities. If you discove ### How to Report -**📧 Email**: harshith@tegon.ai +**📧 Email**: harshith@poozle.dev Please include the following information in your report: + - A clear description of the vulnerability - Steps to reproduce the issue - Potential impact and severity assessment @@ -119,7 +120,8 @@ Security updates will be: ## Contact Information For security-related inquiries: -- **Security Team**: harshith@tegon.ai + +- **Security Team**: harshith@poozle.dev - **General Support**: [Discord Community](https://discord.gg/YGUZcvDjUa) ## Bug Bounty Program @@ -128,5 +130,5 @@ We are currently evaluating the implementation of a formal bug bounty program. I --- -*Last Updated: January 2025* -*Version: 1.0* \ No newline at end of file +_Last Updated: January 2025_ +_Version: 1.0_ diff --git a/apps/webapp/app/components/common/styled-markdown.tsx b/apps/webapp/app/components/common/styled-markdown.tsx index 3b33881..01ddfd5 100644 --- a/apps/webapp/app/components/common/styled-markdown.tsx +++ b/apps/webapp/app/components/common/styled-markdown.tsx @@ -1,4 +1,4 @@ -import ReactMarkdown, {type Components } from "react-markdown"; +import ReactMarkdown, { type Components } from "react-markdown"; import { cn } from "~/lib/utils"; const markdownComponents: Components = { @@ -74,7 +74,7 @@ const markdownComponents: Components = { ol: ({ className, ...props }) => (
    =18.0.0" + } +} diff --git a/packages/cli/src/cli/common.ts b/packages/cli/src/cli/common.ts new file mode 100644 index 0000000..f621339 --- /dev/null +++ b/packages/cli/src/cli/common.ts @@ -0,0 +1,70 @@ +import { outro } from '@clack/prompts'; +import { Command } from 'commander'; +import { z } from 'zod'; +import { fromZodError } from 'zod-validation-error'; + +import { chalkError } from '../utilities/cliOutput'; +import { logger } from '../utilities/logger'; + +export const CommonCommandOptions = z.object({ + apiUrl: z.string().optional(), + logLevel: z + .enum(['debug', 'info', 'log', 'warn', 'error', 'none']) + .default('log'), + skipTelemetry: z.boolean().default(false), +}); + +export type CommonCommandOptions = z.infer; + +export function commonOptions(command: Command) { + return command.option( + '-l, --log-level ', + 'The CLI log level to use (debug, info, log, warn, error, none). This does not effect the log level of your tegon actions', + 'log', + ); +} + +export class SkipLoggingError extends Error {} +export class SkipCommandError extends Error {} +export class OutroCommandError extends SkipCommandError {} + +export async function wrapCommandAction( + name: string, + schema: T, + options: unknown, + action: (opts: z.output) => Promise, +): Promise { + try { + const parsedOptions = schema.safeParse(options); + + if (!parsedOptions.success) { + throw new Error(fromZodError(parsedOptions.error).toString()); + } + + logger.loggerLevel = parsedOptions.data.logLevel; + + logger.debug(`Running "${name}" with the following options`, { + options, + }); + + const result = await action(parsedOptions.data); + + return result; + } catch (e) { + if (e instanceof SkipLoggingError) { + logger.log( + `${chalkError('X Error:')} ${e instanceof Error ? e.message : String(e)}`, + ); + } else if (e instanceof OutroCommandError) { + outro('Operation cancelled'); + } else if (e instanceof SkipCommandError) { + // do nothing + } else { + logger.log( + `${chalkError('X Error:')} ${e instanceof Error ? e.message : String(e)}`, + ); + } + + throw e; + } +} diff --git a/packages/cli/src/cli/index.ts b/packages/cli/src/cli/index.ts new file mode 100644 index 0000000..54b0b8e --- /dev/null +++ b/packages/cli/src/cli/index.ts @@ -0,0 +1,14 @@ +import { Command } from 'commander'; + +import { configureInitCommand } from '../commands/init'; +import { COMMAND_NAME } from '../consts'; +import { getVersion } from '../utilities/getVersion'; + +export const program = new Command(); + +program + .name(COMMAND_NAME) + .description('Cli to run core') + .version(getVersion(), '-v, --version', 'Display the version number'); + +configureInitCommand(program); diff --git a/packages/cli/src/commands/init.ts b/packages/cli/src/commands/init.ts new file mode 100644 index 0000000..8bbb20c --- /dev/null +++ b/packages/cli/src/commands/init.ts @@ -0,0 +1,29 @@ +import fs from 'node:fs'; +import path from 'path'; + +import { spinner, intro, outro } from '@clack/prompts'; +import { Command } from 'commander'; +import degit from 'degit'; + +import { commonOptions } from '../cli/common'; +import { getVersion } from '../utilities/getVersion'; +import { printInitialBanner } from '../utilities/initialBanner'; + +export function configureInitCommand(program: Command) { + return commonOptions( + program + .command('init') + .description('Init a tegon action') + .option( + '-a, --action ', + 'Name of the action folder to initialize', + 'base', + ), + ) + .version(getVersion(), '-v, --version', 'Display the version number') + .action(async (options) => { + await printInitialBanner(); + + const { action } = options; + }); +} diff --git a/packages/cli/src/consts.ts b/packages/cli/src/consts.ts new file mode 100644 index 0000000..533cd01 --- /dev/null +++ b/packages/cli/src/consts.ts @@ -0,0 +1,11 @@ +import path from 'path'; +import { fileURLToPath } from 'url'; + +// With the move to TSUP as a build tool, this keeps path routes in other files (installers, loaders, etc) in check more easily. +// Path is in relation to a single index.js file inside ./dist +const __filename = fileURLToPath(import.meta.url); +const distPath = path.dirname(__filename); + +export const PKG_ROOT = path.join(distPath, '../'); +export const COMMAND_NAME = 'core'; +export const CONFIG_FILE = 'config.json'; diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts new file mode 100644 index 0000000..879569c --- /dev/null +++ b/packages/cli/src/index.ts @@ -0,0 +1,20 @@ +#!/usr/bin/env node + +import { program } from './cli/index'; +import { logger } from './utilities/logger'; + +const main = async () => { + await program.parseAsync(); +}; + +main().catch((err) => { + if (err instanceof Error) { + logger.error(err); + } else { + logger.error( + 'An unknown error has occurred. Please open an issue on github with the below:', + ); + logger.error(err); + } + process.exit(1); +}); diff --git a/packages/cli/src/utilities/axios.ts b/packages/cli/src/utilities/axios.ts new file mode 100644 index 0000000..8838f22 --- /dev/null +++ b/packages/cli/src/utilities/axios.ts @@ -0,0 +1,14 @@ +import axios from 'axios'; + +// Intercept axios requests and add token to the request +export function interceptAxios(token: string) { + axios.interceptors.request.use((axiosConfig) => { + if (!axiosConfig.headers.Authorization) { + if (token) { + axiosConfig.headers.Authorization = `Bearer ${token}`; + } + } + + return axiosConfig; + }); +} diff --git a/packages/cli/src/utilities/cliOutput.ts b/packages/cli/src/utilities/cliOutput.ts new file mode 100644 index 0000000..7213615 --- /dev/null +++ b/packages/cli/src/utilities/cliOutput.ts @@ -0,0 +1,124 @@ +import { log } from '@clack/prompts'; +import chalk from 'chalk'; +import terminalLink, { Options as TerminalLinkOptions } from 'terminal-link'; + +export const green = '#4FFF54'; +export const purple = '#735BF3'; + +export function chalkGreen(text: string) { + return chalk.hex(green)(text); +} + +export function chalkPurple(text: string) { + return chalk.hex(purple)(text); +} + +export function chalkGrey(text: string) { + return chalk.hex('#878C99')(text); +} + +export function chalkError(text: string) { + return chalk.hex('#E11D48')(text); +} + +export function chalkWarning(text: string) { + return chalk.yellow(text); +} + +export function chalkSuccess(text: string) { + return chalk.hex('#28BF5C')(text); +} + +export function chalkLink(text: string) { + return chalk.underline.hex('#D7D9DD')(text); +} + +export function chalkWorker(text: string) { + return chalk.hex('#FFFF89')(text); +} + +export function chalkTask(text: string) { + return chalk.hex('#60A5FA')(text); +} + +export function chalkRun(text: string) { + return chalk.hex('#A78BFA')(text); +} + +export function logo() { + return `${chalk.hex(purple).bold('Core')}`; +} + +// Mar 27 09:17:25.653 +export function prettyPrintDate(date: Date = new Date()) { + let formattedDate = new Intl.DateTimeFormat('en-US', { + month: 'short', + day: '2-digit', + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false, + }).format(date); + + // Append milliseconds + formattedDate += `.${`00${date.getMilliseconds()}`.slice(-3)}`; + + return formattedDate; +} + +export function prettyError(header: string, body?: string, footer?: string) { + const prefix = 'Error: '; + const indent = Array(prefix.length).fill(' ').join(''); + const spacing = '\n\n'; + + const prettyPrefix = chalkError(prefix); + + const withIndents = (text?: string) => + text + ?.split('\n') + .map((line) => `${indent}${line}`) + .join('\n'); + + const prettyBody = withIndents(body); + const prettyFooter = withIndents(footer); + + log.error( + `${prettyPrefix}${header}${prettyBody ? `${spacing}${prettyBody}` : ''}${ + prettyFooter ? `${spacing}${prettyFooter}` : '' + }`, + ); +} + +export function prettyWarning(header: string, body?: string, footer?: string) { + const prefix = 'Warning: '; + const indent = Array(prefix.length).fill(' ').join(''); + const spacing = '\n\n'; + + const prettyPrefix = chalkWarning(prefix); + + const withIndents = (text?: string) => + text + ?.split('\n') + .map((line) => `${indent}${line}`) + .join('\n'); + + const prettyBody = withIndents(body); + const prettyFooter = withIndents(footer); + + log.warn( + `${prettyPrefix}${header}${prettyBody ? `${spacing}${prettyBody}` : ''}${ + prettyFooter ? `${spacing}${prettyFooter}` : '' + }`, + ); +} + +export function cliLink( + text: string, + url: string, + options?: TerminalLinkOptions, +) { + return terminalLink(text, url, { + fallback: (text, url) => `${text} ${url}`, + ...options, + }); +} diff --git a/packages/cli/src/utilities/configFiles.ts b/packages/cli/src/utilities/configFiles.ts new file mode 100644 index 0000000..322bfc6 --- /dev/null +++ b/packages/cli/src/utilities/configFiles.ts @@ -0,0 +1,93 @@ +import { mkdirSync, writeFileSync } from 'node:fs'; +import path from 'node:path'; + +import xdgAppPaths from 'xdg-app-paths'; +import { z } from 'zod'; + +import { readJSONFileSync } from './fileSystem.js'; +import { logger } from './logger.js'; + +function getGlobalConfigFolderPath() { + const configDir = xdgAppPaths('core').config(); + + return configDir; +} + +// auth config file +export const UserAuthConfigSchema = z.object({ + accessToken: z.string().optional(), + apiUrl: z.string().optional(), + triggerUrl: z.string().optional(), + workspaceId: z.string().optional(), +}); + +export type UserAuthConfig = z.infer; + +const UserAuthConfigFileSchema = z.record(UserAuthConfigSchema); + +type UserAuthConfigFile = z.infer; + +function getAuthConfigFilePath() { + return path.join(getGlobalConfigFolderPath(), 'default.json'); +} + +export function writeAuthConfigProfile( + config: UserAuthConfig, + profile: string = 'default', +) { + const existingConfig = readAuthConfigFile() || {}; + + existingConfig[profile] = config; + + writeAuthConfigFile(existingConfig); +} + +export function readAuthConfigProfile( + profile: string = 'default', +): UserAuthConfig | undefined { + try { + const authConfigFilePath = getAuthConfigFilePath(); + + logger.debug(`Reading auth config file`, { authConfigFilePath }); + + const json = readJSONFileSync(authConfigFilePath); + const parsed = UserAuthConfigFileSchema.parse(json); + return parsed[profile]; + } catch (error) { + logger.debug(`Error reading auth config file: ${error}`); + return undefined; + } +} + +export function deleteAuthConfigProfile(profile: string = 'default') { + const existingConfig = readAuthConfigFile() || {}; + + delete existingConfig[profile]; + + writeAuthConfigFile(existingConfig); +} + +export function readAuthConfigFile(): UserAuthConfigFile | undefined { + try { + const authConfigFilePath = getAuthConfigFilePath(); + + logger.debug(`Reading auth config file`, { authConfigFilePath }); + + const json = readJSONFileSync(authConfigFilePath); + const parsed = UserAuthConfigFileSchema.parse(json); + return parsed; + } catch (error) { + logger.debug(`Error reading auth config file: ${error}`); + return undefined; + } +} + +export function writeAuthConfigFile(config: UserAuthConfigFile) { + const authConfigFilePath = getAuthConfigFilePath(); + mkdirSync(path.dirname(authConfigFilePath), { + recursive: true, + }); + writeFileSync(path.join(authConfigFilePath), JSON.stringify(config), { + encoding: 'utf-8', + }); +} diff --git a/packages/cli/src/utilities/configValidation.ts b/packages/cli/src/utilities/configValidation.ts new file mode 100644 index 0000000..ef102f6 --- /dev/null +++ b/packages/cli/src/utilities/configValidation.ts @@ -0,0 +1,84 @@ +import fs from 'node:fs'; +import path from 'path'; + +import { log } from '@clack/prompts'; + +import { readJSONFileSync } from './fileSystem'; +import { ConfigMap } from '../api/client'; + +export const activeProcesses: any[] = []; // Store active processes for cleanup + +// Validate and export the found config files +export async function validateAndExportConfigs( + configPaths: string[], + cwd: string, +): Promise { + const validConfigs: ConfigMap[] = []; + + for (const configPath of configPaths) { + const configMap = await validateAndExportConfig(cwd, configPath); + + if (configMap) { + validConfigs.push(configMap); + } + } + + return validConfigs; +} + +export async function validateAndExportConfig( + cwd: string, + configPath: string, +): Promise { + const dir = path.dirname(configPath); + const indexPath = path.join(dir, 'index.ts'); + + if (!fs.existsSync(indexPath)) { + log.error(`index.ts not found at ${indexPath}`); + return undefined; + } + + log.info(`Found index.ts at ${indexPath}`); + + const config = readJSONFileSync(configPath); + const relativeDir = `./${path.relative(cwd, dir)}`; + + return { path: relativeDir, config }; +} + +// Utility function to check for all config.json files +export const checkConfigFiles = (dir: string): string[] => { + const foundConfigs: string[] = []; + + // Check for config.json in the root directory + const rootConfigPath = path.join(dir, 'config.json'); + if (fs.existsSync(rootConfigPath)) { + foundConfigs.push(rootConfigPath); + } + + // Check each subdirectory one level down for config.json + const subDirs = fs + .readdirSync(dir, { withFileTypes: true }) + .filter((dirent) => dirent.isDirectory()) + .map((dirent) => path.join(dir, dirent.name)); + + for (const subDir of subDirs) { + const subConfigPath = path.join(subDir, 'config.json'); + if (fs.existsSync(subConfigPath)) { + foundConfigs.push(subConfigPath); + } + } + + return foundConfigs; +}; + +export const checkIfConfigExist = (dir: string) => { + // Check for config.json in the root directory + const rootConfigPath = path.join(dir, 'config.json'); + + if (fs.existsSync(rootConfigPath)) { + return true; + } + + return false; +}; diff --git a/packages/cli/src/utilities/fileSystem.ts b/packages/cli/src/utilities/fileSystem.ts new file mode 100644 index 0000000..c3e1ffa --- /dev/null +++ b/packages/cli/src/utilities/fileSystem.ts @@ -0,0 +1,113 @@ +import fsSync from 'fs'; +import fsModule, { writeFile } from 'fs/promises'; +import fs from 'node:fs'; +import { tmpdir } from 'node:os'; +import pathModule from 'node:path'; + +import { log } from '@clack/prompts'; + +// Creates a file at the given path, if the directory doesn't exist it will be created +export async function createFile( + path: string, + contents: string, +): Promise { + await fsModule.mkdir(pathModule.dirname(path), { recursive: true }); + await fsModule.writeFile(path, contents); + + return path; +} + +export function isDirectory(configPath: string) { + try { + return fs.statSync(configPath).isDirectory(); + } catch (error) { + // ignore error + return false; + } +} + +export async function pathExists(path: string): Promise { + return fsSync.existsSync(path); +} + +export async function someFileExists( + directory: string, + filenames: string[], +): Promise { + for (let index = 0; index < filenames.length; index++) { + const filename = filenames[index]; + if (!filename) { + continue; + } + + const path = pathModule.join(directory, filename); + if (await pathExists(path)) { + return true; + } + } + + return false; +} + +export async function removeFile(path: string) { + await fsModule.unlink(path); +} + +export async function readFile(path: string) { + return await fsModule.readFile(path, 'utf8'); +} + +export async function readJSONFile(path: string) { + const fileContents = await fsModule.readFile(path, 'utf8'); + + return JSON.parse(fileContents); +} + +export async function safeFeadJSONFile(path: string) { + try { + const fileExists = await pathExists(path); + + if (!fileExists) { + return; + } + + const fileContents = await readFile(path); + + return JSON.parse(fileContents); + } catch (e: any) { + log.error(e); + } +} + +export async function writeJSONFile(path: string, json: any, pretty = false) { + await writeFile( + path, + JSON.stringify(json, undefined, pretty ? 2 : undefined), + 'utf8', + ); +} + +export function readJSONFileSync(path: string) { + const fileContents = fsSync.readFileSync(path, 'utf8'); + + return JSON.parse(fileContents); +} + +export function safeDeleteFileSync(path: string) { + try { + fs.unlinkSync(path); + } catch (error) { + // ignore error + } +} + +// Create a temporary directory within the OS's temp directory +export async function createTempDir(): Promise { + // Generate a unique temp directory path + const tempDirPath: string = pathModule.join(tmpdir(), 'core-temp-'); + + // Create the temp directory synchronously and return the path + const directory = await fsModule.mkdtemp(tempDirPath); + + return directory; +} diff --git a/packages/cli/src/utilities/getEnviromentVariableFactory.ts b/packages/cli/src/utilities/getEnviromentVariableFactory.ts new file mode 100644 index 0000000..92c2514 --- /dev/null +++ b/packages/cli/src/utilities/getEnviromentVariableFactory.ts @@ -0,0 +1,68 @@ +import { logger } from './logger'; + +type VariableNames = 'CORE_LOG_LEVEL'; + +type DeprecatedNames = ''; + +/** + * Create a function used to access an environment variable. + * + * This is not memoized to allow us to change the value at runtime, such as in testing. + * A warning is shown if the client is using a deprecated version - but only once. + */ +export function getEnvironmentVariableFactory({ + variableName, + deprecatedName, +}: { + variableName: VariableNames; + deprecatedName?: DeprecatedNames; +}): () => string | undefined; + +/** + * Create a function used to access an environment variable, with a default value. + * + * This is not memoized to allow us to change the value at runtime, such as in testing. + * A warning is shown if the client is using a deprecated version - but only once. + */ +export function getEnvironmentVariableFactory({ + variableName, + deprecatedName, + defaultValue, +}: { + variableName: VariableNames; + deprecatedName?: DeprecatedNames; + defaultValue: () => string; +}): () => string; + +/** + * Create a function used to access an environment variable. + * + * This is not memoized to allow us to change the value at runtime, such as in testing. + * A warning is shown if the client is using a deprecated version - but only once. + */ +export function getEnvironmentVariableFactory({ + variableName, + deprecatedName, + defaultValue, +}: { + variableName: VariableNames; + deprecatedName?: DeprecatedNames; + defaultValue?: () => string; +}): () => string | undefined { + let hasWarned = false; + return () => { + if (process.env[variableName]) { + return process.env[variableName]; + } else if (deprecatedName && process.env[deprecatedName]) { + if (!hasWarned) { + // Only show the warning once. + hasWarned = true; + logger.warn( + `Using "${deprecatedName}" environment variable. This is deprecated. Please use "${variableName}", instead.`, + ); + } + return process.env[deprecatedName]; + } + return defaultValue?.(); + }; +} diff --git a/packages/cli/src/utilities/getVersion.ts b/packages/cli/src/utilities/getVersion.ts new file mode 100644 index 0000000..a5e3431 --- /dev/null +++ b/packages/cli/src/utilities/getVersion.ts @@ -0,0 +1,14 @@ +import path from 'path'; + +import { type PackageJson } from 'type-fest'; + +import { readJSONFileSync } from './fileSystem'; +import { PKG_ROOT } from '../consts'; + +export function getVersion() { + const packageJsonPath = path.join(PKG_ROOT, 'package.json'); + + const packageJsonContent = readJSONFileSync(packageJsonPath) as PackageJson; + + return packageJsonContent.version ?? '1.0.0'; +} diff --git a/packages/cli/src/utilities/initialBanner.ts b/packages/cli/src/utilities/initialBanner.ts new file mode 100644 index 0000000..7f4c6c2 --- /dev/null +++ b/packages/cli/src/utilities/initialBanner.ts @@ -0,0 +1,30 @@ +import { chalkGrey, chalkRun, chalkTask, chalkWorker, logo } from './cliOutput'; +import { getVersion } from './getVersion'; +import { logger } from './logger'; + +export async function printInitialBanner() { + const cliVersion = getVersion(); + const text = `\n${logo()} ${chalkGrey(`(${cliVersion})`)}\n`; + + logger.info(text); +} + +export async function printStandloneInitialBanner() { + const cliVersion = getVersion(); + + logger.log(`\n${logo()} ${chalkGrey(`(${cliVersion})`)}`); + logger.log(`${chalkGrey('-'.repeat(54))}`); +} + +export function printDevBanner(printTopBorder = true) { + if (printTopBorder) { + logger.log(chalkGrey('-'.repeat(54))); + } + + logger.log( + `${chalkGrey('Key:')} ${chalkWorker('Version')} ${chalkGrey('|')} ${chalkTask( + 'Task', + )} ${chalkGrey('|')} ${chalkRun('Run')}`, + ); + logger.log(chalkGrey('-'.repeat(54))); +} diff --git a/packages/cli/src/utilities/logger.ts b/packages/cli/src/utilities/logger.ts new file mode 100644 index 0000000..212fb36 --- /dev/null +++ b/packages/cli/src/utilities/logger.ts @@ -0,0 +1,147 @@ +// This is a copy of the logger utility from the wrangler repo: https://github.com/cloudflare/workers-sdk/blob/main/packages/wrangler/src/logger.ts + +import type { Message } from 'esbuild'; + +import { format } from 'node:util'; + +import chalk from 'chalk'; +import CLITable from 'cli-table3'; +import { formatMessagesSync } from 'esbuild'; + +import { getEnvironmentVariableFactory } from './getEnviromentVariableFactory'; +export const LOGGER_LEVELS = { + none: -1, + error: 0, + warn: 1, + info: 2, + log: 3, + debug: 4, +} as const; + +export type LoggerLevel = keyof typeof LOGGER_LEVELS; + +/** A map from LOGGER_LEVEL to the error `kind` needed by `formatMessagesSync()`. */ +const LOGGER_LEVEL_FORMAT_TYPE_MAP = { + error: 'error', + warn: 'warning', + info: undefined, + log: undefined, + debug: undefined, +} as const; + +const getLogLevelFromEnv = getEnvironmentVariableFactory({ + variableName: 'CORE_LOG_LEVEL', +}); + +function getLoggerLevel(): LoggerLevel { + const fromEnv = getLogLevelFromEnv()?.toLowerCase(); + if (fromEnv !== undefined) { + if (fromEnv in LOGGER_LEVELS) { + return fromEnv as LoggerLevel; + } + const expected = Object.keys(LOGGER_LEVELS) + .map((level) => `"${level}"`) + .join(' | '); + console.warn( + `Unrecognised WRANGLER_LOG value ${JSON.stringify( + fromEnv, + )}, expected ${expected}, defaulting to "log"...`, + ); + } + return 'log'; +} + +export type TableRow = Record; + +export class Logger { + constructor() {} + + loggerLevel = getLoggerLevel(); + columns = process.stdout.columns; + + debug = (...args: unknown[]) => this.doLog('debug', args); + ignore = () => {}; + debugWithSanitization = (label: string, ...args: unknown[]) => { + this.doLog('debug', [label, ...args]); + }; + info = (...args: unknown[]) => this.doLog('info', args); + log = (...args: unknown[]) => this.doLog('log', args); + warn = (...args: unknown[]) => this.doLog('warn', args); + error = (...args: unknown[]) => this.doLog('error', args); + table( + data: Array>, + level?: Exclude, + ) { + const keys: Keys[] = + data.length === 0 ? [] : (Object.keys(data[0]!) as Keys[]); + const t = new CLITable({ + head: keys, + style: { + head: chalk.level ? ['blue'] : [], + border: chalk.level ? ['gray'] : [], + }, + }); + t.push(...data.map((row) => keys.map((k) => row[k]))); + return this.doLog(level ?? 'log', [t.toString()]); + } + + private doLog(messageLevel: Exclude, args: unknown[]) { + const message = this.formatMessage(messageLevel, format(...args)); + + // only send logs to the terminal if their level is at least the configured log-level + if (LOGGER_LEVELS[this.loggerLevel] >= LOGGER_LEVELS[messageLevel]) { + console[messageLevel](message); + } + } + + private formatMessage( + level: Exclude, + message: string, + ): string { + const kind = LOGGER_LEVEL_FORMAT_TYPE_MAP[level]; + if (kind) { + // Format the message using the esbuild formatter. + // The first line of the message is the main `text`, + // subsequent lines are put into the `notes`. + const [firstLine, ...otherLines] = message.split('\n'); + const notes = + otherLines.length > 0 + ? otherLines.map((text) => ({ text })) + : undefined; + return formatMessagesSync([{ text: firstLine, notes }], { + color: true, + kind, + terminalWidth: this.columns, + })[0]!; + } + return message; + } +} + +/** + * A drop-in replacement for `console` for outputting logging messages. + * + * Errors and Warnings will get additional formatting to highlight them to the user. + * You can also set a `logger.loggerLevel` value to one of "debug", "log", "warn" or "error", + * to filter out logging messages. + */ +export const logger = new Logger(); + +export function logBuildWarnings(warnings: Message[]) { + const logs = formatMessagesSync(warnings, { kind: 'warning', color: true }); + for (const log of logs) { + console.warn(log); + } +} + +/** + * Logs all errors/warnings associated with an esbuild BuildFailure in the same + * style esbuild would. + */ +export function logBuildFailure(errors: Message[], warnings: Message[]) { + const logs = formatMessagesSync(errors, { kind: 'error', color: true }); + for (const log of logs) { + console.error(log); + } + logBuildWarnings(warnings); +} diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json new file mode 100644 index 0000000..55d3399 --- /dev/null +++ b/packages/cli/tsconfig.json @@ -0,0 +1,33 @@ +// See: https://www.totaltypescript.com/tsconfig-cheat-sheet +{ + "include": [ + "./src/**/*.ts", + "./src/**/*.tsx", + "./e2e/**/*.ts", + "./types.d.ts", + "./tsup.config.ts" + ], + "compilerOptions": { + "esModuleInterop": true, + "skipLibCheck": true, + "target": "es2022", + "allowJs": true, + "resolveJsonModule": true, + "moduleDetection": "force", + "isolatedModules": true, + "strict": true, + "noUncheckedIndexedAccess": true, + /* Building for a monorepo */ + "declaration": true, + "composite": false, + "sourceMap": true, + "declarationMap": true, + /* We're building with tsup */ + "moduleResolution": "Bundler", + "module": "ESNext", + "noEmit": true, + "lib": ["es2022", "DOM"], + "types": ["node"] + }, + "exclude": ["node_modules", "./e2e/fixtures"] +} diff --git a/packages/cli/tsup.config.ts b/packages/cli/tsup.config.ts new file mode 100644 index 0000000..34b9bb7 --- /dev/null +++ b/packages/cli/tsup.config.ts @@ -0,0 +1,26 @@ +import { defineConfig } from 'tsup'; + +const isDev = process.env.npm_lifecycle_event === 'dev:main'; // This must match the npm script name + +export default defineConfig({ + clean: false, + tsconfig: 'tsconfig.json', + dts: true, + splitting: false, + entry: ['src/index.ts'], + format: ['esm'], + minify: false, + metafile: false, + sourcemap: true, + target: 'esnext', + outDir: 'dist', + async onSuccess() { + if (isDev) { + console.debug('Running onSuccess() in dev'); + // exec: node dist/index.js + } + }, + banner: { + js: "import { createRequire as createRequireFromMetaUrl } from 'node:module';const require = createRequireFromMetaUrl(import.meta.url);", + }, +}); diff --git a/packages/cli/types.d.ts b/packages/cli/types.d.ts new file mode 100644 index 0000000..8f8bd94 --- /dev/null +++ b/packages/cli/types.d.ts @@ -0,0 +1,14 @@ +declare module 'terminal-link' { + export interface Options { + fallback?: ((text: string, url: string) => string) | boolean; + } + + /** + * @deprecated The default fallback is broken in some terminals. Please use `cliLink` instead. + */ + export default function terminalLink( + text: string, + url: string, + options?: Options, + ): string; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5da3d4d..f76e347 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -792,6 +792,163 @@ importers: specifier: ^4.2.1 version: 4.3.2(typescript@5.8.3)(vite@6.3.5(@types/node@20.19.7)(jiti@2.4.2)(less@4.4.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.42.0)(tsx@4.20.4)(yaml@2.8.0)) + packages/cli: + dependencies: + '@anatine/esbuild-decorators': + specifier: ^0.2.19 + version: 0.2.19(esbuild@0.19.11) + '@clack/prompts': + specifier: ^0.7.0 + version: 0.7.0 + axios: + specifier: ^1.6.7 + version: 1.10.0 + chalk: + specifier: ^5.2.0 + version: 5.4.1 + chokidar: + specifier: ^3.5.3 + version: 3.6.0 + cli-table3: + specifier: ^0.6.3 + version: 0.6.5 + commander: + specifier: ^9.4.1 + version: 9.5.0 + cpy: + specifier: ^11.1.0 + version: 11.1.0 + degit: + specifier: ^2.8.4 + version: 2.8.4 + dotenv: + specifier: ^16.4.4 + version: 16.5.0 + esbuild: + specifier: ^0.19.11 + version: 0.19.11 + execa: + specifier: ^9.3.0 + version: 9.6.0 + glob: + specifier: ^10.3.10 + version: 10.4.5 + gradient-string: + specifier: ^2.0.2 + version: 2.0.2 + import-meta-resolve: + specifier: ^4.0.0 + version: 4.1.0 + ink: + specifier: ^4.4.1 + version: 4.4.1(@types/react@18.2.69)(react@18.3.1) + node-fetch: + specifier: ^3.3.0 + version: 3.3.2 + semver: + specifier: ^7.5.0 + version: 7.7.2 + std-env: + specifier: ^3.7.0 + version: 3.9.0 + terminal-link: + specifier: ^3.0.0 + version: 3.0.0 + tiny-invariant: + specifier: ^1.2.0 + version: 1.3.3 + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + typescript: + specifier: ^5.4.0 + version: 5.8.3 + url: + specifier: ^0.11.1 + version: 0.11.4 + xdg-app-paths: + specifier: ^8.3.0 + version: 8.3.0 + zod: + specifier: 3.22.3 + version: 3.22.3 + zod-validation-error: + specifier: ^1.5.0 + version: 1.5.0(zod@3.22.3) + devDependencies: + '@types/degit': + specifier: ^2.8.6 + version: 2.8.6 + '@types/gradient-string': + specifier: ^1.1.2 + version: 1.1.6 + '@types/node': + specifier: '18' + version: 18.19.115 + '@types/object-hash': + specifier: ^3.0.6 + version: 3.0.6 + '@types/semver': + specifier: ^7.3.13 + version: 7.7.0 + '@types/ws': + specifier: ^8.5.3 + version: 8.18.1 + '@typescript-eslint/eslint-plugin': + specifier: ^7.1.0 + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^7.1.0 + version: 7.18.0(eslint@8.57.1)(typescript@5.8.3) + '@vercel/style-guide': + specifier: ^5.2.0 + version: 5.2.0(@next/eslint-plugin-next@14.1.0)(eslint@8.57.1)(prettier@3.5.3)(typescript@5.8.3) + eslint: + specifier: ^8.56.0 + version: 8.57.1 + eslint-config-next: + specifier: 14.1.0 + version: 14.1.0(eslint@8.57.1)(typescript@5.8.3) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.2(eslint@8.57.1) + eslint-config-turbo: + specifier: ^2.0.0 + version: 2.5.8(eslint@8.57.1)(turbo@2.5.4) + eslint-plugin-import: + specifier: ^2.29.1 + version: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + eslint-plugin-notice: + specifier: ^0.9.10 + version: 0.9.10(eslint@8.57.1) + eslint-plugin-only-warn: + specifier: ^1.1.0 + version: 1.1.0 + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.3) + eslint-plugin-unused-imports: + specifier: ^3.0.0 + version: 3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + nodemon: + specifier: ^3.0.1 + version: 3.1.10 + open: + specifier: ^10.0.3 + version: 10.2.0 + p-retry: + specifier: ^6.2.0 + version: 6.2.1 + rimraf: + specifier: ^5.0.7 + version: 5.0.10 + tsup: + specifier: ^8.0.1 + version: 8.5.0(@swc/core@1.3.101(@swc/helpers@0.5.17))(jiti@2.4.2)(postcss@8.5.5)(tsx@4.20.4)(typescript@5.8.3)(yaml@2.8.0) + type-fest: + specifier: ^3.6.0 + version: 3.13.1 + packages/database: dependencies: '@prisma/client': @@ -975,6 +1132,10 @@ packages: peerDependencies: zod: ^3.23.8 + '@alcalzone/ansi-tokenize@0.1.3': + resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} + engines: {node: '>=14.13.1'} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -983,6 +1144,11 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@anatine/esbuild-decorators@0.2.19': + resolution: {integrity: sha512-pyj6ULyMacyzpDqlnbS2OCkOqxcVgk8IqiTMRJ5CrsF8Yl1azvlX/AM6xWR8UzHKUYDlWOw5mOpos3+7KKR0Lw==} + peerDependencies: + esbuild: ~0.14.29 + '@anthropic-ai/sdk@0.60.0': resolution: {integrity: sha512-9zu/TXaUy8BZhXedDtt1wT3H4LOlpKDO1/ftiFpeR3N1PCr3KJFKkxxlQWWt1NNp08xSwUNJ3JNY8yhl8av6eQ==} hasBin: true @@ -1688,12 +1854,20 @@ packages: '@changesets/write@0.2.3': resolution: {integrity: sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==} + '@clack/core@0.3.5': + resolution: {integrity: sha512-5cfhQNH+1VQ2xLQlmzXMqUoiaH0lRBq9/CLW9lTyMbuKLC3+xEK01tHVvyut++mLOn5urSHmkm6I0Lg9MaJSTQ==} + '@clack/core@0.4.2': resolution: {integrity: sha512-NYQfcEy8MWIxrT5Fj8nIVchfRFA26yYKJcvBS7WlUIlw2OmQOY9DhGGXMovyI5J5PpxrCPGkgUi207EBrjpBvg==} '@clack/prompts@0.10.1': resolution: {integrity: sha512-Q0T02vx8ZM9XSv9/Yde0jTmmBQufZhPJfYAg2XrrrxWWaZgq1rr8nU8Hv710BQ1dhoP8rtY7YUdpGej2Qza/cw==} + '@clack/prompts@0.7.0': + resolution: {integrity: sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==} + bundledDependencies: + - is-unicode-supported + '@coji/remix-auth-google@4.2.0': resolution: {integrity: sha512-H9i3fvVz0GE18GUZHpz7p7FQjuiuloTIBAPjW7cfv7lUEk+mI6WRTVLEHJBLLuTlAF1+0EbzvPRYKutxZiFdfw==} @@ -2684,6 +2858,12 @@ packages: '@mdx-js/mdx@2.3.0': resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + '@microsoft/tsdoc-config@0.16.2': + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + '@mjackson/headers@0.10.0': resolution: {integrity: sha512-U1Eu1gF979k7ZoIBsJyD+T5l9MjtPONsZfoXfktsQHPJD0s7SokBGx+tLKDLsOY+gzVYAWS0yRFDNY8cgbQzWQ==} @@ -2733,6 +2913,9 @@ packages: '@next/env@14.1.4': resolution: {integrity: sha512-e7X7bbn3Z6DWnDi75UWn+REgAbLEqxI8Tq2pkFOFAMpWAWApz/YCUhtWMWn410h8Q2fYiYL7Yg5OlxMOCfFjJQ==} + '@next/eslint-plugin-next@14.1.0': + resolution: {integrity: sha512-x4FavbNEeXx/baD/zC/SdrvkjSby8nBn8KcCREqk6UuwvwoAPZmaV8TFCAuo/cpovBRTIY67mHhe86MQQm/68Q==} + '@next/swc-darwin-arm64@14.1.4': resolution: {integrity: sha512-ubmUkbmW65nIAOmoxT1IROZdmmJMmdYvXIe8211send9ZYJu+SqxSnJM4TrPj9wmL6g9Atvj0S/2cFmMSS99jg==} engines: {node: '>= 10'} @@ -3165,6 +3348,10 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@polka/url@0.5.0': resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} @@ -4585,6 +4772,10 @@ packages: '@sideway/pinpoint@2.0.0': resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} @@ -5693,6 +5884,9 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + '@types/degit@2.8.6': + resolution: {integrity: sha512-y0M7sqzsnHB6cvAeTCBPrCQNQiZe8U4qdzf8uBVmOWYap5MMTN/gB2iEqrIqFiYcsyvP74GnGD5tgsHttielFw==} + '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} @@ -5925,6 +6119,17 @@ packages: typescript: optional: true + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/parser@5.62.0': resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5945,6 +6150,16 @@ packages: typescript: optional: true + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/scope-manager@5.62.0': resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5953,6 +6168,10 @@ packages: resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@5.62.0': resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5973,6 +6192,16 @@ packages: typescript: optional: true + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/types@5.62.0': resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5981,6 +6210,10 @@ packages: resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -5999,6 +6232,15 @@ packages: typescript: optional: true + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/utils@5.62.0': resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6011,6 +6253,12 @@ packages: peerDependencies: eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6019,6 +6267,10 @@ packages: resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -6129,6 +6381,24 @@ packages: '@vanilla-extract/private@1.0.8': resolution: {integrity: sha512-oRAbUlq1SyTWCo7dQnTVm+xgJMqNl8K1dEempQHXzQvUuyEfBabMt0wNGf+VCHzvKbx/Bzr9p/2wy8WA9+2z2g==} + '@vercel/style-guide@5.2.0': + resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} + engines: {node: '>=16'} + peerDependencies: + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -6270,6 +6540,14 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@5.0.0: + resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} + engines: {node: '>=12'} + + ansi-escapes@6.2.1: + resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} + engines: {node: '>=14.16'} + ansi-escapes@7.0.0: resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} engines: {node: '>=18'} @@ -6389,6 +6667,10 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + auto-bind@5.0.1: + resolution: {integrity: sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + autoprefixer@10.4.14: resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} @@ -6508,6 +6790,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + bullmq@5.53.2: resolution: {integrity: sha512-xHgxrP/yNJHD7VCw1h+eRBh+2TCPBCM39uC9gCyksYc6ufcJP+HTZ/A2lzB2x7qMFWrvsX7tM40AT2BmdkYL/Q==} @@ -6659,6 +6945,10 @@ packages: class-variance-authority@0.7.1: resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -6667,10 +6957,18 @@ packages: resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} engines: {node: '>=12'} + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} + cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} @@ -6679,6 +6977,10 @@ packages: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} + cli-truncate@3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} @@ -6721,6 +7023,10 @@ packages: react: ^18 || ^19 || ^19.0.0-rc react-dom: ^18 || ^19 || ^19.0.0-rc + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cohere-ai@7.18.1: resolution: {integrity: sha512-kZM8dMAJlNXshl1c0X+jPTkD5P4QSexZ2LHQ6Cu8g2v3j1eGyT6rJKk+zzJikluWJ1bAyobj+ucGIhmQtWfl4A==} @@ -6827,6 +7133,10 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + convict@6.2.4: resolution: {integrity: sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==} engines: {node: '>=6'} @@ -6857,6 +7167,10 @@ packages: resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} engines: {node: '>=12.13'} + copy-file@11.1.0: + resolution: {integrity: sha512-X8XDzyvYaA6msMyAM575CUoygY5b44QzLcGRKsK3MFmXcOvQa518dNPLsKYwkYsn72g3EiW+LE0ytd/FlqWmyw==} + engines: {node: '>=18'} + core-js@3.43.0: resolution: {integrity: sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==} @@ -6889,6 +7203,10 @@ packages: resolution: {integrity: sha512-VC2Gs20JcTyeQob6UViBLnyP0bYHkBh6EiKzot9vi2DmeGlFT9Wd7VG3NBrkNx/jYvFBeyDOMMHdHQhbtKLgHQ==} engines: {node: '>=16'} + cpy@11.1.0: + resolution: {integrity: sha512-QGHetPSSuprVs+lJmMDcivvrBwTKASzXQ5qxFvRC2RFESjjod71bDvFvhxTjDgkNjrrb72AI6JPjfYwxrIy33A==} + engines: {node: '>=18'} + crelt@1.0.6: resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==} @@ -7105,6 +7423,10 @@ packages: resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} engines: {node: '>= 6'} + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} engines: {node: '>= 0.4'} @@ -7244,6 +7566,11 @@ packages: defu@6.1.4: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + degit@2.8.4: + resolution: {integrity: sha512-vqYuzmSA5I50J882jd+AbAhQtgK6bdKUJIex1JNfEUPENCgYsxugzKVZlFyMwV4i06MmnV47/Iqi5Io86zf3Ng==} + engines: {node: '>=8.0.0'} + hasBin: true + delaunator@5.0.1: resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==} @@ -7274,6 +7601,10 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} + engines: {node: '>=12.20'} + detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -7283,6 +7614,10 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} + detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + detect-node-es@1.1.0: resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} @@ -7535,6 +7870,10 @@ packages: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -7543,6 +7882,15 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + eslint-config-next@14.1.0: + resolution: {integrity: sha512-SBX2ed7DoRFXC6CQSLc/SbLY9Ut6HxNB2wPTcoIWjUMd7aF7O/SIE7111L8FdZ9TXsNV4pulUDnfthpyPtbFUg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + eslint-config-prettier@8.10.0: resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true @@ -7555,11 +7903,29 @@ packages: peerDependencies: eslint: '>=7.0.0' + eslint-config-prettier@9.1.2: + resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + eslint-config-turbo@1.10.12: resolution: {integrity: sha512-z3jfh+D7UGYlzMWGh+Kqz++hf8LOE96q3o5R8X4HTjmxaBWlLAWG+0Ounr38h+JLR2TJno0hU9zfzoPNkR9BdA==} peerDependencies: eslint: '>6.6.0' + eslint-config-turbo@2.5.8: + resolution: {integrity: sha512-wzxmN7dJNFGDwOvR/4j8U2iaIH/ruYez8qg/sCKrezJ3+ljbFMvJLmgKKt/1mDuyU9wj5aZqO6VijP3QH169FA==} + peerDependencies: + eslint: '>6.6.0' + turbo: '>2.0.0' + + eslint-import-resolver-alias@1.1.2: + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} @@ -7606,6 +7972,12 @@ packages: peerDependencies: eslint: '>=4.19.1' + eslint-plugin-eslint-comments@3.2.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + eslint-plugin-import@2.31.0: resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} @@ -7635,6 +8007,19 @@ packages: jest: optional: true + eslint-plugin-jest@27.9.0: + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + eslint-plugin-jsx-a11y@6.10.2: resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} engines: {node: '>=4.0'} @@ -7647,6 +8032,38 @@ packages: peerDependencies: eslint: '>=5.16.0' + eslint-plugin-notice@0.9.10: + resolution: {integrity: sha512-rF79EuqdJKu9hhTmwUkNeSvLmmq03m/NXq/NHwUENHbdJ0wtoyOjxZBhW4QCug8v5xYE6cGe3AWkGqSIe9KUbQ==} + peerDependencies: + eslint: '>=3.0.0' + + eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + + eslint-plugin-playwright@0.16.0: + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + eslint-plugin-react-hooks@4.6.2: resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} @@ -7665,6 +8082,15 @@ packages: peerDependencies: eslint: ^7.5.0 || ^8.0.0 + eslint-plugin-testing-library@6.5.0: + resolution: {integrity: sha512-Ls5TUfLm5/snocMAOlofSOJxNN0aKqwTlco7CrNtMjkTdQlkpSMaeTCDHCuXfzrI97xcx2rSCNeKeJjtpkNC1w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + eslint-plugin-turbo@1.10.12: resolution: {integrity: sha512-uNbdj+ohZaYo4tFJ6dStRXu2FZigwulR1b3URPXe0Q8YaE7thuekKNP+54CHtZPH9Zey9dmDx5btAQl9mfzGOw==} peerDependencies: @@ -7676,6 +8102,32 @@ packages: eslint: '>6.6.0' turbo: '>2.0.0' + eslint-plugin-turbo@2.5.8: + resolution: {integrity: sha512-bVjx4vTH0oTKIyQ7EGFAXnuhZMrKIfu17qlex/dps7eScPnGQLJ3r1/nFq80l8xA+8oYjsSirSQ2tXOKbz3kEw==} + peerDependencies: + eslint: '>6.6.0' + turbo: '>2.0.0' + + eslint-plugin-unicorn@48.0.1: + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + + eslint-plugin-unused-imports@3.2.0: + resolution: {integrity: sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': 6 - 7 + eslint: '8' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.0'} + eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} @@ -7846,6 +8298,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -7887,6 +8342,10 @@ packages: picomatch: optional: true + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + fflate@0.4.8: resolution: {integrity: sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==} @@ -7910,6 +8369,9 @@ packages: resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} engines: {node: '>= 0.8'} + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -7968,6 +8430,10 @@ packages: resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==} engines: {node: '>= 18'} + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -8098,6 +8564,9 @@ packages: resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} hasBin: true + git-hooks-list@4.1.1: + resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} + git-last-commit@1.0.1: resolution: {integrity: sha512-FDSgeMqa7GnJDxt/q0AbrxbfeTyxp4ImxEw1e4nw6NUHA5FMhFUq33dTXI4Xdgcj1VQ1q5QLWF6WxFrJ8KCBOg==} @@ -8112,6 +8581,11 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + glob@10.3.4: resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==} engines: {node: '>=16 || 14 >=14.17'} @@ -8150,6 +8624,10 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} @@ -8332,10 +8810,17 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + image-size@0.5.5: resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} engines: {node: '>=0.10.0'} @@ -8380,6 +8865,19 @@ packages: resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} engines: {node: ^18.17.0 || >=20.5.0} + ink@4.4.1: + resolution: {integrity: sha512-rXckvqPBB0Krifk5rn/5LvQGmyXwCUpBfmTwbkQNBY9JY8RSl3b8OftBNEYxg4+SWUhEKcPifgope28uL9inlA==} + engines: {node: '>=14.16'} + peerDependencies: + '@types/react': '>=18.0.0' + react: '>=18.0.0' + react-devtools-core: ^4.19.1 + peerDependenciesMeta: + '@types/react': + optional: true + react-devtools-core: + optional: true + inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} @@ -8446,6 +8944,10 @@ packages: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + is-bun-module@2.0.0: resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} @@ -8492,6 +8994,10 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + is-generator-function@1.1.0: resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} engines: {node: '>= 0.4'} @@ -8516,6 +9022,9 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-lower-case@2.0.2: + resolution: {integrity: sha512-bVcMJy4X5Og6VZfdOZstSexlEy20Sr0k/p/b2IlQJlfdKAQuMpiv5w2Ccxb8sKdRUNAG1PnHVHjFSdRDVS6NlQ==} + is-map@2.0.3: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} @@ -8606,6 +9115,9 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-upper-case@2.0.2: + resolution: {integrity: sha512-44pxmxAvnnAOwBg4tHPnkfvgjPwbc5QIsSstNU+YcJ1ovxVzCWpSGosPJOZh/a1tdl81fbgnLc9LLv+x2ywbPQ==} + is-weakmap@2.0.2: resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} engines: {node: '>= 0.4'} @@ -8676,6 +9188,9 @@ packages: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} @@ -8721,6 +9236,10 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + jsesc@3.0.2: resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} engines: {node: '>=6'} @@ -9210,6 +9729,9 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} + metric-lcs@0.1.2: + resolution: {integrity: sha512-+TZ5dUDPKPJaU/rscTzxyN8ZkX7eAVLAiQU/e+YINleXPv03SCmJShaMT1If1liTH8OcmWXZs0CmzCBRBLcMpA==} + micromark-core-commonmark@1.1.0: resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} @@ -9596,6 +10118,11 @@ packages: node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + node-emoji@1.11.0: resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} @@ -9611,6 +10138,10 @@ packages: encoding: optional: true + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-gyp-build-optional-packages@5.2.2: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true @@ -9622,6 +10153,11 @@ packages: resolution: {integrity: sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==} engines: {node: '>=6.0.0'} + nodemon@3.1.10: + resolution: {integrity: sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==} + engines: {node: '>=10'} + hasBin: true + non.geist@1.0.4: resolution: {integrity: sha512-2spmLTgz5ipZrFGLiI1YkiHb8Yit0yFySPvWzal3wCwCFilMFQQ/Jwwz4lcEatwIKUpOeMYwyFwP8MJ8EVKqGA==} @@ -9828,6 +10364,10 @@ packages: resolution: {integrity: sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-event@6.0.1: + resolution: {integrity: sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==} + engines: {node: '>=16.17'} + p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -9836,6 +10376,10 @@ packages: resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} + p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -9880,6 +10424,10 @@ packages: resolution: {integrity: sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==} engines: {node: '>=16'} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + p-retry@6.2.1: resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} engines: {node: '>=16.17'} @@ -9888,6 +10436,10 @@ packages: resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} engines: {node: '>=12'} + p-timeout@6.1.4: + resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} + engines: {node: '>=14.16'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -9947,6 +10499,10 @@ packages: partysocket@1.1.4: resolution: {integrity: sha512-jXP7PFj2h5/v4UjDS8P7MZy6NJUQ7sspiFyxL4uc/+oKOL+KdtXzHnTV8INPGxBrLTXgalyG3kd12Qm7WrYc3A==} + patch-console@2.0.0: + resolution: {integrity: sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -9997,6 +10553,10 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -10106,6 +10666,10 @@ packages: pkg-types@2.1.0: resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + polite-json@5.0.0: resolution: {integrity: sha512-OLS/0XeUAcE8a2fdwemNja+udKgXNnY6yKVIXqAD2zVRx1KvY6Ato/rZ2vdzbxqYwPW0u6SCNC/bAMPNzpzxbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -10308,6 +10872,18 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier-plugin-packagejson@2.5.19: + resolution: {integrity: sha512-Qsqp4+jsZbKMpEGZB1UP1pxeAT8sCzne2IwnKkr+QhUe665EXUo3BAvTf1kAPCqyMv9kg3ZmO0+7eOni/C6Uag==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-tailwindcss@0.6.12: resolution: {integrity: sha512-OuTQKoqNwV7RnxTPwXWzOFXy6Jc4z8oeRZYGuMpRyG3WbuR3jjXdQFK8qFBMBx8UHWdHrddARz2fgUenild6aw==} engines: {node: '>=14.21.3'} @@ -10522,6 +11098,9 @@ packages: pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} @@ -10535,6 +11114,9 @@ packages: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} engines: {node: '>=6'} + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -10632,6 +11214,12 @@ packages: react-moveable@0.56.0: resolution: {integrity: sha512-FmJNmIOsOA36mdxbrc/huiE4wuXSRlmon/o+/OrfNhSiYYYL0AV5oObtPluEhb2Yr/7EfYWBHTxF5aWAvjg1SA==} + react-reconciler@0.29.2: + resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} + engines: {node: '>=0.10.0'} + peerDependencies: + react: ^18.3.1 + react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} @@ -10789,6 +11377,10 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -10797,6 +11389,10 @@ packages: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + remark-frontmatter@4.0.1: resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} @@ -10924,6 +11520,9 @@ packages: resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} engines: {node: '>=10'} + resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -10937,6 +11536,10 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -11151,6 +11754,10 @@ packages: simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -11162,6 +11769,18 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@6.0.0: + resolution: {integrity: sha512-6bn4hRfkTvDfUoEQYkERg0BVF1D0vrX9HEkMl08uDiNWvVvjylLHvZFZWkDo6wjT8tUctbYl1nCOuE66ZTaUtA==} + engines: {node: '>=14.16'} + slug@6.1.0: resolution: {integrity: sha512-x6vLHCMasg4DR2LPiyFGI0gJJhywY6DTiGhCrOMzb3SOk/0JVLIaL4UhyFSHu04SD3uAavrKY/K3zZ3i6iRcgA==} @@ -11199,6 +11818,14 @@ packages: react: ^18.0.0 react-dom: ^18.0.0 + sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + + sort-package-json@3.4.0: + resolution: {integrity: sha512-97oFRRMM2/Js4oEA9LJhjyMlde+2ewpZQf53pgue27UkbEXfHJnDzHlUxQ/DWUkzqmp7DFwJp8D+wi/TYeQhpA==} + engines: {node: '>=20'} + hasBin: true + source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} @@ -11255,6 +11882,10 @@ packages: stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} @@ -11431,6 +12062,10 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -11445,6 +12080,10 @@ packages: engines: {node: 20 || >=22} hasBin: true + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} + engines: {node: ^14.18.0 || >=16.0.0} + tailwind-merge@2.2.0: resolution: {integrity: sha512-SqqhhaL0T06SW59+JVNfAqKdqLs0497esifRrZ7jOaefP3o64fdFNDMrAQWZFMxTLJPiHVjRLUywT8uFz1xNWQ==} @@ -11516,6 +12155,10 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + terminal-link@3.0.0: + resolution: {integrity: sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==} + engines: {node: '>=12'} + terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -11600,6 +12243,10 @@ packages: toml@3.0.0: resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -11766,6 +12413,10 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + type-fest@0.12.0: + resolution: {integrity: sha512-53RyidyjvkGpnWPMF9bQgFtWp+Sl8O2Rp13VavmJgfAP9WWG6q6TkrKU8iyJdnwnfgHI6k2hTlgqH4aSdjoTbg==} + engines: {node: '>=10'} + type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} @@ -11786,6 +12437,14 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -11851,6 +12510,9 @@ packages: uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -11953,6 +12615,10 @@ packages: url-join@4.0.1: resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} + use-callback-ref@1.3.3: resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} engines: {node: '>=10'} @@ -12220,6 +12886,10 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true + widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} + word-wrap@1.2.5: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} @@ -12355,6 +13025,9 @@ packages: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} + yoga-wasm-web@0.3.3: + resolution: {integrity: sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==} + zod-error@1.5.0: resolution: {integrity: sha512-zzopKZ/skI9iXpqCEPj+iLCKl9b88E43ehcU+sbRoHuwGd9F1IDVGQ70TyO6kmfiRL1g4IXkjsXK+g1gLYl4WQ==} @@ -12369,6 +13042,9 @@ packages: peerDependencies: zod: ^3.18.0 + zod@3.22.3: + resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} @@ -12450,6 +13126,11 @@ snapshots: zod: 3.25.76 zod-to-json-schema: 3.24.5(zod@3.25.76) + '@alcalzone/ansi-tokenize@0.1.3': + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.3.0': @@ -12457,6 +13138,10 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 + '@anatine/esbuild-decorators@0.2.19(esbuild@0.19.11)': + dependencies: + esbuild: 0.19.11 + '@anthropic-ai/sdk@0.60.0': {} '@arr/every@1.0.1': {} @@ -13924,7 +14609,7 @@ snapshots: '@babel/traverse': 7.27.4 '@babel/types': 7.27.6 convert-source-map: 2.0.0 - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -13964,13 +14649,12 @@ snapshots: '@babel/types': 7.28.4 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 - debug: 4.4.3 + debug: 4.4.3(supports-color@5.5.0) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - optional: true '@babel/eslint-parser@7.27.5(@babel/core@7.27.4)(eslint@8.57.1)': dependencies: @@ -13980,6 +14664,14 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 + '@babel/eslint-parser@7.27.5(@babel/core@7.28.4)(eslint@8.57.1)': + dependencies: + '@babel/core': 7.28.4 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.1 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + '@babel/generator@7.27.5': dependencies: '@babel/parser': 7.27.5 @@ -13995,7 +14687,6 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 - optional: true '@babel/helper-annotate-as-pure@7.27.3': dependencies: @@ -14022,13 +14713,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/helper-globals@7.28.0': - optional: true + '@babel/helper-globals@7.28.0': {} '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.4 - '@babel/types': 7.27.6 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -14044,7 +14734,7 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -14065,11 +14755,10 @@ snapshots: '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color - optional: true '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.6 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.27.1': {} @@ -14078,7 +14767,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.4 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -14104,7 +14793,6 @@ snapshots: dependencies: '@babel/template': 7.27.2 '@babel/types': 7.28.4 - optional: true '@babel/parser@7.24.5': dependencies: @@ -14117,7 +14805,6 @@ snapshots: '@babel/parser@7.28.4': dependencies: '@babel/types': 7.28.4 - optional: true '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.4)': dependencies: @@ -14233,10 +14920,9 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.3 + debug: 4.4.3(supports-color@5.5.0) transitivePeerDependencies: - supports-color - optional: true '@babel/types@7.27.6': dependencies: @@ -14247,7 +14933,6 @@ snapshots: dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - optional: true '@bugsnag/cuid@3.2.1': {} @@ -14411,6 +15096,11 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@clack/core@0.3.5': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@clack/core@0.4.2': dependencies: picocolors: 1.1.1 @@ -14422,6 +15112,12 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 + '@clack/prompts@0.7.0': + dependencies: + '@clack/core': 0.3.5 + picocolors: 1.1.1 + sisteransi: 1.0.5 + '@coji/remix-auth-google@4.2.0': {} '@colors/colors@1.5.0': @@ -15027,7 +15723,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.31 - optional: true '@jridgewell/gen-mapping@0.3.8': dependencies: @@ -15039,7 +15734,6 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 - optional: true '@jridgewell/resolve-uri@3.1.2': {} @@ -15047,13 +15741,12 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/sourcemap-codec@1.5.5': - optional: true + '@jridgewell/sourcemap-codec@1.5.5': {} '@jridgewell/trace-mapping@0.3.25': dependencies: @@ -15064,7 +15757,6 @@ snapshots: dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - optional: true '@js-sdsl/ordered-map@4.4.2': {} @@ -15110,6 +15802,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@microsoft/tsdoc-config@0.16.2': + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + + '@microsoft/tsdoc@0.14.2': {} + '@mjackson/headers@0.10.0': {} '@mjackson/headers@0.11.1': {} @@ -15159,6 +15860,10 @@ snapshots: '@next/env@14.1.4': {} + '@next/eslint-plugin-next@14.1.0': + dependencies: + glob: 10.3.10 + '@next/swc-darwin-arm64@14.1.4': optional: true @@ -15611,6 +16316,8 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@pkgr/core@0.2.9': {} + '@polka/url@0.5.0': {} '@popperjs/core@2.11.8': {} @@ -17121,6 +17828,8 @@ snapshots: '@sideway/pinpoint@2.0.0': {} + '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/merge-streams@4.0.0': {} '@smithy/abort-controller@4.0.4': @@ -18553,7 +19262,7 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.5 + '@types/node': 20.19.7 '@types/compression@1.8.1': dependencies: @@ -18695,6 +19404,8 @@ snapshots: dependencies: '@types/ms': 2.1.0 + '@types/degit@2.8.6': {} + '@types/diff-match-patch@1.0.36': {} '@types/eslint-scope@3.7.7': @@ -18815,7 +19526,7 @@ snapshots: '@types/nodemailer@6.4.17': dependencies: - '@types/node': 20.11.5 + '@types/node': 20.19.7 '@types/normalize-package-data@2.4.4': {} @@ -18881,7 +19592,7 @@ snapshots: '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 20.11.5 + '@types/node': 20.19.7 '@types/send': 0.17.5 '@types/shimmer@1.2.0': {} @@ -18962,6 +19673,24 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.4.3(typescript@5.8.3) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@typescript-eslint/scope-manager': 5.62.0 @@ -18987,6 +19716,19 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.3(supports-color@5.5.0) + eslint: 8.57.1 + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -18997,11 +19739,16 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.8.3) '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) eslint: 8.57.1 tsutils: 3.21.0(typescript@5.8.3) optionalDependencies: @@ -19021,15 +19768,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + debug: 4.4.3(supports-color@5.5.0) + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.8.3) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@5.62.0': {} '@typescript-eslint/types@6.21.0': {} + '@typescript-eslint/types@7.18.0': {} + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.8.3)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) globby: 11.1.0 is-glob: 4.0.3 semver: 7.7.2 @@ -19054,6 +19815,21 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.8.3)': + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.4.3(supports-color@5.5.0) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 1.4.3(typescript@5.8.3) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) @@ -19083,6 +19859,17 @@ snapshots: - supports-color - typescript + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.8.3)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.8.3) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 @@ -19093,6 +19880,11 @@ snapshots: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@7.18.0': + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + '@ungap/structured-clone@1.3.0': {} '@unrs/resolver-binding-android-arm-eabi@1.9.0': @@ -19156,7 +19948,7 @@ snapshots: '@vanilla-extract/babel-plugin-debug-ids@1.2.1': dependencies: - '@babel/core': 7.27.4 + '@babel/core': 7.28.4 transitivePeerDependencies: - supports-color @@ -19206,6 +19998,38 @@ snapshots: '@vanilla-extract/private@1.0.8': {} + '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.1.0)(eslint@8.57.1)(prettier@3.5.3)(typescript@5.8.3)': + dependencies: + '@babel/core': 7.28.4 + '@babel/eslint-parser': 7.27.5(@babel/core@7.28.4)(eslint@8.57.1) + '@rushstack/eslint-patch': 1.11.0 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + eslint-config-prettier: 9.1.2(eslint@8.57.1) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1) + eslint-plugin-react: 7.37.5(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-plugin-testing-library: 6.5.0(eslint@8.57.1)(typescript@5.8.3) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) + prettier-plugin-packagejson: 2.5.19(prettier@3.5.3) + optionalDependencies: + '@next/eslint-plugin-next': 14.1.0 + eslint: 8.57.1 + prettier: 3.5.3 + typescript: 5.8.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - jest + - supports-color + '@web3-storage/multipart-parser@1.0.0': {} '@webassemblyjs/ast@1.14.1': @@ -19374,6 +20198,12 @@ snapshots: ansi-colors@4.1.3: {} + ansi-escapes@5.0.0: + dependencies: + type-fest: 1.4.0 + + ansi-escapes@6.2.1: {} + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 @@ -19508,6 +20338,8 @@ snapshots: asynckit@0.4.0: {} + auto-bind@5.0.1: {} + autoprefixer@10.4.14(postcss@8.4.38): dependencies: browserslist: 4.25.0 @@ -19605,7 +20437,7 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 @@ -19663,6 +20495,8 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + builtin-modules@3.3.0: {} + bullmq@5.53.2: dependencies: cron-parser: 4.9.0 @@ -19859,16 +20693,26 @@ snapshots: dependencies: clsx: 2.1.1 + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + clean-stack@2.2.0: {} clean-stack@4.2.0: dependencies: escape-string-regexp: 5.0.0 + cli-boxes@3.0.0: {} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 + cli-cursor@4.0.0: + dependencies: + restore-cursor: 4.0.0 + cli-spinners@2.9.2: {} cli-table3@0.6.5: @@ -19877,6 +20721,11 @@ snapshots: optionalDependencies: '@colors/colors': 1.5.0 + cli-truncate@3.1.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + client-only@0.0.1: {} cliui@6.0.0: @@ -19921,6 +20770,10 @@ snapshots: - '@types/react' - '@types/react-dom' + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 + cohere-ai@7.18.1(encoding@0.1.13): dependencies: '@aws-sdk/client-sagemaker': 3.876.0 @@ -20029,6 +20882,8 @@ snapshots: convert-source-map@2.0.0: {} + convert-to-spaces@2.0.1: {} + convict@6.2.4: dependencies: lodash.clonedeep: 4.5.0 @@ -20053,6 +20908,11 @@ snapshots: dependencies: is-what: 4.1.16 + copy-file@11.1.0: + dependencies: + graceful-fs: 4.2.11 + p-event: 6.0.1 + core-js@3.43.0: {} core-util-is@1.0.3: {} @@ -20093,6 +20953,15 @@ snapshots: p-filter: 3.0.0 p-map: 6.0.0 + cpy@11.1.0: + dependencies: + copy-file: 11.1.0 + globby: 14.1.0 + junk: 4.0.1 + micromatch: 4.0.8 + p-filter: 4.1.0 + p-map: 7.0.3 + crelt@1.0.6: {} cron-parser@4.9.0: @@ -20340,6 +21209,8 @@ snapshots: data-uri-to-buffer@3.0.1: {} + data-uri-to-buffer@4.0.1: {} + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -20390,10 +21261,11 @@ snapshots: optionalDependencies: supports-color: 10.0.0 - debug@4.4.3: + debug@4.4.3(supports-color@5.5.0): dependencies: ms: 2.1.3 - optional: true + optionalDependencies: + supports-color: 5.5.0 decamelize-keys@1.1.1: dependencies: @@ -20464,6 +21336,8 @@ snapshots: defu@6.1.4: {} + degit@2.8.4: {} + delaunator@5.0.1: dependencies: robust-predicates: 3.0.2 @@ -20482,11 +21356,15 @@ snapshots: detect-indent@6.1.0: {} + detect-indent@7.0.2: {} + detect-libc@1.0.3: optional: true detect-libc@2.0.4: {} + detect-newline@4.0.1: {} + detect-node-es@1.1.0: {} detective@5.2.1: @@ -20932,10 +21810,31 @@ snapshots: escape-string-regexp@1.0.5: {} + escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} + eslint-config-next@14.1.0(eslint@8.57.1)(typescript@5.8.3): + dependencies: + '@next/eslint-plugin-next': 14.1.0 + '@rushstack/eslint-patch': 1.11.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.31.0)(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) + eslint-plugin-react: 7.37.5(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + optionalDependencies: + typescript: 5.8.3 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - supports-color + eslint-config-prettier@8.10.0(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -20944,11 +21843,25 @@ snapshots: dependencies: eslint: 8.57.1 + eslint-config-prettier@9.1.2(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-config-turbo@1.10.12(eslint@8.57.1): dependencies: eslint: 8.57.1 eslint-plugin-turbo: 1.10.12(eslint@8.57.1) + eslint-config-turbo@2.5.8(eslint@8.57.1)(turbo@2.5.4): + dependencies: + eslint: 8.57.1 + eslint-plugin-turbo: 2.5.8(eslint@8.57.1)(turbo@2.5.4) + turbo: 2.5.4 + + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1)): + dependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-import-resolver-node@0.3.7: dependencies: debug: 3.2.7 @@ -21002,12 +21915,28 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + eslint-plugin-es@3.0.1(eslint@8.57.1): dependencies: eslint: 8.57.1 eslint-utils: 2.1.0 regexpp: 3.2.0 + eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): + dependencies: + escape-string-regexp: 1.0.5 + eslint: 8.57.1 + ignore: 5.3.2 + eslint-plugin-import@2.31.0(@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 @@ -21066,6 +21995,35 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.8.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-jest-dom@4.0.3(eslint@8.57.1): dependencies: '@babel/runtime': 7.27.6 @@ -21083,6 +22041,16 @@ snapshots: - supports-color - typescript + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3): + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + transitivePeerDependencies: + - supports-color + - typescript + eslint-plugin-jsx-a11y@6.10.2(eslint@8.57.1): dependencies: aria-query: 5.3.2 @@ -21112,6 +22080,31 @@ snapshots: resolve: 1.22.10 semver: 6.3.1 + eslint-plugin-notice@0.9.10(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + find-root: 1.1.0 + lodash: 4.17.21 + metric-lcs: 0.1.2 + + eslint-plugin-only-warn@1.1.0: {} + + eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + optionalDependencies: + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + + eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@9.1.2(eslint@8.57.1))(eslint@8.57.1)(prettier@3.5.3): + dependencies: + eslint: 8.57.1 + prettier: 3.5.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.11.11 + optionalDependencies: + '@types/eslint': 9.6.1 + eslint-config-prettier: 9.1.2(eslint@8.57.1) + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -21146,6 +22139,19 @@ snapshots: - supports-color - typescript + eslint-plugin-testing-library@6.5.0(eslint@8.57.1)(typescript@5.8.3): + dependencies: + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.8.3) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-tsdoc@0.2.17: + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + eslint-plugin-turbo@1.10.12(eslint@8.57.1): dependencies: dotenv: 16.0.3 @@ -21157,6 +22163,40 @@ snapshots: eslint: 8.57.1 turbo: 2.5.4 + eslint-plugin-turbo@2.5.8(eslint@8.57.1)(turbo@2.5.4): + dependencies: + dotenv: 16.0.3 + eslint: 8.57.1 + turbo: 2.5.4 + + eslint-plugin-unicorn@48.0.1(eslint@8.57.1): + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) + ci-info: 3.9.0 + clean-regexp: 1.0.0 + eslint: 8.57.1 + esquery: 1.6.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.1.0 + lodash: 4.17.21 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.7.2 + strip-indent: 3.0.0 + + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + eslint-rule-composer: 0.3.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + + eslint-rule-composer@0.3.0: {} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 @@ -21442,6 +22482,8 @@ snapshots: fast-deep-equal@3.1.3: {} + fast-diff@1.3.0: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -21480,6 +22522,11 @@ snapshots: optionalDependencies: picomatch: 4.0.2 + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + fflate@0.4.8: {} figures@6.1.0: @@ -21508,7 +22555,7 @@ snapshots: finalhandler@2.1.0: dependencies: - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -21517,6 +22564,8 @@ snapshots: transitivePeerDependencies: - supports-color + find-root@1.1.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -21577,6 +22626,10 @@ snapshots: formdata-node@6.0.3: {} + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + forwarded@0.2.0: {} fraction.js@4.3.7: {} @@ -21709,6 +22762,8 @@ snapshots: pathe: 2.0.3 tar: 6.2.1 + git-hooks-list@4.1.1: {} + git-last-commit@1.0.1: {} glob-parent@5.1.2: @@ -21721,6 +22776,14 @@ snapshots: glob-to-regexp@0.4.1: {} + glob@10.3.10: + dependencies: + foreground-child: 3.3.1 + jackspeak: 2.3.6 + minimatch: 9.0.5 + minipass: 7.1.2 + path-scurry: 1.11.1 + glob@10.3.4: dependencies: foreground-child: 3.3.1 @@ -21784,6 +22847,15 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + globrex@0.1.2: {} gopd@1.2.0: {} @@ -21987,8 +23059,12 @@ snapshots: ieee754@1.2.1: {} + ignore-by-default@1.0.1: {} + ignore@5.3.2: {} + ignore@7.0.5: {} + image-size@0.5.5: optional: true @@ -22026,6 +23102,40 @@ snapshots: ini@5.0.0: {} + ink@4.4.1(@types/react@18.2.69)(react@18.3.1): + dependencies: + '@alcalzone/ansi-tokenize': 0.1.3 + ansi-escapes: 6.2.1 + auto-bind: 5.0.1 + chalk: 5.4.1 + cli-boxes: 3.0.0 + cli-cursor: 4.0.0 + cli-truncate: 3.1.0 + code-excerpt: 4.0.0 + indent-string: 5.0.0 + is-ci: 3.0.1 + is-lower-case: 2.0.2 + is-upper-case: 2.0.2 + lodash: 4.17.21 + patch-console: 2.0.0 + react: 18.3.1 + react-reconciler: 0.29.2(react@18.3.1) + scheduler: 0.23.2 + signal-exit: 3.0.7 + slice-ansi: 6.0.0 + stack-utils: 2.0.6 + string-width: 5.1.2 + type-fest: 0.12.0 + widest-line: 4.0.1 + wrap-ansi: 8.1.0 + ws: 8.18.3 + yoga-wasm-web: 0.3.3 + optionalDependencies: + '@types/react': 18.2.69 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + inline-style-parser@0.1.1: {} inline-style-parser@0.2.4: {} @@ -22101,6 +23211,10 @@ snapshots: is-buffer@2.0.5: {} + is-builtin-module@3.2.1: + dependencies: + builtin-modules: 3.3.0 + is-bun-module@2.0.0: dependencies: semver: 7.7.2 @@ -22140,6 +23254,8 @@ snapshots: is-fullwidth-code-point@3.0.0: {} + is-fullwidth-code-point@4.0.0: {} + is-generator-function@1.1.0: dependencies: call-bound: 1.0.4 @@ -22161,6 +23277,10 @@ snapshots: is-interactive@1.0.0: {} + is-lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + is-map@2.0.3: {} is-negative-zero@2.0.3: {} @@ -22230,6 +23350,10 @@ snapshots: is-unicode-supported@2.1.0: {} + is-upper-case@2.0.2: + dependencies: + tslib: 2.8.1 + is-weakmap@2.0.2: {} is-weakref@1.1.1: @@ -22297,6 +23421,8 @@ snapshots: jiti@2.4.2: {} + jju@1.4.0: {} + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 @@ -22337,10 +23463,11 @@ snapshots: dependencies: argparse: 2.0.1 + jsesc@0.5.0: {} + jsesc@3.0.2: {} - jsesc@3.1.0: - optional: true + jsesc@3.1.0: {} json-buffer@3.0.1: {} @@ -22906,6 +24033,8 @@ snapshots: methods@1.1.2: {} + metric-lcs@0.1.2: {} + micromark-core-commonmark@1.1.0: dependencies: decode-named-character-reference: 1.1.0 @@ -23211,7 +24340,7 @@ snapshots: micromark@3.2.0: dependencies: '@types/debug': 4.1.12 - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) decode-named-character-reference: 1.1.0 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -23233,7 +24362,7 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) decode-named-character-reference: 1.1.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 @@ -23473,6 +24602,8 @@ snapshots: node-addon-api@7.1.1: optional: true + node-domexception@1.0.0: {} + node-emoji@1.11.0: dependencies: lodash: 4.17.21 @@ -23485,6 +24616,12 @@ snapshots: optionalDependencies: encoding: 0.1.13 + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + node-gyp-build-optional-packages@5.2.2: dependencies: detect-libc: 2.0.4 @@ -23494,6 +24631,19 @@ snapshots: nodemailer@6.10.1: {} + nodemon@3.1.10: + dependencies: + chokidar: 3.6.0 + debug: 4.4.3(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.7.2 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.1 + undefsafe: 2.0.5 + non.geist@1.0.4: {} nopt@7.2.1: @@ -23769,6 +24919,10 @@ snapshots: dependencies: p-timeout: 5.1.0 + p-event@6.0.1: + dependencies: + p-timeout: 6.1.4 + p-filter@2.1.0: dependencies: p-map: 2.1.0 @@ -23777,6 +24931,10 @@ snapshots: dependencies: p-map: 5.5.0 + p-filter@4.1.0: + dependencies: + p-map: 7.0.3 + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -23817,6 +24975,8 @@ snapshots: p-map@6.0.0: {} + p-map@7.0.3: {} + p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 @@ -23825,6 +24985,8 @@ snapshots: p-timeout@5.1.0: {} + p-timeout@6.1.4: {} + p-try@2.2.0: {} package-json-from-dist@1.0.1: {} @@ -23890,6 +25052,8 @@ snapshots: dependencies: event-target-polyfill: 0.0.4 + patch-console@2.0.0: {} + path-exists@4.0.0: {} path-exists@5.0.0: {} @@ -23924,6 +25088,8 @@ snapshots: path-type@4.0.0: {} + path-type@6.0.0: {} + pathe@1.1.2: {} pathe@2.0.3: {} @@ -24019,6 +25185,8 @@ snapshots: exsolve: 1.0.5 pathe: 2.0.3 + pluralize@8.0.0: {} + polite-json@5.0.0: {} polka@0.5.2: @@ -24222,6 +25390,17 @@ snapshots: prelude-ls@1.2.1: {} + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier-plugin-packagejson@2.5.19(prettier@3.5.3): + dependencies: + sort-package-json: 3.4.0 + synckit: 0.11.11 + optionalDependencies: + prettier: 3.5.3 + prettier-plugin-tailwindcss@0.6.12(@ianvs/prettier-plugin-sort-imports@4.1.1(prettier@3.5.3))(prettier@3.5.3): dependencies: prettier: 3.5.3 @@ -24426,6 +25605,8 @@ snapshots: pseudomap@1.0.2: {} + pstree.remy@1.1.8: {} + pump@2.0.1: dependencies: end-of-stream: 1.4.4 @@ -24444,6 +25625,8 @@ snapshots: punycode.js@2.3.1: {} + punycode@1.4.1: {} + punycode@2.3.1: {} purgecss@2.3.0: @@ -24639,6 +25822,12 @@ snapshots: react-css-styled: 1.1.9 react-selecto: 1.26.3 + react-reconciler@0.29.2(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + react-refresh@0.14.2: {} react-remove-scroll-bar@2.3.8(@types/react@18.2.47)(react@18.2.0): @@ -24845,6 +26034,8 @@ snapshots: get-proto: 1.0.1 which-builtin-type: 1.2.1 + regexp-tree@0.1.27: {} + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -24856,6 +26047,10 @@ snapshots: regexpp@3.2.0: {} + regjsparser@0.10.0: + dependencies: + jsesc: 0.5.0 + remark-frontmatter@4.0.1: dependencies: '@types/mdast': 3.0.15 @@ -24974,6 +26169,11 @@ snapshots: resolve.exports@2.0.3: {} + resolve@1.19.0: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -24991,6 +26191,11 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + restore-cursor@4.0.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + retry@0.12.0: {} retry@0.13.1: {} @@ -25042,7 +26247,7 @@ snapshots: router@2.2.0: dependencies: - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 @@ -25163,7 +26368,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -25295,12 +26500,28 @@ snapshots: dependencies: is-arrayish: 0.3.2 + simple-update-notifier@2.0.0: + dependencies: + semver: 7.7.2 + sisteransi@1.0.5: {} slash@3.0.0: {} slash@4.0.0: {} + slash@5.1.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@6.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + slug@6.1.0: {} smartwrap@2.0.2: @@ -25383,6 +26604,18 @@ snapshots: react: 18.2.0 react-dom: 18.2.0(react@18.3.1) + sort-object-keys@1.1.3: {} + + sort-package-json@3.4.0: + dependencies: + detect-indent: 7.0.2 + detect-newline: 4.0.1 + git-hooks-list: 4.1.1 + is-plain-obj: 4.1.0 + semver: 7.7.2 + sort-object-keys: 1.1.3 + tinyglobby: 0.2.14 + source-map-js@1.0.2: {} source-map-js@1.2.1: {} @@ -25431,6 +26664,10 @@ snapshots: stable-hash@0.0.5: {} + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + stacktrace-parser@0.1.10: dependencies: type-fest: 0.7.1 @@ -25593,7 +26830,7 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -25623,6 +26860,11 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-hyperlinks@2.3.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} swr@2.3.3(react@18.3.1): @@ -25639,6 +26881,10 @@ snapshots: rimraf: 6.0.1 tshy: 3.0.2 + synckit@0.11.11: + dependencies: + '@pkgr/core': 0.2.9 + tailwind-merge@2.2.0: dependencies: '@babel/runtime': 7.27.6 @@ -25763,9 +27009,14 @@ snapshots: term-size@2.2.1: {} + terminal-link@3.0.0: + dependencies: + ansi-escapes: 5.0.0 + supports-hyperlinks: 2.3.0 + terser-webpack-plugin@5.3.14(@swc/core@1.3.101(@swc/helpers@0.5.17))(esbuild@0.19.11)(webpack@5.99.9): dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 @@ -25777,7 +27028,7 @@ snapshots: terser-webpack-plugin@5.3.14(esbuild@0.25.5)(webpack@5.99.9(esbuild@0.25.5)): dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 @@ -25855,6 +27106,8 @@ snapshots: toml@3.0.0: {} + touch@3.1.1: {} + tr46@0.0.3: {} tr46@1.0.1: @@ -25930,7 +27183,7 @@ snapshots: cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) esbuild: 0.25.5 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 @@ -26023,6 +27276,8 @@ snapshots: dependencies: prelude-ls: 1.2.1 + type-fest@0.12.0: {} + type-fest@0.13.1: {} type-fest@0.20.2: {} @@ -26033,6 +27288,10 @@ snapshots: type-fest@0.8.1: {} + type-fest@1.4.0: {} + + type-fest@3.13.1: {} + type-fest@4.41.0: {} type-is@1.6.18: @@ -26103,6 +27362,8 @@ snapshots: uncrypto@0.1.3: {} + undefsafe@2.0.5: {} + undici-types@5.26.5: {} undici-types@6.21.0: {} @@ -26242,6 +27503,11 @@ snapshots: url-join@4.0.1: {} + url@0.11.4: + dependencies: + punycode: 1.4.1 + qs: 6.14.0 + use-callback-ref@1.3.3(@types/react@18.2.47)(react@18.2.0): dependencies: react: 18.2.0 @@ -26339,7 +27605,7 @@ snapshots: vite-node@1.6.1(@types/node@20.19.7)(less@4.4.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.42.0): dependencies: cac: 6.7.14 - debug: 4.4.1(supports-color@10.0.0) + debug: 4.4.3(supports-color@5.5.0) pathe: 1.1.2 picocolors: 1.1.1 vite: 5.4.19(@types/node@20.19.7)(less@4.4.0)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.42.0) @@ -26587,6 +27853,10 @@ snapshots: dependencies: isexe: 2.0.0 + widest-line@4.0.1: + dependencies: + string-width: 5.1.2 + word-wrap@1.2.5: {} wordwrap@1.0.0: {} @@ -26690,6 +27960,8 @@ snapshots: yoctocolors@2.1.1: {} + yoga-wasm-web@0.3.3: {} + zod-error@1.5.0: dependencies: zod: 3.23.8 @@ -26702,6 +27974,10 @@ snapshots: dependencies: zod: 3.25.76 + zod-validation-error@1.5.0(zod@3.22.3): + dependencies: + zod: 3.22.3 + zod-validation-error@1.5.0(zod@3.23.8): dependencies: zod: 3.23.8 @@ -26710,6 +27986,8 @@ snapshots: dependencies: zod: 3.25.76 + zod@3.22.3: {} + zod@3.23.8: {} zod@3.25.76: {}