diff --git a/connections/sql/.gitignore b/connections/sql/.gitignore new file mode 100644 index 0000000..ac4f501 --- /dev/null +++ b/connections/sql/.gitignore @@ -0,0 +1,5 @@ +node_modules +dist +yarn.lock +*.log +test/ diff --git a/connections/sql/README.md b/connections/sql/README.md new file mode 100644 index 0000000..a35c78a --- /dev/null +++ b/connections/sql/README.md @@ -0,0 +1,193 @@ +# SQL Database Connector + +A flexible SQL database connector that supports multiple SQL database flavors including MySQL, PostgreSQL, SQLite, and Microsoft SQL Server, with the ability to access multiple databases on the same server. + +## Supported Databases + +- **MySQL** - Popular open-source relational database +- **PostgreSQL** - Advanced open-source object-relational database +- **SQLite** - Lightweight file-based database +- **Microsoft SQL Server (MSSQL)** - Enterprise database solution + +## Key Features + +✨ **Multi-Database Access**: Access all databases on a server (MySQL, MSSQL) +🔄 **Dynamic Database Switching**: Switch between databases during runtime +📊 **Database Discovery**: List all available databases on the server +🔒 **Secure Parameterized Queries**: Prevent SQL injection attacks + +## Configuration + +The SQL connector requires different configuration parameters depending on the database flavor: + +### MySQL / PostgreSQL / MSSQL Configuration + +- `flavor`: Database type (`mysql`, `postgresql`, or `mssql`) +- `host`: Database server hostname or IP address +- `port`: Database server port (default: 3306 for MySQL, 5432 for PostgreSQL, 1433 for MSSQL) +- `database`: Default database name to connect to (optional - can be omitted for server-level access) +- `username`: Database username for authentication +- `password`: Database password for authentication + +### SQLite Configuration + +- `flavor`: `sqlite` +- `filePath`: Path to the SQLite database file + +## Available Tools + +### 1. List Databases + +List all databases available on the server that the user has permissions to access. + +**Arguments:** None + +**Returns:** Array of database names + +**Supported:** MySQL, PostgreSQL, MSSQL (SQLite returns its single file-based database) + +**Example:** +```json +{ + "results": { + "databases": ["myapp_prod", "myapp_dev", "analytics"], + "databaseCount": 3 + } +} +``` + +### 2. Switch Database + +Switch to a different database on the same server (MySQL and MSSQL only). + +**Arguments:** +- `databaseName` (string): Name of the database to switch to + +**Returns:** Success status and database name + +**Note:** PostgreSQL requires database selection at connection time. SQLite doesn't support this. + +### 3. Execute Query + +Execute any SQL query (SELECT, INSERT, UPDATE, DELETE) on the database. + +**Arguments:** +- `query` (string): The SQL query to execute +- `parameters` (string, optional): JSON array of parameters for parameterized queries +- `database` (string, optional): Specific database to use for this query (MySQL/MSSQL only) + +**Example:** +```json +{ + "query": "SELECT * FROM users WHERE id = ?", + "parameters": "[1]", + "database": "myapp_prod" +} +``` + +### 4. List Tables + +List all tables in the database. + +**Arguments:** +- `database` (string, optional): Specific database to list tables from (MySQL/MSSQL only) + +**Returns:** Array of table names in the database + +### 5. Describe Table + +Get the schema/structure of a specific table including column names, types, and constraints. + +**Arguments:** +- `tableName` (string): Name of the table to describe +- `database` (string, optional): Specific database containing the table (MySQL/MSSQL only) + +**Returns:** Detailed column information for the specified table + +## Security Best Practices + +- Always use parameterized queries when including user input to prevent SQL injection +- Store database credentials securely +- Use read-only database users when only read access is needed +- Regularly update database client libraries + +## Example Usage + +### Setting up a MySQL Connection with Multi-Database Access + +1. Configure the connection with: + - Flavor: `mysql` + - Host: `localhost` + - Port: `3306` + - Database: (leave empty or specify a default) + - Username: `appuser` + - Password: `securepassword` + +2. Use the "List Databases" tool to see all available databases +3. Use "List Tables" with a specific database to see tables +4. Use "Execute Query" with the `database` parameter to query any database + +### Working with Multiple Databases + +```javascript +// List all databases +listDatabases() → ["db1", "db2", "db3"] + +// Query a specific database +executeQuery({ + query: "SELECT * FROM users", + database: "db1" +}) + +// Switch to a database for multiple operations +switchDatabase({ databaseName: "db2" }) +listTables() +``` + +### Setting up a SQLite Connection + +1. Configure the connection with: + - Flavor: `sqlite` + - File Path: `/path/to/database.db` + +2. Use the same query tools (SQLite doesn't support multi-database features) + +## Database-Specific Features + +### MySQL +- ✅ List databases +- ✅ Switch databases +- ✅ Per-query database selection +- Connection can access all databases with appropriate permissions + +### PostgreSQL +- ✅ List databases +- ❌ Runtime database switching (requires new connection) +- ❌ Per-query database selection +- Connections are database-specific but can list other databases + +### MSSQL +- ✅ List databases +- ✅ Switch databases +- ✅ Per-query database selection +- Connection can access all databases with appropriate permissions + +### SQLite +- ⚠️ File-based, single database per connection +- ❌ Multi-database features not applicable +- Create separate connections for different database files + +## Dependencies + +This connector uses the following npm packages: + +- `mysql2` - MySQL client +- `pg` - PostgreSQL client +- `better-sqlite3` - SQLite client +- `mssql` - Microsoft SQL Server client + +## Notes + +- Connections are automatically closed after each operation +- All queries support parameterized values for security +- Different SQL flavors may have slight variations in query syntax diff --git a/connections/sql/package.json b/connections/sql/package.json new file mode 100644 index 0000000..eba1589 --- /dev/null +++ b/connections/sql/package.json @@ -0,0 +1,20 @@ +{ + "name": "@open-api-connection/sql", + "version": "1.0.0", + "main": "src/index.ts", + "license": "MIT", + "dependencies": { + "open-api-connection-types": "link:../../types", + "open-api-prisma": "link:../../prisma", + "mysql2": "^3.11.5", + "pg": "^8.13.1", + "better-sqlite3": "^11.8.0", + "mssql": "^11.0.1", + "typescript": "^5.8.3" + }, + "devDependencies": { + "@types/pg": "^8.11.10", + "@types/better-sqlite3": "^7.6.12", + "@types/mssql": "^9.1.5" + } +} diff --git a/connections/sql/src/index.ts b/connections/sql/src/index.ts new file mode 100644 index 0000000..08a5ffb --- /dev/null +++ b/connections/sql/src/index.ts @@ -0,0 +1,79 @@ +import { OpenAPIConnectionDefinition, Tool } from "open-api-connection-types"; +import { executeQuery } from "./queries/execute_query"; +import { listTables } from "./queries/list_tables"; +import { describeTable } from "./queries/describe_table"; +import { listDatabases } from "./queries/list_databases"; +import { switchDatabase } from "./queries/switch_database"; + +export const Connection: OpenAPIConnectionDefinition = { + id: "sql", + displayName: "SQL Database", + userDescription: "Connects to MySQL, PostgreSQL, SQLite, or MSSQL databases with multi-database access", + aiDescription: + "Allows tools to execute queries and manage data across multiple SQL databases (MySQL, PostgreSQL, SQLite, MSSQL) on a server", + configurationArguments: [ + { + id: "flavor", + displayName: "Database Flavor", + userDescription: "Type of SQL database (mysql, postgresql, sqlite, mssql)", + aiDescription: + "The SQL database type to connect to. Options: mysql, postgresql, sqlite, mssql", + type: "string", + }, + { + id: "host", + displayName: "Host", + userDescription: "Database server hostname (not required for SQLite)", + aiDescription: + "The hostname or IP address of the database server. Not required for SQLite.", + type: "string", + }, + { + id: "port", + displayName: "Port", + userDescription: "Database server port (not required for SQLite)", + aiDescription: + "The port number of the database server. Default: 3306 for MySQL, 5432 for PostgreSQL, 1433 for MSSQL. Not required for SQLite.", + type: "number", + }, + { + id: "database", + displayName: "Database Name", + userDescription: "Default database name to connect to (optional for server-level access)", + aiDescription: "The name of the default database/schema to use. Can be omitted to connect at server level and access multiple databases.", + type: "string", + }, + { + id: "username", + displayName: "Username", + userDescription: "Database username (not required for SQLite)", + aiDescription: + "The username for database authentication. Not required for SQLite.", + type: "string", + }, + { + id: "password", + displayName: "Password", + userDescription: "Database password (not required for SQLite)", + aiDescription: + "The password for database authentication. Not required for SQLite.", + type: "string", + }, + { + id: "filePath", + displayName: "File Path", + userDescription: "Path to SQLite database file (only for SQLite)", + aiDescription: + "The file system path to the SQLite database file. Only required when flavor is sqlite.", + type: "string", + }, + ], +}; + +export const Tools: Tool[] = [ + listDatabases, + switchDatabase, + executeQuery, + listTables, + describeTable, +]; diff --git a/connections/sql/src/lib.ts b/connections/sql/src/lib.ts new file mode 100644 index 0000000..706b89a --- /dev/null +++ b/connections/sql/src/lib.ts @@ -0,0 +1,269 @@ +import { KVP } from "open-api-connection-types"; +import mysql from "mysql2/promise"; +import { Pool } from "pg"; +import Database from "better-sqlite3"; +import sql from "mssql"; + +export type SQLFlavor = "mysql" | "postgresql" | "sqlite" | "mssql"; + +export interface SQLConfig { + flavor: SQLFlavor; + host?: string; + port?: number; + database?: string; + username?: string; + password?: string; + filePath?: string; // for SQLite +} + +export interface SQLClient { + query(sql: string, params?: any[]): Promise; + close(): Promise; +} + +class MySQLClient implements SQLClient { + private connection: mysql.Connection | null = null; + + constructor(private config: SQLConfig) {} + + async connect() { + this.connection = await mysql.createConnection({ + host: this.config.host, + port: this.config.port || 3306, + database: this.config.database, + user: this.config.username, + password: this.config.password, + }); + } + + async query(sql: string, params?: any[]): Promise { + if (!this.connection) { + await this.connect(); + } + const [rows] = await this.connection!.execute(sql, params); + return rows; + } + + async close(): Promise { + if (this.connection) { + await this.connection.end(); + this.connection = null; + } + } +} + +class PostgreSQLClient implements SQLClient { + private pool: Pool | null = null; + + constructor(private config: SQLConfig) {} + + getPool() { + if (!this.pool) { + this.pool = new Pool({ + host: this.config.host, + port: this.config.port || 5432, + database: this.config.database, + user: this.config.username, + password: this.config.password, + }); + } + return this.pool; + } + + async query(sql: string, params?: any[]): Promise { + const pool = this.getPool(); + // PostgreSQL uses $1, $2, etc. for parameters, so we need to convert ? to $n + let pgSql = sql; + if (params && params.length > 0) { + let index = 0; + pgSql = sql.replace(/\?/g, () => `$${++index}`); + } + const result = await pool.query(pgSql, params); + return result.rows; + } + + async close(): Promise { + if (this.pool) { + await this.pool.end(); + this.pool = null; + } + } +} + +class SQLiteClient implements SQLClient { + private db: Database.Database | null = null; + + constructor(private config: SQLConfig) {} + + getDB() { + if (!this.db) { + if (!this.config.filePath) { + throw new Error("SQLite requires a filePath configuration"); + } + this.db = new Database(this.config.filePath); + } + return this.db; + } + + async query(sql: string, params?: any[]): Promise { + const db = this.getDB(); + const isSelect = sql.trim().toLowerCase().startsWith("select"); + if (isSelect) { + return db.prepare(sql).all(params); + } else { + const stmt = db.prepare(sql); + const result = stmt.run(params); + return result; + } + } + + async close(): Promise { + if (this.db) { + this.db.close(); + this.db = null; + } + } +} + +class MSSQLClient implements SQLClient { + private pool: sql.ConnectionPool | null = null; + + constructor(private config: SQLConfig) {} + + async getPool() { + if (!this.pool) { + this.pool = await sql.connect({ + server: this.config.host || "", + port: this.config.port || 1433, + database: this.config.database, + user: this.config.username, + password: this.config.password, + options: { + encrypt: true, + trustServerCertificate: true, + }, + }); + } + return this.pool; + } + + async query(sqlQuery: string, params?: any[]): Promise { + const pool = await this.getPool(); + const request = pool.request(); + + // MSSQL uses named parameters (@param0, @param1, etc.) + let mssqlQuery = sqlQuery; + if (params && params.length > 0) { + params.forEach((param, index) => { + request.input(`param${index}`, param); + }); + // Replace ? placeholders with @param0, @param1, etc. + let paramIndex = 0; + mssqlQuery = sqlQuery.replace(/\?/g, () => `@param${paramIndex++}`); + } + + const result = await request.query(mssqlQuery); + return result.recordset; + } + + async close(): Promise { + if (this.pool) { + await this.pool.close(); + this.pool = null; + } + } +} + +export function getSQLConfig(config: KVP): SQLConfig { + const { flavor, host, port, database, username, password, filePath } = config; + + if (!flavor) { + throw new Error("SQL flavor configuration is required"); + } + + const sqlConfig: SQLConfig = { + flavor: flavor as SQLFlavor, + host: host as string, + port: port ? parseInt(port as string, 10) : undefined, + database: database as string, + username: username as string, + password: password as string, + filePath: filePath as string, + }; + + return sqlConfig; +} + +export function getSQLClient(config: KVP): SQLClient { + const sqlConfig = getSQLConfig(config); + + switch (sqlConfig.flavor) { + case "mysql": + return new MySQLClient(sqlConfig); + case "postgresql": + return new PostgreSQLClient(sqlConfig); + case "sqlite": + return new SQLiteClient(sqlConfig); + case "mssql": + return new MSSQLClient(sqlConfig); + default: + throw new Error(`Unsupported SQL flavor: ${sqlConfig.flavor}`); + } +} + +/** + * Validates and sanitizes a database identifier (database name, table name, etc.) + * Prevents SQL injection by only allowing alphanumeric, underscore, and hyphen characters + */ +export function validateIdentifier(identifier: string, identifierType: string = "identifier"): string { + if (!identifier || typeof identifier !== 'string') { + throw new Error(`${identifierType} must be a non-empty string`); + } + + // Only allow alphanumeric characters, underscores, and hyphens + // This prevents SQL injection while supporting common naming conventions + if (!/^[a-zA-Z0-9_-]+$/.test(identifier)) { + throw new Error( + `Invalid ${identifierType}: "${identifier}". Only alphanumeric characters, underscores, and hyphens are allowed.` + ); + } + + return identifier; +} + +/** + * Switches the active database context for flavors that support it + * @param client - The SQL client to execute the switch command + * @param flavor - The SQL flavor (mysql, postgresql, sqlite, mssql) + * @param databaseName - The name of the database to switch to + * @throws Error if the flavor doesn't support database switching or if the database name is invalid + */ +export async function switchToDatabase( + client: SQLClient, + flavor: string, + databaseName: string +): Promise { + // Validate database name to prevent SQL injection + const safeDatabaseName = validateIdentifier(databaseName, "database name"); + + switch (flavor) { + case "mysql": + // MySQL uses backticks for identifier quoting + await client.query(`USE \`${safeDatabaseName}\``); + break; + case "mssql": + // MSSQL uses square brackets for identifier quoting + await client.query(`USE [${safeDatabaseName}]`); + break; + case "postgresql": + throw new Error( + "PostgreSQL does not support runtime database switching. Create a new connection with the desired database." + ); + case "sqlite": + throw new Error( + "SQLite does not support database switching. Create a new connection for a different database file." + ); + default: + throw new Error(`Unsupported SQL flavor for database switching: ${flavor}`); + } +} diff --git a/connections/sql/src/queries/describe_table.ts b/connections/sql/src/queries/describe_table.ts new file mode 100644 index 0000000..81f987f --- /dev/null +++ b/connections/sql/src/queries/describe_table.ts @@ -0,0 +1,100 @@ +import { Tool } from "open-api-connection-types"; +import { getSQLClient, switchToDatabase } from "../lib"; + +export const describeTable: Tool = { + id: "describeTable", + displayName: "Describe Table Schema", + userDescription: "Gets the schema/structure of a specific table", + aiDescription: + "Retrieves detailed information about a table's columns, including names, types, and constraints.", + arguments: [ + { + id: "tableName", + displayName: "Table Name", + type: "string", + userDescription: "Name of the table to describe", + aiDescription: "The name of the database table to get schema information for", + }, + { + id: "database", + displayName: "Database Name", + type: "string", + userDescription: "Specific database containing the table (optional)", + aiDescription: + "Optional database name where the table resides. If not specified, uses the configured database. Only supported for MySQL and MSSQL.", + }, + ], + async handler(config, args) { + const client = getSQLClient(config); + const { flavor } = config; + const { tableName, database } = args; + + try { + // Switch database if specified (only for MySQL and MSSQL) + if (database) { + await switchToDatabase(client, flavor as string, database as string); + } + + let query: string; + let params: any[] | undefined; + + switch (flavor) { + case "mysql": + query = `DESCRIBE ${tableName}`; + break; + case "postgresql": + // PostgreSQL uses $1 instead of ? - we'll let the client convert it + query = `SELECT column_name, data_type, is_nullable, column_default + FROM information_schema.columns + WHERE table_name = ?`; + params = [tableName]; + break; + case "sqlite": + query = `PRAGMA table_info(${tableName})`; + break; + case "mssql": + // MSSQL will convert ? to @param0 in the client + query = `SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_NAME = ?`; + params = [tableName]; + break; + default: + throw new Error(`Unsupported SQL flavor: ${flavor}`); + } + + const results = await client.query(query, params); + await client.close(); + + return { + results: { + success: true, + tableName, + columns: results, + columnCount: Array.isArray(results) ? results.length : 0, + }, + log: { + message: `Retrieved schema for table: ${tableName}`, + data: { + tableName, + columnCount: Array.isArray(results) ? results.length : 0, + }, + }, + }; + } catch (error) { + await client.close(); + return { + results: { + success: false, + tableName, + columns: [], + error: error instanceof Error ? error.message : "Unknown error", + }, + log: { + message: `Failed to describe table: ${tableName}`, + data: error, + }, + }; + } + }, +}; diff --git a/connections/sql/src/queries/execute_query.ts b/connections/sql/src/queries/execute_query.ts new file mode 100644 index 0000000..70f0b52 --- /dev/null +++ b/connections/sql/src/queries/execute_query.ts @@ -0,0 +1,96 @@ +import { Tool } from "open-api-connection-types"; +import { getSQLClient, switchToDatabase } from "../lib"; + +export const executeQuery: Tool = { + id: "executeQuery", + displayName: "Execute SQL Query", + userDescription: "Executes a SQL query on the configured database", + aiDescription: + "Executes a SQL query (SELECT, INSERT, UPDATE, DELETE) and returns the results. Supports parameterized queries for safety.", + arguments: [ + { + id: "query", + displayName: "SQL Query", + type: "string", + userDescription: "The SQL query to execute", + aiDescription: + "The SQL query string to execute. Use parameter placeholders (?) for values to prevent SQL injection.", + }, + { + id: "parameters", + displayName: "Query Parameters", + type: "string", + userDescription: "JSON array of query parameters (optional)", + aiDescription: + "Optional JSON array of parameters to bind to the query placeholders. Helps prevent SQL injection.", + }, + { + id: "database", + displayName: "Database Name", + type: "string", + userDescription: "Specific database to use for this query (optional)", + aiDescription: + "Optional database name to use for this query. If specified, switches to this database before executing the query. Only supported for MySQL and MSSQL.", + }, + ], + async handler(config, args) { + const client = getSQLClient(config); + const { query, parameters, database } = args; + const { flavor } = config; + + try { + let params: any[] | undefined; + if (parameters) { + try { + params = JSON.parse(parameters as string); + } catch (e) { + throw new Error("Invalid parameters format. Expected JSON array."); + } + } + + // Switch database if specified (only for MySQL and MSSQL) + if (database) { + await switchToDatabase(client, flavor as string, database as string); + } + + const results = await client.query(query as string, params); + await client.close(); + + // Handle different result formats from different databases + let rowCount = 0; + if (Array.isArray(results)) { + rowCount = results.length; + } else if (results && typeof results === 'object') { + // SQLite insert/update/delete returns { changes, lastInsertRowid } + rowCount = results.changes || results.affectedRows || results.rowCount || 0; + } + + return { + results: { + success: true, + data: results, + rowCount, + }, + log: { + message: `Query executed successfully`, + data: { + query, + rowCount: Array.isArray(results) ? results.length : results.affectedRows || 0, + }, + }, + }; + } catch (error) { + await client.close(); + return { + results: { + success: false, + error: error instanceof Error ? error.message : "Unknown error", + }, + log: { + message: "Failed to execute query", + data: error, + }, + }; + } + }, +}; diff --git a/connections/sql/src/queries/list_databases.ts b/connections/sql/src/queries/list_databases.ts new file mode 100644 index 0000000..6cea5f5 --- /dev/null +++ b/connections/sql/src/queries/list_databases.ts @@ -0,0 +1,88 @@ +import { Tool } from "open-api-connection-types"; +import { getSQLClient, getSQLConfig } from "../lib"; + +export const listDatabases: Tool = { + id: "listDatabases", + displayName: "List Databases", + userDescription: "Lists all databases available on the server", + aiDescription: + "Retrieves a list of all databases on the server that the user has permission to access. Different SQL flavors use different system queries.", + arguments: [], + async handler(config, args) { + const client = getSQLClient(config); + const { flavor } = config; + + try { + let query: string; + + switch (flavor) { + case "mysql": + query = "SHOW DATABASES"; + break; + case "postgresql": + query = "SELECT datname FROM pg_database WHERE datistemplate = false"; + break; + case "sqlite": + // SQLite doesn't have the concept of multiple databases on a server + const sqlConfig = getSQLConfig(config); + const dbName = sqlConfig.filePath ? sqlConfig.filePath.split('/').pop() : 'database'; + return { + results: { + success: true, + databases: [dbName], + databaseCount: 1, + note: "SQLite uses file-based databases. Only the configured database file is accessible.", + }, + log: { + message: "SQLite database listed", + data: { database: dbName }, + }, + }; + case "mssql": + query = "SELECT name FROM sys.databases WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')"; + break; + default: + throw new Error(`Unsupported SQL flavor: ${flavor}`); + } + + const results = await client.query(query); + await client.close(); + + // Normalize results to always return array of database names + let databases: string[] = []; + if (Array.isArray(results)) { + if (results.length > 0) { + const firstKey = Object.keys(results[0])[0]; + databases = results.map((row: any) => row[firstKey]); + } + } + + return { + results: { + success: true, + databases, + databaseCount: databases.length, + }, + log: { + message: `Found ${databases.length} databases on server`, + data: { + databaseCount: databases.length, + }, + }, + }; + } catch (error) { + await client.close(); + return { + results: { + success: false, + databases: [], + error: error instanceof Error ? error.message : "Unknown error", + }, + log: { + message: "Failed to list databases", + data: error, + }, + }; + } + }, +}; diff --git a/connections/sql/src/queries/list_tables.ts b/connections/sql/src/queries/list_tables.ts new file mode 100644 index 0000000..450c7e4 --- /dev/null +++ b/connections/sql/src/queries/list_tables.ts @@ -0,0 +1,90 @@ +import { Tool } from "open-api-connection-types"; +import { getSQLClient, switchToDatabase } from "../lib"; + +export const listTables: Tool = { + id: "listTables", + displayName: "List Database Tables", + userDescription: "Lists all tables in the configured database", + aiDescription: + "Retrieves a list of all tables in the database. Different SQL flavors use different system queries.", + arguments: [ + { + id: "database", + displayName: "Database Name", + type: "string", + userDescription: "Specific database to list tables from (optional)", + aiDescription: + "Optional database name to list tables from. If not specified, uses the configured database. Only supported for MySQL and MSSQL.", + }, + ], + async handler(config, args) { + const client = getSQLClient(config); + const { flavor } = config; + const { database } = args; + + try { + // Switch database if specified (only for MySQL and MSSQL) + if (database) { + await switchToDatabase(client, flavor as string, database as string); + } + + let query: string; + + switch (flavor) { + case "mysql": + query = "SHOW TABLES"; + break; + case "postgresql": + query = "SELECT tablename FROM pg_catalog.pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema')"; + break; + case "sqlite": + query = "SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%'"; + break; + case "mssql": + query = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'"; + break; + default: + throw new Error(`Unsupported SQL flavor: ${flavor}`); + } + + const results = await client.query(query); + await client.close(); + + // Normalize results to always return array of table names + let tables: string[] = []; + if (Array.isArray(results)) { + if (results.length > 0) { + const firstKey = Object.keys(results[0])[0]; + tables = results.map((row: any) => row[firstKey]); + } + } + + return { + results: { + success: true, + tables, + tableCount: tables.length, + }, + log: { + message: `Found ${tables.length} tables in database`, + data: { + tableCount: tables.length, + }, + }, + }; + } catch (error) { + await client.close(); + return { + results: { + success: false, + tables: [], + error: error instanceof Error ? error.message : "Unknown error", + }, + log: { + message: "Failed to list tables", + data: error, + }, + }; + } + }, +}; diff --git a/connections/sql/src/queries/switch_database.ts b/connections/sql/src/queries/switch_database.ts new file mode 100644 index 0000000..05cb179 --- /dev/null +++ b/connections/sql/src/queries/switch_database.ts @@ -0,0 +1,101 @@ +import { Tool } from "open-api-connection-types"; +import { getSQLClient, validateIdentifier } from "../lib"; + +export const switchDatabase: Tool = { + id: "switchDatabase", + displayName: "Switch Database", + userDescription: "Switches to a different database on the same server", + aiDescription: + "Changes the active database context to a different database on the same server. Not applicable for SQLite.", + arguments: [ + { + id: "databaseName", + displayName: "Database Name", + type: "string", + userDescription: "Name of the database to switch to", + aiDescription: "The name of the database to use for subsequent queries", + }, + ], + async handler(config, args) { + const { flavor } = config; + const { databaseName } = args; + + // SQLite doesn't support switching databases + if (flavor === "sqlite") { + return { + results: { + success: false, + error: "SQLite uses file-based databases and does not support switching databases. Create a new connection for a different database file.", + }, + log: { + message: "Database switching not supported for SQLite", + data: { flavor }, + }, + }; + } + + const client = getSQLClient(config); + + try { + // Validate database name to prevent SQL injection + const safeDatabaseName = validateIdentifier(databaseName as string, "database name"); + + let query: string; + + switch (flavor) { + case "mysql": + // MySQL uses backticks for identifier quoting + query = `USE \`${safeDatabaseName}\``; + break; + case "postgresql": + // PostgreSQL doesn't support USE statement, connections are database-specific + await client.close(); + return { + results: { + success: false, + error: "PostgreSQL requires database selection at connection time. Create a new connection with the desired database.", + suggestion: "Update the connection configuration to specify the target database.", + }, + log: { + message: "PostgreSQL does not support runtime database switching", + data: { flavor, databaseName }, + }, + }; + case "mssql": + // MSSQL uses square brackets for identifier quoting + query = `USE [${safeDatabaseName}]`; + break; + default: + throw new Error(`Unsupported SQL flavor: ${flavor}`); + } + + await client.query(query); + await client.close(); + + return { + results: { + success: true, + database: safeDatabaseName, + }, + log: { + message: `Switched to database: ${safeDatabaseName}`, + data: { + database: safeDatabaseName, + }, + }, + }; + } catch (error) { + await client.close(); + return { + results: { + success: false, + error: error instanceof Error ? error.message : "Unknown error", + }, + log: { + message: `Failed to switch to database: ${databaseName}`, + data: error, + }, + }; + } + }, +}; diff --git a/connections/sql/tsconfig.json b/connections/sql/tsconfig.json new file mode 100644 index 0000000..6f11bc1 --- /dev/null +++ b/connections/sql/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "commonjs", + "lib": ["ES2020"], + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] +} diff --git a/prisma/prisma/.gitignore b/prisma/prisma/.gitignore new file mode 100644 index 0000000..792963d --- /dev/null +++ b/prisma/prisma/.gitignore @@ -0,0 +1 @@ +testdb* diff --git a/server/package.json b/server/package.json index 6873589..6555047 100644 --- a/server/package.json +++ b/server/package.json @@ -16,6 +16,7 @@ "@open-api-connection/monday": "file:../connections/monday", "@open-api-connection/jira": "file:../connections/jira", "@open-api-connection/rss": "file:../connections/rss", + "@open-api-connection/sql": "file:../connections/sql", "@prisma/client": "^6.8.2", "@radix-ui/react-accordion": "^1.2.11", "@radix-ui/react-alert-dialog": "^1.1.14", diff --git a/server/src/lib/connection.ts b/server/src/lib/connection.ts index 0fb30b9..5204a9c 100644 --- a/server/src/lib/connection.ts +++ b/server/src/lib/connection.ts @@ -22,6 +22,10 @@ import { Connection as RSSConnection, Tools as RSSTools, } from "@open-api-connection/rss"; +import { + Connection as SQLConnection, + Tools as SQLTools, +} from "@open-api-connection/sql"; const CONNECTIONS_PER_PAGE = 20; @@ -32,6 +36,7 @@ export async function getAllConnections() { RSSConnection, JiraConnection, MondayConnection, + SQLConnection, ]; return Connections; } @@ -50,6 +55,7 @@ export async function getTools(id: string) { [MondayConnection.id]: MondayTools, [JiraConnection.id]: JiraTools, [RSSConnection.id]: RSSTools, + [SQLConnection.id]: SQLTools, }; return Tools[id]; diff --git a/server/yarn.lock b/server/yarn.lock index 488c873..fe4c471 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -20,6 +20,180 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" +"@azure-rest/core-client@^2.3.3": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@azure-rest/core-client/-/core-client-2.5.1.tgz#4c1346d6698d7a40252869799958928ac98babe8" + integrity sha512-EHaOXW0RYDKS5CFffnixdyRPak5ytiCtU7uXDcP/uiY+A6jFRwNGzzJBiznkCzvi5EYpY+YWinieqHb0oY916A== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.10.0" + "@azure/core-rest-pipeline" "^1.22.0" + "@azure/core-tracing" "^1.3.0" + "@typespec/ts-http-runtime" "^0.3.0" + tslib "^2.6.2" + +"@azure/abort-controller@^2.0.0", "@azure/abort-controller@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" + integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA== + dependencies: + tslib "^2.6.2" + +"@azure/core-auth@^1.10.0", "@azure/core-auth@^1.3.0", "@azure/core-auth@^1.7.2", "@azure/core-auth@^1.9.0": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.10.1.tgz#68a17fa861ebd14f6fd314055798355ef6bedf1b" + integrity sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-util" "^1.13.0" + tslib "^2.6.2" + +"@azure/core-client@^1.10.0", "@azure/core-client@^1.5.0", "@azure/core-client@^1.9.2": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.10.1.tgz#83d78f97d647ab22e6811a7a68bb4223e7a1d019" + integrity sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.10.0" + "@azure/core-rest-pipeline" "^1.22.0" + "@azure/core-tracing" "^1.3.0" + "@azure/core-util" "^1.13.0" + "@azure/logger" "^1.3.0" + tslib "^2.6.2" + +"@azure/core-http-compat@^2.2.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@azure/core-http-compat/-/core-http-compat-2.3.1.tgz#2182e39a31c062800d4e3ad69bcf0109d87713dc" + integrity sha512-az9BkXND3/d5VgdRRQVkiJb2gOmDU8Qcq4GvjtBmDICNiQ9udFmDk4ZpSB5Qq1OmtDJGlQAfBaS4palFsazQ5g== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-client" "^1.10.0" + "@azure/core-rest-pipeline" "^1.22.0" + +"@azure/core-lro@^2.7.2": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.7.2.tgz#787105027a20e45c77651a98b01a4d3b01b75a08" + integrity sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-util" "^1.2.0" + "@azure/logger" "^1.0.0" + tslib "^2.6.2" + +"@azure/core-paging@^1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.6.2.tgz#40d3860dc2df7f291d66350b2cfd9171526433e7" + integrity sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA== + dependencies: + tslib "^2.6.2" + +"@azure/core-rest-pipeline@^1.17.0", "@azure/core-rest-pipeline@^1.19.0", "@azure/core-rest-pipeline@^1.22.0", "@azure/core-rest-pipeline@^1.8.0": + version "1.22.2" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz#7e14f21d25ab627cd07676adb5d9aacd8e2e95cc" + integrity sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.10.0" + "@azure/core-tracing" "^1.3.0" + "@azure/core-util" "^1.13.0" + "@azure/logger" "^1.3.0" + "@typespec/ts-http-runtime" "^0.3.0" + tslib "^2.6.2" + +"@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.2.0", "@azure/core-tracing@^1.3.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.3.1.tgz#e971045c901ea9c110616b0e1db272507781d5f6" + integrity sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ== + dependencies: + tslib "^2.6.2" + +"@azure/core-util@^1.10.0", "@azure/core-util@^1.11.0", "@azure/core-util@^1.13.0", "@azure/core-util@^1.2.0": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.13.1.tgz#6dff2ff6d3c9c6430c6f4d3b3e65de531f10bafe" + integrity sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@typespec/ts-http-runtime" "^0.3.0" + tslib "^2.6.2" + +"@azure/identity@^4.2.1": + version "4.13.0" + resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.13.0.tgz#b2be63646964ab59e0dc0eadca8e4f562fc31f96" + integrity sha512-uWC0fssc+hs1TGGVkkghiaFkkS7NkTxfnCH+Hdg+yTehTpMcehpok4PgUKKdyCH+9ldu6FhiHRv84Ntqj1vVcw== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.9.0" + "@azure/core-client" "^1.9.2" + "@azure/core-rest-pipeline" "^1.17.0" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.11.0" + "@azure/logger" "^1.0.0" + "@azure/msal-browser" "^4.2.0" + "@azure/msal-node" "^3.5.0" + open "^10.1.0" + tslib "^2.2.0" + +"@azure/keyvault-common@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@azure/keyvault-common/-/keyvault-common-2.0.0.tgz#91e50df01d9bfa8f55f107bb9cdbc57586b2b2a4" + integrity sha512-wRLVaroQtOqfg60cxkzUkGKrKMsCP6uYXAOomOIysSMyt1/YM0eUn9LqieAWM8DLcU4+07Fio2YGpPeqUbpP9w== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-client" "^1.5.0" + "@azure/core-rest-pipeline" "^1.8.0" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.10.0" + "@azure/logger" "^1.1.4" + tslib "^2.2.0" + +"@azure/keyvault-keys@^4.4.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@azure/keyvault-keys/-/keyvault-keys-4.10.0.tgz#75476e8f28580dc23bbc9dac6d1654e131d6efd5" + integrity sha512-eDT7iXoBTRZ2n3fLiftuGJFD+yjkiB1GNqzU2KbY1TLYeXeSPVTVgn2eJ5vmRTZ11978jy2Kg2wI7xa9Tyr8ag== + dependencies: + "@azure-rest/core-client" "^2.3.3" + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.9.0" + "@azure/core-http-compat" "^2.2.0" + "@azure/core-lro" "^2.7.2" + "@azure/core-paging" "^1.6.2" + "@azure/core-rest-pipeline" "^1.19.0" + "@azure/core-tracing" "^1.2.0" + "@azure/core-util" "^1.11.0" + "@azure/keyvault-common" "^2.0.0" + "@azure/logger" "^1.1.4" + tslib "^2.8.1" + +"@azure/logger@^1.0.0", "@azure/logger@^1.1.4", "@azure/logger@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.3.0.tgz#5501cf85d4f52630602a8cc75df76568c969a827" + integrity sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA== + dependencies: + "@typespec/ts-http-runtime" "^0.3.0" + tslib "^2.6.2" + +"@azure/msal-browser@^4.2.0": + version "4.28.1" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-4.28.1.tgz#511fe1bc4ad56ede95dba2023b520b3707b8cf95" + integrity sha512-al2u2fTchbClq3L4C1NlqLm+vwKfhYCPtZN2LR/9xJVaQ4Mnrwf5vANvuyPSJHcGvw50UBmhuVmYUAhTEetTpA== + dependencies: + "@azure/msal-common" "15.14.1" + +"@azure/msal-common@15.14.1": + version "15.14.1" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-15.14.1.tgz#5e2ddd44cd087289ed373165888c4fb204488817" + integrity sha512-IkzF7Pywt6QKTS0kwdCv/XV8x8JXknZDvSjj/IccooxnP373T5jaadO3FnOrbWo3S0UqkfIDyZNTaQ/oAgRdXw== + +"@azure/msal-node@^3.5.0": + version "3.8.6" + resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-3.8.6.tgz#db0e3b34466e4965d764842f74bd647f8b28ca35" + integrity sha512-XTmhdItcBckcVVTy65Xp+42xG4LX5GK+9AqAsXPXk4IqUNv+LyQo5TMwNjuFYBfAB2GTG9iSQGk+QLc03vhf3w== + dependencies: + "@azure/msal-common" "15.14.1" + jsonwebtoken "^9.0.0" + uuid "^8.3.0" + "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.27.1": version "7.27.1" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" @@ -744,6 +918,11 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" +"@js-joda/core@^5.6.1": + version "5.6.5" + resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-5.6.5.tgz#c766894b49eb8044480b91625fb7dc370e8182ef" + integrity sha512-3zwefSMwHpu8iVUW8YYz227sIv6UFqO31p1Bf1ZH/Vom7CmNyUsXjDBlnNzcuhmOL1XfxZ3nvND42kR23XlbcQ== + "@mdx-js/react@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-3.1.0.tgz#c4522e335b3897b9a845db1dbdd2f966ae8fb0ed" @@ -848,36 +1027,43 @@ dependencies: google-auth-library "^9.15.1" googleapis "^149.0.0" - open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-fc649976-5797-45e7-bc8b-1174c7437e26-1768894142377/node_modules/types" - open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-fc649976-5797-45e7-bc8b-1174c7437e26-1768894142377/node_modules/prisma" + open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-48acde82-ec17-4bbe-bef7-687c6a6bd4d6-1768953867281/node_modules/types" + open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-48acde82-ec17-4bbe-bef7-687c6a6bd4d6-1768953867281/node_modules/prisma" typescript "^5.8.3" -"@open-api-connection/monday@file:../connections/monday": +"@open-api-connection/jira@file:../connections/jira": version "1.0.0" dependencies: - open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-monday-1.0.0-b48095d8-6761-4586-8d2f-bf245892c088-1768894142397/node_modules/types" - open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-monday-1.0.0-b48095d8-6761-4586-8d2f-bf245892c088-1768894142397/node_modules/prisma" - open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-874d6e82-5783-4c78-9a0c-7f35b5d2c9c5-1768894130563/node_modules/types" - open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-874d6e82-5783-4c78-9a0c-7f35b5d2c9c5-1768894130563/node_modules/prisma" + open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-jira-1.0.0-87030eb5-d292-4c15-81d2-2f33e2dd2011-1768953867304/node_modules/types" + open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-jira-1.0.0-87030eb5-d292-4c15-81d2-2f33e2dd2011-1768953867304/node_modules/prisma" typescript "^5.8.3" -"@open-api-connection/jira@file:../connections/jira": +"@open-api-connection/monday@file:../connections/monday": version "1.0.0" dependencies: - open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-jira-1.0.0-fb8155af-cbaf-48f1-8bce-89a24ffdc9e8-1768894130583/node_modules/types" - open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-jira-1.0.0-fb8155af-cbaf-48f1-8bce-89a24ffdc9e8-1768894130583/node_modules/prisma" - open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-8c21045d-0a8b-48d5-883b-1a4e4481071e-1768894149543/node_modules/types" - open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-google-1.0.0-8c21045d-0a8b-48d5-883b-1a4e4481071e-1768894149543/node_modules/prisma" + open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-monday-1.0.0-014a95ff-1a1f-487c-8087-5f30fb51c438-1768953867302/node_modules/types" + open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-monday-1.0.0-014a95ff-1a1f-487c-8087-5f30fb51c438-1768953867302/node_modules/prisma" typescript "^5.8.3" "@open-api-connection/rss@file:../connections/rss": version "1.0.0" dependencies: - open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-rss-1.0.0-39825cb4-7725-4f4f-8e8e-ba5edec5fb7c-1768894149563/node_modules/types" - open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-rss-1.0.0-39825cb4-7725-4f4f-8e8e-ba5edec5fb7c-1768894149563/node_modules/prisma" + open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-rss-1.0.0-252a63be-93fa-4336-8d6c-8b1b9b855ab0-1768953867306/node_modules/types" + open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-rss-1.0.0-252a63be-93fa-4336-8d6c-8b1b9b855ab0-1768953867306/node_modules/prisma" rss-parser "^3.13.0" typescript "^5.8.3" +"@open-api-connection/sql@file:../connections/sql": + version "1.0.0" + dependencies: + better-sqlite3 "^11.8.0" + mssql "^11.0.1" + mysql2 "^3.11.5" + open-api-connection-types "link:../../../../.cache/yarn/v6/npm-@open-api-connection-sql-1.0.0-a9d20953-c9d5-4e69-a2ea-6c0edf90a081-1768953867309/node_modules/types" + open-api-prisma "link:../../../../.cache/yarn/v6/npm-@open-api-connection-sql-1.0.0-a9d20953-c9d5-4e69-a2ea-6c0edf90a081-1768953867309/node_modules/prisma" + pg "^8.13.1" + typescript "^5.8.3" + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -1911,6 +2097,11 @@ dependencies: tslib "^2.8.0" +"@tediousjs/connection-string@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@tediousjs/connection-string/-/connection-string-0.5.0.tgz#9b3d858c040aac6bdf5584bf45370cef5b6522b4" + integrity sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ== + "@testing-library/dom@10.4.0", "@testing-library/dom@^10.4.0": version "10.4.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.4.0.tgz#82a9d9462f11d240ecadbf406607c6ceeeff43a8" @@ -2069,6 +2260,13 @@ resolved "https://registry.yarnpkg.com/@types/mdx/-/mdx-2.0.13.tgz#68f6877043d377092890ff5b298152b0a21671bd" integrity sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw== +"@types/node@*", "@types/node@>=18": + version "25.0.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.0.9.tgz#81ce3579ddf67cae812a9d49c8a0ab90c82e7782" + integrity sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw== + dependencies: + undici-types "~7.16.0" + "@types/node@^20": version "20.17.50" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.50.tgz#d2640af991fc839ba746f799516fc6a4e47ebe50" @@ -2088,6 +2286,13 @@ dependencies: csstype "^3.0.2" +"@types/readable-stream@^4.0.0": + version "4.0.23" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.23.tgz#fcd0f7472f45ceb43154f08f0083ccd1c76e53ce" + integrity sha512-wwXrtQvbMHxCbBgjHaMGEmImFTQxxpfMOR/ZoQnXxB1woqkUbdLGFDgauo00Py9IudiaqSeiBiulSV9i6XIPig== + dependencies: + "@types/node" "*" + "@types/resolve@^1.20.2": version "1.20.6" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.20.6.tgz#e6e60dad29c2c8c206c026e6dd8d6d1bdda850b8" @@ -2179,6 +2384,15 @@ "@typescript-eslint/types" "8.32.1" eslint-visitor-keys "^4.2.0" +"@typespec/ts-http-runtime@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz#1048df6182b02bec8962a9cffd1c5ee1a129541f" + integrity sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg== + dependencies: + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + tslib "^2.6.2" + "@unrs/resolver-binding-darwin-arm64@1.7.2": version "1.7.2" resolved "https://registry.yarnpkg.com/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.7.2.tgz#12eed2bd9865d1f55bb79d76072330b6032441d7" @@ -2407,6 +2621,13 @@ loupe "^3.1.2" tinyrainbow "^1.2.0" +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" @@ -2417,6 +2638,11 @@ acorn@^8.14.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== +agent-base@^7.1.0: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + agent-base@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" @@ -2619,6 +2845,11 @@ available-typed-arrays@^1.0.7: dependencies: possible-typed-array-names "^1.0.0" +aws-ssl-profiles@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz#157dd77e9f19b1d123678e93f120e6f193022641" + integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g== + axe-core@^4.10.0: version "4.10.3" resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.10.3.tgz#04145965ac7894faddbac30861e5d8f11bfd14fc" @@ -2634,7 +2865,7 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.0: +base64-js@^1.3.0, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== @@ -2646,6 +2877,14 @@ better-opn@^3.0.2: dependencies: open "^8.0.4" +better-sqlite3@^11.8.0: + version "11.10.0" + resolved "https://registry.yarnpkg.com/better-sqlite3/-/better-sqlite3-11.10.0.tgz#2b1b14c5acd75a43fd84d12cc291ea98cef57d98" + integrity sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ== + dependencies: + bindings "^1.5.0" + prebuild-install "^7.1.1" + bignumber.js@^9.0.0: version "9.3.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.0.tgz#bdba7e2a4c1a2eba08290e8dcad4f36393c92acd" @@ -2656,6 +2895,32 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +bl@^6.0.11: + version "6.1.6" + resolved "https://registry.yarnpkg.com/bl/-/bl-6.1.6.tgz#b40f3aea6963c6742616a957efb742c4fb87ecbb" + integrity sha512-jLsPgN/YSvPUg9UX0Kd73CXpm2Psg9FxMeCSXnk3WBO3CMT10JMwijubhGfHCnFu6TPn1ei3b975dxv7K2pWVg== + dependencies: + "@types/readable-stream" "^4.0.0" + buffer "^6.0.3" + inherits "^2.0.4" + readable-stream "^4.2.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2698,6 +2963,29 @@ buffer-equal-constant-time@^1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== + dependencies: + run-applescript "^7.0.0" + busboy@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" @@ -2798,6 +3086,11 @@ chokidar@^3.6.0: optionalDependencies: fsevents "~2.3.2" +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + chromatic@^11.15.0: version "11.28.3" resolved "https://registry.yarnpkg.com/chromatic/-/chromatic-11.28.3.tgz#a9bed824ba6c3dbfa8aa328da3806a3c9245f279" @@ -2858,6 +3151,11 @@ color@^4.2.3: color-convert "^2.0.1" color-string "^1.9.0" +commander@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906" + integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + commander@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" @@ -3019,21 +3317,53 @@ debug@^3.2.7: dependencies: ms "^2.1.1" +debug@^4.3.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + decimal.js-light@^2.4.1: version "2.5.1" resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + deep-eql@^5.0.1: version "5.0.2" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-5.0.2.tgz#4b756d8d770a9257300825d52a2c2cff99c3a341" integrity sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q== +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== +default-browser-id@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.1.tgz#f7a7ccb8f5104bf8e0f71ba3b1ccfa5eafdb21e8" + integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== + +default-browser@^5.2.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.4.0.tgz#b55cf335bb0b465dd7c961a02cd24246aa434287" + integrity sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -3048,6 +3378,11 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== + define-properties@^1.1.3, define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" @@ -3057,11 +3392,21 @@ define-properties@^1.1.3, define-properties@^1.2.1: has-property-descriptors "^1.0.0" object-keys "^1.1.1" +denque@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1" + integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw== + dequal@^2.0.2, dequal@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== +detect-libc@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.1.2.tgz#689c5dcdc1900ef5583a4cb9f6d7b473742074ad" + integrity sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ== + detect-libc@^2.0.3, detect-libc@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" @@ -3168,6 +3513,13 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + enhanced-resolve@^5.10.0: version "5.18.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz#728ab082f8b7b6836de51f1637aab5d3b9568faf" @@ -3594,11 +3946,26 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + eventemitter3@^4.0.1: version "4.0.7" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +expand-template@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" + integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== + expect-type@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/expect-type/-/expect-type-1.2.1.tgz#af76d8b357cf5fa76c41c09dafb79c549e75f71f" @@ -3670,6 +4037,11 @@ file-entry-cache@^8.0.0: dependencies: flat-cache "^4.0.0" +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + filesize@^10.0.12: version "10.1.6" resolved "https://registry.yarnpkg.com/filesize/-/filesize-10.1.6.tgz#31194da825ac58689c0bce3948f33ce83aabd361" @@ -3718,6 +4090,11 @@ foreground-child@^3.1.0: cross-spawn "^7.0.6" signal-exit "^4.0.1" +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + fsevents@2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" @@ -3770,6 +4147,13 @@ gcp-metadata@^6.1.0: google-logging-utils "^0.0.2" json-bigint "^1.0.0" +generate-function@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" + integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ== + dependencies: + is-property "^1.0.2" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3820,6 +4204,11 @@ get-tsconfig@^4.10.0: dependencies: resolve-pkg-maps "^1.0.0" +github-from-package@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -3972,7 +4361,15 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -https-proxy-agent@^7.0.1: +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1: version "7.0.6" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== @@ -3980,6 +4377,25 @@ https-proxy-agent@^7.0.1: agent-base "^7.1.2" debug "4" +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +iconv-lite@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.2.tgz#d0bdeac3f12b4835b7359c2ad89c422a4d1cc72e" + integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^5.2.0: version "5.3.2" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" @@ -4013,11 +4429,16 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -inherits@^2.0.3: +inherits@^2.0.3, inherits@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + input-otp@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/input-otp/-/input-otp-1.4.2.tgz#f4d3d587d0f641729e55029b3b8c4870847f4f07" @@ -4133,6 +4554,11 @@ is-docker@^2.0.0, is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4167,6 +4593,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" @@ -4185,6 +4618,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-property@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + is-regex@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" @@ -4263,6 +4701,13 @@ is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + isarray@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" @@ -4335,6 +4780,11 @@ jiti@^1.21.6: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.7.tgz#9dd81043424a3d28458b193d965f0d18a2300ba9" integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== +js-md4@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/js-md4/-/js-md4-0.3.2.tgz#cd3b3dc045b0c404556c81ddb5756c23e59d7cf5" + integrity sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -4400,6 +4850,22 @@ jsonfile@^6.1.0: optionalDependencies: graceful-fs "^4.1.6" +jsonwebtoken@^9.0.0: + version "9.0.3" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" + integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== + dependencies: + jws "^4.0.1" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + "jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.3.5: version "3.3.5" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz#4766bd05a8e2a11af222becd19e15575e52a853a" @@ -4410,7 +4876,7 @@ jsonfile@^6.1.0: object.assign "^4.1.4" object.values "^1.1.6" -jwa@^2.0.0: +jwa@^2.0.0, jwa@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== @@ -4427,6 +4893,14 @@ jws@^4.0.0: jwa "^2.0.0" safe-buffer "^5.0.1" +jws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" + integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== + dependencies: + jwa "^2.0.1" + safe-buffer "^5.0.1" + keyv@^4.5.4: version "4.5.4" resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" @@ -4476,16 +4950,56 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +long@^5.2.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/long/-/long-5.3.2.tgz#1d84463095999262d7d7b7f8bfd4a8cc55167f83" + integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA== + loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -4510,6 +5024,11 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru.min@^1.0.0, lru.min@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/lru.min/-/lru.min-1.1.3.tgz#c8c3d001dfb4cbe5b8d1f4bea207d4a320e5d76f" + integrity sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q== + lucide-react@^0.511.0: version "0.511.0" resolved "https://registry.yarnpkg.com/lucide-react/-/lucide-react-0.511.0.tgz#1dfef3065c725ac83f5fe0a6f02d1e0b0c36e641" @@ -4580,6 +5099,11 @@ micromatch@^4.0.4, micromatch@^4.0.8: braces "^3.0.3" picomatch "^2.3.1" +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + min-indent@^1.0.0, min-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" @@ -4599,7 +5123,7 @@ minimatch@^9.0.4: dependencies: brace-expansion "^2.0.1" -minimist@^1.2.0, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== @@ -4609,6 +5133,11 @@ minimist@^1.2.0, minimist@^1.2.6: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + module-alias@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/module-alias/-/module-alias-2.2.3.tgz#ec2e85c68973bda6ab71ce7c93b763ec96053221" @@ -4624,6 +5153,33 @@ ms@^2.1.1, ms@^2.1.3: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +mssql@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/mssql/-/mssql-11.0.1.tgz#a32ab7763bfbb3f5d970e47563df3911fc04e21d" + integrity sha512-KlGNsugoT90enKlR8/G36H0kTxPthDhmtNUCwEHvgRza5Cjpjoj+P2X6eMpFUDN7pFrJZsKadL4x990G8RBE1w== + dependencies: + "@tediousjs/connection-string" "^0.5.0" + commander "^11.0.0" + debug "^4.3.3" + rfdc "^1.3.0" + tarn "^3.0.2" + tedious "^18.2.1" + +mysql2@^3.11.5: + version "3.16.1" + resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.16.1.tgz#cbe294573792fe4f059000f23d38e16011c83c61" + integrity sha512-b75qsDB3ieYEzMsT1uRGsztM/sy6vWPY40uPZlVVl8eefAotFCoS7jaDB5DxDNtlW5kdVGd9jptSpkvujNxI2A== + dependencies: + aws-ssl-profiles "^1.1.1" + denque "^2.1.0" + generate-function "^2.3.1" + iconv-lite "^0.7.0" + long "^5.2.1" + lru.min "^1.0.0" + named-placeholders "^1.1.6" + seq-queue "^0.0.5" + sqlstring "^2.3.2" + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -4633,16 +5189,33 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" +named-placeholders@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.6.tgz#c50c6920b43f258f59c16add1e56654f5cc02bb5" + integrity sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w== + dependencies: + lru.min "^1.1.0" + nanoid@^3.3.6, nanoid@^3.3.8: version "3.3.11" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.11.tgz#4f4f112cefbe303202f2199838128936266d185b" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== +napi-build-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== + napi-postinstall@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/napi-postinstall/-/napi-postinstall-0.2.4.tgz#419697d0288cb524623e422f919624f22a5e4028" integrity sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg== +native-duplexpair@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/native-duplexpair/-/native-duplexpair-1.0.0.tgz#7899078e64bf3c8a3d732601b3d40ff05db58fa0" + integrity sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4683,6 +5256,13 @@ next@^15.3.2: "@next/swc-win32-x64-msvc" "15.3.2" sharp "^0.34.1" +node-abi@^3.3.0: + version "3.87.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.87.0.tgz#423e28fea5c2f195fddd98acded9938c001ae6dd" + integrity sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ== + dependencies: + semver "^7.3.5" + node-fetch@^2.6.9: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" @@ -4771,6 +5351,13 @@ object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: define-properties "^1.2.1" es-object-atoms "^1.0.0" +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + "open-api-connection-types@link:../types": version "0.0.0" uid "" @@ -4789,6 +5376,16 @@ object.values@^1.1.6, object.values@^1.2.0, object.values@^1.2.1: version "0.0.0" uid "" +open@^10.1.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-10.2.0.tgz#b9d855be007620e80b6fb05fac98141fe62db73c" + integrity sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + wsl-utils "^0.1.0" + open@^8.0.4: version "8.4.2" resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" @@ -4878,6 +5475,62 @@ pathval@^2.0.0: resolved "https://registry.yarnpkg.com/pathval/-/pathval-2.0.0.tgz#7e2550b422601d4f6b8e26f1301bc8f15a741a25" integrity sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA== +pg-cloudflare@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.3.0.tgz#386035d4bfcf1a7045b026f8b21acf5353f14d65" + integrity sha512-6lswVVSztmHiRtD6I8hw4qP/nDm1EJbKMRhf3HCYaqud7frGysPv7FYJ5noZQdhQtN2xJnimfMtvQq21pdbzyQ== + +pg-connection-string@^2.10.1: + version "2.10.1" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.10.1.tgz#34e0bf60333551ae1e76caf47cce633a5b2e4b70" + integrity sha512-iNzslsoeSH2/gmDDKiyMqF64DATUCWj3YJ0wP14kqcsf2TUklwimd+66yYojKwZCA7h2yRNLGug71hCBA2a4sw== + +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== + +pg-pool@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.11.0.tgz#adf9a6651a30c839f565a3cc400110949c473d69" + integrity sha512-MJYfvHwtGp870aeusDh+hg9apvOe2zmpZJpyt+BMtzUWlVqbhFmMK6bOBXLBUPd7iRtIF9fZplDc7KrPN3PN7w== + +pg-protocol@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.11.0.tgz#2502908893edaa1e8c0feeba262dd7b40b317b53" + integrity sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g== + +pg-types@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" + integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== + dependencies: + pg-int8 "1.0.1" + postgres-array "~2.0.0" + postgres-bytea "~1.0.0" + postgres-date "~1.0.4" + postgres-interval "^1.1.0" + +pg@^8.13.1: + version "8.17.2" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.17.2.tgz#8df8c039c36bb97016be276094fc4991e8683963" + integrity sha512-vjbKdiBJRqzcYw1fNU5KuHyYvdJ1qpcQg1CeBrHFqV1pWgHeVR6j/+kX0E1AAXfyuLUGY1ICrN2ELKA/z2HWzw== + dependencies: + pg-connection-string "^2.10.1" + pg-pool "^3.11.0" + pg-protocol "^1.11.0" + pg-types "2.2.0" + pgpass "1.0.5" + optionalDependencies: + pg-cloudflare "^1.3.0" + +pgpass@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== + dependencies: + split2 "^4.1.0" + picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" @@ -4991,6 +5644,46 @@ postcss@^8, postcss@^8.4.47, postcss@^8.5.3: picocolors "^1.1.1" source-map-js "^1.2.1" +postgres-array@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" + integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== + +postgres-bytea@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.1.tgz#c40b3da0222c500ff1e51c5d7014b60b79697c7a" + integrity sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ== + +postgres-date@~1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" + integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== + +postgres-interval@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" + integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== + dependencies: + xtend "^4.0.0" + +prebuild-install@^7.1.1: + version "7.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== + dependencies: + detect-libc "^2.0.0" + expand-template "^2.0.3" + github-from-package "0.0.0" + minimist "^1.2.3" + mkdirp-classic "^0.5.3" + napi-build-utils "^2.0.0" + node-abi "^3.3.0" + pump "^3.0.0" + rc "^1.2.7" + simple-get "^4.0.0" + tar-fs "^2.0.0" + tunnel-agent "^0.6.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -5035,6 +5728,14 @@ prop-types@^15.6.2, prop-types@^15.8.1: object-assign "^4.1.1" react-is "^16.13.1" +pump@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.3.tgz#151d979f1a29668dc0025ec589a455b53282268d" + integrity sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -5052,6 +5753,16 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + react-confetti@^6.1.0: version "6.4.0" resolved "https://registry.yarnpkg.com/react-confetti/-/react-confetti-6.4.0.tgz#e9416b5b3c8baf6f0bb1c5a8e1e3c89babd2c837" @@ -5175,6 +5886,26 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" +readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^4.2.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -5281,6 +6012,11 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== +rfdc@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== + rollup@^4.34.9: version "4.41.0" resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.41.0.tgz#17476835d2967759e3ffebe5823ed15fc4b7d13e" @@ -5318,6 +6054,11 @@ rss-parser@^3.13.0: entities "^2.0.3" xml2js "^0.5.0" +run-applescript@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.1.0.tgz#2e9e54c4664ec3106c5b5630e249d3d6595c4911" + integrity sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5336,7 +6077,7 @@ safe-array-concat@^1.1.3: has-symbols "^1.1.0" isarray "^2.0.5" -safe-buffer@^5.0.1: +safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -5358,6 +6099,11 @@ safe-regex-test@^1.0.3, safe-regex-test@^1.1.0: es-errors "^1.3.0" is-regex "^1.2.1" +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + sax@>=0.6.0: version "1.4.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.4.tgz#f29c2bba80ce5b86f4343b4c2be9f2b96627cf8b" @@ -5373,11 +6119,21 @@ semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.3.5, semver@^7.5.4: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + semver@^7.5.3, semver@^7.6.0, semver@^7.6.2, semver@^7.6.3, semver@^7.7.1, semver@^7.7.2: version "7.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== +seq-queue@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" + integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q== + set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" @@ -5531,6 +6287,20 @@ signal-exit@^4.0.1: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -5567,6 +6337,21 @@ source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +split2@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +sprintf-js@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" + integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== + +sqlstring@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c" + integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg== + stable-hash@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stable-hash/-/stable-hash-0.0.5.tgz#94e8837aaeac5b4d0f631d2972adef2924b40269" @@ -5689,6 +6474,13 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -5734,6 +6526,11 @@ strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + styled-jsx@5.1.6: version "5.1.6" resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.6.tgz#83b90c077e6c6a80f7f5e8781d0f311b2fe41499" @@ -5809,6 +6606,48 @@ tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.2.tgz#ab4984340d30cb9989a490032f086dbb8b56d872" integrity sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg== +tar-fs@^2.0.0: + version "2.1.4" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930" + integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +tarn@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693" + integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ== + +tedious@^18.2.1: + version "18.6.2" + resolved "https://registry.yarnpkg.com/tedious/-/tedious-18.6.2.tgz#c7da62ae11b0961177559b1c4f1c4d8dfa75ec2c" + integrity sha512-g7jC56o3MzLkE3lHkaFe2ZdOVFBahq5bsB60/M4NYUbocw/MCrS89IOEQUFr+ba6pb8ZHczZ/VqCyYeYq0xBAg== + dependencies: + "@azure/core-auth" "^1.7.2" + "@azure/identity" "^4.2.1" + "@azure/keyvault-keys" "^4.4.0" + "@js-joda/core" "^5.6.1" + "@types/node" ">=18" + bl "^6.0.11" + iconv-lite "^0.6.3" + js-md4 "^0.3.2" + native-duplexpair "^1.0.0" + sprintf-js "^1.1.3" + test-exclude@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-7.0.1.tgz#20b3ba4906ac20994e275bbcafd68d510264c2a2" @@ -5926,11 +6765,18 @@ tsconfig-paths@^4.2.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.4.0, tslib@^2.8.0: +tslib@^2.0.0, tslib@^2.0.1, tslib@^2.1.0, tslib@^2.2.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + tween-functions@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tween-functions/-/tween-functions-1.2.0.tgz#1ae3a50e7c60bb3def774eac707acbca73bbc3ff" @@ -6013,6 +6859,11 @@ undici-types@~6.19.2: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== + universalify@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" @@ -6091,7 +6942,7 @@ use-sync-external-store@^1.5.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz#55122e2a3edd2a6c106174c27485e0fd59bcfca0" integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== -util-deprecate@^1.0.2: +util-deprecate@^1.0.1, util-deprecate@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -6107,6 +6958,11 @@ util@^0.12.5: is-typed-array "^1.1.3" which-typed-array "^1.1.2" +uuid@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + uuid@^9.0.0, uuid@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" @@ -6311,11 +7167,23 @@ wrap-ansi@^8.1.0: string-width "^5.0.1" strip-ansi "^7.0.1" +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + ws@^8.18.1, ws@^8.2.3: version "8.18.2" resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== +wsl-utils@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/wsl-utils/-/wsl-utils-0.1.0.tgz#8783d4df671d4d50365be2ee4c71917a0557baab" + integrity sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw== + dependencies: + is-wsl "^3.1.0" + xml2js@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" @@ -6329,6 +7197,11 @@ xmlbuilder@~11.0.0: resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"