diff --git a/apps/mcp-example/README.md b/apps/mcp-example/README.md new file mode 100644 index 00000000000..28418c2740e --- /dev/null +++ b/apps/mcp-example/README.md @@ -0,0 +1,138 @@ +# MCP Example with Module Federation + +This example demonstrates how to build and host MCP (Model Context Protocol) servers using Module Federation. + +## Structure + +- **host/**: The main MCP host that loads and aggregates MCP servers +- **remote1/**: MCP servers for filesystem and tools +- **remote2/**: MCP servers for git and database operations + +## Features + +1. **Dynamic Loading**: MCP servers are loaded dynamically via Module Federation +2. **Tool Namespacing**: All tools are namespaced by server name to avoid conflicts +3. **Registry Pattern**: Centralized registry manages all loaded MCP servers +4. **Unified Interface**: Single host server aggregates all tools from multiple servers + +## Architecture + +``` +┌─────────────────┐ +│ MCP Host │ +│ │ +│ ┌───────────┐ │ +│ │ Registry │ │ ◄── Manages all MCP servers +│ └───────────┘ │ +│ │ +│ ┌───────────┐ │ +│ │Federation │ │ ◄── Loads remote servers +│ │ Loader │ │ +│ └───────────┘ │ +└────────┬────────┘ + │ + ┌────┴────┐ + │ │ +┌────▼──┐ ┌──▼─────┐ +│Remote1│ │Remote2 │ +│ │ │ │ +│ - fs │ │ - git │ +│ - tools │ - db │ +└───────┘ └────────┘ +``` + +## Running the Example + +1. Install dependencies: +```bash +pnpm install +``` + +2. Build all apps: +```bash +# Build remotes first +nx build mcp-example-remote1 +nx build mcp-example-remote2 + +# Then build the host +nx build mcp-example-host +``` + +3. Start the remote servers: +```bash +# Terminal 1 +nx serve mcp-example-remote1 + +# Terminal 2 +nx serve mcp-example-remote2 +``` + +4. Run the host: +```bash +node apps/mcp-example/host/dist/main.js +``` + +## Available Tools + +### Remote 1 - Filesystem & Tools +- `filesystem.read_file` - Read file contents +- `filesystem.write_file` - Write file contents +- `filesystem.list_directory` - List directory contents +- `tools.process_info` - Get process information +- `tools.system_info` - Get system information + +### Remote 2 - Git & Database +- `git.git_status` - Get git repository status +- `git.git_log` - Get git commit history +- `database.db_get` - Get value from database +- `database.db_set` - Set value in database +- `database.db_list` - List all database keys + +## Module Federation Configuration + +The host loads MCP servers using Module Federation: + +```javascript +remotes: { + mcp_remote1: 'mcp_remote1@http://localhost:3030/remoteEntry.js', + mcp_remote2: 'mcp_remote2@http://localhost:3031/remoteEntry.js', +} +``` + +Each remote exposes its MCP servers: + +```javascript +exposes: { + './filesystem': './src/filesystem-server.ts', + './tools': './src/tools-server.ts', +} +``` + +## Creating Your Own MCP Server + +1. Create a new server implementing the MCP protocol +2. Export a factory function that returns the server instance +3. Add it to a remote's exposes configuration +4. Update the federation loader to load your server + +Example: +```typescript +export function createMyServer() { + const server = new Server({ + name: 'my-server', + version: '1.0.0', + }); + + // Add handlers... + + return server; +} +``` + +## Benefits + +1. **Modularity**: Each MCP server can be developed and deployed independently +2. **Dynamic Loading**: Load only the servers you need at runtime +3. **Version Management**: Module Federation handles versioning and updates +4. **Tool Isolation**: Namespacing prevents conflicts between servers +5. **Scalability**: Easy to add new MCP servers without modifying the host \ No newline at end of file diff --git a/apps/mcp-example/host/package.json b/apps/mcp-example/host/package.json new file mode 100644 index 00000000000..93c0ee48d37 --- /dev/null +++ b/apps/mcp-example/host/package.json @@ -0,0 +1,10 @@ +{ + "name": "mcp-host", + "version": "0.0.1", + "dependencies": { + "@modelcontextprotocol/sdk": "^0.5.0", + "@module-federation/enhanced": "workspace:*", + "@module-federation/node": "workspace:*" + }, + "type": "commonjs" +} diff --git a/apps/mcp-example/host/project.json b/apps/mcp-example/host/project.json new file mode 100644 index 00000000000..19a9517d29b --- /dev/null +++ b/apps/mcp-example/host/project.json @@ -0,0 +1,78 @@ +{ + "name": "mcp-example-host", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/mcp-example/host/src", + "projectType": "application", + "tags": ["mcp", "host"], + "targets": { + "build": { + "executor": "@nx/webpack:webpack", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "target": "node", + "compiler": "tsc", + "outputPath": "apps/mcp-example/host/dist", + "main": "apps/mcp-example/host/src/main.ts", + "tsConfig": "apps/mcp-example/host/tsconfig.app.json", + "webpackConfig": "apps/mcp-example/host/webpack.config.js" + }, + "configurations": { + "development": {}, + "production": {} + }, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ] + }, + "serve": { + "executor": "@nx/js:node", + "defaultConfiguration": "development", + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ], + "options": { + "buildTarget": [ + "mcp-example-host:build", + "mcp-example-remote1:build", + "mcp-example-remote2:build" + ] + }, + "configurations": { + "development": { + "buildTarget": "mcp-example-host:build:development" + }, + "production": { + "buildTarget": "mcp-example-host:build:production" + } + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/mcp-example/host/**/*.ts"] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/mcp-example/host/jest.config.ts", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + } + } +} diff --git a/apps/mcp-example/host/src/config.ts b/apps/mcp-example/host/src/config.ts new file mode 100644 index 00000000000..d955ecdc45e --- /dev/null +++ b/apps/mcp-example/host/src/config.ts @@ -0,0 +1,47 @@ +import { RemoteConfig } from './types'; + +// Production configuration +export const PRODUCTION_CONFIG: RemoteConfig[] = [ + { + name: 'mcp_remote1', + url: 'http://localhost:3030/remoteEntry.js', + modules: { + filesystem: '/filesystem', + tools: '/tools', + }, + }, + { + name: 'mcp_remote2', + url: 'http://localhost:3031/remoteEntry.js', + modules: { + git: '/git', + database: '/database', + }, + }, +]; + +// Development configuration with local paths +export const DEVELOPMENT_CONFIG: RemoteConfig[] = [ + { + name: 'mcp_remote1', + url: 'http://localhost:3030/remoteEntry.js', + modules: { + filesystem: '/filesystem', + tools: '/tools', + }, + }, + { + name: 'mcp_remote2', + url: 'http://localhost:3031/remoteEntry.js', + modules: { + git: '/git', + database: '/database', + }, + }, +]; + +// Get configuration based on environment +export function getConfig(): RemoteConfig[] { + const env = process.env.NODE_ENV || 'development'; + return env === 'production' ? PRODUCTION_CONFIG : DEVELOPMENT_CONFIG; +} diff --git a/apps/mcp-example/host/src/enhanced-loader.ts b/apps/mcp-example/host/src/enhanced-loader.ts new file mode 100644 index 00000000000..8b0b67ca7b2 --- /dev/null +++ b/apps/mcp-example/host/src/enhanced-loader.ts @@ -0,0 +1,140 @@ +import { McpRegistry } from './mcp-registry'; +import { McpServerModule, RemoteConfig, McpServerMetadata } from './types'; +import { Server } from '@modelcontextprotocol/sdk/server/index'; + +export class EnhancedFederationLoader { + private registry: McpRegistry; + private loadedModules: Map = new Map(); + + constructor(registry: McpRegistry) { + this.registry = registry; + } + + async loadFromRemoteConfig(config: RemoteConfig): Promise { + console.log(`🔄 Loading MCP servers from ${config.name}...`); + + for (const [serverName, modulePath] of Object.entries(config.modules)) { + try { + await this.loadModule(config.name, serverName, modulePath); + } catch (error) { + console.error( + `Failed to load ${serverName} from ${config.name}:`, + error, + ); + } + } + } + + private async loadModule( + remoteName: string, + serverName: string, + modulePath: string, + ): Promise { + try { + // Dynamic import using Module Federation + const moduleId = `${remoteName}${modulePath}`; + console.log(` Loading module: ${moduleId}`); + + const module = (await import(moduleId)) as McpServerModule; + this.loadedModules.set(serverName, module); + + // Extract server instance + const server = await this.extractServer(module, serverName); + if (!server) { + throw new Error(`No server found in module ${moduleId}`); + } + + // Extract metadata + const metadata = this.extractMetadata(module, serverName); + + // Register with enhanced metadata + await this.registry.registerServer(serverName, server); + + console.log(` ✓ Loaded ${serverName} (${metadata.version})`); + } catch (error) { + console.error(` ✗ Failed to load ${serverName}:`, error); + throw error; + } + } + + private async extractServer( + module: McpServerModule, + serverName: string, + ): Promise { + // Try different patterns to find the server + + // 1. Direct server export + if (module.server instanceof Server) { + return module.server; + } + + // 2. Factory function (createServer or default) + const factory = module.createServer || module.default; + if (typeof factory === 'function') { + const result = await factory(); + if (result instanceof Server) { + return result; + } + } + + // 3. Default export that is a server + if (module.default instanceof Server) { + return module.default; + } + + // 4. Look for any function that might create a server + for (const [key, value] of Object.entries(module)) { + if (typeof value === 'function' && key.toLowerCase().includes('server')) { + try { + const result = await value(); + if (result instanceof Server) { + return result; + } + } catch { + // Continue searching + } + } + } + + return null; + } + + private extractMetadata( + module: McpServerModule, + serverName: string, + ): McpServerMetadata { + // Use provided metadata or create default + return ( + module.metadata || { + name: serverName, + version: '1.0.0', + description: `MCP server: ${serverName}`, + } + ); + } + + async reloadModule(serverName: string): Promise { + const module = this.loadedModules.get(serverName); + if (!module) { + throw new Error(`Module ${serverName} not found`); + } + + // Unregister existing + this.registry.unregisterServer(serverName); + + // Reload + const server = await this.extractServer(module, serverName); + if (server) { + await this.registry.registerServer(serverName, server); + } + } + + getLoadedModules(): string[] { + return Array.from(this.loadedModules.keys()); + } + + getModuleMetadata(serverName: string): McpServerMetadata | undefined { + const module = this.loadedModules.get(serverName); + return module ? this.extractMetadata(module, serverName) : undefined; + } +} diff --git a/apps/mcp-example/host/src/federation-loader.ts b/apps/mcp-example/host/src/federation-loader.ts new file mode 100644 index 00000000000..72f6a85b088 --- /dev/null +++ b/apps/mcp-example/host/src/federation-loader.ts @@ -0,0 +1,117 @@ +import { McpRegistry } from './mcp-registry'; + +export class FederationLoader { + private registry: McpRegistry; + + constructor(registry: McpRegistry) { + this.registry = registry; + } + + async loadRemoteServers(): Promise { + console.log('🚀 Loading remote MCP servers via Module Federation...'); + + try { + // Load Remote 1 servers (filesystem and tools) + await this.loadRemote1Servers(); + + // Load Remote 2 servers (git and database) + await this.loadRemote2Servers(); + + console.log('✓ All remote servers loaded successfully'); + } catch (error) { + console.error('✗ Failed to load remote servers:', error); + throw error; + } + } + + private async loadRemote1Servers(): Promise { + try { + console.log('Loading MCP Remote 1 (filesystem & tools)...'); + + // Import the remote module + const remote1 = await import('mcp_remote1/filesystem'); + const remote1Tools = await import('mcp_remote1/tools'); + + // Create and register the servers + if (remote1.createFilesystemServer) { + const fsServer = remote1.createFilesystemServer(); + await this.registry.registerServer('filesystem', fsServer); + } + + if (remote1Tools.createToolsServer) { + const toolsServer = remote1Tools.createToolsServer(); + await this.registry.registerServer('tools', toolsServer); + } + + console.log('✓ Remote 1 servers loaded'); + } catch (error) { + console.error('✗ Failed to load Remote 1:', error); + // Don't throw - continue with other remotes + } + } + + private async loadRemote2Servers(): Promise { + try { + console.log('Loading MCP Remote 2 (git & database)...'); + + // Import the remote module + const remote2Git = await import('mcp_remote2/git'); + const remote2Db = await import('mcp_remote2/database'); + + // Create and register the servers + if (remote2Git.createGitServer) { + const gitServer = remote2Git.createGitServer(); + await this.registry.registerServer('git', gitServer); + } + + if (remote2Db.createDatabaseServer) { + const dbServer = remote2Db.createDatabaseServer(); + await this.registry.registerServer('database', dbServer); + } + + console.log('✓ Remote 2 servers loaded'); + } catch (error) { + console.error('✗ Failed to load Remote 2:', error); + // Don't throw - continue with other remotes + } + } + + async reloadRemoteServer(remoteName: string): Promise { + console.log(`🔄 Reloading remote server: ${remoteName}`); + + if (remoteName === 'remote1') { + // Unregister existing servers + this.registry.unregisterServer('filesystem'); + this.registry.unregisterServer('tools'); + + // Reload + await this.loadRemote1Servers(); + } else if (remoteName === 'remote2') { + // Unregister existing servers + this.registry.unregisterServer('git'); + this.registry.unregisterServer('database'); + + // Reload + await this.loadRemote2Servers(); + } else { + throw new Error(`Unknown remote: ${remoteName}`); + } + + console.log(`✓ Remote server ${remoteName} reloaded`); + } + + getLoadedRemotes(): string[] { + const servers = this.registry.getServerNames(); + const remotes: string[] = []; + + if (servers.includes('filesystem') || servers.includes('tools')) { + remotes.push('remote1'); + } + + if (servers.includes('git') || servers.includes('database')) { + remotes.push('remote2'); + } + + return remotes; + } +} diff --git a/apps/mcp-example/host/src/health-monitor.ts b/apps/mcp-example/host/src/health-monitor.ts new file mode 100644 index 00000000000..55f44a0117b --- /dev/null +++ b/apps/mcp-example/host/src/health-monitor.ts @@ -0,0 +1,119 @@ +import { McpRegistry } from './mcp-registry'; +import { Server } from '@modelcontextprotocol/sdk/server/index'; + +export interface HealthStatus { + serverName: string; + status: 'healthy' | 'unhealthy' | 'unknown'; + lastChecked: Date; + error?: string; + tools?: number; + version?: string; +} + +export class HealthMonitor { + private registry: McpRegistry; + private healthStatuses: Map = new Map(); + private checkInterval: NodeJS.Timer | null = null; + + constructor(registry: McpRegistry) { + this.registry = registry; + } + + startMonitoring(intervalMs: number = 30000): void { + if (this.checkInterval) { + this.stopMonitoring(); + } + + // Initial check + this.checkAllServers(); + + // Schedule periodic checks + this.checkInterval = setInterval(() => { + this.checkAllServers(); + }, intervalMs); + + console.log(`🏥 Health monitoring started (interval: ${intervalMs}ms)`); + } + + stopMonitoring(): void { + if (this.checkInterval) { + clearInterval(this.checkInterval); + this.checkInterval = null; + console.log('🏥 Health monitoring stopped'); + } + } + + private async checkAllServers(): Promise { + const servers = this.registry.getAllServers(); + + for (const serverInfo of servers) { + await this.checkServer(serverInfo.name, serverInfo.server); + } + } + + private async checkServer(name: string, server: Server): Promise { + const status: HealthStatus = { + serverName: name, + status: 'unknown', + lastChecked: new Date(), + }; + + try { + // Try to get server info by calling list tools + const request = { + method: 'tools/list' as const, + params: {}, + }; + + const result = await server.request(request); + const tools = result.tools || []; + + status.status = 'healthy'; + status.tools = tools.length; + status.version = '1.0.0'; // Could be extracted from server info + } catch (error) { + status.status = 'unhealthy'; + status.error = error instanceof Error ? error.message : String(error); + } + + this.healthStatuses.set(name, status); + } + + getStatus(serverName: string): HealthStatus | undefined { + return this.healthStatuses.get(serverName); + } + + getAllStatuses(): HealthStatus[] { + return Array.from(this.healthStatuses.values()); + } + + getHealthSummary(): { + total: number; + healthy: number; + unhealthy: number; + unknown: number; + } { + const statuses = this.getAllStatuses(); + return { + total: statuses.length, + healthy: statuses.filter((s) => s.status === 'healthy').length, + unhealthy: statuses.filter((s) => s.status === 'unhealthy').length, + unknown: statuses.filter((s) => s.status === 'unknown').length, + }; + } + + async performHealthCheck(serverName: string): Promise { + const serverInfo = this.registry.getServer(serverName); + if (!serverInfo) { + return { + serverName, + status: 'unhealthy', + lastChecked: new Date(), + error: 'Server not found', + }; + } + + await this.checkServer(serverName, serverInfo.server); + return this.getStatus(serverName)!; + } +} diff --git a/apps/mcp-example/host/src/main.ts b/apps/mcp-example/host/src/main.ts new file mode 100644 index 00000000000..e89db2d9074 --- /dev/null +++ b/apps/mcp-example/host/src/main.ts @@ -0,0 +1,144 @@ +import { McpRegistry } from './mcp-registry'; +import { FederationLoader } from './federation-loader'; +import { Server } from '@modelcontextprotocol/sdk/server/index'; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types'; + +async function createMcpHost() { + console.log('🏠 Starting MCP Host with Module Federation'); + + // Create registry and loader + const registry = new McpRegistry(); + const loader = new FederationLoader(registry); + + // Load remote servers + await loader.loadRemoteServers(); + + // Create unified MCP server + const hostServer = new Server( + { + name: 'mcp-host', + version: '1.0.0', + }, + { + capabilities: { + tools: {}, + }, + }, + ); + + // Handle list tools - aggregate from all registered servers + hostServer.setRequestHandler(ListToolsRequestSchema, async () => { + const allTools = registry.getAllTools(); + return { + tools: allTools.map((tool) => ({ + name: `${tool.serverName}.${tool.name}`, + description: `[${tool.serverName.toUpperCase()}] ${tool.description}`, + inputSchema: tool.inputSchema, + })), + }; + }); + + // Handle tool calls - route to appropriate server + hostServer.setRequestHandler(CallToolRequestSchema, async (request) => { + const { name, arguments: args } = request.params; + + // Parse server name and tool name + const parts = name.split('.'); + if (parts.length !== 2) { + throw new Error(`Invalid tool name format. Use: serverName.toolName`); + } + + const [serverName, toolName] = parts; + const serverInfo = registry.getServer(serverName); + + if (!serverInfo) { + throw new Error(`Server not found: ${serverName}`); + } + + try { + return await registry.callTool(toolName, args); + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Error calling ${name}: ${error instanceof Error ? error.message : String(error)}`, + }, + ], + isError: true, + }; + } + }); + + return { hostServer, registry, loader }; +} + +async function runDemo() { + try { + const { hostServer, registry, loader } = await createMcpHost(); + + console.log('\n📊 MCP Host Statistics:'); + const stats = registry.getStats(); + console.log(JSON.stringify(stats, null, 2)); + + console.log('\n🔧 Available Tools:'); + const tools = registry.getAllTools(); + tools.forEach((tool) => { + console.log(` • ${tool.serverName}.${tool.name} - ${tool.description}`); + }); + + console.log('\n🌐 Loaded Remotes:', loader.getLoadedRemotes()); + + // Demo tool calls + console.log('\n🧪 Running Demo Tool Calls...'); + + try { + // Test filesystem tools + console.log('\n1. Testing Filesystem Tools:'); + const processInfo = await registry.callTool('process_info', {}); + console.log('Process Info:', JSON.stringify(processInfo, null, 2)); + } catch (error) { + console.error('Filesystem demo failed:', error); + } + + try { + // Test database tools + console.log('\n2. Testing Database Tools:'); + await registry.callTool('db_set', { + key: 'demo', + value: '{"message": "Hello from MCP Host!"}', + }); + const dbGet = await registry.callTool('db_get', { key: 'demo' }); + console.log('Database Get:', JSON.stringify(dbGet, null, 2)); + } catch (error) { + console.error('Database demo failed:', error); + } + + try { + // Test git tools + console.log('\n3. Testing Git Tools:'); + const gitStatus = await registry.callTool('git_status', { + path: process.cwd(), + }); + console.log('Git Status:', JSON.stringify(gitStatus, null, 2)); + } catch (error) { + console.error('Git demo failed:', error); + } + + console.log('\n✅ MCP Host Demo Complete!'); + } catch (error) { + console.error('❌ Demo failed:', error); + process.exit(1); + } +} + +// Export for Module Federation +export { createMcpHost, McpRegistry, FederationLoader }; + +// Run demo if this is the main module +if (require.main === module) { + runDemo().catch(console.error); +} diff --git a/apps/mcp-example/host/src/mcp-registry.ts b/apps/mcp-example/host/src/mcp-registry.ts new file mode 100644 index 00000000000..55e1d90df95 --- /dev/null +++ b/apps/mcp-example/host/src/mcp-registry.ts @@ -0,0 +1,140 @@ +import { Server } from '@modelcontextprotocol/sdk/server/index'; +import { + CallToolRequestSchema, + ListToolsRequestSchema, + Tool, +} from '@modelcontextprotocol/sdk/types'; + +export interface McpServerInfo { + name: string; + version: string; + server: Server; + tools: Tool[]; +} + +export class McpRegistry { + private servers: Map = new Map(); + + async registerServer(name: string, server: Server): Promise { + try { + // Get server info and tools + const tools = await this.getServerTools(server); + + const serverInfo: McpServerInfo = { + name, + version: '1.0.0', // Default version + server, + tools, + }; + + this.servers.set(name, serverInfo); + console.log( + `✓ Registered MCP server: ${name} with ${tools.length} tools`, + ); + } catch (error) { + console.error(`✗ Failed to register server ${name}:`, error); + throw error; + } + } + + private async getServerTools(server: Server): Promise { + try { + // Create a mock request to get tools + const request = { + method: 'tools/list' as const, + params: {}, + }; + + // Call the server's request handler + const result = await server.request(request); + return result.tools || []; + } catch (error) { + console.warn(`Could not get tools from server:`, error); + return []; + } + } + + getServer(name: string): McpServerInfo | undefined { + return this.servers.get(name); + } + + getAllServers(): McpServerInfo[] { + return Array.from(this.servers.values()); + } + + getAllTools(): Array { + const allTools: Array = []; + + for (const [serverName, serverInfo] of this.servers) { + for (const tool of serverInfo.tools) { + allTools.push({ + ...tool, + serverName, + }); + } + } + + return allTools; + } + + async callTool(toolName: string, args: any): Promise { + // Find which server has this tool + for (const [serverName, serverInfo] of this.servers) { + const tool = serverInfo.tools.find((t) => t.name === toolName); + if (tool) { + try { + const request = { + method: 'tools/call' as const, + params: { + name: toolName, + arguments: args, + }, + }; + + return await serverInfo.server.request(request); + } catch (error) { + console.error( + `Error calling tool ${toolName} on server ${serverName}:`, + error, + ); + throw error; + } + } + } + + throw new Error(`Tool not found: ${toolName}`); + } + + getServerNames(): string[] { + return Array.from(this.servers.keys()); + } + + unregisterServer(name: string): boolean { + const removed = this.servers.delete(name); + if (removed) { + console.log(`✓ Unregistered MCP server: ${name}`); + } + return removed; + } + + clear(): void { + this.servers.clear(); + console.log('✓ Cleared all registered MCP servers'); + } + + getStats() { + const serverCount = this.servers.size; + const totalTools = this.getAllTools().length; + + return { + serverCount, + totalTools, + servers: this.getAllServers().map((s) => ({ + name: s.name, + version: s.version, + toolCount: s.tools.length, + tools: s.tools.map((t) => t.name), + })), + }; + } +} diff --git a/apps/mcp-example/host/src/types.ts b/apps/mcp-example/host/src/types.ts new file mode 100644 index 00000000000..0b342cf4e27 --- /dev/null +++ b/apps/mcp-example/host/src/types.ts @@ -0,0 +1,46 @@ +import { Server } from '@modelcontextprotocol/sdk/server/index'; +import { Tool } from '@modelcontextprotocol/sdk/types'; + +export interface McpServerMetadata { + name: string; + version: string; + description?: string; + author?: string; + capabilities?: { + tools?: string[]; + resources?: string[]; + prompts?: string[]; + }; +} + +export interface McpServerFactory { + (): Server | Promise; +} + +export interface McpServerModule { + default?: McpServerFactory; + createServer?: McpServerFactory; + server?: Server; + metadata?: McpServerMetadata; +} + +export interface RemoteConfig { + name: string; + url: string; + modules: { + [key: string]: string; // module name -> exposed path + }; +} + +export interface LoadedServer { + name: string; + server: Server; + metadata: McpServerMetadata; + tools: Tool[]; +} + +export interface HostConfig { + remotes: RemoteConfig[]; + enableCache?: boolean; + timeout?: number; +} diff --git a/apps/mcp-example/host/tsconfig.app.json b/apps/mcp-example/host/tsconfig.app.json new file mode 100644 index 00000000000..6de0bd13ba9 --- /dev/null +++ b/apps/mcp-example/host/tsconfig.app.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["node"] + }, + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/apps/mcp-example/host/tsconfig.json b/apps/mcp-example/host/tsconfig.json new file mode 100644 index 00000000000..fdfa691bda7 --- /dev/null +++ b/apps/mcp-example/host/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "esModuleInterop": true + } +} diff --git a/apps/mcp-example/host/tsconfig.spec.json b/apps/mcp-example/host/tsconfig.spec.json new file mode 100644 index 00000000000..41f24902864 --- /dev/null +++ b/apps/mcp-example/host/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/mcp-example/host/webpack.config.js b/apps/mcp-example/host/webpack.config.js new file mode 100644 index 00000000000..d786bdf3044 --- /dev/null +++ b/apps/mcp-example/host/webpack.config.js @@ -0,0 +1,29 @@ +const { composePlugins, withNx } = require('@nx/webpack'); +const { ModuleFederationPlugin } = require('@module-federation/enhanced'); + +module.exports = composePlugins(withNx(), async (config) => { + config.cache = false; + config.devtool = false; + config.target = 'async-node'; + config.output.publicPath = 'auto'; + config.output.chunkFilename = '[id]-[chunkhash].js'; + config.optimization.chunkIds = 'named'; + + config.plugins.push( + new ModuleFederationPlugin({ + name: 'mcp_host', + dts: false, + runtimePlugins: [ + require.resolve('@module-federation/node/runtimePlugin'), + ], + experiments: { + asyncStartup: true, + }, + remotes: { + mcp_remote1: 'mcp_remote1@http://localhost:3030/remoteEntry.js', + mcp_remote2: 'mcp_remote2@http://localhost:3031/remoteEntry.js', + }, + }), + ); + return config; +}); diff --git a/apps/mcp-example/package.json b/apps/mcp-example/package.json new file mode 100644 index 00000000000..7800b8fcead --- /dev/null +++ b/apps/mcp-example/package.json @@ -0,0 +1,24 @@ +{ + "name": "mcp-federation-demo", + "version": "0.0.1", + "private": true, + "description": "MCP servers with Module Federation demo", + "scripts": { + "build:all": "nx run-many --target=build --projects=mcp-host,mcp-remote1,mcp-remote2 --parallel=3", + "serve:all": "nx run-many --target=serve --projects=mcp-host,mcp-remote1,mcp-remote2 --parallel=3", + "dev": "nx run-many --target=serve --projects=mcp-host,mcp-remote1,mcp-remote2 --parallel=3 --configuration=development", + "start:host": "nx run mcp-host:serve", + "start:remote1": "nx run mcp-remote1:serve", + "start:remote2": "nx run mcp-remote2:serve", + "build:host": "nx run mcp-host:build", + "build:remote1": "nx run mcp-remote1:build", + "build:remote2": "nx run mcp-remote2:build", + "test:api": "node test-mcp-api.js", + "demo": "node run-demo.js", + "test:integration": "node test-integration.js" + }, + "devDependencies": { + "axios": "^1.8.2", + "concurrently": "^8.2.2" + } +} diff --git a/apps/mcp-example/remote1/package.json b/apps/mcp-example/remote1/package.json new file mode 100644 index 00000000000..2bf48c2e8cf --- /dev/null +++ b/apps/mcp-example/remote1/package.json @@ -0,0 +1,10 @@ +{ + "name": "mcp-remote1", + "version": "0.0.1", + "dependencies": { + "@modelcontextprotocol/sdk": "^0.5.0", + "@module-federation/enhanced": "workspace:*", + "@module-federation/node": "workspace:*" + }, + "type": "commonjs" +} diff --git a/apps/mcp-example/remote1/project.json b/apps/mcp-example/remote1/project.json new file mode 100644 index 00000000000..2c83bdf0b0c --- /dev/null +++ b/apps/mcp-example/remote1/project.json @@ -0,0 +1,89 @@ +{ + "name": "mcp-example-remote1", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/mcp-example/remote1/src", + "projectType": "application", + "tags": ["mcp", "remote"], + "targets": { + "build": { + "executor": "@nx/webpack:webpack", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "target": "node", + "compiler": "tsc", + "outputPath": "apps/mcp-example/remote1/dist", + "main": "apps/mcp-example/remote1/src/main.ts", + "tsConfig": "apps/mcp-example/remote1/tsconfig.app.json", + "webpackConfig": "apps/mcp-example/remote1/webpack.config.js" + }, + "configurations": { + "development": { + "extractLicenses": false, + "optimization": false, + "sourceMap": true, + "vendorChunk": true + }, + "production": { + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": false, + "vendorChunk": false + } + }, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ] + }, + "serve": { + "executor": "@nx/webpack:dev-server", + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ], + "defaultConfiguration": "development", + "options": { + "buildTarget": "mcp-example-remote1:build", + "hmr": false, + "port": 3030 + }, + "configurations": { + "development": { + "buildTarget": "mcp-example-remote1:build:development" + }, + "production": { + "buildTarget": "mcp-example-remote1:build:production", + "hmr": false + } + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/mcp-example/remote1/**/*.ts"] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/mcp-example/remote1/jest.config.ts", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + } + } +} diff --git a/apps/mcp-example/remote1/src/filesystem-server.ts b/apps/mcp-example/remote1/src/filesystem-server.ts new file mode 100644 index 00000000000..9c05d1f6005 --- /dev/null +++ b/apps/mcp-example/remote1/src/filesystem-server.ts @@ -0,0 +1,172 @@ +import { Server } from '@modelcontextprotocol/sdk/server/index'; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types'; +import { promises as fs } from 'fs'; +import * as path from 'path'; + +const server = new Server( + { + name: 'filesystem-server', + version: '0.1.0', + }, + { + capabilities: { + tools: {}, + }, + }, +); + +// List available tools +server.setRequestHandler(ListToolsRequestSchema, async () => { + return { + tools: [ + { + name: 'read_file', + description: + 'Read the complete contents of a file from the filesystem. Use this when you need to examine the contents of a single file.', + inputSchema: { + type: 'object', + properties: { + path: { + type: 'string', + description: 'Absolute or relative path to the file to read', + }, + }, + required: ['path'], + }, + }, + { + name: 'write_file', + description: + 'Create a new file or completely overwrite an existing file with new content.', + inputSchema: { + type: 'object', + properties: { + path: { + type: 'string', + description: + 'Absolute or relative path where the file should be created/written', + }, + content: { + type: 'string', + description: 'The complete content to write to the file', + }, + }, + required: ['path', 'content'], + }, + }, + { + name: 'list_directory', + description: + 'Get a detailed listing of all files and directories in a specified path.', + inputSchema: { + type: 'object', + properties: { + path: { + type: 'string', + description: + 'Absolute or relative path to the directory to list (default: current directory)', + }, + }, + }, + }, + ], + }; +}); + +// Handle tool calls +server.setRequestHandler(CallToolRequestSchema, async (request) => { + const { name, arguments: args } = request.params; + + try { + if (name === 'read_file') { + const filePath = args.path as string; + try { + const content = await fs.readFile(filePath, 'utf-8'); + return { + content: [ + { + type: 'text', + text: content, + }, + ], + }; + } catch (error) { + throw new Error(`Failed to read file: ${error}`); + } + } else if (name === 'write_file') { + const filePath = args.path as string; + const content = args.content as string; + + try { + // Ensure directory exists + const dir = path.dirname(filePath); + await fs.mkdir(dir, { recursive: true }); + + await fs.writeFile(filePath, content, 'utf-8'); + return { + content: [ + { + type: 'text', + text: `Successfully wrote ${content.length} characters to ${filePath}`, + }, + ], + }; + } catch (error) { + throw new Error(`Failed to write file: ${error}`); + } + } else if (name === 'list_directory') { + const dirPath = (args.path as string) || '.'; + + try { + const entries = await fs.readdir(dirPath, { withFileTypes: true }); + const items = await Promise.all( + entries.map(async (entry) => { + const fullPath = path.join(dirPath, entry.name); + const stats = await fs.stat(fullPath); + return { + name: entry.name, + type: entry.isDirectory() ? 'directory' : 'file', + size: stats.size, + modified: stats.mtime.toISOString(), + }; + }), + ); + + return { + content: [ + { + type: 'text', + text: JSON.stringify(items, null, 2), + }, + ], + }; + } catch (error) { + throw new Error(`Failed to list directory: ${error}`); + } + } else { + throw new Error(`Unknown tool: ${name}`); + } + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Error: ${error instanceof Error ? error.message : String(error)}`, + }, + ], + isError: true, + }; + } +}); + +export function createFilesystemServer() { + return server; +} + +// Export metadata for the loader +export { filesystemMetadata as metadata } from './metadata'; + +export default server; diff --git a/apps/mcp-example/remote1/src/main.ts b/apps/mcp-example/remote1/src/main.ts new file mode 100644 index 00000000000..4febab9ff4c --- /dev/null +++ b/apps/mcp-example/remote1/src/main.ts @@ -0,0 +1,17 @@ +import { createFilesystemServer } from './filesystem-server'; +import { createToolsServer } from './tools-server'; + +console.log('MCP Remote1 - Filesystem and Tools Server'); + +// Export servers for Module Federation +export { createFilesystemServer, createToolsServer }; + +// For local testing +if (require.main === module) { + console.log('Running MCP Remote1 servers locally...'); + const fsServer = createFilesystemServer(); + const toolsServer = createToolsServer(); + + console.log('Filesystem server created'); + console.log('Tools server created'); +} diff --git a/apps/mcp-example/remote1/src/metadata.ts b/apps/mcp-example/remote1/src/metadata.ts new file mode 100644 index 00000000000..fd03f21f665 --- /dev/null +++ b/apps/mcp-example/remote1/src/metadata.ts @@ -0,0 +1,21 @@ +import { McpServerMetadata } from '../../host/src/types'; + +export const filesystemMetadata: McpServerMetadata = { + name: 'filesystem', + version: '1.0.0', + description: 'File system operations for MCP', + author: 'Module Federation Team', + capabilities: { + tools: ['read_file', 'write_file', 'list_directory'], + }, +}; + +export const toolsMetadata: McpServerMetadata = { + name: 'tools', + version: '1.0.0', + description: 'System and process information tools', + author: 'Module Federation Team', + capabilities: { + tools: ['process_info', 'system_info'], + }, +}; diff --git a/apps/mcp-example/remote1/src/tools-server.ts b/apps/mcp-example/remote1/src/tools-server.ts new file mode 100644 index 00000000000..7f1f8cc48dd --- /dev/null +++ b/apps/mcp-example/remote1/src/tools-server.ts @@ -0,0 +1,170 @@ +import { Server } from '@modelcontextprotocol/sdk/server/index'; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types'; +import { exec } from 'child_process'; +import { promisify } from 'util'; + +const execAsync = promisify(exec); + +const server = new Server( + { + name: 'tools-server', + version: '0.1.0', + }, + { + capabilities: { + tools: {}, + }, + }, +); + +// List available tools +server.setRequestHandler(ListToolsRequestSchema, async () => { + return { + tools: [ + { + name: 'run_command', + description: 'Execute a shell command and return its output.', + inputSchema: { + type: 'object', + properties: { + command: { + type: 'string', + description: 'The shell command to execute', + }, + cwd: { + type: 'string', + description: 'Working directory for the command (optional)', + }, + }, + required: ['command'], + }, + }, + { + name: 'process_info', + description: 'Get information about the current Node.js process.', + inputSchema: { + type: 'object', + properties: {}, + }, + }, + { + name: 'environment_info', + description: 'Get environment variables and system information.', + inputSchema: { + type: 'object', + properties: { + filter: { + type: 'string', + description: 'Optional filter pattern for environment variables', + }, + }, + }, + }, + ], + }; +}); + +// Handle tool calls +server.setRequestHandler(CallToolRequestSchema, async (request) => { + const { name, arguments: args } = request.params; + + try { + if (name === 'run_command') { + const command = args.command as string; + const cwd = args.cwd as string | undefined; + + try { + const { stdout, stderr } = await execAsync(command, { + cwd: cwd || process.cwd(), + timeout: 30000, // 30 second timeout + }); + + return { + content: [ + { + type: 'text', + text: `Command: ${command}\nOutput:\n${stdout}${stderr ? `\nErrors:\n${stderr}` : ''}`, + }, + ], + }; + } catch (error: any) { + return { + content: [ + { + type: 'text', + text: `Command failed: ${command}\nError: ${error.message}\nStdout: ${error.stdout || ''}\nStderr: ${error.stderr || ''}`, + }, + ], + isError: true, + }; + } + } else if (name === 'process_info') { + const info = { + pid: process.pid, + version: process.version, + platform: process.platform, + arch: process.arch, + cwd: process.cwd(), + uptime: process.uptime(), + memoryUsage: process.memoryUsage(), + versions: process.versions, + }; + + return { + content: [ + { + type: 'text', + text: JSON.stringify(info, null, 2), + }, + ], + }; + } else if (name === 'environment_info') { + const filter = args.filter as string | undefined; + let envVars = process.env; + + if (filter) { + const regex = new RegExp(filter, 'i'); + envVars = Object.fromEntries( + Object.entries(process.env).filter(([key]) => regex.test(key)), + ); + } + + const info = { + environment: envVars, + argv: process.argv, + execPath: process.execPath, + execArgv: process.execArgv, + }; + + return { + content: [ + { + type: 'text', + text: JSON.stringify(info, null, 2), + }, + ], + }; + } else { + throw new Error(`Unknown tool: ${name}`); + } + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Error: ${error instanceof Error ? error.message : String(error)}`, + }, + ], + isError: true, + }; + } +}); + +export function createToolsServer() { + return server; +} + +export default server; diff --git a/apps/mcp-example/remote1/tsconfig.app.json b/apps/mcp-example/remote1/tsconfig.app.json new file mode 100644 index 00000000000..6de0bd13ba9 --- /dev/null +++ b/apps/mcp-example/remote1/tsconfig.app.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["node"] + }, + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/apps/mcp-example/remote1/tsconfig.json b/apps/mcp-example/remote1/tsconfig.json new file mode 100644 index 00000000000..fdfa691bda7 --- /dev/null +++ b/apps/mcp-example/remote1/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "esModuleInterop": true + } +} diff --git a/apps/mcp-example/remote1/tsconfig.spec.json b/apps/mcp-example/remote1/tsconfig.spec.json new file mode 100644 index 00000000000..41f24902864 --- /dev/null +++ b/apps/mcp-example/remote1/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/mcp-example/remote1/webpack.config.js b/apps/mcp-example/remote1/webpack.config.js new file mode 100644 index 00000000000..930eca4b539 --- /dev/null +++ b/apps/mcp-example/remote1/webpack.config.js @@ -0,0 +1,29 @@ +const { composePlugins, withNx } = require('@nx/webpack'); +const { ModuleFederationPlugin } = require('@module-federation/enhanced'); + +module.exports = composePlugins(withNx(), (config) => { + config.target = 'async-node'; + config.devtool = false; + config.cache = false; + + if (config.mode === 'development') { + config.devServer.devMiddleware.writeToDisk = true; + } + + config.plugins.push( + new ModuleFederationPlugin({ + dts: false, + runtimePlugins: [ + require.resolve('@module-federation/node/runtimePlugin'), + ], + name: 'mcp_remote1', + library: { type: 'commonjs-module', name: 'mcp_remote1' }, + filename: 'remoteEntry.js', + exposes: { + './filesystem': './src/filesystem-server.ts', + './tools': './src/tools-server.ts', + }, + }), + ); + return config; +}); diff --git a/apps/mcp-example/remote2/package.json b/apps/mcp-example/remote2/package.json new file mode 100644 index 00000000000..d044edd2fd4 --- /dev/null +++ b/apps/mcp-example/remote2/package.json @@ -0,0 +1,10 @@ +{ + "name": "mcp-remote2", + "version": "0.0.1", + "dependencies": { + "@modelcontextprotocol/sdk": "^0.5.0", + "@module-federation/enhanced": "workspace:*", + "@module-federation/node": "workspace:*" + }, + "type": "commonjs" +} diff --git a/apps/mcp-example/remote2/project.json b/apps/mcp-example/remote2/project.json new file mode 100644 index 00000000000..956714c2e2a --- /dev/null +++ b/apps/mcp-example/remote2/project.json @@ -0,0 +1,89 @@ +{ + "name": "mcp-remote2", + "$schema": "../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "apps/mcp/remote2/src", + "projectType": "application", + "tags": ["mcp", "remote"], + "targets": { + "build": { + "executor": "@nx/webpack:webpack", + "outputs": ["{options.outputPath}"], + "defaultConfiguration": "production", + "options": { + "target": "node", + "compiler": "tsc", + "outputPath": "apps/mcp/remote2/dist", + "main": "apps/mcp/remote2/src/main.ts", + "tsConfig": "apps/mcp/remote2/tsconfig.app.json", + "webpackConfig": "apps/mcp/remote2/webpack.config.js" + }, + "configurations": { + "development": { + "extractLicenses": false, + "optimization": false, + "sourceMap": true, + "vendorChunk": true + }, + "production": { + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "namedChunks": false, + "extractLicenses": false, + "vendorChunk": false + } + }, + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ] + }, + "serve": { + "executor": "@nx/webpack:dev-server", + "dependsOn": [ + { + "target": "build", + "dependencies": true + } + ], + "defaultConfiguration": "development", + "options": { + "buildTarget": "mcp-remote2:build", + "hmr": false, + "port": 3031 + }, + "configurations": { + "development": { + "buildTarget": "mcp-remote2:build:development" + }, + "production": { + "buildTarget": "mcp-remote2:build:production", + "hmr": false + } + } + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["apps/mcp/remote2/**/*.ts"] + } + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "apps/mcp/remote2/jest.config.ts", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + } + } +} diff --git a/apps/mcp-example/remote2/src/database-server.ts b/apps/mcp-example/remote2/src/database-server.ts new file mode 100644 index 00000000000..fb62588cee1 --- /dev/null +++ b/apps/mcp-example/remote2/src/database-server.ts @@ -0,0 +1,267 @@ +import { Server } from '@modelcontextprotocol/sdk/server/index'; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types'; + +// Simple in-memory database simulation +interface DatabaseEntry { + id: string; + data: any; + timestamp: string; +} + +class SimpleDatabase { + private data: Map = new Map(); + + set(key: string, value: any): void { + this.data.set(key, { + id: key, + data: value, + timestamp: new Date().toISOString(), + }); + } + + get(key: string): DatabaseEntry | undefined { + return this.data.get(key); + } + + list(): DatabaseEntry[] { + return Array.from(this.data.values()); + } + + delete(key: string): boolean { + return this.data.delete(key); + } + + clear(): void { + this.data.clear(); + } + + size(): number { + return this.data.size; + } +} + +const db = new SimpleDatabase(); + +const server = new Server( + { + name: 'database-server', + version: '0.1.0', + }, + { + capabilities: { + tools: {}, + }, + }, +); + +// List available tools +server.setRequestHandler(ListToolsRequestSchema, async () => { + return { + tools: [ + { + name: 'db_set', + description: 'Store a key-value pair in the database.', + inputSchema: { + type: 'object', + properties: { + key: { + type: 'string', + description: 'The key to store the data under', + }, + value: { + type: 'string', + description: 'The value to store (will be stored as JSON)', + }, + }, + required: ['key', 'value'], + }, + }, + { + name: 'db_get', + description: 'Retrieve a value from the database by key.', + inputSchema: { + type: 'object', + properties: { + key: { + type: 'string', + description: 'The key to retrieve', + }, + }, + required: ['key'], + }, + }, + { + name: 'db_list', + description: 'List all entries in the database.', + inputSchema: { + type: 'object', + properties: {}, + }, + }, + { + name: 'db_delete', + description: 'Delete an entry from the database.', + inputSchema: { + type: 'object', + properties: { + key: { + type: 'string', + description: 'The key to delete', + }, + }, + required: ['key'], + }, + }, + { + name: 'db_clear', + description: 'Clear all entries from the database.', + inputSchema: { + type: 'object', + properties: {}, + }, + }, + { + name: 'db_info', + description: 'Get information about the database.', + inputSchema: { + type: 'object', + properties: {}, + }, + }, + ], + }; +}); + +// Handle tool calls +server.setRequestHandler(CallToolRequestSchema, async (request) => { + const { name, arguments: args } = request.params; + + try { + if (name === 'db_set') { + const key = args.key as string; + const value = args.value as string; + + try { + // Try to parse as JSON, fallback to string + const parsedValue = JSON.parse(value); + db.set(key, parsedValue); + } catch { + db.set(key, value); + } + + return { + content: [ + { + type: 'text', + text: `Successfully stored data under key: ${key}`, + }, + ], + }; + } else if (name === 'db_get') { + const key = args.key as string; + const entry = db.get(key); + + if (!entry) { + return { + content: [ + { + type: 'text', + text: `Key not found: ${key}`, + }, + ], + isError: true, + }; + } + + return { + content: [ + { + type: 'text', + text: JSON.stringify(entry, null, 2), + }, + ], + }; + } else if (name === 'db_list') { + const entries = db.list(); + + return { + content: [ + { + type: 'text', + text: JSON.stringify(entries, null, 2), + }, + ], + }; + } else if (name === 'db_delete') { + const key = args.key as string; + const deleted = db.delete(key); + + if (!deleted) { + return { + content: [ + { + type: 'text', + text: `Key not found: ${key}`, + }, + ], + isError: true, + }; + } + + return { + content: [ + { + type: 'text', + text: `Successfully deleted key: ${key}`, + }, + ], + }; + } else if (name === 'db_clear') { + db.clear(); + + return { + content: [ + { + type: 'text', + text: 'Database cleared successfully', + }, + ], + }; + } else if (name === 'db_info') { + const info = { + size: db.size(), + keys: db.list().map((entry) => entry.id), + }; + + return { + content: [ + { + type: 'text', + text: JSON.stringify(info, null, 2), + }, + ], + }; + } else { + throw new Error(`Unknown tool: ${name}`); + } + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Error: ${error instanceof Error ? error.message : String(error)}`, + }, + ], + isError: true, + }; + } +}); + +export function createDatabaseServer() { + return server; +} + +export default server; diff --git a/apps/mcp-example/remote2/src/git-server.ts b/apps/mcp-example/remote2/src/git-server.ts new file mode 100644 index 00000000000..39a4b994bcf --- /dev/null +++ b/apps/mcp-example/remote2/src/git-server.ts @@ -0,0 +1,213 @@ +import { Server } from '@modelcontextprotocol/sdk/server/index'; +import { + CallToolRequestSchema, + ListToolsRequestSchema, +} from '@modelcontextprotocol/sdk/types'; +import { exec } from 'child_process'; +import { promisify } from 'util'; + +const execAsync = promisify(exec); + +const server = new Server( + { + name: 'git-server', + version: '0.1.0', + }, + { + capabilities: { + tools: {}, + }, + }, +); + +// List available tools +server.setRequestHandler(ListToolsRequestSchema, async () => { + return { + tools: [ + { + name: 'git_status', + description: 'Get the current git status of the repository.', + inputSchema: { + type: 'object', + properties: { + path: { + type: 'string', + description: + 'Path to the git repository (optional, defaults to current directory)', + }, + }, + }, + }, + { + name: 'git_log', + description: 'Get git commit history.', + inputSchema: { + type: 'object', + properties: { + path: { + type: 'string', + description: 'Path to the git repository (optional)', + }, + limit: { + type: 'number', + description: 'Number of commits to retrieve (default: 10)', + }, + oneline: { + type: 'boolean', + description: 'Show compact one-line format', + }, + }, + }, + }, + { + name: 'git_diff', + description: 'Show git diff for staged or unstaged changes.', + inputSchema: { + type: 'object', + properties: { + path: { + type: 'string', + description: 'Path to the git repository (optional)', + }, + staged: { + type: 'boolean', + description: 'Show staged changes (--cached)', + }, + file: { + type: 'string', + description: 'Specific file to diff (optional)', + }, + }, + }, + }, + { + name: 'git_branch', + description: 'List or manage git branches.', + inputSchema: { + type: 'object', + properties: { + path: { + type: 'string', + description: 'Path to the git repository (optional)', + }, + all: { + type: 'boolean', + description: 'Show all branches including remote', + }, + }, + }, + }, + ], + }; +}); + +// Handle tool calls +server.setRequestHandler(CallToolRequestSchema, async (request) => { + const { name, arguments: args } = request.params; + + try { + const cwd = (args.path as string) || process.cwd(); + + if (name === 'git_status') { + try { + const { stdout } = await execAsync('git status --porcelain', { cwd }); + const { stdout: branch } = await execAsync( + 'git branch --show-current', + { cwd }, + ); + + return { + content: [ + { + type: 'text', + text: `Current branch: ${branch.trim()}\n\nStatus:\n${stdout || 'Working tree clean'}`, + }, + ], + }; + } catch (error: any) { + throw new Error(`Git status failed: ${error.message}`); + } + } else if (name === 'git_log') { + const limit = (args.limit as number) || 10; + const oneline = args.oneline as boolean; + const format = oneline + ? '--oneline' + : '--pretty=format:"%h - %an, %ar : %s"'; + + try { + const { stdout } = await execAsync(`git log ${format} -${limit}`, { + cwd, + }); + + return { + content: [ + { + type: 'text', + text: stdout || 'No commits found', + }, + ], + }; + } catch (error: any) { + throw new Error(`Git log failed: ${error.message}`); + } + } else if (name === 'git_diff') { + const staged = args.staged as boolean; + const file = args.file as string; + const stagedFlag = staged ? '--cached' : ''; + const fileArg = file ? ` -- ${file}` : ''; + + try { + const { stdout } = await execAsync(`git diff ${stagedFlag}${fileArg}`, { + cwd, + }); + + return { + content: [ + { + type: 'text', + text: stdout || 'No differences found', + }, + ], + }; + } catch (error: any) { + throw new Error(`Git diff failed: ${error.message}`); + } + } else if (name === 'git_branch') { + const all = args.all as boolean; + const allFlag = all ? '-a' : ''; + + try { + const { stdout } = await execAsync(`git branch ${allFlag}`, { cwd }); + + return { + content: [ + { + type: 'text', + text: stdout || 'No branches found', + }, + ], + }; + } catch (error: any) { + throw new Error(`Git branch failed: ${error.message}`); + } + } else { + throw new Error(`Unknown tool: ${name}`); + } + } catch (error) { + return { + content: [ + { + type: 'text', + text: `Error: ${error instanceof Error ? error.message : String(error)}`, + }, + ], + isError: true, + }; + } +}); + +export function createGitServer() { + return server; +} + +export default server; diff --git a/apps/mcp-example/remote2/src/main.ts b/apps/mcp-example/remote2/src/main.ts new file mode 100644 index 00000000000..d5fee62cfea --- /dev/null +++ b/apps/mcp-example/remote2/src/main.ts @@ -0,0 +1,17 @@ +import { createGitServer } from './git-server'; +import { createDatabaseServer } from './database-server'; + +console.log('MCP Remote2 - Git and Database Server'); + +// Export servers for Module Federation +export { createGitServer, createDatabaseServer }; + +// For local testing +if (require.main === module) { + console.log('Running MCP Remote2 servers locally...'); + const gitServer = createGitServer(); + const dbServer = createDatabaseServer(); + + console.log('Git server created'); + console.log('Database server created'); +} diff --git a/apps/mcp-example/remote2/tsconfig.app.json b/apps/mcp-example/remote2/tsconfig.app.json new file mode 100644 index 00000000000..6de0bd13ba9 --- /dev/null +++ b/apps/mcp-example/remote2/tsconfig.app.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["node"] + }, + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/apps/mcp-example/remote2/tsconfig.json b/apps/mcp-example/remote2/tsconfig.json new file mode 100644 index 00000000000..fdfa691bda7 --- /dev/null +++ b/apps/mcp-example/remote2/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.spec.json" + } + ], + "compilerOptions": { + "esModuleInterop": true + } +} diff --git a/apps/mcp-example/remote2/tsconfig.spec.json b/apps/mcp-example/remote2/tsconfig.spec.json new file mode 100644 index 00000000000..41f24902864 --- /dev/null +++ b/apps/mcp-example/remote2/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] +} diff --git a/apps/mcp-example/remote2/webpack.config.js b/apps/mcp-example/remote2/webpack.config.js new file mode 100644 index 00000000000..8c09d6d269b --- /dev/null +++ b/apps/mcp-example/remote2/webpack.config.js @@ -0,0 +1,29 @@ +const { composePlugins, withNx } = require('@nx/webpack'); +const { ModuleFederationPlugin } = require('@module-federation/enhanced'); + +module.exports = composePlugins(withNx(), (config) => { + config.target = 'async-node'; + config.devtool = false; + config.cache = false; + + if (config.mode === 'development') { + config.devServer.devMiddleware.writeToDisk = true; + } + + config.plugins.push( + new ModuleFederationPlugin({ + dts: false, + runtimePlugins: [ + require.resolve('@module-federation/node/runtimePlugin'), + ], + name: 'mcp_remote2', + library: { type: 'commonjs-module', name: 'mcp_remote2' }, + filename: 'remoteEntry.js', + exposes: { + './git': './src/git-server.ts', + './database': './src/database-server.ts', + }, + }), + ); + return config; +}); diff --git a/apps/mcp-example/run-demo.js b/apps/mcp-example/run-demo.js new file mode 100755 index 00000000000..2770b08d8ad --- /dev/null +++ b/apps/mcp-example/run-demo.js @@ -0,0 +1,178 @@ +#!/usr/bin/env node + +const { spawn, exec } = require('child_process'); +const { promisify } = require('util'); +const execAsync = promisify(exec); + +// ANSI color codes +const colors = { + reset: '\x1b[0m', + bright: '\x1b[1m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + magenta: '\x1b[35m', + cyan: '\x1b[36m', +}; + +function log(message, color = 'reset') { + console.log(`${colors[color]}${message}${colors.reset}`); +} + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function runCommand(command, cwd = process.cwd()) { + log(`\n🔧 Running: ${command}`, 'cyan'); + + try { + const { stdout, stderr } = await execAsync(command, { cwd }); + if (stdout) log(stdout, 'green'); + if (stderr) log(stderr, 'yellow'); + return { success: true, stdout, stderr }; + } catch (error) { + log(`❌ Error: ${error.message}`, 'red'); + return { success: false, error }; + } +} + +async function checkNodeModules() { + log('\n📦 Checking if node_modules exist...', 'blue'); + + try { + await execAsync('ls node_modules', { cwd: '../../' }); + log('✅ Root node_modules found', 'green'); + return true; + } catch (error) { + log('❌ Root node_modules not found. Please run: pnpm install', 'red'); + return false; + } +} + +async function buildProjects() { + log('\n🏗️ Building MCP projects...', 'blue'); + + const projects = ['mcp-remote1', 'mcp-remote2', 'mcp-host']; + + for (const project of projects) { + log(`\n📦 Building ${project}...`, 'yellow'); + const result = await runCommand(`npx nx build ${project}`, '../../'); + + if (!result.success) { + log(`❌ Failed to build ${project}`, 'red'); + return false; + } + + log(`✅ ${project} built successfully`, 'green'); + } + + return true; +} + +async function startServers() { + log('\n🚀 Starting MCP servers...', 'blue'); + + const servers = [ + { name: 'remote1', cmd: 'npx nx serve mcp-remote1', port: '3001' }, + { name: 'remote2', cmd: 'npx nx serve mcp-remote2', port: '3002' }, + ]; + + const processes = []; + + for (const server of servers) { + log(`\n🔥 Starting ${server.name} on port ${server.port}...`, 'yellow'); + + const child = spawn('bash', ['-c', server.cmd], { + cwd: '../../', + stdio: 'pipe', + }); + + child.stdout.on('data', (data) => { + log(`[${server.name}] ${data.toString().trim()}`, 'cyan'); + }); + + child.stderr.on('data', (data) => { + log(`[${server.name}] ${data.toString().trim()}`, 'magenta'); + }); + + processes.push({ name: server.name, process: child }); + } + + // Wait for servers to start + log('\n⏳ Waiting for servers to start...', 'blue'); + await sleep(5000); + + return processes; +} + +async function runHostAndTest() { + log('\n🏠 Starting MCP Host...', 'blue'); + + try { + // Run the host which will attempt to connect to remotes and run demo + const result = await runCommand('node dist/main.js', './host/'); + + if (result.success) { + log('\n✅ MCP Host demo completed successfully!', 'green'); + } else { + log('\n❌ MCP Host demo failed', 'red'); + } + + return result.success; + } catch (error) { + log(`\n❌ Error running host: ${error.message}`, 'red'); + return false; + } +} + +async function runDemo() { + try { + log('🌟 Starting MCP Federation Demo', 'bright'); + + // Check prerequisites + if (!(await checkNodeModules())) { + process.exit(1); + } + + // Build all projects + if (!(await buildProjects())) { + process.exit(1); + } + + // Start remote servers + const processes = await startServers(); + + // Run host and demo + const success = await runHostAndTest(); + + // Cleanup: kill all spawned processes + log('\n🧹 Cleaning up processes...', 'blue'); + processes.forEach(({ name, process }) => { + log(`Stopping ${name}...`, 'yellow'); + process.kill('SIGTERM'); + }); + + if (success) { + log('\n🎉 Demo completed successfully!', 'green'); + process.exit(0); + } else { + log('\n💥 Demo failed!', 'red'); + process.exit(1); + } + } catch (error) { + log(`\n💥 Demo crashed: ${error.message}`, 'red'); + process.exit(1); + } +} + +// Run if called directly +if (require.main === module) { + runDemo().catch((error) => { + log(`💥 Fatal error: ${error.message}`, 'red'); + process.exit(1); + }); +} + +module.exports = { runDemo }; diff --git a/apps/mcp-example/test-integration.js b/apps/mcp-example/test-integration.js new file mode 100644 index 00000000000..9d545ff9b0d --- /dev/null +++ b/apps/mcp-example/test-integration.js @@ -0,0 +1,93 @@ +#!/usr/bin/env node + +/** + * Integration test for MCP with Module Federation + * This script demonstrates how the host loads and uses MCP servers from remotes + */ + +const { spawn } = require('child_process'); +const path = require('path'); + +console.log('🧪 MCP Module Federation Integration Test'); +console.log('=========================================\n'); + +async function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function runCommand(command, args, options = {}) { + return new Promise((resolve, reject) => { + const proc = spawn(command, args, { + stdio: 'inherit', + shell: true, + ...options, + }); + + proc.on('close', (code) => { + if (code !== 0) { + reject(new Error(`Command failed with code ${code}`)); + } else { + resolve(); + } + }); + }); +} + +async function main() { + try { + console.log('📦 Building all MCP apps...\n'); + + // Build remotes + console.log('Building Remote 1...'); + await runCommand('nx', ['build', 'mcp-example-remote1']); + + console.log('\nBuilding Remote 2...'); + await runCommand('nx', ['build', 'mcp-example-remote2']); + + // Build host + console.log('\nBuilding Host...'); + await runCommand('nx', ['build', 'mcp-example-host']); + + console.log('\n✅ Build complete!'); + console.log('\n🚀 Starting remote servers...\n'); + + // Start remote servers in background + const remote1 = spawn('nx', ['serve', 'mcp-example-remote1'], { + stdio: 'pipe', + shell: true, + }); + + const remote2 = spawn('nx', ['serve', 'mcp-example-remote2'], { + stdio: 'pipe', + shell: true, + }); + + // Wait for servers to start + console.log('Waiting for servers to start...'); + await sleep(5000); + + console.log('\n🏃 Running MCP Host Demo...\n'); + + // Run the host + await runCommand('node', ['apps/mcp-example/host/dist/main.js']); + + console.log('\n🎉 Integration test complete!'); + + // Cleanup + remote1.kill(); + remote2.kill(); + + process.exit(0); + } catch (error) { + console.error('\n❌ Integration test failed:', error); + process.exit(1); + } +} + +// Handle cleanup on exit +process.on('SIGINT', () => { + console.log('\n\nShutting down...'); + process.exit(0); +}); + +main(); diff --git a/apps/mcp-example/test-mcp-api.js b/apps/mcp-example/test-mcp-api.js new file mode 100755 index 00000000000..605fe6437f9 --- /dev/null +++ b/apps/mcp-example/test-mcp-api.js @@ -0,0 +1,195 @@ +#!/usr/bin/env node + +const { Server } = require('@modelcontextprotocol/sdk/server/index'); + +// ANSI color codes +const colors = { + reset: '\x1b[0m', + bright: '\x1b[1m', + red: '\x1b[31m', + green: '\x1b[32m', + yellow: '\x1b[33m', + blue: '\x1b[34m', + magenta: '\x1b[35m', + cyan: '\x1b[36m', +}; + +function log(message, color = 'reset') { + console.log(`${colors[color]}${message}${colors.reset}`); +} + +async function testMcpServer() { + try { + log('\n🧪 Testing MCP API Integration', 'bright'); + + // Import and create the MCP host + log('\n📦 Loading MCP Host...', 'blue'); + const hostModule = require('./host/dist/main.js'); + + if (!hostModule.createMcpHost) { + log('❌ createMcpHost function not found in host module', 'red'); + return false; + } + + const { hostServer, registry, loader } = await hostModule.createMcpHost(); + + log('✅ MCP Host created successfully', 'green'); + + // Test registry stats + log('\n📊 Getting registry statistics...', 'blue'); + const stats = registry.getStats(); + log(`Server count: ${stats.serverCount}`, 'cyan'); + log(`Total tools: ${stats.totalTools}`, 'cyan'); + + if (stats.serverCount === 0) { + log('❌ No servers registered', 'red'); + return false; + } + + // Test tool listing + log('\n🔧 Testing tool listing...', 'blue'); + const listToolsResult = await hostServer.request({ + method: 'tools/list', + params: {}, + }); + + if (!listToolsResult.tools || listToolsResult.tools.length === 0) { + log('❌ No tools returned from list request', 'red'); + return false; + } + + log(`✅ Found ${listToolsResult.tools.length} tools:`, 'green'); + listToolsResult.tools.forEach((tool) => { + log(` • ${tool.name} - ${tool.description}`, 'cyan'); + }); + + // Test individual tool calls + const testCases = [ + { + name: 'filesystem.read_file', + description: 'Test filesystem read_file tool', + args: { path: './package.json' }, + }, + { + name: 'database.db_set', + description: 'Test database set operation', + args: { key: 'test_key', value: '{"message": "Hello from API test!"}' }, + }, + { + name: 'database.db_get', + description: 'Test database get operation', + args: { key: 'test_key' }, + }, + { + name: 'database.db_info', + description: 'Test database info', + args: {}, + }, + ]; + + let successCount = 0; + + for (const testCase of testCases) { + log(`\n🧪 Testing: ${testCase.description}`, 'yellow'); + + try { + const result = await hostServer.request({ + method: 'tools/call', + params: { + name: testCase.name, + arguments: testCase.args, + }, + }); + + if (result.isError) { + log( + `❌ Tool call failed: ${result.content[0]?.text || 'Unknown error'}`, + 'red', + ); + } else { + log(`✅ Tool call succeeded`, 'green'); + if (result.content && result.content[0]?.text) { + // Truncate long responses for readability + const text = result.content[0].text; + const preview = + text.length > 200 ? text.substring(0, 200) + '...' : text; + log(`Response: ${preview}`, 'cyan'); + } + successCount++; + } + } catch (error) { + log(`❌ Tool call error: ${error.message}`, 'red'); + } + } + + // Test git tools if available + const gitTools = listToolsResult.tools.filter((tool) => + tool.name.startsWith('git.'), + ); + if (gitTools.length > 0) { + log(`\n🔍 Testing git tools...`, 'yellow'); + + try { + const gitStatusResult = await hostServer.request({ + method: 'tools/call', + params: { + name: 'git.git_status', + arguments: { path: process.cwd() }, + }, + }); + + if (!gitStatusResult.isError) { + log(`✅ Git status tool works`, 'green'); + successCount++; + } else { + log( + `❌ Git status failed: ${gitStatusResult.content[0]?.text}`, + 'red', + ); + } + } catch (error) { + log(`❌ Git test error: ${error.message}`, 'red'); + } + } + + // Summary + log(`\n📈 Test Summary:`, 'bright'); + log(`• Servers registered: ${stats.serverCount}`, 'cyan'); + log(`• Tools available: ${stats.totalTools}`, 'cyan'); + log( + `• Successful tool calls: ${successCount}`, + successCount > 0 ? 'green' : 'red', + ); + + const success = + stats.serverCount > 0 && stats.totalTools > 0 && successCount > 0; + + if (success) { + log('\n🎉 MCP API test passed!', 'green'); + } else { + log('\n💥 MCP API test failed!', 'red'); + } + + return success; + } catch (error) { + log(`\n💥 Test error: ${error.message}`, 'red'); + if (error.stack) { + log(`Stack trace: ${error.stack}`, 'red'); + } + return false; + } +} + +// Run if called directly +if (require.main === module) { + testMcpServer() + .then((success) => { + process.exit(success ? 0 : 1); + }) + .catch((error) => { + log(`💥 Fatal test error: ${error.message}`, 'red'); + process.exit(1); + }); +} + +module.exports = { testMcpServer }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 340508b16a9..c55f4ecb0c3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -781,6 +781,58 @@ importers: specifier: 0.14.2 version: 0.14.2 + apps/mcp-example: + dependencies: + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + devDependencies: + '@module-federation/core': + specifier: workspace:* + version: link:../../packages/core + '@module-federation/dts-plugin': + specifier: workspace:* + version: link:../../packages/dts-plugin + '@module-federation/enhanced': + specifier: workspace:* + version: link:../../packages/enhanced + '@module-federation/runtime': + specifier: workspace:* + version: link:../../packages/runtime + '@module-federation/typescript': + specifier: workspace:* + version: link:../../packages/typescript + '@nx/react': + specifier: ^17.0.0 + version: 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack@5.98.0) + '@nx/webpack': + specifier: ^17.0.0 + version: 17.3.2(@rspack/core@1.3.9)(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.25.0)(html-webpack-plugin@5.6.2)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack-cli@5.1.4) + '@types/react': + specifier: ^18.2.0 + version: 18.3.11 + '@types/react-dom': + specifier: ^18.2.0 + version: 18.3.0 + html-webpack-plugin: + specifier: ^5.5.3 + version: 5.6.2(@rspack/core@1.3.9)(webpack@5.98.0) + typescript: + specifier: ^5.0.0 + version: 5.7.3 + webpack: + specifier: ^5.89.0 + version: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack-cli: + specifier: ^5.1.4 + version: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.98.0) + webpack-dev-server: + specifier: ^4.15.1 + version: 4.15.2(webpack-cli@5.1.4)(webpack@5.98.0) + apps/modern-component-data-fetch/host: dependencies: '@babel/runtime': @@ -3902,7 +3954,7 @@ packages: dependencies: '@babel/compat-data': 7.25.8 '@babel/helper-validator-option': 7.25.7 - browserslist: 4.24.0 + browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 @@ -6992,7 +7044,6 @@ packages: engines: {node: '>=12'} dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: false /@csstools/cascade-layer-name-parser@1.0.13(@csstools/css-parser-algorithms@2.7.1)(@csstools/css-tokenizer@2.4.1): resolution: {integrity: sha512-MX0yLTwtZzr82sQ0zOjqimpZbzjMaK/h2pmlrLK7DCzlmiZLYFpoO94WmN1akRVo6ll/TdpHb53vihHLUMyvng==} @@ -9347,7 +9398,6 @@ packages: dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: false /@jsonjoy.com/base64@1.1.2(tslib@2.8.1): resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} @@ -9538,7 +9588,7 @@ packages: react: '>=16' dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.8 + '@types/react': 18.3.11 react: 19.1.0 dev: false @@ -11496,7 +11546,7 @@ packages: '@module-federation/runtime-tools': 0.13.1 '@module-federation/sdk': 0.13.1 btoa: 1.2.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 typescript: 5.7.3 upath: 2.0.1 vue-tsc: 2.2.10(typescript@5.7.3) @@ -11547,6 +11597,42 @@ packages: - utf-8-validate dev: false + /@module-federation/enhanced@0.6.9(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)(vue-tsc@2.2.10)(webpack@5.98.0): + resolution: {integrity: sha512-4bEGQSE6zJ2FMdBTOrRiVjNNzWhUqzWEJGWbsr0bpLNAl4BVx2ah5MyKTrSYqaW//BRA2qc8rmrIreaIawr3kQ==} + peerDependencies: + typescript: ^4.9.0 || ^5.0.0 + vue-tsc: '>=1.0.24' + webpack: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true + vue-tsc: + optional: true + webpack: + optional: true + dependencies: + '@module-federation/bridge-react-webpack-plugin': 0.6.9 + '@module-federation/data-prefetch': 0.6.9(react-dom@18.3.1)(react@18.3.1) + '@module-federation/dts-plugin': 0.6.9(typescript@5.7.3)(vue-tsc@2.2.10) + '@module-federation/managers': 0.6.9 + '@module-federation/manifest': 0.6.9(typescript@5.7.3)(vue-tsc@2.2.10) + '@module-federation/rspack': 0.6.9(typescript@5.7.3)(vue-tsc@2.2.10) + '@module-federation/runtime-tools': 0.6.9 + '@module-federation/sdk': 0.6.9 + btoa: 1.2.1 + typescript: 5.7.3 + upath: 2.0.1 + vue-tsc: 2.2.10(typescript@5.7.3) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + transitivePeerDependencies: + - bufferutil + - debug + - react + - react-dom + - supports-color + - utf-8-validate + dev: false + /@module-federation/enhanced@0.9.1(@rspack/core@1.3.9)(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)(vue-tsc@2.2.10)(webpack@5.98.0): resolution: {integrity: sha512-c9siKVjcgT2gtDdOTqEr+GaP2X/PWAS0OV424ljKLstFL1lcS/BIsxWFDmxPPl5hDByAH+1q4YhC1LWY4LNDQw==} peerDependencies: @@ -12605,6 +12691,159 @@ packages: engines: {node: '>=12.4.0'} dev: true + /@nrwl/devkit@17.3.2(nx@17.3.2): + resolution: {integrity: sha512-31wh7dDZPM1YUCfhhk/ioHnUeoPIlKYLFLW0fGdw76Ow2nmTqrmxha2m0CSIR1/9En9GpYut2IdUdNh9CctNlA==} + dependencies: + '@nx/devkit': 17.3.2(nx@17.3.2) + transitivePeerDependencies: + - nx + dev: true + + /@nrwl/devkit@17.3.2(nx@18.3.5): + resolution: {integrity: sha512-31wh7dDZPM1YUCfhhk/ioHnUeoPIlKYLFLW0fGdw76Ow2nmTqrmxha2m0CSIR1/9En9GpYut2IdUdNh9CctNlA==} + dependencies: + '@nx/devkit': 17.3.2(nx@18.3.5) + transitivePeerDependencies: + - nx + dev: true + + /@nrwl/js@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.3.3)(verdaccio@6.1.2): + resolution: {integrity: sha512-WuIeSErulJuMeSpeK41RfiWI3jLjDD0S+tLnYdOLaWdjaIPqjknClM2BAJKlq472NnkkNWvtwtOS8jm518OjOQ==} + dependencies: + '@nx/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.3.3)(verdaccio@6.1.2) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - nx + - supports-color + - typescript + - verdaccio + dev: true + + /@nrwl/js@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2): + resolution: {integrity: sha512-WuIeSErulJuMeSpeK41RfiWI3jLjDD0S+tLnYdOLaWdjaIPqjknClM2BAJKlq472NnkkNWvtwtOS8jm518OjOQ==} + dependencies: + '@nx/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - nx + - supports-color + - typescript + - verdaccio + dev: true + + /@nrwl/react@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack@5.98.0): + resolution: {integrity: sha512-LjH/odvCwCEqlqy4dqy4jnlyTCHLb13W3DoTb7vEy9g+i1vaCXfV061zmFvbweIXV2416sU6TcUCIVYwBVWH6g==} + dependencies: + '@nx/react': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack@5.98.0) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - js-yaml + - nx + - supports-color + - typescript + - verdaccio + - webpack + dev: true + + /@nrwl/tao@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26): + resolution: {integrity: sha512-5uvpSmij0J9tteFV/0M/024K+H/o3XAlqtSdU8j03Auj1IleclSLF2yCTuIo7pYXhG3cgx1+nR+3nMs1QVAdUA==} + hasBin: true + dependencies: + nx: 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + tslib: 2.8.1 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + dev: true + + /@nrwl/tao@18.3.5(@swc-node/register@1.10.10)(@swc/core@1.7.26): + resolution: {integrity: sha512-gB7Vxa6FReZZEGva03Eh+84W8BSZOjsNyXboglOINu6d8iZZ0eotSXGziKgjpkj3feZ1ofKZMs0PRObVAOROVw==} + hasBin: true + dependencies: + nx: 18.3.5(@swc-node/register@1.10.10)(@swc/core@1.7.26) + tslib: 2.8.1 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + dev: true + + /@nrwl/web@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2): + resolution: {integrity: sha512-h8cpbr242ORQ829EygBoQ9AnGk2QSoS/tvO0TIPbzTa4zQhRq5M0+X/M86nUbktKTfElWbAF54ZWCk4sx1Fs2g==} + dependencies: + '@nx/web': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - nx + - supports-color + - typescript + - verdaccio + dev: true + + /@nrwl/webpack@17.3.2(@rspack/core@1.3.9)(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.25.0)(html-webpack-plugin@5.6.2)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack-cli@5.1.4): + resolution: {integrity: sha512-Hu72Y55uqXp1QQGNEchdDWgN3wWs0lFtt9selhYZlhR0m4dGd2nMkvJnbFzCUywjcPzPrJLe7Vb3M1zt+lT+mQ==} + dependencies: + '@nx/webpack': 17.3.2(@rspack/core@1.3.9)(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.25.0)(html-webpack-plugin@5.6.2)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack-cli@5.1.4) + transitivePeerDependencies: + - '@babel/traverse' + - '@parcel/css' + - '@rspack/core' + - '@swc-node/register' + - '@swc/core' + - '@swc/css' + - '@swc/wasm' + - '@types/node' + - bufferutil + - clean-css + - csso + - debug + - esbuild + - fibers + - html-webpack-plugin + - lightningcss + - node-sass + - nx + - sass-embedded + - supports-color + - typescript + - uglify-js + - utf-8-validate + - verdaccio + - vue-template-compiler + - webpack-cli + dev: true + + /@nrwl/workspace@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26): + resolution: {integrity: sha512-7xE/dujPjOIxsCV6TB0C4768voQaQSxmEUAbVz0mywBGrVpjpvAIx1GvdB6wwgWqtpZTz34hKFkUSJFPweUvbg==} + dependencies: + '@nx/workspace': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + dev: true + /@nx/cypress@21.0.3(@swc-node/register@1.10.10)(@swc/core@1.7.26)(cypress@14.3.3)(eslint@8.57.1)(nx@21.0.3)(typescript@5.7.3)(verdaccio@6.1.2): resolution: {integrity: sha512-joyt32dpg8U5beZd5txwmWhdE8qEO3jUAFUoTMOztnNgxAD1wGhvnq8F966CeoNsWwnzbk4BeZwygqVVoEHA0w==} peerDependencies: @@ -12635,6 +12874,38 @@ packages: - verdaccio dev: true + /@nx/devkit@17.3.2(nx@17.3.2): + resolution: {integrity: sha512-gbOIhwrZKCSSFFbh6nE6LLCvAU7mhSdBSnRiS14YBwJJMu4CRJ0IcaFz58iXqGWZefMivKtkNFtx+zqwUC4ziw==} + peerDependencies: + nx: '>= 16 <= 18' + dependencies: + '@nrwl/devkit': 17.3.2(nx@17.3.2) + ejs: 3.1.10 + enquirer: 2.3.6 + ignore: 5.3.2 + nx: 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + semver: 7.6.3 + tmp: 0.2.3 + tslib: 2.8.1 + yargs-parser: 21.1.1 + dev: true + + /@nx/devkit@17.3.2(nx@18.3.5): + resolution: {integrity: sha512-gbOIhwrZKCSSFFbh6nE6LLCvAU7mhSdBSnRiS14YBwJJMu4CRJ0IcaFz58iXqGWZefMivKtkNFtx+zqwUC4ziw==} + peerDependencies: + nx: '>= 16 <= 18' + dependencies: + '@nrwl/devkit': 17.3.2(nx@18.3.5) + ejs: 3.1.10 + enquirer: 2.3.6 + ignore: 5.3.2 + nx: 18.3.5(@swc-node/register@1.10.10)(@swc/core@1.7.26) + semver: 7.6.3 + tmp: 0.2.3 + tslib: 2.8.1 + yargs-parser: 21.1.1 + dev: true + /@nx/devkit@20.1.1(nx@20.1.1): resolution: {integrity: sha512-sqihJhJQERCTl0KmKmpRFxWxuTnH8yRqdo8T5uGGaHzTNiMdIp5smTF2dBs7/OMkZDxcJc4dKvcFWfreZr8XNw==} peerDependencies: @@ -12741,6 +13012,33 @@ packages: - verdaccio dev: true + /@nx/eslint@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(verdaccio@6.1.2): + resolution: {integrity: sha512-KArvmi9Y4Qcf0bIRXGC1/FZsjL6XtT7wzhJ5uGsJIvXAJUiMMlw/KqIR31pY4nu2cBbphCa0/P1Jp2C/IFXG8w==} + peerDependencies: + js-yaml: 4.1.0 + peerDependenciesMeta: + js-yaml: + optional: true + dependencies: + '@nx/devkit': 17.3.2(nx@18.3.5) + '@nx/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.3.3)(verdaccio@6.1.2) + '@nx/linter': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(verdaccio@6.1.2) + eslint: 8.57.1 + js-yaml: 4.1.0 + tslib: 2.8.1 + typescript: 5.3.3 + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - nx + - supports-color + - verdaccio + dev: true + /@nx/eslint@20.1.1(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(eslint@9.0.0)(nx@21.0.3)(verdaccio@6.1.2): resolution: {integrity: sha512-y3Xze6zt2qejqxOZGFbpY1mOG+pakc5Z/ljfI19nGX6voBhsd7+YnHRrcCPieOZ1OetcPn+WdL4HFrSOMb2dcQ==} peerDependencies: @@ -12856,6 +13154,108 @@ packages: - verdaccio dev: true + /@nx/js@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.3.3)(verdaccio@6.1.2): + resolution: {integrity: sha512-37E3OILyu/7rCj6Z7tvC6PktHYa51UQBU+wWPdVWSZ64xu1SUsg9B9dfiyD1LXR9/rhjg4+0+g4cou0aqDK1Wg==} + peerDependencies: + verdaccio: ^5.0.4 + peerDependenciesMeta: + verdaccio: + optional: true + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-runtime': 7.25.7(@babel/core@7.26.10) + '@babel/preset-env': 7.26.0(@babel/core@7.26.10) + '@babel/preset-typescript': 7.27.1(@babel/core@7.26.10) + '@babel/runtime': 7.26.0 + '@nrwl/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.3.3)(verdaccio@6.1.2) + '@nx/devkit': 17.3.2(nx@18.3.5) + '@nx/workspace': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + '@phenomnomnominal/tsquery': 5.0.1(typescript@5.3.3) + babel-plugin-const-enum: 1.2.0(@babel/core@7.26.10) + babel-plugin-macros: 2.8.0 + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.10)(@babel/traverse@7.27.1) + chalk: 4.1.2 + columnify: 1.6.0 + detect-port: 1.6.1 + fast-glob: 3.2.7 + fs-extra: 11.3.0 + ignore: 5.3.2 + js-tokens: 4.0.0 + minimatch: 9.0.3 + npm-package-arg: 11.0.1 + npm-run-path: 4.0.1 + ora: 5.3.0 + semver: 7.6.3 + source-map-support: 0.5.19 + ts-node: 10.9.1(@swc/core@1.7.26)(@types/node@20.12.14)(typescript@5.3.3) + tsconfig-paths: 4.2.0 + tslib: 2.8.1 + verdaccio: 6.1.2(encoding@0.1.13)(typanion@3.14.0) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - nx + - supports-color + - typescript + dev: true + + /@nx/js@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2): + resolution: {integrity: sha512-37E3OILyu/7rCj6Z7tvC6PktHYa51UQBU+wWPdVWSZ64xu1SUsg9B9dfiyD1LXR9/rhjg4+0+g4cou0aqDK1Wg==} + peerDependencies: + verdaccio: ^5.0.4 + peerDependenciesMeta: + verdaccio: + optional: true + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-runtime': 7.25.7(@babel/core@7.26.10) + '@babel/preset-env': 7.26.0(@babel/core@7.26.10) + '@babel/preset-typescript': 7.27.1(@babel/core@7.26.10) + '@babel/runtime': 7.26.0 + '@nrwl/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + '@nx/devkit': 17.3.2(nx@18.3.5) + '@nx/workspace': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) + babel-plugin-const-enum: 1.2.0(@babel/core@7.26.10) + babel-plugin-macros: 2.8.0 + babel-plugin-transform-typescript-metadata: 0.3.2(@babel/core@7.26.10)(@babel/traverse@7.27.1) + chalk: 4.1.2 + columnify: 1.6.0 + detect-port: 1.6.1 + fast-glob: 3.2.7 + fs-extra: 11.3.0 + ignore: 5.3.2 + js-tokens: 4.0.0 + minimatch: 9.0.3 + npm-package-arg: 11.0.1 + npm-run-path: 4.0.1 + ora: 5.3.0 + semver: 7.6.3 + source-map-support: 0.5.19 + ts-node: 10.9.1(@swc/core@1.7.26)(@types/node@20.12.14)(typescript@5.7.3) + tsconfig-paths: 4.2.0 + tslib: 2.8.1 + verdaccio: 6.1.2(encoding@0.1.13)(typanion@3.14.0) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - nx + - supports-color + - typescript + dev: true + /@nx/js@20.1.1(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@21.0.3)(typescript@5.4.5)(verdaccio@6.1.2): resolution: {integrity: sha512-hx9BzdEzJhhv3eK4i/0V0ovfZNtRFjbcMaYLoP5Vpd80jnGvOXAAJKc1LAXUsS8LGOMFE1BgbbKTMQDMoCSCbg==} peerDependencies: @@ -13005,6 +13405,23 @@ packages: - supports-color dev: true + /@nx/linter@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(verdaccio@6.1.2): + resolution: {integrity: sha512-ruB72ODekAlqGI65IeO37vqgJIY+ROcx2Gyf12H3tZGUYeC1IwpPltbU63vD5Qkgj2znrD6aNkpYPV7C0b0scQ==} + dependencies: + '@nx/eslint': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(verdaccio@6.1.2) + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - js-yaml + - nx + - supports-color + - verdaccio + dev: true + /@nx/module-federation@21.0.3(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@swc/helpers@0.5.13)(esbuild@0.25.0)(next@14.2.16)(nx@21.0.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)(verdaccio@6.1.2)(vue-tsc@2.2.10)(webpack-cli@5.1.4): resolution: {integrity: sha512-8XfQwLL3zK81z/LJuVw33IJZaLDK7mYim0SUFDYza4X8E4FEtlQLG41wmQMr6xZfLBpwQD4a8spmnXICrKBe5g==} dependencies: @@ -13122,6 +13539,24 @@ packages: - verdaccio dev: true + /@nx/nx-darwin-arm64@17.3.2: + resolution: {integrity: sha512-hn12o/tt26Pf4wG+8rIBgNIEZq5BFlHLv3scNrgKbd5SancHlTbY4RveRGct737UQ/78GCMCgMDRgNdagbCr6w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-darwin-arm64@18.3.5: + resolution: {integrity: sha512-4I5UpZ/x2WO9OQyETXKjaYhXiZKUTYcLPewruRMODWu6lgTM9hHci0SqMQB+TWe3f80K8VT8J8x3+uJjvllGlg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@nx/nx-darwin-arm64@20.1.1: resolution: {integrity: sha512-Ah0ShPQaMfvzVfhsyuI6hNB0bmwLHJqqrWldZeF97SFPhv6vfKdcdlZmSnask+V4N5z9TOCUmCMu2asMQa7+kw==} engines: {node: '>= 10'} @@ -13138,6 +13573,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-darwin-x64@17.3.2: + resolution: {integrity: sha512-5F28wrfE7yU60MzEXGjndy1sPJmNMIaV2W/g82kTXzxAbGHgSjwrGFmrJsrexzLp9oDlWkbc6YmInKV8gmmIaQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-darwin-x64@18.3.5: + resolution: {integrity: sha512-Drn6jOG237AD/s6OWPt06bsMj0coGKA5Ce1y5gfLhptOGk4S4UPE/Ay5YCjq+/yhTo1gDHzCHxH0uW2X9MN9Fg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + /@nx/nx-darwin-x64@20.1.1: resolution: {integrity: sha512-TmdX6pbzclvPGsttTTaZhdF46HV1vfvYSHJaSMsYJX68l3gcQnAJ1ZRDksEgkYeAy+O9KrPimD84NM5W/JvqcQ==} engines: {node: '>= 10'} @@ -13154,6 +13607,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-freebsd-x64@17.3.2: + resolution: {integrity: sha512-07MMTfsJooONqL1Vrm5L6qk/gzmSrYLazjkiTmJz+9mrAM61RdfSYfO3mSyAoyfgWuQ5yEvfI56P036mK8aoPg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-freebsd-x64@18.3.5: + resolution: {integrity: sha512-8tA8Yw0Iir4liFjffIFS5THTS3TtWY/No2tkVj91gwy/QQ/otvKbOyc5RCIPpbZU6GS3ZWfG92VyCSm06dtMFg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + /@nx/nx-freebsd-x64@20.1.1: resolution: {integrity: sha512-7/7f3GbUbdvtTFOb/8wcaSQYkhVIxcC4UzFJM5yEyXPJmIrglk+RX3SLuOFRBFJnO+Z7D6jLUnLOBHKCGfqLVw==} engines: {node: '>= 10'} @@ -13170,6 +13641,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-linux-arm-gnueabihf@17.3.2: + resolution: {integrity: sha512-gQxMF6U/h18Rz+FZu50DZCtfOdk27hHghNh3d3YTeVsrJTd1SmUQbYublmwU/ia1HhFS8RVI8GvkaKt5ph0HoA==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-linux-arm-gnueabihf@18.3.5: + resolution: {integrity: sha512-BrPGAHM9FCGkB9/hbvlJhe+qtjmvpjIjYixGIlUxL3gGc8E/ucTyCnz5pRFFPFQlBM7Z/9XmbHvGPoUi/LYn5A==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@nx/nx-linux-arm-gnueabihf@20.1.1: resolution: {integrity: sha512-VxpMz5jCZ5gnk1gP2jDBCheYs7qOwQoJmzGbEB8hNy0CwRH/G8pL4RRo4Sz+4aiF6Z+9eax5RM2/Syh+bS0uJw==} engines: {node: '>= 10'} @@ -13186,6 +13675,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-linux-arm64-gnu@17.3.2: + resolution: {integrity: sha512-X20wiXtXmKlC01bpVEREsRls1uVOM22xDTpqILvVty6+P+ytEYFR3Vs5EjDtzBKF51wjrwf03rEoToZbmgM8MA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-linux-arm64-gnu@18.3.5: + resolution: {integrity: sha512-/Xd0Q3LBgJeigJqXC/Jck/9l5b+fK+FCM0nRFMXgPXrhZPhoxWouFkoYl2F1Ofr+AQf4jup4DkVTB5r98uxSCA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@nx/nx-linux-arm64-gnu@20.1.1: resolution: {integrity: sha512-8T2+j4KvsWb6ljW1Y2s/uCSt4Drtlsr3GSrGdvcETW0IKaTfKZAJlxTLAWQHEF88hP6GAJRGxNrgmUHMr8HwUA==} engines: {node: '>= 10'} @@ -13202,6 +13709,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-linux-arm64-musl@17.3.2: + resolution: {integrity: sha512-yko3Xsezkn4tjeudZYLjxFl07X/YB84K+DLK7EFyh9elRWV/8VjFcQmBAKUS2r9LfaEMNXq8/vhWMOWYyWBrIA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-linux-arm64-musl@18.3.5: + resolution: {integrity: sha512-r18qd7pUrl1haAZ/e9Q+xaFTsLJnxGARQcf/Y76q+K2psKmiUXoRlqd3HAOw43KTllaUJ5HkzLq2pIwg3p+xBw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@nx/nx-linux-arm64-musl@20.1.1: resolution: {integrity: sha512-TI964w+HFUqG6elriKwQPRX7QRxVRMz5YKdNPgf4+ab4epQ379kwJQEHlyOHR72ir8Tl46z3BoPjvmaLylrT4Q==} engines: {node: '>= 10'} @@ -13218,6 +13743,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-linux-x64-gnu@17.3.2: + resolution: {integrity: sha512-RiPvvQMmlZmDu9HdT6n6sV0+fEkyAqR5VocrD5ZAzEzFIlh4dyVLripFR3+MD+QhIhXyPt/hpri1kq9sgs4wnw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-linux-x64-gnu@18.3.5: + resolution: {integrity: sha512-vYrikG6ff4I9cvr3Ysk3y3gjQ9cDcvr3iAr+4qqcQ4qVE+OLL2++JDS6xfPvG/TbS3GTQpyy2STRBwiHgxTeJw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@nx/nx-linux-x64-gnu@20.1.1: resolution: {integrity: sha512-Sg2tQ0v3KP9cAqQST16YR+dT/NbirPts6by+A4vhOtaBrZFVqm9P89K9UdcJf4Aj1CaGbs84lotp2aM4E4bQPA==} engines: {node: '>= 10'} @@ -13234,6 +13777,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-linux-x64-musl@17.3.2: + resolution: {integrity: sha512-PWfVGmFsFJi+N1Nljg/jTKLHdufpGuHlxyfHqhDso/o4Qc0exZKSeZ1C63WkD7eTcT5kInifTQ/PffLiIDE3MA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-linux-x64-musl@18.3.5: + resolution: {integrity: sha512-6np86lcYy3+x6kkW/HrBHIdNWbUu/MIsvMuNH5UXgyFs60l5Z7Cocay2f7WOaAbTLVAr0W7p4RxRPamHLRwWFA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@nx/nx-linux-x64-musl@20.1.1: resolution: {integrity: sha512-ekKvuIMRJRhZnkWIWEr4TRVEAyKVDgEMwqk83ilB0Mqpj2RoOKbw7jZFvWcxJWI4kSeZjTea3xCWGNPa1GfCww==} engines: {node: '>= 10'} @@ -13250,6 +13811,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-win32-arm64-msvc@17.3.2: + resolution: {integrity: sha512-O+4FFPbQz1mqaIj+SVE02ppe7T9ELj7Z5soQct5TbRRhwjGaw5n5xaPPBW7jUuQe2L5htid1E82LJyq3JpVc8A==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-win32-arm64-msvc@18.3.5: + resolution: {integrity: sha512-H3p2ZVhHV1WQWTICrQUTplOkNId0y3c23X3A2fXXFDbWSBs0UgW7m55LhMcA9p0XZ7wDHgh+yFtVgu55TXLjug==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@nx/nx-win32-arm64-msvc@20.1.1: resolution: {integrity: sha512-JRycFkk6U8A1sXaDmSFA2HMKT2js3HK/+nI+auyITRqVbV79/r6ir/oFSgIjKth8j/vVbGDL8I4E3nEQ7leZYw==} engines: {node: '>= 10'} @@ -13266,6 +13845,24 @@ packages: requiresBuild: true optional: true + /@nx/nx-win32-x64-msvc@17.3.2: + resolution: {integrity: sha512-4hQm+7coy+hBqGY9J709hz/tUPijhf/WS7eML2r2xBmqBew3PMHfeZuaAAYWN690nIsu0WX3wyDsNjulR8HGPQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@nx/nx-win32-x64-msvc@18.3.5: + resolution: {integrity: sha512-xFwKVTIXSgjdfxkpriqHv5NpmmFILTrWLEkUGSoimuRaAm1u15YWx/VmaUQ+UWuJnmgqvB/so4SMHSfNkq3ijA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@nx/nx-win32-x64-msvc@20.1.1: resolution: {integrity: sha512-VwxmJU7o8KqTZ+KYk7atoWOUykKd8D4hdgKqqltdq/UBfsAWD/JCFt5OB/VFvrGDbK6I6iKpMvXWlHy4gkXQiw==} engines: {node: '>= 10'} @@ -13282,6 +13879,35 @@ packages: requiresBuild: true optional: true + /@nx/react@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack@5.98.0): + resolution: {integrity: sha512-QVfC0hDJJn3QOV6zX376f2PoHMw9svvnNMlBp/SLy/fmWCPbrvPOGZUMyyJ6DZ921OO9wP46J9/3llJCWIGGbA==} + dependencies: + '@nrwl/react': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack@5.98.0) + '@nx/devkit': 17.3.2(nx@18.3.5) + '@nx/eslint': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(js-yaml@4.1.0)(nx@18.3.5)(verdaccio@6.1.2) + '@nx/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + '@nx/web': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) + '@svgr/webpack': 8.1.0(typescript@5.7.3) + chalk: 4.1.2 + file-loader: 6.2.0(webpack@5.98.0) + minimatch: 9.0.3 + tslib: 2.8.1 + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - js-yaml + - nx + - supports-color + - typescript + - verdaccio + - webpack + dev: true + /@nx/react@20.1.1(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(eslint@9.0.0)(nx@21.0.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)(verdaccio@6.1.2)(vue-tsc@2.2.10)(webpack@5.94.0): resolution: {integrity: sha512-1oXMAgedERHn8LV5FQ4IE3PxmqZLq0fkJXiDjUmL6Lv0alJVDtUWPa+Fr/KIfx9OOw1oGu3ZPPWYGipcSwGeIQ==} dependencies: @@ -13509,6 +14135,29 @@ packages: - verdaccio dev: true + /@nx/web@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2): + resolution: {integrity: sha512-+FxqiAy3AdJ7nV83dBcWmylHGth/c31xtz3dJinnnUtOaECGWKXkx8hLjWsvM+V+EFMqeD+q1t7q/7CkLPrtXw==} + dependencies: + '@nrwl/web': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + '@nx/devkit': 17.3.2(nx@18.3.5) + '@nx/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + chalk: 4.1.2 + detect-port: 1.6.1 + http-server: 14.1.1 + tslib: 2.8.1 + transitivePeerDependencies: + - '@babel/traverse' + - '@swc-node/register' + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - debug + - nx + - supports-color + - typescript + - verdaccio + dev: true + /@nx/web@20.1.1(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@21.0.3)(typescript@5.7.3)(verdaccio@6.1.2): resolution: {integrity: sha512-E/vWj9gR10SOc7VL1+RnlE4krBWa9mTMo0jkXM3XCcASsFmz2Guv+OSuCTKYiKsD/xAKlMSC8+04IvUEmXbcdg==} dependencies: @@ -13550,50 +14199,118 @@ packages: - verdaccio dev: true + /@nx/webpack@17.3.2(@rspack/core@1.3.9)(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.25.0)(html-webpack-plugin@5.6.2)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack-cli@5.1.4): + resolution: {integrity: sha512-dO7nVahQDksy89c0M/f96Thsv3cfT+m0clXRdrglBoK3h7JeoAOCeDNPMpAbFa8QHHUGzmaQkJNX41CV8UJgOg==} + dependencies: + '@babel/core': 7.26.10 + '@nrwl/webpack': 17.3.2(@rspack/core@1.3.9)(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.25.0)(html-webpack-plugin@5.6.2)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2)(webpack-cli@5.1.4) + '@nx/devkit': 17.3.2(nx@18.3.5) + '@nx/js': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@18.3.5)(typescript@5.7.3)(verdaccio@6.1.2) + autoprefixer: 10.4.20(postcss@8.4.38) + babel-loader: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0) + browserslist: 4.24.4 + chalk: 4.1.2 + copy-webpack-plugin: 10.2.4(webpack@5.98.0) + css-loader: 6.11.0(@rspack/core@1.3.9)(webpack@5.98.0) + css-minimizer-webpack-plugin: 5.0.1(esbuild@0.25.0)(webpack@5.98.0) + fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.7.3)(webpack@5.98.0) + less: 4.1.3 + less-loader: 11.1.0(less@4.1.3)(webpack@5.98.0) + license-webpack-plugin: 4.0.2(webpack@5.98.0) + loader-utils: 2.0.4 + mini-css-extract-plugin: 2.4.7(webpack@5.98.0) + parse5: 4.0.0 + postcss: 8.4.38 + postcss-import: 14.1.0(postcss@8.4.38) + postcss-loader: 6.2.1(postcss@8.4.38)(webpack@5.98.0) + rxjs: 7.8.2 + sass: 1.88.0 + sass-loader: 12.6.0(sass@1.88.0)(webpack@5.98.0) + source-map-loader: 3.0.2(webpack@5.98.0) + style-loader: 3.3.4(webpack@5.98.0) + stylus: 0.59.0 + stylus-loader: 7.1.3(stylus@0.59.0)(webpack@5.98.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.98.0) + ts-loader: 9.5.1(typescript@5.7.3)(webpack@5.98.0) + tsconfig-paths-webpack-plugin: 4.0.0 + tslib: 2.8.1 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.98.0) + webpack-node-externals: 3.0.0 + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.2)(webpack@5.98.0) + transitivePeerDependencies: + - '@babel/traverse' + - '@parcel/css' + - '@rspack/core' + - '@swc-node/register' + - '@swc/core' + - '@swc/css' + - '@swc/wasm' + - '@types/node' + - bufferutil + - clean-css + - csso + - debug + - esbuild + - fibers + - html-webpack-plugin + - lightningcss + - node-sass + - nx + - sass-embedded + - supports-color + - typescript + - uglify-js + - utf-8-validate + - verdaccio + - vue-template-compiler + - webpack-cli + dev: true + /@nx/webpack@20.1.1(@rspack/core@1.3.9)(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(esbuild@0.24.0)(html-webpack-plugin@5.6.2)(nx@21.0.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)(verdaccio@6.1.2)(vue-tsc@2.2.10)(webpack-cli@5.1.4): resolution: {integrity: sha512-ucxJn9q/KboQ4ywtODmOYD9ac9FczdLd/1WDAPctxERuq71bfkwGmZGUzH3fDqolinek0kAIhn6ci3ww2/Qs1A==} dependencies: '@babel/core': 7.26.0 - '@module-federation/enhanced': 0.6.9(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)(vue-tsc@2.2.10)(webpack@5.94.0) + '@module-federation/enhanced': 0.6.9(react-dom@18.3.1)(react@18.3.1)(typescript@5.7.3)(vue-tsc@2.2.10)(webpack@5.98.0) '@module-federation/sdk': 0.6.11 '@nx/devkit': 20.1.1(nx@21.0.3) '@nx/js': 20.1.1(@swc-node/register@1.10.10)(@swc/core@1.7.26)(@types/node@20.12.14)(nx@21.0.3)(typescript@5.7.3)(verdaccio@6.1.2) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.7.3) ajv: 8.17.1 autoprefixer: 10.4.20(postcss@8.4.47) - babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.94.0) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.98.0) browserslist: 4.24.0 - copy-webpack-plugin: 10.2.4(webpack@5.94.0) - css-loader: 6.11.0(@rspack/core@1.3.9)(webpack@5.94.0) - css-minimizer-webpack-plugin: 5.0.1(esbuild@0.24.0)(webpack@5.94.0) + copy-webpack-plugin: 10.2.4(webpack@5.98.0) + css-loader: 6.11.0(@rspack/core@1.3.9)(webpack@5.98.0) + css-minimizer-webpack-plugin: 5.0.1(esbuild@0.24.0)(webpack@5.98.0) express: 4.21.1 - fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.7.3)(webpack@5.94.0) + fork-ts-checker-webpack-plugin: 7.2.13(typescript@5.7.3)(webpack@5.98.0) http-proxy-middleware: 3.0.3 less: 4.1.3 - less-loader: 11.1.0(less@4.1.3)(webpack@5.94.0) - license-webpack-plugin: 4.0.2(webpack@5.94.0) + less-loader: 11.1.0(less@4.1.3)(webpack@5.98.0) + license-webpack-plugin: 4.0.2(webpack@5.98.0) loader-utils: 2.0.4 - mini-css-extract-plugin: 2.4.7(webpack@5.94.0) + mini-css-extract-plugin: 2.4.7(webpack@5.98.0) parse5: 4.0.0 picocolors: 1.1.1 postcss: 8.4.47 postcss-import: 14.1.0(postcss@8.4.47) - postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.94.0) + postcss-loader: 6.2.1(postcss@8.4.47)(webpack@5.98.0) rxjs: 7.8.1 sass: 1.79.4 - sass-loader: 12.6.0(sass@1.79.4)(webpack@5.94.0) - source-map-loader: 5.0.0(webpack@5.94.0) - style-loader: 3.3.4(webpack@5.94.0) + sass-loader: 12.6.0(sass@1.79.4)(webpack@5.98.0) + source-map-loader: 5.0.0(webpack@5.98.0) + style-loader: 3.3.4(webpack@5.98.0) stylus: 0.64.0 - stylus-loader: 7.1.3(stylus@0.64.0)(webpack@5.94.0) - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.94.0) - ts-loader: 9.5.1(typescript@5.7.3)(webpack@5.94.0) + stylus-loader: 7.1.3(stylus@0.64.0)(webpack@5.98.0) + terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.98.0) + ts-loader: 9.5.1(typescript@5.7.3)(webpack@5.98.0) tsconfig-paths-webpack-plugin: 4.0.0 tslib: 2.6.3 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - webpack-dev-server: 5.1.0(webpack-cli@5.1.4)(webpack@5.94.0) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack-dev-server: 5.2.1(webpack-cli@5.1.4)(webpack@5.98.0) webpack-node-externals: 3.0.0 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.2)(webpack@5.94.0) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.2)(webpack@5.98.0) transitivePeerDependencies: - '@babel/traverse' - '@parcel/css' @@ -13692,6 +14409,22 @@ packages: - webpack-cli dev: true + /@nx/workspace@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26): + resolution: {integrity: sha512-2y952OmJx+0Rj+LQIxat8SLADjIkgB6NvjtgYZt8uRQ94jRS/JsRvGTw0V8DsY9mvsNbYoIRdJP25T3pGnI3gQ==} + dependencies: + '@nrwl/workspace': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + '@nx/devkit': 17.3.2(nx@17.3.2) + chalk: 4.1.2 + enquirer: 2.3.6 + nx: 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + tslib: 2.8.1 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - '@swc-node/register' + - '@swc/core' + - debug + dev: true + /@nx/workspace@20.1.1(@swc-node/register@1.10.10)(@swc/core@1.7.26): resolution: {integrity: sha512-xjdjPSe3y4cqOIbEKMpQmVaLEanA2xMgrRgZFl+OFE5IhI9fh+YYHAEcJ2URrBlgG8odkZRjVU4rXlzzz+4MsQ==} dependencies: @@ -14066,6 +14799,15 @@ packages: dev: true optional: true + /@phenomnomnominal/tsquery@5.0.1(typescript@5.3.3): + resolution: {integrity: sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==} + peerDependencies: + typescript: ^3 || ^4 || ^5 + dependencies: + esquery: 1.6.0 + typescript: 5.3.3 + dev: true + /@phenomnomnominal/tsquery@5.0.1(typescript@5.7.3): resolution: {integrity: sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==} peerDependencies: @@ -14162,7 +14904,7 @@ packages: html-entities: 2.6.0 loader-utils: 2.0.4 react-refresh: 0.14.2 - schema-utils: 4.3.0 + schema-utils: 4.3.2 source-map: 0.7.4 webpack: 5.99.9(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true @@ -16259,7 +17001,7 @@ packages: '@rsbuild/core': 1.3.20 deepmerge: 4.3.1 loader-utils: 2.0.4 - postcss: 8.5.3 + postcss: 8.5.4 reduce-configs: 1.1.0 sass-embedded: 1.89.0 dev: true @@ -16441,8 +17183,8 @@ packages: '@rsbuild/core': 1.x dependencies: '@rsbuild/core': 1.3.21 - vue-loader: 17.4.2(vue@3.5.10)(webpack@5.95.0) - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + vue-loader: 17.4.2(vue@3.5.10)(webpack@5.98.0) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) transitivePeerDependencies: - '@swc/core' - '@vue/compiler-sfc' @@ -16482,7 +17224,7 @@ packages: '@rspack/core': 0.7.5(@swc/helpers@0.5.3) caniuse-lite: 1.0.30001667 html-webpack-plugin: /html-rspack-plugin@5.7.2(@rspack/core@0.7.5) - postcss: 8.4.47 + postcss: 8.4.38 optionalDependencies: fsevents: 2.3.3 transitivePeerDependencies: @@ -18450,7 +19192,7 @@ packages: semver: 7.6.3 storybook: 8.3.5 style-loader: 3.3.4(webpack@5.98.0) - terser-webpack-plugin: 5.3.11(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.98.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.98.0) ts-dedent: 2.2.0 typescript: 5.7.3 url: 0.11.4 @@ -20119,19 +20861,15 @@ packages: /@tsconfig/node10@1.0.11: resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: false /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: false /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: false /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: false /@tybys/wasm-util@0.9.0: resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -20952,6 +21690,9 @@ packages: resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} dev: true + /@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + /@types/retry@0.12.2: resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} @@ -22353,7 +23094,7 @@ packages: '@vue/shared': 3.5.13 estree-walker: 2.0.2 magic-string: 0.30.17 - postcss: 8.5.3 + postcss: 8.5.4 source-map-js: 1.2.1 dev: true @@ -22581,6 +23322,7 @@ packages: dependencies: '@webassemblyjs/helper-numbers': 1.11.6 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: false /@webassemblyjs/ast@1.14.1: resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -22594,6 +23336,7 @@ packages: /@webassemblyjs/floating-point-hex-parser@1.11.6: resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: false /@webassemblyjs/floating-point-hex-parser@1.13.2: resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} @@ -22604,6 +23347,7 @@ packages: /@webassemblyjs/helper-api-error@1.11.6: resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: false /@webassemblyjs/helper-api-error@1.13.2: resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} @@ -22614,6 +23358,7 @@ packages: /@webassemblyjs/helper-buffer@1.12.1: resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + dev: false /@webassemblyjs/helper-buffer@1.14.1: resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} @@ -22632,6 +23377,7 @@ packages: '@webassemblyjs/floating-point-hex-parser': 1.11.6 '@webassemblyjs/helper-api-error': 1.11.6 '@xtuc/long': 4.2.2 + dev: false /@webassemblyjs/helper-numbers@1.13.2: resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} @@ -22646,6 +23392,7 @@ packages: /@webassemblyjs/helper-wasm-bytecode@1.11.6: resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: false /@webassemblyjs/helper-wasm-bytecode@1.13.2: resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} @@ -22666,6 +23413,7 @@ packages: '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.6 '@webassemblyjs/wasm-gen': 1.12.1 + dev: false /@webassemblyjs/helper-wasm-section@1.14.1: resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} @@ -22685,6 +23433,7 @@ packages: resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} dependencies: '@xtuc/ieee754': 1.2.0 + dev: false /@webassemblyjs/ieee754@1.13.2: resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} @@ -22701,6 +23450,7 @@ packages: resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} dependencies: '@xtuc/long': 4.2.2 + dev: false /@webassemblyjs/leb128@1.13.2: resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} @@ -22713,6 +23463,7 @@ packages: /@webassemblyjs/utf8@1.11.6: resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: false /@webassemblyjs/utf8@1.13.2: resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} @@ -22741,6 +23492,7 @@ packages: '@webassemblyjs/wasm-opt': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 '@webassemblyjs/wast-printer': 1.12.1 + dev: false /@webassemblyjs/wasm-edit@1.14.1: resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} @@ -22772,6 +23524,7 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 + dev: false /@webassemblyjs/wasm-gen@1.14.1: resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} @@ -22798,6 +23551,7 @@ packages: '@webassemblyjs/helper-buffer': 1.12.1 '@webassemblyjs/wasm-gen': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 + dev: false /@webassemblyjs/wasm-opt@1.14.1: resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} @@ -22827,6 +23581,7 @@ packages: '@webassemblyjs/ieee754': 1.11.6 '@webassemblyjs/leb128': 1.11.6 '@webassemblyjs/utf8': 1.11.6 + dev: false /@webassemblyjs/wasm-parser@1.14.1: resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} @@ -22850,6 +23605,7 @@ packages: dependencies: '@webassemblyjs/ast': 1.12.1 '@xtuc/long': 4.2.2 + dev: false /@webassemblyjs/wast-printer@1.14.1: resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} @@ -22865,7 +23621,7 @@ packages: webpack-cli: 5.x.x dependencies: webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.98.0) + webpack-cli: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.98.0) /@webpack-cli/info@2.0.2(webpack-cli@5.1.4)(webpack@5.98.0): resolution: {integrity: sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==} @@ -22875,7 +23631,22 @@ packages: webpack-cli: 5.x.x dependencies: webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.98.0) + webpack-cli: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.98.0) + + /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.98.0): + resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} + engines: {node: '>=14.15.0'} + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.98.0) + webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.98.0) /@webpack-cli/serve@2.0.5(webpack-cli@5.1.4)(webpack@5.98.0): resolution: {integrity: sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==} @@ -23029,6 +23800,14 @@ packages: /@yarnpkg/lockfile@1.1.0: resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + /@yarnpkg/parsers@3.0.0-rc.46: + resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==} + engines: {node: '>=14.15.0'} + dependencies: + js-yaml: 3.14.1 + tslib: 2.8.1 + dev: true + /@yarnpkg/parsers@3.0.2: resolution: {integrity: sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==} engines: {node: '>=18.12.0'} @@ -23036,6 +23815,13 @@ packages: js-yaml: 3.14.1 tslib: 2.8.1 + /@zkochan/js-yaml@0.0.6: + resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + /@zkochan/js-yaml@0.0.7: resolution: {integrity: sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==} hasBin: true @@ -23696,7 +24482,6 @@ packages: /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: false /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -24022,7 +24807,7 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.24.0 + browserslist: 4.24.4 caniuse-lite: 1.0.30001718 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -24038,7 +24823,7 @@ packages: peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.24.0 + browserslist: 4.24.4 caniuse-lite: 1.0.30001718 fraction.js: 4.3.7 normalize-range: 0.1.2 @@ -24171,7 +24956,7 @@ packages: webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: true - /babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.94.0): + /babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.98.0): resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -24180,8 +24965,8 @@ packages: dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 - schema-utils: 4.3.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + schema-utils: 4.3.2 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: false /babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0): @@ -24193,7 +24978,7 @@ packages: dependencies: '@babel/core': 7.26.10 find-cache-dir: 4.0.0 - schema-utils: 4.3.0 + schema-utils: 4.3.2 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: true @@ -24206,7 +24991,7 @@ packages: dependencies: '@babel/core': 7.26.10 find-cache-dir: 4.0.0 - schema-utils: 4.3.0 + schema-utils: 4.3.2 webpack: 5.99.9(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true @@ -24281,7 +25066,6 @@ packages: '@babel/runtime': 7.26.0 cosmiconfig: 6.0.0 resolve: 1.22.8 - dev: false /babel-plugin-macros@3.1.0: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} @@ -24852,10 +25636,6 @@ packages: dependencies: streamsearch: 1.1.0 - /bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - /bytes@3.1.0: resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} engines: {node: '>= 0.8'} @@ -25672,20 +26452,6 @@ packages: dependencies: mime-db: 1.54.0 - /compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} - engines: {node: '>= 0.8.0'} - dependencies: - accepts: 1.3.8 - bytes: 3.0.0 - compressible: 2.0.18 - debug: 2.6.9 - on-headers: 1.0.2 - safe-buffer: 5.1.2 - vary: 1.1.2 - transitivePeerDependencies: - - supports-color - /compression@1.8.0: resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} engines: {node: '>= 0.8.0'} @@ -25929,21 +26695,6 @@ packages: toggle-selection: 1.0.6 dev: false - /copy-webpack-plugin@10.2.4(webpack@5.94.0): - resolution: {integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==} - engines: {node: '>= 12.20.0'} - peerDependencies: - webpack: ^5.1.0 - dependencies: - fast-glob: 3.3.2 - glob-parent: 6.0.2 - globby: 12.2.0 - normalize-path: 3.0.0 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /copy-webpack-plugin@10.2.4(webpack@5.98.0): resolution: {integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==} engines: {node: '>= 12.20.0'} @@ -25954,10 +26705,9 @@ packages: glob-parent: 6.0.2 globby: 12.2.0 normalize-path: 3.0.0 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /copy-webpack-plugin@11.0.0(webpack@5.98.0): resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} @@ -26077,7 +26827,6 @@ packages: parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 - dev: false /cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} @@ -26220,7 +26969,6 @@ packages: /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: false /cron-parser@4.9.0: resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} @@ -26303,30 +27051,6 @@ packages: dependencies: postcss: 8.4.38 - /css-loader@6.11.0(@rspack/core@1.3.9)(webpack@5.94.0): - resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - dependencies: - '@rspack/core': 1.3.9(@swc/helpers@0.5.13) - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) - postcss-value-parser: 4.2.0 - semver: 7.6.3 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /css-loader@6.11.0(@rspack/core@1.3.9)(webpack@5.98.0): resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} engines: {node: '>= 12.13.0'} @@ -26349,7 +27073,6 @@ packages: postcss-value-parser: 4.2.0 semver: 7.6.3 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /css-minimizer-webpack-plugin@5.0.1(esbuild@0.17.19)(webpack@5.99.9): resolution: {integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==} @@ -26381,7 +27104,7 @@ packages: esbuild: 0.17.19 jest-worker: 29.7.0 postcss: 8.4.38 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 webpack: 5.99.9(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true @@ -26416,12 +27139,12 @@ packages: esbuild: 0.18.20 jest-worker: 29.7.0 postcss: 8.4.38 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 webpack: 5.99.9(@swc/core@1.10.18)(esbuild@0.18.20)(webpack-cli@5.1.4) dev: true - /css-minimizer-webpack-plugin@5.0.1(esbuild@0.24.0)(webpack@5.94.0): + /css-minimizer-webpack-plugin@5.0.1(esbuild@0.24.0)(webpack@5.98.0): resolution: {integrity: sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -26451,9 +27174,9 @@ packages: esbuild: 0.24.0 jest-worker: 29.7.0 postcss: 8.4.38 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: false /css-minimizer-webpack-plugin@5.0.1(esbuild@0.25.0)(webpack@5.98.0): @@ -26486,7 +27209,7 @@ packages: esbuild: 0.25.0 jest-worker: 29.7.0 postcss: 8.4.38 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: true @@ -27140,6 +27863,12 @@ packages: bundle-name: 4.1.0 default-browser-id: 5.0.0 + /default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: @@ -27322,7 +28051,6 @@ packages: /diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} - dev: false /diffie-hellman@5.0.3: resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} @@ -27489,6 +28217,11 @@ packages: dependencies: dotenv: 16.4.5 + /dotenv@16.3.2: + resolution: {integrity: sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==} + engines: {node: '>=12'} + dev: true + /dotenv@16.4.5: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} @@ -27808,6 +28541,7 @@ packages: /es-module-lexer@1.5.4: resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + dev: false /es-module-lexer@1.6.0: resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} @@ -28472,7 +29206,7 @@ packages: dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.0(supports-color@9.3.1) - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 eslint: 9.0.0 eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@9.0.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@9.0.0) @@ -29630,7 +30364,6 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 - dev: false /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} @@ -30102,33 +30835,6 @@ packages: /forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - /fork-ts-checker-webpack-plugin@7.2.13(typescript@5.7.3)(webpack@5.94.0): - resolution: {integrity: sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==} - engines: {node: '>=12.13.0', yarn: '>=1.0.0'} - peerDependencies: - typescript: '>3.6.0' - vue-template-compiler: '*' - webpack: ^5.11.0 - peerDependenciesMeta: - vue-template-compiler: - optional: true - dependencies: - '@babel/code-frame': 7.26.2 - chalk: 4.1.2 - chokidar: 3.6.0 - cosmiconfig: 7.1.0 - deepmerge: 4.3.1 - fs-extra: 10.1.0 - memfs: 3.5.3 - minimatch: 3.1.2 - node-abort-controller: 3.1.1 - schema-utils: 3.3.0 - semver: 7.6.3 - tapable: 2.2.1 - typescript: 5.7.3 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /fork-ts-checker-webpack-plugin@7.2.13(typescript@5.7.3)(webpack@5.98.0): resolution: {integrity: sha512-fR3WRkOb4bQdWB/y7ssDUlVdrclvwtyCUIHCfivAoYxq9dF7XfrDKbMdZIfwJ7hxIAqkYSGeU7lLJE6xrxIBdg==} engines: {node: '>=12.13.0', yarn: '>=1.0.0'} @@ -30140,7 +30846,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 chalk: 4.1.2 chokidar: 3.6.0 cosmiconfig: 7.1.0 @@ -30154,7 +30860,6 @@ packages: tapable: 2.2.1 typescript: 5.7.3 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.3)(webpack@5.98.0): resolution: {integrity: sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==} @@ -32032,7 +32737,7 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.8.1 + rxjs: 7.8.2 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -32053,7 +32758,7 @@ packages: mute-stream: 0.0.8 ora: 5.4.1 run-async: 2.4.1 - rxjs: 7.8.1 + rxjs: 7.8.2 string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 @@ -33976,18 +34681,6 @@ packages: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} dev: false - /less-loader@11.1.0(less@4.1.3)(webpack@5.94.0): - resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} - engines: {node: '>= 14.15.0'} - peerDependencies: - less: ^3.5.0 || ^4.0.0 - webpack: ^5.0.0 - dependencies: - klona: 2.0.6 - less: 4.1.3 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /less-loader@11.1.0(less@4.1.3)(webpack@5.98.0): resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} engines: {node: '>= 14.15.0'} @@ -33998,7 +34691,6 @@ packages: klona: 2.0.6 less: 4.1.3 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /less-loader@11.1.0(less@4.3.0)(webpack@5.98.0): resolution: {integrity: sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==} @@ -34059,20 +34751,6 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /license-webpack-plugin@4.0.2(webpack@5.94.0): - resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} - peerDependencies: - webpack: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-sources: - optional: true - dependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - webpack-sources: 3.2.3 - dev: false - /license-webpack-plugin@4.0.2(webpack@5.98.0): resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} peerDependencies: @@ -34085,7 +34763,6 @@ packages: dependencies: webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) webpack-sources: 3.2.3 - dev: true /lilconfig@2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} @@ -35444,25 +36121,14 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - /mini-css-extract-plugin@2.4.7(webpack@5.94.0): - resolution: {integrity: sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - schema-utils: 4.3.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /mini-css-extract-plugin@2.4.7(webpack@5.98.0): resolution: {integrity: sha512-euWmddf0sk9Nv1O0gfeeUAvAkoSlWncNLF77C0TP2+WoPvy8mAHKOzMajcCz2dzvyt3CNgxb1obIEVFIRxaipg==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - schema-utils: 4.3.0 + schema-utils: 4.3.2 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /mini-css-extract-plugin@2.9.2(webpack@5.99.9): resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} @@ -36452,6 +37118,134 @@ packages: resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} dev: true + /nx@17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26): + resolution: {integrity: sha512-QjF1gnwKebQISvATrSbW7dsmIcLbA0fcyDyxLo5wVHx/MIlcaIb/lLYaPTld73ZZ6svHEZ6n2gOkhMitmkIPQA==} + hasBin: true + requiresBuild: true + peerDependencies: + '@swc-node/register': ^1.6.7 + '@swc/core': ^1.3.85 + peerDependenciesMeta: + '@swc-node/register': + optional: true + '@swc/core': + optional: true + dependencies: + '@nrwl/tao': 17.3.2(@swc-node/register@1.10.10)(@swc/core@1.7.26) + '@swc-node/register': 1.10.10(@swc/core@1.7.26)(@swc/types@0.1.21)(typescript@5.7.3) + '@swc/core': 1.7.26(@swc/helpers@0.5.13) + '@yarnpkg/lockfile': 1.1.0 + '@yarnpkg/parsers': 3.0.0-rc.46 + '@zkochan/js-yaml': 0.0.6 + axios: 1.8.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + cliui: 8.0.1 + dotenv: 16.3.2 + dotenv-expand: 10.0.0 + enquirer: 2.3.6 + figures: 3.2.0 + flat: 5.0.2 + fs-extra: 11.3.0 + ignore: 5.3.2 + jest-diff: 29.7.0 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: 2.0.3 + minimatch: 9.0.3 + node-machine-id: 1.1.12 + npm-run-path: 4.0.1 + open: 8.4.2 + ora: 5.3.0 + semver: 7.6.3 + string-width: 4.2.3 + strong-log-transformer: 2.1.0 + tar-stream: 2.2.0 + tmp: 0.2.3 + tsconfig-paths: 4.2.0 + tslib: 2.8.1 + yargs: 17.7.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@nx/nx-darwin-arm64': 17.3.2 + '@nx/nx-darwin-x64': 17.3.2 + '@nx/nx-freebsd-x64': 17.3.2 + '@nx/nx-linux-arm-gnueabihf': 17.3.2 + '@nx/nx-linux-arm64-gnu': 17.3.2 + '@nx/nx-linux-arm64-musl': 17.3.2 + '@nx/nx-linux-x64-gnu': 17.3.2 + '@nx/nx-linux-x64-musl': 17.3.2 + '@nx/nx-win32-arm64-msvc': 17.3.2 + '@nx/nx-win32-x64-msvc': 17.3.2 + transitivePeerDependencies: + - debug + dev: true + + /nx@18.3.5(@swc-node/register@1.10.10)(@swc/core@1.7.26): + resolution: {integrity: sha512-wWcvwoTgiT5okdrG0RIWm1tepC17bDmSpw+MrOxnjfBjARQNTURkiq4U6cxjCVsCxNHxCrlAaBSQLZeBgJZTzQ==} + hasBin: true + requiresBuild: true + peerDependencies: + '@swc-node/register': ^1.8.0 + '@swc/core': ^1.3.85 + peerDependenciesMeta: + '@swc-node/register': + optional: true + '@swc/core': + optional: true + dependencies: + '@nrwl/tao': 18.3.5(@swc-node/register@1.10.10)(@swc/core@1.7.26) + '@swc-node/register': 1.10.10(@swc/core@1.7.26)(@swc/types@0.1.21)(typescript@5.7.3) + '@swc/core': 1.7.26(@swc/helpers@0.5.13) + '@yarnpkg/lockfile': 1.1.0 + '@yarnpkg/parsers': 3.0.0-rc.46 + '@zkochan/js-yaml': 0.0.6 + axios: 1.8.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.6.1 + cliui: 8.0.1 + dotenv: 16.3.2 + dotenv-expand: 10.0.0 + enquirer: 2.3.6 + figures: 3.2.0 + flat: 5.0.2 + fs-extra: 11.3.0 + ignore: 5.3.2 + jest-diff: 29.7.0 + js-yaml: 4.1.0 + jsonc-parser: 3.2.0 + lines-and-columns: 2.0.3 + minimatch: 9.0.3 + node-machine-id: 1.1.12 + npm-run-path: 4.0.1 + open: 8.4.2 + ora: 5.3.0 + semver: 7.6.3 + string-width: 4.2.3 + strong-log-transformer: 2.1.0 + tar-stream: 2.2.0 + tmp: 0.2.3 + tsconfig-paths: 4.2.0 + tslib: 2.8.1 + yargs: 17.7.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@nx/nx-darwin-arm64': 18.3.5 + '@nx/nx-darwin-x64': 18.3.5 + '@nx/nx-freebsd-x64': 18.3.5 + '@nx/nx-linux-arm-gnueabihf': 18.3.5 + '@nx/nx-linux-arm64-gnu': 18.3.5 + '@nx/nx-linux-arm64-musl': 18.3.5 + '@nx/nx-linux-x64-gnu': 18.3.5 + '@nx/nx-linux-x64-musl': 18.3.5 + '@nx/nx-win32-arm64-msvc': 18.3.5 + '@nx/nx-win32-x64-msvc': 18.3.5 + transitivePeerDependencies: + - debug + dev: true + /nx@20.1.1(@swc-node/register@1.10.10)(@swc/core@1.7.26): resolution: {integrity: sha512-bLDEDBUuAvFC5b74QUnmJxUHTRa0mkc2wRPmb2rN3d1VlTFjzKTT9ClJTR1emp/DDO620zyAmVCDVKmnSZNFoQ==} hasBin: true @@ -37032,6 +37826,13 @@ packages: engines: {node: '>=12'} dev: true + /p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + /p-retry@6.2.0: resolution: {integrity: sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==} engines: {node: '>=16.17'} @@ -37867,7 +38668,7 @@ packages: webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: true - /postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.94.0): + /postcss-loader@6.2.1(postcss@8.4.47)(webpack@5.98.0): resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -37878,7 +38679,7 @@ packages: klona: 2.0.6 postcss: 8.4.47 semver: 7.6.3 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: false /postcss-loader@8.1.1(@rspack/core@1.3.9)(postcss@8.4.38)(typescript@5.7.3)(webpack@5.98.0): @@ -38468,7 +39269,6 @@ packages: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - dev: false /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -42540,7 +43340,7 @@ packages: sass-embedded-win32-ia32: 1.89.0 sass-embedded-win32-x64: 1.89.0 - /sass-loader@12.6.0(sass@1.79.4)(webpack@5.94.0): + /sass-loader@12.6.0(sass@1.79.4)(webpack@5.98.0): resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -42562,9 +43362,34 @@ packages: klona: 2.0.6 neo-async: 2.6.2 sass: 1.79.4 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: false + /sass-loader@12.6.0(sass@1.88.0)(webpack@5.98.0): + resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + dependencies: + klona: 2.0.6 + neo-async: 2.6.2 + sass: 1.88.0 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + dev: true + /sass-loader@14.2.1(@rspack/core@1.3.9)(webpack@5.98.0): resolution: {integrity: sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==} engines: {node: '>= 18.12.0'} @@ -42641,6 +43466,10 @@ packages: '@parcel/watcher': 2.5.1 dev: true + /sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + /sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} requiresBuild: true @@ -42700,7 +43529,6 @@ packages: ajv: 8.17.1 ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) - dev: true /screenfull@5.2.0: resolution: {integrity: sha512-9BakfsO2aUQN2K9Fdbj87RJIEZ82Q9IGim7FqM5OsebfoFC6ZHXgDq/KvniuLTPdeM8wY2o6Dj3WQ7KeQCj3cA==} @@ -43289,16 +44117,17 @@ packages: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} - /source-map-loader@5.0.0(webpack@5.94.0): - resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} - engines: {node: '>= 18.12.0'} + /source-map-loader@3.0.2(webpack@5.98.0): + resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} + engines: {node: '>= 12.13.0'} peerDependencies: - webpack: ^5.72.1 + webpack: ^5.0.0 dependencies: + abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + dev: true /source-map-loader@5.0.0(webpack@5.98.0): resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} @@ -43308,8 +44137,7 @@ packages: dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) /source-map-resolve@0.5.3: resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} @@ -43973,6 +44801,16 @@ packages: js-tokens: 9.0.0 dev: true + /strong-log-transformer@2.1.0: + resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} + engines: {node: '>=4'} + hasBin: true + dependencies: + duplexer: 0.1.2 + minimist: 1.2.8 + through: 2.3.8 + dev: true + /strtok3@9.1.1: resolution: {integrity: sha512-FhwotcEqjr241ZbjFzjlIYg6c5/L/s4yBGWSMvJ9UoExiSqL+FnFA/CaeZx17WGaZMS/4SOZp8wH18jSS4R4lw==} engines: {node: '>=16'} @@ -43985,15 +44823,6 @@ packages: resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} dev: true - /style-loader@3.3.4(webpack@5.94.0): - resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - dependencies: - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /style-loader@3.3.4(webpack@5.98.0): resolution: {integrity: sha512-0WqXzrsMTyb8yjZJHDqwmnwRJvhALK9LfRtRc6B4UTWe8AijYLZYZ9thuJTZc2VfQWINADW/j+LiJnfy2RoC1w==} engines: {node: '>= 12.13.0'} @@ -44001,7 +44830,6 @@ packages: webpack: ^5.0.0 dependencies: webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} @@ -44187,7 +45015,7 @@ packages: /stylis@4.3.4: resolution: {integrity: sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==} - /stylus-loader@7.1.3(stylus@0.64.0)(webpack@5.94.0): + /stylus-loader@7.1.3(stylus@0.59.0)(webpack@5.98.0): resolution: {integrity: sha512-TY0SKwiY7D2kMd3UxaWKSf3xHF0FFN/FAfsSqfrhxRT/koXTwffq2cgEWDkLQz7VojMu7qEEHt5TlMjkPx9UDw==} engines: {node: '>= 14.15.0'} peerDependencies: @@ -44196,9 +45024,9 @@ packages: dependencies: fast-glob: 3.3.2 normalize-path: 3.0.0 - stylus: 0.64.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false + stylus: 0.59.0 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + dev: true /stylus-loader@7.1.3(stylus@0.64.0)(webpack@5.98.0): resolution: {integrity: sha512-TY0SKwiY7D2kMd3UxaWKSf3xHF0FFN/FAfsSqfrhxRT/koXTwffq2cgEWDkLQz7VojMu7qEEHt5TlMjkPx9UDw==} @@ -44210,7 +45038,19 @@ packages: fast-glob: 3.3.2 normalize-path: 3.0.0 stylus: 0.64.0 - webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + + /stylus@0.59.0: + resolution: {integrity: sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==} + hasBin: true + dependencies: + '@adobe/css-tools': 4.4.0 + debug: 4.4.0(supports-color@9.3.1) + glob: 7.2.0 + sax: 1.2.4 + source-map: 0.7.4 + transitivePeerDependencies: + - supports-color dev: true /stylus@0.64.0: @@ -44553,7 +45393,7 @@ packages: engines: {node: '>=8'} dev: true - /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.94.0): + /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.98.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -44576,7 +45416,7 @@ packages: schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) dev: false /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.75.0): @@ -44631,32 +45471,6 @@ packages: webpack: 5.93.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: false - /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.95.0): - resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.7.26(@swc/helpers@0.5.13) - esbuild: 0.25.0 - jest-worker: 27.5.1 - schema-utils: 3.3.0 - serialize-javascript: 6.0.2 - terser: 5.37.0 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true - /terser-webpack-plugin@5.3.10(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.98.0): resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} engines: {node: '>= 10.13.0'} @@ -44683,32 +45497,6 @@ packages: webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: true - /terser-webpack-plugin@5.3.11(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.98.0): - resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.7.26(@swc/helpers@0.5.13) - esbuild: 0.18.20 - jest-worker: 27.5.1 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - terser: 5.37.0 - webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) - dev: true - /terser-webpack-plugin@5.3.11(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.94.0): resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} engines: {node: '>= 10.13.0'} @@ -44729,37 +45517,11 @@ packages: '@swc/core': 1.7.26(@swc/helpers@0.5.13) esbuild: 0.24.0 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - /terser-webpack-plugin@5.3.11(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.98.0): - resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - dependencies: - '@jridgewell/trace-mapping': 0.3.25 - '@swc/core': 1.7.26(@swc/helpers@0.5.13) - esbuild: 0.24.0 - jest-worker: 27.5.1 - schema-utils: 4.3.0 - serialize-javascript: 6.0.2 - terser: 5.37.0 - webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: true - /terser-webpack-plugin@5.3.11(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.94.0): resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} engines: {node: '>= 10.13.0'} @@ -44780,7 +45542,7 @@ packages: '@swc/core': 1.7.26(@swc/helpers@0.5.13) esbuild: 0.25.0 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) @@ -44806,10 +45568,11 @@ packages: '@swc/core': 1.7.26(@swc/helpers@0.5.13) esbuild: 0.25.0 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + dev: true /terser-webpack-plugin@5.3.14(@swc/core@1.10.18)(esbuild@0.17.19)(webpack@5.99.9): resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} @@ -44831,7 +45594,7 @@ packages: '@swc/core': 1.10.18(@swc/helpers@0.5.17) esbuild: 0.17.19 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.99.9(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) @@ -44857,7 +45620,7 @@ packages: '@swc/core': 1.10.18(@swc/helpers@0.5.17) esbuild: 0.18.20 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.99.9(@swc/core@1.10.18)(esbuild@0.18.20)(webpack-cli@5.1.4) @@ -44883,12 +45646,88 @@ packages: '@swc/core': 1.7.26(@swc/helpers@0.5.13) esbuild: 0.17.19 jest-worker: 27.5.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.37.0 webpack: 5.99.9(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true + /terser-webpack-plugin@5.3.14(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.98.0): + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@swc/core': 1.7.26(@swc/helpers@0.5.13) + esbuild: 0.18.20 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4) + dev: true + + /terser-webpack-plugin@5.3.14(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.98.0): + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@swc/core': 1.7.26(@swc/helpers@0.5.13) + esbuild: 0.24.0 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) + + /terser-webpack-plugin@5.3.14(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.98.0): + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@swc/core': 1.7.26(@swc/helpers@0.5.13) + esbuild: 0.25.0 + jest-worker: 27.5.1 + schema-utils: 4.3.2 + serialize-javascript: 6.0.2 + terser: 5.37.0 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + /terser@5.37.0: resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} engines: {node: '>=10'} @@ -45425,29 +46264,13 @@ packages: webpack: ^5.0.0 dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 micromatch: 4.0.8 semver: 7.6.3 typescript: 5.5.2 webpack: 5.99.9(@swc/core@1.7.26)(esbuild@0.17.19)(webpack-cli@5.1.4) dev: true - /ts-loader@9.5.1(typescript@5.7.3)(webpack@5.94.0): - resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} - engines: {node: '>=12.0.0'} - peerDependencies: - typescript: '*' - webpack: ^5.0.0 - dependencies: - chalk: 4.1.2 - enhanced-resolve: 5.17.1 - micromatch: 4.0.8 - semver: 7.6.3 - source-map: 0.7.4 - typescript: 5.7.3 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /ts-loader@9.5.1(typescript@5.7.3)(webpack@5.98.0): resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} @@ -45456,13 +46279,12 @@ packages: webpack: ^5.0.0 dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 micromatch: 4.0.8 semver: 7.6.3 source-map: 0.7.4 typescript: 5.7.3 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /ts-morph@12.0.0: resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} @@ -45503,6 +46325,38 @@ packages: yn: 3.1.1 dev: false + /ts-node@10.9.1(@swc/core@1.7.26)(@types/node@20.12.14)(typescript@5.3.3): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@swc/core': 1.7.26(@swc/helpers@0.5.13) + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.12.14 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.3.3 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + dev: true + /ts-node@10.9.1(@swc/core@1.7.26)(@types/node@20.12.14)(typescript@5.4.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -45565,7 +46419,6 @@ packages: typescript: 5.7.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: false /ts-pnp@1.2.0(typescript@5.7.3): resolution: {integrity: sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==} @@ -45601,7 +46454,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 tsconfig-paths: 4.2.0 /tsconfig-paths-webpack-plugin@4.1.0: @@ -45609,7 +46462,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 tsconfig-paths: 4.2.0 dev: true @@ -45618,7 +46471,7 @@ packages: engines: {node: '>=10.13.0'} dependencies: chalk: 4.1.2 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 tapable: 2.2.1 tsconfig-paths: 4.2.0 dev: true @@ -45934,6 +46787,12 @@ packages: hasBin: true dev: true + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /typescript@5.4.2: resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} engines: {node: '>=14.17'} @@ -46503,7 +47362,6 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: false /v8-compile-cache@2.4.0: resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} @@ -46850,7 +47708,7 @@ packages: '@types/node': 16.11.68 esbuild: 0.21.5 less: 4.3.0 - postcss: 8.5.3 + postcss: 8.5.4 rollup: 4.40.0 stylus: 0.64.0 optionalDependencies: @@ -46891,7 +47749,7 @@ packages: '@types/node': 18.16.9 esbuild: 0.21.5 less: 4.3.0 - postcss: 8.5.3 + postcss: 8.5.4 rollup: 4.40.0 stylus: 0.64.0 optionalDependencies: @@ -46932,7 +47790,7 @@ packages: '@types/node': 20.12.14 esbuild: 0.21.5 less: 4.3.0 - postcss: 8.5.3 + postcss: 8.5.4 rollup: 4.40.0 stylus: 0.64.0 optionalDependencies: @@ -47160,7 +48018,7 @@ packages: - supports-color dev: true - /vue-loader@17.4.2(vue@3.5.10)(webpack@5.95.0): + /vue-loader@17.4.2(vue@3.5.10)(webpack@5.98.0): resolution: {integrity: sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==} peerDependencies: '@vue/compiler-sfc': '*' @@ -47176,7 +48034,7 @@ packages: hash-sum: 2.0.0 vue: 3.5.10(typescript@5.5.2) watchpack: 2.4.2 - webpack: 5.95.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) dev: true /vue-router@4.4.5(vue@3.5.10): @@ -47365,7 +48223,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-cli@5.1.4(webpack@5.98.0): + /webpack-cli@5.1.4(webpack-dev-server@4.15.2)(webpack@5.98.0): resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} engines: {node: '>=14.15.0'} hasBin: true @@ -47385,7 +48243,7 @@ packages: '@discoveryjs/json-ext': 0.5.7 '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.98.0) '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.98.0) - '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.98.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack-dev-server@4.15.2)(webpack@5.98.0) colorette: 2.0.20 commander: 10.0.1 cross-spawn: 7.0.6 @@ -47395,28 +48253,57 @@ packages: interpret: 3.1.1 rechoir: 0.8.0 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack-dev-server: 4.15.2(webpack-cli@5.1.4)(webpack@5.98.0) webpack-merge: 5.10.0 - /webpack-dev-middleware@6.1.3(webpack@5.98.0): - resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} - engines: {node: '>= 14.15.0'} + /webpack-cli@5.1.4(webpack@5.98.0): + resolution: {integrity: sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==} + engines: {node: '>=14.15.0'} + hasBin: true peerDependencies: - webpack: ^5.0.0 + '@webpack-cli/generators': '*' + webpack: 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' peerDependenciesMeta: - webpack: + '@webpack-cli/generators': optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.7 + '@webpack-cli/configtest': 2.1.1(webpack-cli@5.1.4)(webpack@5.98.0) + '@webpack-cli/info': 2.0.2(webpack-cli@5.1.4)(webpack@5.98.0) + '@webpack-cli/serve': 2.0.5(webpack-cli@5.1.4)(webpack@5.98.0) + colorette: 2.0.20 + commander: 10.0.1 + cross-spawn: 7.0.6 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack-merge: 5.10.0 + + /webpack-dev-middleware@5.3.4(webpack@5.98.0): + resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true - /webpack-dev-middleware@7.4.2(webpack@5.94.0): - resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} - engines: {node: '>= 18.12.0'} + /webpack-dev-middleware@6.1.3(webpack@5.98.0): + resolution: {integrity: sha512-A4ChP0Qj8oGociTs6UdlRUGANIGrCDL3y+pmQMc+dSsraXHCatFpmMey4mYELA+juqwUqwQsUgJJISXl1KWmiw==} + engines: {node: '>= 14.15.0'} peerDependencies: webpack: ^5.0.0 peerDependenciesMeta: @@ -47424,13 +48311,12 @@ packages: optional: true dependencies: colorette: 2.0.20 - memfs: 4.12.0 + memfs: 3.5.3 mime-types: 2.1.35 - on-finished: 2.4.1 range-parser: 1.2.1 - schema-utils: 4.3.0 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false + schema-utils: 4.3.2 + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + dev: true /webpack-dev-middleware@7.4.2(webpack@5.98.0): resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} @@ -47446,16 +48332,15 @@ packages: mime-types: 2.1.35 on-finished: 2.4.1 range-parser: 1.2.1 - schema-utils: 4.3.0 + schema-utils: 4.3.2 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true - /webpack-dev-server@5.1.0(webpack-cli@5.1.4)(webpack@5.94.0): - resolution: {integrity: sha512-aQpaN81X6tXie1FoOB7xlMfCsN19pSvRAeYUHOdFWOlhpQ/LlbfTqYwwmEDFV0h8GGuqmCmKmT+pxcUV/Nt2gQ==} - engines: {node: '>= 18.12.0'} + /webpack-dev-server@4.15.2(webpack-cli@5.1.4)(webpack@5.98.0): + resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} + engines: {node: '>= 12.13.0'} hasBin: true peerDependencies: - webpack: ^5.0.0 + webpack: ^4.37.0 || ^5.0.0 webpack-cli: '*' peerDependenciesMeta: webpack: @@ -47474,31 +48359,32 @@ packages: bonjour-service: 1.2.1 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.4 + compression: 1.8.0 connect-history-api-fallback: 2.0.0 + default-gateway: 6.0.3 express: 4.21.2 graceful-fs: 4.2.11 html-entities: 2.6.0 http-proxy-middleware: 2.0.7(@types/express@4.17.21) ipaddr.js: 2.2.0 launch-editor: 2.9.1 - open: 10.1.0 - p-retry: 6.2.0 - schema-utils: 4.3.0 + open: 8.4.2 + p-retry: 4.6.2 + rimraf: 3.0.2 + schema-utils: 4.3.2 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - webpack-cli: 5.1.4(webpack@5.98.0) - webpack-dev-middleware: 7.4.2(webpack@5.94.0) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack-cli: 5.1.4(webpack-dev-server@4.15.2)(webpack@5.98.0) + webpack-dev-middleware: 5.3.4(webpack@5.98.0) ws: 8.18.0 transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - dev: false /webpack-dev-server@5.2.0(webpack-cli@5.1.4)(webpack@5.98.0): resolution: {integrity: sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==} @@ -47524,7 +48410,7 @@ packages: bonjour-service: 1.2.1 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.4 + compression: 1.8.0 connect-history-api-fallback: 2.0.0 express: 4.21.2 graceful-fs: 4.2.11 @@ -47533,7 +48419,7 @@ packages: launch-editor: 2.9.1 open: 10.1.0 p-retry: 6.2.0 - schema-utils: 4.3.0 + schema-utils: 4.3.2 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 @@ -47574,7 +48460,7 @@ packages: bonjour-service: 1.2.1 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.4 + compression: 1.8.0 connect-history-api-fallback: 2.0.0 express: 4.21.2 graceful-fs: 4.2.11 @@ -47583,12 +48469,12 @@ packages: launch-editor: 2.9.1 open: 10.1.0 p-retry: 6.2.0 - schema-utils: 4.3.0 + schema-utils: 4.3.2 selfsigned: 2.4.1 serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) + webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) webpack-cli: 5.1.4(webpack@5.98.0) webpack-dev-middleware: 7.4.2(webpack@5.98.0) ws: 8.18.0 @@ -47597,7 +48483,6 @@ packages: - debug - supports-color - utf-8-validate - dev: true /webpack-hot-middleware@2.26.1: resolution: {integrity: sha512-khZGfAeJx6I8K9zKohEWWYN6KDlVw2DHownoe+6Vtwj1LP9WFgegXnVMSkZ/dBEBtXFwrkkydsaPFlB7f8wU2A==} @@ -47623,21 +48508,6 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - /webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.2)(webpack@5.94.0): - resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} - engines: {node: '>= 12'} - peerDependencies: - html-webpack-plugin: '>= 5.0.0-beta.1 < 6' - webpack: ^5.12.0 - peerDependenciesMeta: - html-webpack-plugin: - optional: true - dependencies: - html-webpack-plugin: 5.6.2(@rspack/core@1.3.9)(webpack@5.98.0) - typed-assert: 1.0.9 - webpack: 5.94.0(@swc/core@1.7.26)(esbuild@0.24.0)(webpack-cli@5.1.4) - dev: false - /webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.2)(webpack@5.98.0): resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} engines: {node: '>= 12'} @@ -47651,7 +48521,6 @@ packages: html-webpack-plugin: 5.6.2(@rspack/core@1.3.9)(webpack@5.98.0) typed-assert: 1.0.9 webpack: 5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) - dev: true /webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3)(webpack@5.99.9): resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} @@ -47832,46 +48701,6 @@ packages: - uglify-js dev: true - /webpack@5.95.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4): - resolution: {integrity: sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - dependencies: - '@types/estree': 1.0.6 - '@webassemblyjs/ast': 1.12.1 - '@webassemblyjs/wasm-edit': 1.12.1 - '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.14.0 - acorn-import-attributes: 1.9.5(acorn@8.14.0) - browserslist: 4.24.0 - chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 - es-module-lexer: 1.5.4 - eslint-scope: 5.1.1 - events: 3.3.0 - glob-to-regexp: 0.4.1 - graceful-fs: 4.2.11 - json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 - mime-types: 2.1.35 - neo-async: 2.6.2 - schema-utils: 3.3.0 - tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.95.0) - watchpack: 2.4.2 - webpack-cli: 5.1.4(webpack@5.98.0) - webpack-sources: 3.2.3 - transitivePeerDependencies: - - '@swc/core' - - esbuild - - uglify-js - dev: true - /webpack@5.98.0(@swc/core@1.7.26)(esbuild@0.18.20)(webpack-cli@5.1.4): resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} engines: {node: '>=10.13.0'} @@ -47890,7 +48719,7 @@ packages: acorn: 8.14.0 browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -47900,9 +48729,9 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.0 + schema-utils: 4.3.2 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.98.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.7.26)(esbuild@0.18.20)(webpack@5.98.0) watchpack: 2.4.2 webpack-cli: 5.1.4(webpack@5.98.0) webpack-sources: 3.2.3 @@ -47930,7 +48759,7 @@ packages: acorn: 8.14.0 browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -47940,9 +48769,9 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.0 + schema-utils: 4.3.2 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.98.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.7.26)(esbuild@0.24.0)(webpack@5.98.0) watchpack: 2.4.2 webpack-cli: 5.1.4(webpack@5.98.0) webpack-sources: 3.2.3 @@ -47950,7 +48779,6 @@ packages: - '@swc/core' - esbuild - uglify-js - dev: true /webpack@5.98.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4): resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} @@ -47970,7 +48798,7 @@ packages: acorn: 8.14.0 browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -47980,9 +48808,9 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.0 + schema-utils: 4.3.2 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.98.0) + terser-webpack-plugin: 5.3.14(@swc/core@1.7.26)(esbuild@0.25.0)(webpack@5.98.0) watchpack: 2.4.2 webpack-cli: 5.1.4(webpack@5.98.0) webpack-sources: 3.2.3 @@ -48010,7 +48838,7 @@ packages: acorn: 8.14.0 browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -48051,7 +48879,7 @@ packages: acorn: 8.14.0 browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -48092,7 +48920,7 @@ packages: acorn: 8.14.0 browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.17.1 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -48540,7 +49368,6 @@ packages: /yn@3.1.1: resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} engines: {node: '>=6'} - dev: false /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}