From 39c9e2a448a6960708b5f89df386177540b89c8d Mon Sep 17 00:00:00 2001 From: afscrome Date: Sat, 12 Sep 2026 12:06:28 +0100 Subject: [PATCH] remove MinIO integration --- CODEOWNERS | 10 - CommunityToolkit.Aspire.slnx | 9 - Directory.Packages.props | 3 +- README.md | 11 - ...kit.Aspire.Hosting.Minio.ApiService.csproj | 13 - .../Program.cs | 78 - .../Properties/launchSettings.json | 23 - .../appsettings.json | 9 - .../apphost.mts | 60 - .../aspire.config.json | 21 - .../eslint.config.mjs | 17 - .../package-lock.json | 2034 ----------------- .../package.json | 28 - .../.minio.sys/buckets/.heal/mrf/list.bin | Bin 4 -> 0 bytes .../.minio.sys/config/config.json/xl.meta | Bin 9811 -> 0 bytes .../.minio.sys/config/iam/format.json/xl.meta | Bin 434 -> 0 bytes .../minio-bind/.minio.sys/format.json | 1 - .../minio-bind/.minio.sys/pool.bin/xl.meta | Bin 479 -> 0 bytes .../tsconfig.json | 20 - ...oolkit.Aspire.Hosting.Minio.AppHost.csproj | 17 - .../Program.cs | 16 - .../Properties/launchSettings.json | 29 - .../appsettings.json | 9 - ...spire.Hosting.Minio.ServiceDefaults.csproj | 21 - .../Extensions.cs | 117 - ...mmunityToolkit.Aspire.Hosting.Minio.csproj | 16 - .../MinioBuilderExtensions.cs | 185 -- .../MinioContainerImageTags.cs | 11 - .../MinioContainerResource.cs | 106 - .../README.md | 40 - .../CommunityToolkit.Aspire.Hosting.Minio.cs | 60 - ...ommunityToolkit.Aspire.Minio.Client.csproj | 23 - .../MinioClientBuilderExtensionMethods.cs | 101 - .../MinioClientSettings.cs | 129 -- .../README.md | 122 - .../CommunityToolkit.Aspire.Minio.Client.cs | 50 - .../AppHostTests.cs | 70 - ...yToolkit.Aspire.Hosting.Minio.Tests.csproj | 14 - .../MinioFunctionalTests.cs | 244 -- .../MinioPublicApiTests.cs | 112 - .../ResourceCreationTests.cs | 48 - .../TypeScriptAppHostTests.cs | 18 - ...tyToolkit.Aspire.Minio.Client.Tests.csproj | 18 - .../ConfigurationTests.cs | 115 - .../ConformanceTests.cs | 92 - .../MinioClientPublicApiTests.cs | 36 - .../MinioContainerFeature.cs | 51 - 47 files changed, 1 insertion(+), 4206 deletions(-) delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/CommunityToolkit.Aspire.Hosting.Minio.ApiService.csproj delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Program.cs delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Properties/launchSettings.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/appsettings.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/apphost.mts delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/eslint.config.mjs delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package-lock.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/buckets/.heal/mrf/list.bin delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/config/config.json/xl.meta delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/config/iam/format.json/xl.meta delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/format.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/pool.bin/xl.meta delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/tsconfig.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/CommunityToolkit.Aspire.Hosting.Minio.AppHost.csproj delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Program.cs delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Properties/launchSettings.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/appsettings.json delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults.csproj delete mode 100644 examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/Extensions.cs delete mode 100644 src/CommunityToolkit.Aspire.Hosting.Minio/CommunityToolkit.Aspire.Hosting.Minio.csproj delete mode 100644 src/CommunityToolkit.Aspire.Hosting.Minio/MinioBuilderExtensions.cs delete mode 100644 src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerImageTags.cs delete mode 100644 src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerResource.cs delete mode 100644 src/CommunityToolkit.Aspire.Hosting.Minio/README.md delete mode 100644 src/CommunityToolkit.Aspire.Hosting.Minio/api/CommunityToolkit.Aspire.Hosting.Minio.cs delete mode 100644 src/CommunityToolkit.Aspire.Minio.Client/CommunityToolkit.Aspire.Minio.Client.csproj delete mode 100644 src/CommunityToolkit.Aspire.Minio.Client/MinioClientBuilderExtensionMethods.cs delete mode 100644 src/CommunityToolkit.Aspire.Minio.Client/MinioClientSettings.cs delete mode 100644 src/CommunityToolkit.Aspire.Minio.Client/README.md delete mode 100644 src/CommunityToolkit.Aspire.Minio.Client/api/CommunityToolkit.Aspire.Minio.Client.cs delete mode 100644 tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/AppHostTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/CommunityToolkit.Aspire.Hosting.Minio.Tests.csproj delete mode 100644 tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioFunctionalTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioPublicApiTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/ResourceCreationTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/TypeScriptAppHostTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Minio.Client.Tests/CommunityToolkit.Aspire.Minio.Client.Tests.csproj delete mode 100644 tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConfigurationTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConformanceTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioClientPublicApiTests.cs delete mode 100644 tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioContainerFeature.cs diff --git a/CODEOWNERS b/CODEOWNERS index ff03bb461..8cc85d0da 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -107,16 +107,6 @@ /tests/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.Tests/ @Alirexaa /examples/sqlserver-ext/ @Alirexaa -# CommunityToolkit.Aspire.Minio.Client -# CommunityToolkit.Aspire.Hosting.Minio - -/examples/minio/ @Harold-Morgan -/src/CommunityToolkit.Aspire.Hosting.Minio/ @Harold-Morgan -/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/ @Harold-Morgan - -/src/CommunityToolkit.Aspire.Minio.Client/ @Harold-Morgan -/tests/CommunityToolkit.Aspire.Minio.Client.Tests/ @Harold-Morgan - # CommunityToolkit.Aspire.SurrealDb # CommunityToolkit.Aspire.Hosting.SurrealDb diff --git a/CommunityToolkit.Aspire.slnx b/CommunityToolkit.Aspire.slnx index 76b216e8f..4321af28a 100644 --- a/CommunityToolkit.Aspire.slnx +++ b/CommunityToolkit.Aspire.slnx @@ -129,11 +129,6 @@ - - - - - @@ -286,7 +281,6 @@ - @@ -322,7 +316,6 @@ - @@ -368,7 +361,6 @@ - @@ -403,7 +395,6 @@ - diff --git a/Directory.Packages.props b/Directory.Packages.props index 11cff422f..6503ee409 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -93,7 +93,6 @@ - @@ -166,4 +165,4 @@ - \ No newline at end of file + diff --git a/README.md b/README.md index 761435053..c7662348a 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,6 @@ This repository contains the source code for the Aspire Community Toolkit, a col | - **Learn More**: [`Hosting.MailPit`](src/CommunityToolkit.Aspire.Hosting.MailPit/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Hosting.MailPit](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.MailPit)](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MailPit/)
- Preview 📦: [![CommunityToolkit.Aspire.Hosting.MailPit](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.MailPit?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MailPit/absoluteLatest) | An Aspire component leveraging the MailPit container. | | - **Learn More**: [`Hosting.McpInspector`](src/CommunityToolkit.Aspire.Hosting.McpInspector/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Hosting.McpInspector](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.McpInspector)](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.McpInspector/)
- Preview 📦: [![CommunityToolkit.Aspire.Hosting.McpInspector](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.McpInspector?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.McpInspector/absoluteLatest) | An Aspire hosting integration to run the MCP Inspector against a Model Context Protocol (MCP) server. | | - **Learn More**: [`Hosting.Meilisearch`](src/CommunityToolkit.Aspire.Hosting.Meilisearch/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Hosting.Meilisearch](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Meilisearch)](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Meilisearch/)
- Preview 📦: [![CommunityToolkit.Aspire.Hosting.Meilisearch](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.Meilisearch?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Meilisearch/absoluteLatest) | Meilisearch support for Aspire. | -| - **Learn More**: [`Hosting.Minio`](src/CommunityToolkit.Aspire.Hosting.Minio/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Hosting.Minio](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Minio)](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Minio/)
- Preview 📦: [![CommunityToolkit.Aspire.Hosting.Minio](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.Minio?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Minio/absoluteLatest) | ⚠️ **Deprecated** — An Aspire hosting integration for MinIO. DEPRECATED: The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version. | | - **Learn More**: [`Hosting.MongoDB.Extensions`](src/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Hosting.MongoDB.Extensions](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions)](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions/)
- Preview 📦: [![CommunityToolkit.Aspire.Hosting.MongoDB.Extensions](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MongoDB.Extensions/absoluteLatest) | An Aspire hosting integration for extending MongoDB resources with additional management tooling. | | - **Learn More**: [`Hosting.Mosquitto`](src/CommunityToolkit.Aspire.Hosting.Mosquitto/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Hosting.Mosquitto](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Mosquitto)](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Mosquitto/)
- Preview 📦: [![CommunityToolkit.Aspire.Hosting.Mosquitto](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.Mosquitto?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Mosquitto/absoluteLatest) | An Aspire hosting package for hosting the Mosquitto MQTT broker. | | - **Learn More**: [`Hosting.MySql.Extensions`](src/CommunityToolkit.Aspire.Hosting.MySql.Extensions/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Hosting.MySql.Extensions](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.MySql.Extensions)](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MySql.Extensions/)
- Preview 📦: [![CommunityToolkit.Aspire.Hosting.MySql.Extensions](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.MySql.Extensions?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MySql.Extensions/absoluteLatest) | An Aspire hosting integration for extending MySQL resources with additional management tooling. | @@ -86,7 +85,6 @@ This repository contains the source code for the Aspire Community Toolkit, a col | - **Learn More**: [`Meilisearch`](src/CommunityToolkit.Aspire.Meilisearch/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Meilisearch](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Meilisearch)](https://nuget.org/packages/CommunityToolkit.Aspire.Meilisearch/)
- Preview 📦: [![CommunityToolkit.Aspire.Meilisearch](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Meilisearch?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Meilisearch/absoluteLatest) | A Meilisearch client that integrates with Aspire, including health checks, logging, and telemetry. | | - **Learn More**: [`Microsoft.Data.Sqlite`](src/CommunityToolkit.Aspire.Microsoft.Data.Sqlite/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Microsoft.Data.Sqlite](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Microsoft.Data.Sqlite)](https://nuget.org/packages/CommunityToolkit.Aspire.Microsoft.Data.Sqlite/)
- Preview 📦: [![CommunityToolkit.Aspire.Microsoft.Data.Sqlite](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Microsoft.Data.Sqlite?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Microsoft.Data.Sqlite/absoluteLatest) | An Aspire client integration for the Microsoft.Data.Sqlite.Core package. | | - **Learn More**: [`Microsoft.EntityFrameworkCore.Sqlite`](src/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite)](https://nuget.org/packages/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite/)
- Preview 📦: [![CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Microsoft.EntityFrameworkCore.Sqlite/absoluteLatest) | An Aspire client integration for the Microsoft.EntityFrameworkCore.Sqlite package. | -| - **Learn More**: [`Minio.Client`](src/CommunityToolkit.Aspire.Minio.Client/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Minio.Client](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Minio.Client)](https://nuget.org/packages/CommunityToolkit.Aspire.Minio.Client/)
- Preview 📦: [![CommunityToolkit.Aspire.Minio.Client](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Minio.Client?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Minio.Client/absoluteLatest) | ⚠️ **Deprecated** — An Aspire client integration for MinIO. DEPRECATED: The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version. | | - **Learn More**: [`OllamaSharp`](src/CommunityToolkit.Aspire.OllamaSharp/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.OllamaSharp](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.OllamaSharp)](https://nuget.org/packages/CommunityToolkit.Aspire.OllamaSharp/)
- Preview 📦: [![CommunityToolkit.Aspire.OllamaSharp](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.OllamaSharp?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.OllamaSharp/absoluteLatest) | An Aspire client integration for the OllamaSharp library. | | - **Learn More**: [`Posta`](src/CommunityToolkit.Aspire.Posta/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.Posta](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Posta)](https://nuget.org/packages/CommunityToolkit.Aspire.Posta/)
- Preview 📦: [![CommunityToolkit.Aspire.Posta](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Posta?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.Posta/absoluteLatest) | An Aspire client integration for the Posta email delivery platform. | | - **Learn More**: [`RavenDB.Client`](src/CommunityToolkit.Aspire.RavenDB.Client/README.md)
- Stable 📦: [![CommunityToolkit.Aspire.RavenDB.Client](https://img.shields.io/nuget/v/CommunityToolkit.Aspire.RavenDB.Client)](https://nuget.org/packages/CommunityToolkit.Aspire.RavenDB.Client/)
- Preview 📦: [![CommunityToolkit.Aspire.RavenDB.Client](https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.RavenDB.Client?label=nuget%20(preview))](https://nuget.org/packages/CommunityToolkit.Aspire.RavenDB.Client/absoluteLatest) | An Aspire client integration for the RavenDB.Client library. | @@ -327,15 +325,6 @@ This project is supported by the [.NET Foundation](https://dotnetfoundation.org) [mysql-ext-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MySql.Extensions/ [mysql-ext-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.MySql.Extensions?label=nuget%20(preview) [mysql-ext-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.MySql.Extensions/absoluteLatest -[minio-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-minio -[minio-hosting-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Minio -[minio-hosting-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Minio/ -[minio-hosting-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.Minio?label=nuget%20(preview) -[minio-hosting-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Minio/absoluteLatest -[minio-client-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Minio.Client -[minio-client-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Minio.Client/ -[minio-client-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Minio.Client?label=nuget%20(preview) -[minio-client-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Minio.Client/absoluteLatest [rustfs-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-rustfs [rustfs-hosting-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.RustFs [rustfs-hosting-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.RustFs/ diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/CommunityToolkit.Aspire.Hosting.Minio.ApiService.csproj b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/CommunityToolkit.Aspire.Hosting.Minio.ApiService.csproj deleted file mode 100644 index 50718ea78..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/CommunityToolkit.Aspire.Hosting.Minio.ApiService.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - enable - enable - - - - - - - - diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Program.cs b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Program.cs deleted file mode 100644 index c673c0a82..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Program.cs +++ /dev/null @@ -1,78 +0,0 @@ -#pragma warning disable CS0618 // Type or member is obsolete -using Microsoft.AspNetCore.Mvc; -using Minio; -using Minio.DataModel.Args; - -var builder = WebApplication.CreateBuilder(args); - -builder.AddServiceDefaults(); - -builder.AddMinioClient("minio"); - -var app = builder.Build(); - -app.MapDefaultEndpoints(); - -app.MapGet("/", () => "Hello World!"); - -app.MapPut("/buckets/{bucketName}", async (string bucketName, [FromServices] IMinioClient minioClient) => -{ - var mbArgs = new MakeBucketArgs() - .WithBucket(bucketName); - await minioClient.MakeBucketAsync(mbArgs); - - return Results.Ok(); -}); - -app.MapGet("/buckets/{bucketName}", async (string bucketName, [FromServices] IMinioClient minioClient) => -{ - var exists = await minioClient.BucketExistsAsync(new BucketExistsArgs().WithBucket(bucketName)); - - if(exists) - return Results.Ok(); - return Results.NotFound(); -}); - -app.MapPost("/buckets/{bucketName}/{fileName}/upload", - async ([FromRoute] string bucketName, - [FromRoute] string fileName, - HttpRequest request, - [FromServices] IMinioClient minioClient) => - { - var memstream = new MemoryStream(); - - await request.Body.CopyToAsync(memstream); - - var length = memstream.Length; - memstream.Seek(0, SeekOrigin.Begin); - - var putObjectArgs = new PutObjectArgs() - .WithObject(fileName) - .WithBucket(bucketName) - .WithStreamData(memstream) - .WithObjectSize(length); - - await minioClient.PutObjectAsync(putObjectArgs); - - return Results.Ok(); - }).DisableAntiforgery(); - -app.MapGet("/buckets/{bucketName}/{fileName}/download", - async (string bucketName, string fileName, [FromServices] IMinioClient minioClient) => - { - var memStream = new MemoryStream(); - - var getObjectArgs = new GetObjectArgs() - .WithBucket(bucketName) - .WithObject(fileName) - .WithCallbackStream(stream => - { - stream.CopyToAsync(memStream); - }); - - await minioClient.GetObjectAsync(getObjectArgs); - - return Results.File(memStream.ToArray(), "application/octet-stream", fileName); - }); - -app.Run(); \ No newline at end of file diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Properties/launchSettings.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Properties/launchSettings.json deleted file mode 100644 index 340900999..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/Properties/launchSettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:52323", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:7042;http://localhost:52323", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/appsettings.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/appsettings.json deleted file mode 100644 index 10f68b8c8..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ApiService/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "AllowedHosts": "*" -} diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/apphost.mts b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/apphost.mts deleted file mode 100644 index 549be5078..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/apphost.mts +++ /dev/null @@ -1,60 +0,0 @@ -import { createBuilder } from "./.aspire/modules/aspire.mjs"; - -const builder = await createBuilder(); - -const rootUser = await builder.addParameter("minio-root-user", { - value: "minioadmin", -}); -const rootPassword = await builder.addParameter("minio-root-password", { - value: "minio-password", - secret: true, -}); -const overrideUser = await builder.addParameter("override-root-user", { - value: "override-admin", -}); -const overridePassword = await builder.addParameter("override-root-password", { - value: "override-password", - secret: true, -}); - -const minio = await builder.addMinioContainer("minio", { - rootUser, - rootPassword, - port: 9000, -}); - -const minioDefaults = await builder.addMinioContainer("minio-defaults"); -const minioBindMount = await builder.addMinioContainer("minio-bind-mount", { - rootUser: overrideUser, - rootPassword: overridePassword, -}); - -await minio.withHostPort({ port: 9100 }).withDataVolume({ name: "minio-data" }); -await minioDefaults.withUserName(overrideUser).withPassword(overridePassword); -await minioDefaults.withDataVolume(); -await minioBindMount.withDataBindMount("./runtime-data/minio-bind"); - -const _minioRootUser = await minio.rootUser.get(); -const _minioPasswordParameter = await minio.passwordParameter.get(); -const _minioPrimaryEndpoint = await minio.primaryEndpoint(); -const _minioHost = await minio.host(); -const _minioPort = await minio.port(); -const _minioUri = await minio.uriExpression(); -const _minioConnectionString = await minio.connectionStringExpression(); - -const _defaultsPrimaryEndpoint = await minioDefaults.primaryEndpoint(); -const _defaultsHost = await minioDefaults.host(); -const _defaultsPort = await minioDefaults.port(); -const _defaultsUri = await minioDefaults.uriExpression(); -const _defaultsConnectionString = - await minioDefaults.connectionStringExpression(); - -const _bindMountPrimaryEndpoint = await minioBindMount.primaryEndpoint(); -const _bindMountHost = await minioBindMount.host(); -const _bindMountPort = await minioBindMount.port(); -const _bindMountUri = await minioBindMount.uriExpression(); -const _bindMountConnectionString = - await minioBindMount.connectionStringExpression(); - -await builder.build().run(); - diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json deleted file mode 100644 index b304928e9..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/aspire.config.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "appHost": { - "path": "apphost.mts", - "language": "typescript/nodejs" - }, - "sdk": { - "version": "13.5.0" - }, - "profiles": { - "https": { - "applicationUrl": "https://localhost:29750;http://localhost:28931", - "environmentVariables": { - "ASPIRE_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:10975", - "ASPIRE_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:13319" - } - } - }, - "packages": { - "CommunityToolkit.Aspire.Hosting.Minio": "../../../src/CommunityToolkit.Aspire.Hosting.Minio/CommunityToolkit.Aspire.Hosting.Minio.csproj" - } -} diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/eslint.config.mjs b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/eslint.config.mjs deleted file mode 100644 index 001a84a17..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/eslint.config.mjs +++ /dev/null @@ -1,17 +0,0 @@ -// @ts-check - -import { defineConfig } from 'eslint/config'; -import tseslint from 'typescript-eslint'; - -export default defineConfig({ - files: ['apphost.mts'], - extends: [tseslint.configs.base], - languageOptions: { - parserOptions: { - projectService: true, - }, - }, - rules: { - '@typescript-eslint/no-floating-promises': ['error', { checkThenables: true }], - }, -}); diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package-lock.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package-lock.json deleted file mode 100644 index 720440f7f..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package-lock.json +++ /dev/null @@ -1,2034 +0,0 @@ -{ - "name": "validationapphost", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "validationapphost", - "version": "1.0.0", - "dependencies": { - "vscode-jsonrpc": "^8.2.0" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "eslint": "^10.0.3", - "nodemon": "^3.1.14", - "tsx": "^4.23.1", - "typescript": "^5.9.3", - "typescript-eslint": "^8.57.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", - "integrity": "sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.1.tgz", - "integrity": "sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.1.tgz", - "integrity": "sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.1.tgz", - "integrity": "sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.1.tgz", - "integrity": "sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.1.tgz", - "integrity": "sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.1.tgz", - "integrity": "sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.1.tgz", - "integrity": "sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.1.tgz", - "integrity": "sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.1.tgz", - "integrity": "sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.1.tgz", - "integrity": "sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.1.tgz", - "integrity": "sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.1.tgz", - "integrity": "sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.1.tgz", - "integrity": "sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.1.tgz", - "integrity": "sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.1.tgz", - "integrity": "sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.1.tgz", - "integrity": "sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.1.tgz", - "integrity": "sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.1.tgz", - "integrity": "sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.1.tgz", - "integrity": "sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.1.tgz", - "integrity": "sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.1.tgz", - "integrity": "sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.1.tgz", - "integrity": "sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.1.tgz", - "integrity": "sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.1.tgz", - "integrity": "sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.1.tgz", - "integrity": "sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/config-array": { - "version": "0.23.3", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz", - "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.3", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz", - "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.1.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/core": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz", - "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/object-schema": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz", - "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@eslint/plugin-kit": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", - "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.1.1", - "levn": "^0.4.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - } - }, - "node_modules/@humanfs/core": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", - "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/types": "^0.15.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/node": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", - "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.2", - "@humanfs/types": "^0.15.0", - "@humanwhocodes/retry": "^0.4.0" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanfs/types": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", - "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz", - "integrity": "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", - "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/type-utils": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.57.2", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", - "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", - "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.2", - "@typescript-eslint/types": "^8.57.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", - "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", - "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", - "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", - "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", - "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/project-service": "8.57.2", - "@typescript-eslint/tsconfig-utils": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", - "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", - "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.57.2", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.1.tgz", - "integrity": "sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.28.1", - "@esbuild/android-arm": "0.28.1", - "@esbuild/android-arm64": "0.28.1", - "@esbuild/android-x64": "0.28.1", - "@esbuild/darwin-arm64": "0.28.1", - "@esbuild/darwin-x64": "0.28.1", - "@esbuild/freebsd-arm64": "0.28.1", - "@esbuild/freebsd-x64": "0.28.1", - "@esbuild/linux-arm": "0.28.1", - "@esbuild/linux-arm64": "0.28.1", - "@esbuild/linux-ia32": "0.28.1", - "@esbuild/linux-loong64": "0.28.1", - "@esbuild/linux-mips64el": "0.28.1", - "@esbuild/linux-ppc64": "0.28.1", - "@esbuild/linux-riscv64": "0.28.1", - "@esbuild/linux-s390x": "0.28.1", - "@esbuild/linux-x64": "0.28.1", - "@esbuild/netbsd-arm64": "0.28.1", - "@esbuild/netbsd-x64": "0.28.1", - "@esbuild/openbsd-arm64": "0.28.1", - "@esbuild/openbsd-x64": "0.28.1", - "@esbuild/openharmony-arm64": "0.28.1", - "@esbuild/sunos-x64": "0.28.1", - "@esbuild/win32-arm64": "0.28.1", - "@esbuild/win32-ia32": "0.28.1", - "@esbuild/win32-x64": "0.28.1" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz", - "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.3", - "@eslint/config-helpers": "^0.5.3", - "@eslint/core": "^1.1.1", - "@eslint/plugin-kit": "^0.6.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true, - "license": "ISC" - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.8" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nodemon": { - "version": "3.1.14", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.14.tgz", - "integrity": "sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^10.2.1", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true, - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", - "dev": true, - "license": "ISC", - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/tsx": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.1.tgz", - "integrity": "sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "~0.28.0" - }, - "bin": { - "tsx": "dist/cli.mjs" - }, - "engines": { - "node": ">=18.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-eslint": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.2.tgz", - "integrity": "sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vscode-jsonrpc": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", - "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package.json deleted file mode 100644 index b4a9e31a8..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "validationapphost", - "version": "1.0.0", - "private": true, - "type": "module", - "scripts": { - "lint": "eslint apphost.mts", - "predev": "npm run lint", - "dev": "aspire run", - "prebuild": "npm run lint", - "build": "tsc", - "watch": "tsc --watch" - }, - "dependencies": { - "vscode-jsonrpc": "^8.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "devDependencies": { - "@types/node": "^22.0.0", - "eslint": "^10.0.3", - "nodemon": "^3.1.14", - "tsx": "^4.23.1", - "typescript": "^5.9.3", - "typescript-eslint": "^8.57.1" - } -} diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/buckets/.heal/mrf/list.bin b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/buckets/.heal/mrf/list.bin deleted file mode 100644 index a3568729c698aec1d183514222bafc72dafa7007..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4 LcmZQ%U}OLQ015yD diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/config/config.json/xl.meta b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/config/config.json/xl.meta deleted file mode 100644 index 9317160fbf0c87821756e8e4fc26008dedae7f7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9811 zcmeHNPl#kk8J~88Am)%90$zln2`+}7Kif02GrIvpk{w9EiNbC~kfo@us_w4sdavG8 z)ti~#bq-Nb^dRg>Ph#RE8%2pXF9~{>Rq>FhIf-EI5s!f!{p!6pZ@zkex_34!VZ}KN z-Ce(`SM~k_X>m=eh45U7IGN^ZGaXUmM)`=fdN!y?CWQ_2|kKX^tQJ=|?M{|J-l4C%-#- z`Gr5d@%}S!Y_n(8NOyj|&3631mlp19v*)hLo8oT^@Ob$0V$8)s2XI%Ub+OU-*yP*XYRpKKtnB+uMJA^3E^)z_aDoBmW70etqYfj6`{wJ3GSB zt5f^R+XqXLjHOhi zzPYu*H#Sxo7yY$MbbWQOe(6_C!&MHQ)xCGe@4WTIyY%`C zk9S@{xh^q|}8?opKr_<6N^*gJtRm0CC#;ev91ECjo- zYB5k7OQ=$MpJ*dTGDgU!5YC85J3*YGu}!pbO)K}uXo3PAlHF9BG(t;SXC!k7W<)6_ zk{Ahla8rb*snacJI6T?cW+IG56E;?{81U*Iugs`n&ILRrJE8PyYeZtGbyNwGCQ4Io z2~&c`X+koC0-c~uUBrS3XNiME8hqmZItFv01c-gc+8Ys)50{n>U{9J$BS6ll#(_Zf zK^>#v(M_2UJ-7k$v0(LZh(JbbM<`>$1{l1KoyLraJ#dHs5-gKH#@jL313iM!G4@iw zzqYp7UtPPnwXwdrxv{mn**&~|*z3}iOGhSjIH6VF5V02kI(WEmrxVH0C_2)>=!z|& zK})S7sr8W}!mC#y3AGlCk~cphTO|@~Ok-)WTO^8t=VAAiAUEO^n3XUsdSt2u`MA)i z>uiM_2d*?mpumvfbZDp|GKF!J=gp^&%q<%mPP6w5LJ?b5+!;o&j}iTst~?!Y7eU zc?|DfMz|o%V9{n{O>t`tXNs|N32~52b&AEc0T}O-*-@&}$MLs_)nuPaJbyL94*^LT z?Xs+S5`Je-$l~XGe6~ZQ_rZg!dt^2tiH2N_&6kTIO_f`+hAp1ALJiL^o=;;-hhj-U zY(M>$vxf6eFIr|~5=`&{vzJ#^(m0unmYI&8UR(r<5JO(*gN|6`x#t$=A9dm+|d z29Ysjd=6fe4!DjWm|%41iy1yK!e=dH_94iKp)dvrL`^bz24Bj_!qWaoR*Yl~lU zV_=kxfs$mj#WNkS4+bP-tRZ+-$jqF8JstjO4uH~C6VtLgaJ^-vN4;fc_j=2o-}ROqHNEA7NcENnK`@WNXNc#7SSJn^UU{ll zWr@KLel1vvn(2yWPJq=oBPiti?Cgf_tJ0cJglq(d#33of>_Gb5$i15AeO#zJ^qS{~ z{t3b{UKeW~FY!^3xh50>Ca7d6F)>8|reTM%B_4=mzG5d+_!$H9q%}9RdH|`$SHJtQ z016h!KxU$GQ=&Lc>IbXv2DBFl8j!#Uv4y6JzKO0INQ0qbJ0xLsHj*JF!T0DH#f&p;mEgigCdpC zXm@`452I15kBS3d%#UzRL$W&=&Db9@bp(N|>|{KuQJ7LS5sjfGse|Gz+#F9$B~OLp zv96X-;rK}h6m2jB_$D0m`+O$~C#w(y<3KUZlth|iao|!VNe9pt9D|o+$qkjQ$wK8vryDJ$#Tk5jaqZcj#h;awTURs$DZ)ngffA)2E;_P5a8xr zm)f3xY@ch|NoFh6DP;2hp4mgwGn;P;b8Km5)2%VAV_(eyP+@}yHdKj~ON6ox2hZlB zrNfHKb)uj%91>%nLkla7cAYz;!{*&v6i$#k&S?5J`b+7Jvwdw>biQoNT0(P?bF|%RE?BNpyL(a;m$ylCBH=v+JZ_<`h59odwP>J{ppbIz_gJNp zd>6ylZ$78^-dg1np`Vk=!m?rtw-FTrJ4XP%><_Ow(C(q%<}XT`Pd(dwW}DuOuJf$Y z_+Cr$tZm{8jOv9OI@>4iZYQ4DG+c*aSGgfv(bZ~W0{L)gS|L{`5rq0nC!~xvoVOVu zBXEN?v9LojRB|-NTEtsCUH;@&wNg`+rg*=$j9fIfyJxgdn8CB&RI8EBh<^{lmL9;V z6K&lHyzGoezo*!A8WtXo5ak;w{}n;Z3}n?7YH8E6!;}wk$lp-(cmP)MX_V6Ww$EO7 zl=8aYsOe)s-hqQ`R=d`2tw&m#L};}K+;z&cCGodbeWdv;()y1JusZ}f#gz~+lo%Sw c70v_Kop7xc?xuVQymHjukEpkbt{)!$2iDlb0RR91 diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/config/iam/format.json/xl.meta b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/config/iam/format.json/xl.meta deleted file mode 100644 index 609f63435d7b989a5322201e5452e44ad2f94c8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 434 zcma#>F;ZY;U}iYRz`&Tr%*=R1ZTb-b1~hP4V!iL4eqqTQM_48c)#x*_F)$uwv}s-v zQdyA7xHQbjKPl@TgWw`h7fh{7TwF4XjtF#5oTJ4!%X{|>5jnFN$7lRl=9=u7lb+AG z*frS~MEEf*cTIK*&a6tk!~nD&$nnfeNv&W6s&mOKE}6)JoVsK?~1P$^=Pd!6n0`~i+&ncc$s*M_Ez!u_EXBmk+{Dt@$k@^-(ag-$)HKy(VcEHi zz3WBKO)>UZ$=J9guQVs;h_1J!Ylh&G0FJkrW&i*H diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/format.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/format.json deleted file mode 100644 index 4b401694e..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/format.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1","format":"xl-single","id":"e90c814b-b80d-4190-a279-63ce0ce373bb","xl":{"version":"3","this":"a1fe0581-1046-4e1c-abec-a186349fce79","sets":[["a1fe0581-1046-4e1c-abec-a186349fce79"]],"distributionAlgo":"SIPMOD+PARITY"}} \ No newline at end of file diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/pool.bin/xl.meta b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript/runtime-data/minio-bind/.minio.sys/pool.bin/xl.meta deleted file mode 100644 index 7d83e70fa25e7747d82ed2115e6cea3c56fa80be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 479 zcma#>F;ZY;U}iYRz`$6<%*=R1ZTb-b1~hP4V!iL4Hhwv^BP3bPY*NFFpWfg7g&x9Yc~8U~60AJ%sf9IV z( - - - Exe - bfe6b134-1a06-4449-a146-ba3cdb0d02a5 - - - - - - - - - - - -
diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Program.cs b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Program.cs deleted file mode 100644 index da71a4c57..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Program.cs +++ /dev/null @@ -1,16 +0,0 @@ -#pragma warning disable CS0618 // Type or member is obsolete -using Projects; - -var builder = DistributedApplication.CreateBuilder(args); - -var username = builder.AddParameter("user", "minioadmin"); -var password = builder.AddParameter("password", "minioadmin", secret: true); - -var minio = builder.AddMinioContainer("minio", username, password); - -builder.AddProject("apiservice") - .WithReference(minio) - .WaitFor(minio) - .WithHttpHealthCheck("/health"); - -builder.Build().Run(); \ No newline at end of file diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Properties/launchSettings.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Properties/launchSettings.json deleted file mode 100644 index b2cfe754c..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/Properties/launchSettings.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "profiles": { - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:18120;http://localhost:12038", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "DOTNET_ENVIRONMENT": "Development", - "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:32476", - "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:12800" - } - }, - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:15173", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development", - "DOTNET_ENVIRONMENT": "Development", - "DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19187", - "DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:21252" - } - } - } -} diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/appsettings.json b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/appsettings.json deleted file mode 100644 index 31c092aa4..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.AppHost/appsettings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning", - "Aspire.Hosting.Dcp": "Warning" - } - } -} diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults.csproj b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults.csproj deleted file mode 100644 index c9a4399aa..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - enable - enable - true - - - - - - - - - - - - - - - diff --git a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/Extensions.cs b/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/Extensions.cs deleted file mode 100644 index 262d1aede..000000000 --- a/examples/minio/CommunityToolkit.Aspire.Hosting.Minio.ServiceDefaults/Extensions.cs +++ /dev/null @@ -1,117 +0,0 @@ -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Diagnostics.HealthChecks; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Diagnostics.HealthChecks; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.ServiceDiscovery; -using OpenTelemetry; -using OpenTelemetry.Metrics; -using OpenTelemetry.Trace; - -namespace Microsoft.Extensions.Hosting; -// Adds common Aspire services: service discovery, resilience, health checks, and OpenTelemetry. -// This project should be referenced by each service project in your solution. -// To learn more about using this project, see https://aka.ms/dotnet/aspire/service-defaults -public static class Extensions -{ - public static IHostApplicationBuilder AddServiceDefaults(this IHostApplicationBuilder builder) - { - builder.ConfigureOpenTelemetry(); - - builder.AddDefaultHealthChecks(); - - builder.Services.AddServiceDiscovery(); - - builder.Services.ConfigureHttpClientDefaults(http => - { - // Turn on resilience by default - http.AddStandardResilienceHandler(); - - // Turn on service discovery by default - http.AddServiceDiscovery(); - }); - - // Uncomment the following to restrict the allowed schemes for service discovery. - // builder.Services.Configure(options => - // { - // options.AllowedSchemes = ["https"]; - // }); - - return builder; - } - - public static IHostApplicationBuilder ConfigureOpenTelemetry(this IHostApplicationBuilder builder) - { - builder.Logging.AddOpenTelemetry(logging => - { - logging.IncludeFormattedMessage = true; - logging.IncludeScopes = true; - }); - - builder.Services.AddOpenTelemetry() - .WithMetrics(metrics => - { - metrics.AddAspNetCoreInstrumentation() - .AddHttpClientInstrumentation() - .AddRuntimeInstrumentation(); - }) - .WithTracing(tracing => - { - tracing.AddAspNetCoreInstrumentation() - // Uncomment the following line to enable gRPC instrumentation (requires the OpenTelemetry.Instrumentation.GrpcNetClient package) - //.AddGrpcClientInstrumentation() - .AddHttpClientInstrumentation(); - }); - - builder.AddOpenTelemetryExporters(); - - return builder; - } - - private static IHostApplicationBuilder AddOpenTelemetryExporters(this IHostApplicationBuilder builder) - { - var useOtlpExporter = !string.IsNullOrWhiteSpace(builder.Configuration["OTEL_EXPORTER_OTLP_ENDPOINT"]); - - if (useOtlpExporter) - { - builder.Services.AddOpenTelemetry().UseOtlpExporter(); - } - - // Uncomment the following lines to enable the Azure Monitor exporter (requires the Azure.Monitor.OpenTelemetry.AspNetCore package) - //if (!string.IsNullOrEmpty(builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"])) - //{ - // builder.Services.AddOpenTelemetry() - // .UseAzureMonitor(); - //} - - return builder; - } - - public static IHostApplicationBuilder AddDefaultHealthChecks(this IHostApplicationBuilder builder) - { - builder.Services.AddHealthChecks() - // Add a default liveness check to ensure app is responsive - .AddCheck("self", () => HealthCheckResult.Healthy(), ["live"]); - - return builder; - } - - public static WebApplication MapDefaultEndpoints(this WebApplication app) - { - // Adding health checks endpoints to applications in non-development environments has security implications. - // See https://aka.ms/dotnet/aspire/healthchecks for details before enabling these endpoints in non-development environments. - if (app.Environment.IsDevelopment()) - { - // All health checks must pass for app to be considered ready to accept traffic after starting - app.MapHealthChecks("/health"); - - // Only health checks tagged with the "live" tag must pass for app to be considered alive - app.MapHealthChecks("/alive", new HealthCheckOptions - { - Predicate = r => r.Tags.Contains("live") - }); - } - - return app; - } -} diff --git a/src/CommunityToolkit.Aspire.Hosting.Minio/CommunityToolkit.Aspire.Hosting.Minio.csproj b/src/CommunityToolkit.Aspire.Hosting.Minio/CommunityToolkit.Aspire.Hosting.Minio.csproj deleted file mode 100644 index 0867afced..000000000 --- a/src/CommunityToolkit.Aspire.Hosting.Minio/CommunityToolkit.Aspire.Hosting.Minio.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - - minio hosting cloud storage deprecated - An Aspire hosting integration for MinIO. DEPRECATED: The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version. - enable - enable - - - - - - - - - diff --git a/src/CommunityToolkit.Aspire.Hosting.Minio/MinioBuilderExtensions.cs b/src/CommunityToolkit.Aspire.Hosting.Minio/MinioBuilderExtensions.cs deleted file mode 100644 index 9b2afff15..000000000 --- a/src/CommunityToolkit.Aspire.Hosting.Minio/MinioBuilderExtensions.cs +++ /dev/null @@ -1,185 +0,0 @@ -using Aspire.Hosting.ApplicationModel; -using CommunityToolkit.Aspire.Hosting.Minio; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Diagnostics.HealthChecks; - -#pragma warning disable ASPIREATS001 // AspireExport is experimental - -namespace Aspire.Hosting; - -/// -/// Provides extension methods for adding MinIO resources to an . -/// -[Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] -public static class MinioBuilderExtensions -{ - private const string RootUserEnvVarName = "MINIO_ROOT_USER"; - private const string RootPasswordEnvVarName = "MINIO_ROOT_PASSWORD"; - - /// - /// Adds a MinIO container to the application model. The default image is "minio/minio" and the tag is "latest". - /// - /// The . - /// The name of the resource. This name will be used as the connection string name when referenced in a dependency. - /// The host port for MinIO. - /// The parameter used to provide the root user name for the MinIO resource. If a default value will be used. - /// The parameter used to provide the administrator password for the MinIO resource. If a random password will be generated. - /// A reference to the . - [AspireExport] - public static IResourceBuilder AddMinioContainer( - this IDistributedApplicationBuilder builder, - [ResourceName] string name, - IResourceBuilder? rootUser = null, - IResourceBuilder? rootPassword = null, - int? port = null) - { - ArgumentNullException.ThrowIfNull(builder); - ArgumentException.ThrowIfNullOrEmpty(name); - - var rootPasswordParameter = rootPassword?.Resource ?? - ParameterResourceBuilderExtensions.CreateDefaultPasswordParameter(builder, $"{name}-rootPassword"); - - var rootUserParameter = rootUser?.Resource ?? new ParameterResource("user", _ => MinioContainerResource.DefaultUserName); - - var resource = new MinioContainerResource(name, rootUserParameter, rootPasswordParameter); - - const int consoleTargetPort = 9001; - var builderWithResource = builder - .AddResource(resource) - .WithImage(MinioContainerImageTags.Image, MinioContainerImageTags.Tag) - .WithImageRegistry(MinioContainerImageTags.Registry) - .WithHttpEndpoint(targetPort: 9000, port: port, name: MinioContainerResource.PrimaryEndpointName) - .WithHttpEndpoint(targetPort: consoleTargetPort, name: MinioContainerResource.ConsoleEndpointName) - .WithEnvironment(RootUserEnvVarName, $"{resource.RootUser}") - .WithEnvironment(RootPasswordEnvVarName, $"{resource.PasswordParameter}") - .WithArgs("server", "/data", "--console-address", $":{consoleTargetPort}"); - - var endpoint = builderWithResource.Resource.GetEndpoint(MinioContainerResource.PrimaryEndpointName); - var healthCheckKey = $"{name}_check"; - - builder.Services.AddHealthChecks() - .AddUrlGroup(options => - { - var uri = new Uri(endpoint.Url); - options.AddUri(new Uri(uri,"/minio/health/live"), setup => setup.ExpectHttpCode(200)); - options.AddUri(new Uri(uri, "/minio/health/cluster"), setup => setup.ExpectHttpCode(200)); - options.AddUri(new Uri(uri, "/minio/health/cluster/read"), setup => setup.ExpectHttpCode(200)); - }, healthCheckKey); - - builderWithResource.WithHealthCheck(healthCheckKey); - - return builderWithResource; - } - - - /// - /// Configures the user name that the MinIO resource uses. - /// - /// The resource builder. - /// The parameter used to provide the user name for the MinIO resource. - /// The . - [AspireExport] - public static IResourceBuilder WithUserName(this IResourceBuilder builder, IResourceBuilder userName) - { - ArgumentNullException.ThrowIfNull(builder); - ArgumentNullException.ThrowIfNull(userName); - - builder.Resource.RootUser = userName.Resource; - return builder; - } - - /// - /// Configures the password that the MinIO resource uses. - /// - /// The resource builder. - /// The parameter used to provide the password for the MinIO resource. - /// The . - [AspireExport] - public static IResourceBuilder WithPassword(this IResourceBuilder builder, IResourceBuilder password) - { - ArgumentNullException.ThrowIfNull(builder); - - builder.Resource.SetPassword(password.Resource); - return builder; - } - - /// - /// Configures the host port that the MinIO resource is exposed on instead of using randomly assigned port. - /// - /// The resource builder for MinIO. - /// The port to bind on the host. If is used, a random port will be assigned. - /// The resource builder for MinIO. - [AspireExport] - public static IResourceBuilder WithHostPort(this IResourceBuilder builder, int? port) - { - ArgumentNullException.ThrowIfNull(builder); - - return builder.WithEndpoint("http", endpoint => - { - endpoint.Port = port; - }); - } - - /// - /// Adds a named volume for the data folder to a MinIO container resource. - /// - /// The resource builder. - /// The name of the volume. Defaults to an auto-generated name based on the application and resource names. - /// The . - /// - /// - /// Add an MinIO container to the application model and reference it in a .NET project. Additionally, in this - /// example a data volume is added to the container to allow data to be persisted across container restarts. - /// - /// var builder = DistributedApplication.CreateBuilder(args); - /// - /// var minio = builder.AddMinio("minio") - /// .WithDataVolume(); - /// var api = builder.AddProject<Projects.Api>("api") - /// .WithReference(minio); - /// - /// builder.Build().Run(); - /// - /// - /// - [AspireExport] - public static IResourceBuilder WithDataVolume(this IResourceBuilder builder, string? name = null) - { - ArgumentNullException.ThrowIfNull(builder); - - return builder.WithVolume(name ?? VolumeNameGenerator.Generate(builder, "data"), "/data"); - } - - /// - /// Adds a bind mount for the data folder to a MinIO container resource. - /// - /// The resource builder. - /// The source directory on the host to mount into the container. - /// The . - /// - /// - /// Add an MinIO container to the application model and reference it in a .NET project. Additionally, in this - /// example a bind mount is added to the container to allow data to be persisted across container restarts. - /// - /// var builder = DistributedApplication.CreateBuilder(args); - /// - /// var minio = builder.AddMinio("minio") - /// .WithDataBindMount("./data/minio/data"); - /// var api = builder.AddProject<Projects.Api>("api") - /// .WithReference(minio); - /// - /// builder.Build().Run(); - /// - /// - /// - [AspireExport] - public static IResourceBuilder WithDataBindMount(this IResourceBuilder builder, string source) - { - ArgumentNullException.ThrowIfNull(builder); - ArgumentNullException.ThrowIfNull(source); - - return builder.WithBindMount(source, "/data"); - } -} - -#pragma warning restore ASPIREATS001 // AspireExport is experimental diff --git a/src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerImageTags.cs b/src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerImageTags.cs deleted file mode 100644 index 2d170a15c..000000000 --- a/src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerImageTags.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace CommunityToolkit.Aspire.Hosting.Minio; - -internal static class MinioContainerImageTags -{ - /// docker.io - public const string Registry = "docker.io"; - /// minio/minio - public const string Image = "minio/minio"; - /// RELEASE.2025-09-07T16-13-09Z - public const string Tag = "RELEASE.2025-09-07T16-13-09Z"; -} \ No newline at end of file diff --git a/src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerResource.cs b/src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerResource.cs deleted file mode 100644 index 211e410be..000000000 --- a/src/CommunityToolkit.Aspire.Hosting.Minio/MinioContainerResource.cs +++ /dev/null @@ -1,106 +0,0 @@ -#pragma warning disable ASPIREATS001 // AspireExport is experimental - -namespace Aspire.Hosting.ApplicationModel; - -/// -/// A resource that represents a MinIO storage -/// -/// The name of the resource. -/// A parameter that contains the MinIO server root username. -/// A parameter that contains the MinIO server root password. -[Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] -[AspireExport(ExposeProperties = true)] -public sealed class MinioContainerResource(string name, ParameterResource rootUser, ParameterResource passwordParameter) : ContainerResource(name), - IResourceWithConnectionString -{ - internal const string PrimaryEndpointName = "http"; - internal const string ConsoleEndpointName = "console"; - internal const string DefaultUserName = "minioadmin"; - - /// - /// The MinIO root user. - /// - public ParameterResource RootUser { get; set; } = rootUser; - - /// - /// The MinIO root password. - /// - public ParameterResource PasswordParameter { get; private set; } = passwordParameter; - - private EndpointReference? _primaryEndpoint; - - /// - /// Gets the primary endpoint for the MinIO. This endpoint is used for all API calls over HTTP. - /// - public EndpointReference PrimaryEndpoint => _primaryEndpoint ??= new(this, PrimaryEndpointName); - - /// - /// Gets the host endpoint reference for this resource. - /// - public EndpointReferenceExpression Host => PrimaryEndpoint.Property(EndpointProperty.Host); - - /// - /// Gets the port endpoint reference for this resource. - /// - public EndpointReferenceExpression Port => PrimaryEndpoint.Property(EndpointProperty.Port); - - /// - /// Gets the connection string expression for the Minio - /// - public ReferenceExpression ConnectionStringExpression => GetConnectionString(); - - /// - /// Gets the connection URI expression for the MinIO server. - /// - /// - /// Format: http://{host}:{port}. - /// - public ReferenceExpression UriExpression => ReferenceExpression.Create($"http://{Host}:{Port}"); - - /// - /// Gets the connection string for the MinIO server. - /// - /// A to observe while waiting for the task to complete. - /// A connection string for the MinIO server in the form "Host=host;Port=port;Username=postgres;Password=password". - public ValueTask GetConnectionStringAsync(CancellationToken cancellationToken = default) - { - if (this.TryGetLastAnnotation(out var connectionStringAnnotation)) - { - return connectionStringAnnotation.Resource.GetConnectionStringAsync(cancellationToken); - } - - return ConnectionStringExpression.GetValueAsync(cancellationToken); - } - - /// - /// Gets the connection string for the MinIO server. - /// - private ReferenceExpression GetConnectionString() - { - var builder = new ReferenceExpressionBuilder(); - - builder.Append( - $"Endpoint=http://{PrimaryEndpoint.Property(EndpointProperty.Host)}:{PrimaryEndpoint.Property(EndpointProperty.Port)}"); - - builder.Append($";AccessKey={RootUser}"); - builder.Append($";SecretKey={PasswordParameter}"); - - return builder.Build(); - } - - internal void SetPassword(ParameterResource password) - { - PasswordParameter = password; - } - - IEnumerable> IResourceWithConnectionString.GetConnectionProperties() - { - yield return new("Host", ReferenceExpression.Create($"{Host}")); - yield return new("Port", ReferenceExpression.Create($"{Port}")); - yield return new("AccessKey", ReferenceExpression.Create($"{RootUser}")); - yield return new("SecretKey", ReferenceExpression.Create($"{PasswordParameter}")); - yield return new("Uri", UriExpression); - } -} - -#pragma warning restore ASPIREATS001 // AspireExport is experimental diff --git a/src/CommunityToolkit.Aspire.Hosting.Minio/README.md b/src/CommunityToolkit.Aspire.Hosting.Minio/README.md deleted file mode 100644 index 88a9b74e2..000000000 --- a/src/CommunityToolkit.Aspire.Hosting.Minio/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# CommunityToolkit.Aspire.Hosting.MinIO library - -> [!WARNING] -> **This integration is deprecated.** The [MinIO OSS project has been archived](https://github.com/minio/minio) and is no longer maintained. This package will be removed in a future version. Please migrate to an alternative S3-compatible storage solution. - -Provides extension methods and resource definitions for the Aspire AppHost to support running [MinIO](https://min.io/) containers. - -## Getting Started - -### Install the package - -In your AppHost project, install the package using the following command: - -```dotnetcli -dotnet add package CommunityToolkit.Aspire.Hosting.Minio -``` - -### Example usage - -Then, in the _Program.cs_ file of `AppHost`, add a MinIO resource and consume the connection using the following methods: - -```csharp -var builder = DistributedApplication.CreateBuilder(args); - -var minio = builder.AddMinio("minio"); - -var myService = builder.AddProject() - .WithReference(minio); - -builder.Build().Run(); -``` - -## Additional Information - -https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-minio - -## Feedback & contributing - -https://github.com/CommunityToolkit/Aspire - diff --git a/src/CommunityToolkit.Aspire.Hosting.Minio/api/CommunityToolkit.Aspire.Hosting.Minio.cs b/src/CommunityToolkit.Aspire.Hosting.Minio/api/CommunityToolkit.Aspire.Hosting.Minio.cs deleted file mode 100644 index fc900bd91..000000000 --- a/src/CommunityToolkit.Aspire.Hosting.Minio/api/CommunityToolkit.Aspire.Hosting.Minio.cs +++ /dev/null @@ -1,60 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -namespace Aspire.Hosting -{ - [System.Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] - public static partial class MinioBuilderExtensions - { - [AspireExport] - public static ApplicationModel.IResourceBuilder AddMinioContainer(this IDistributedApplicationBuilder builder, string name, ApplicationModel.IResourceBuilder? rootUser = null, ApplicationModel.IResourceBuilder? rootPassword = null, int? port = null) { throw null; } - - [AspireExport] - public static ApplicationModel.IResourceBuilder WithDataBindMount(this ApplicationModel.IResourceBuilder builder, string source) { throw null; } - - [AspireExport] - public static ApplicationModel.IResourceBuilder WithDataVolume(this ApplicationModel.IResourceBuilder builder, string? name = null) { throw null; } - - [AspireExport] - public static ApplicationModel.IResourceBuilder WithHostPort(this ApplicationModel.IResourceBuilder builder, int? port) { throw null; } - - [AspireExport] - public static ApplicationModel.IResourceBuilder WithPassword(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder password) { throw null; } - - [AspireExport] - public static ApplicationModel.IResourceBuilder WithUserName(this ApplicationModel.IResourceBuilder builder, ApplicationModel.IResourceBuilder userName) { throw null; } - } -} - -namespace Aspire.Hosting.ApplicationModel -{ - [System.Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] - [AspireExport(ExposeProperties = true)] - public sealed partial class MinioContainerResource : ContainerResource, IResourceWithConnectionString, IResource, IExpressionValue, IValueProvider, IManifestExpressionProvider, IValueWithReferences - { - public MinioContainerResource(string name, ParameterResource rootUser, ParameterResource passwordParameter) : base(default!, default) { } - - public ReferenceExpression ConnectionStringExpression { get { throw null; } } - - public EndpointReferenceExpression Host { get { throw null; } } - - public ParameterResource PasswordParameter { get { throw null; } } - - public EndpointReferenceExpression Port { get { throw null; } } - - public EndpointReference PrimaryEndpoint { get { throw null; } } - - public ParameterResource RootUser { get { throw null; } set { } } - - public ReferenceExpression UriExpression { get { throw null; } } - - System.Collections.Generic.IEnumerable> IResourceWithConnectionString.GetConnectionProperties() { throw null; } - - public System.Threading.Tasks.ValueTask GetConnectionStringAsync(System.Threading.CancellationToken cancellationToken = default) { throw null; } - } -} \ No newline at end of file diff --git a/src/CommunityToolkit.Aspire.Minio.Client/CommunityToolkit.Aspire.Minio.Client.csproj b/src/CommunityToolkit.Aspire.Minio.Client/CommunityToolkit.Aspire.Minio.Client.csproj deleted file mode 100644 index 214437b4a..000000000 --- a/src/CommunityToolkit.Aspire.Minio.Client/CommunityToolkit.Aspire.Minio.Client.csproj +++ /dev/null @@ -1,23 +0,0 @@ - - - - minio client cloud storage deprecated - An Aspire client integration for MinIO. DEPRECATED: The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version. - enable - enable - - - - - - - - - - - - - - - - diff --git a/src/CommunityToolkit.Aspire.Minio.Client/MinioClientBuilderExtensionMethods.cs b/src/CommunityToolkit.Aspire.Minio.Client/MinioClientBuilderExtensionMethods.cs deleted file mode 100644 index 56f90f883..000000000 --- a/src/CommunityToolkit.Aspire.Minio.Client/MinioClientBuilderExtensionMethods.cs +++ /dev/null @@ -1,101 +0,0 @@ -using CommunityToolkit.Aspire.Minio.Client; -using Minio; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; - -namespace Microsoft.Extensions.Hosting; - -/// -/// Provides extension methods for registering MinIO-related services in an . -/// -[Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] -public static class MinioClientBuilderExtensionMethods -{ - private const string DefaultConfigSectionName = "Aspire:Minio:Client"; - - /// - /// Adds MinIO Client to ASPNet host - /// - /// The used to add services. - /// Name of the configuration settings section - /// The connection name to use to find a connection string. - /// An optional delegate that can be used for customizing options. It is invoked after the settings are read from the configuration. - public static void AddMinioClient( - this IHostApplicationBuilder builder, - string? connectionName = null, - string? configurationSectionName = DefaultConfigSectionName, - Action? configureSettings = null) - { - ArgumentNullException.ThrowIfNull(builder); - - var settings = GetMinioClientSettings(builder, connectionName, configurationSectionName, configureSettings); - - builder.AddMinioInternal(settings); - } - - private static void AddMinioInternal(this IHostApplicationBuilder builder, MinioClientSettings settings) - { - ArgumentNullException.ThrowIfNull(settings); - - // Add the MinIO client to the service collection. - void ConfigureClient(IMinioClient configureClient) - { - var client = configureClient.WithEndpoint(settings.Endpoint) - .WithSSL(settings.UseSsl); - - if (settings.Credentials is not null) client.WithCredentials(settings.Credentials.AccessKey, settings.Credentials.SecretKey); - - if (settings.UserAgentHeaderInfo is not null) client.SetAppInfo(settings.UserAgentHeaderInfo.AppName, settings.UserAgentHeaderInfo.AppVersion); - - if (settings.SetTraceOn) - client.SetTraceOn(); - else - client.SetTraceOff(); - } - - var minioClientFactory = new MinioClientFactory(ConfigureClient); - builder.Services.TryAddSingleton(minioClientFactory); - - IMinioClient GetClient() - { - if (settings.Endpoint is null) - throw new InvalidOperationException("The MinIO endpoint must be provided either in configuration section, or as a part of connection string or settings delegate"); - - return minioClientFactory.CreateClient(); - } - - switch (settings.ServiceLifetime) - { - case ServiceLifetime.Singleton: - builder.Services.TryAddSingleton(_ => GetClient()); - break; - case ServiceLifetime.Scoped: - builder.Services.TryAddScoped(_ => GetClient()); - break; - case ServiceLifetime.Transient: - builder.Services.TryAddTransient(_ => GetClient()); - break; - } - } - - private static MinioClientSettings GetMinioClientSettings(IHostApplicationBuilder builder, - string? connectionName, - string? configurationSectionName, - Action? configureSettings) - { - var settings = new MinioClientSettings(); - - builder.Configuration.Bind(configurationSectionName ?? DefaultConfigSectionName, settings); - - if (!string.IsNullOrEmpty(connectionName) && - builder.Configuration.GetConnectionString(connectionName) is string connectionString) - { - settings.ParseConnectionString(connectionString); - } - - configureSettings?.Invoke(settings); - - return settings; - } -} \ No newline at end of file diff --git a/src/CommunityToolkit.Aspire.Minio.Client/MinioClientSettings.cs b/src/CommunityToolkit.Aspire.Minio.Client/MinioClientSettings.cs deleted file mode 100644 index ecd7f6ccd..000000000 --- a/src/CommunityToolkit.Aspire.Minio.Client/MinioClientSettings.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; -using Microsoft.Extensions.DependencyInjection; -using Minio; -using System.Data.Common; - -namespace CommunityToolkit.Aspire.Minio.Client; - -/// -/// MinIO client configuration -/// -[Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] -public sealed class MinioClientSettings -{ - private const string ConnectionStringEndpoint = "Endpoint"; - private const string AccessKey = "AccessKey"; - private const string SecretKey = "SecretKey"; - private const string UseSslKey = "UseSsl"; - - /// - /// Endpoint URL - /// - public Uri? Endpoint { get; set; } - - /// - public MinioCredentials? Credentials { get; set; } - - /// - /// Use ssl connection - /// - public bool UseSsl { get; set; } = false; - - /// - public HeaderAppInformation? UserAgentHeaderInfo { get; set; } - - /// - /// MinIO client service lifetime - /// - public ServiceLifetime ServiceLifetime = ServiceLifetime.Singleton; - - /// - /// Turn on tracing. - /// Isn't aspire tracing compatible yet. - /// - public bool SetTraceOn { get; set; } = false; - - internal void ParseConnectionString(string? connectionString) - { - if (string.IsNullOrWhiteSpace(connectionString)) - { - return; - } - - // If the connection string is an absolute URI, use it as endpoint. - if (Uri.TryCreate(connectionString, UriKind.Absolute, out var uri)) - { - Endpoint = uri; - return; - } - - var connectionBuilder = new DbConnectionStringBuilder - { - ConnectionString = connectionString - }; - - if (connectionBuilder.TryGetValue(ConnectionStringEndpoint, out var endpoint) - && - Uri.TryCreate(endpoint.ToString(), UriKind.Absolute, out var serviceUri)) - { - Endpoint = serviceUri; - } - - // Check for UseSsl (and variants) in the connection string and parse it if present. - if (connectionBuilder.TryGetValue(UseSslKey, out var useSslObj) - && useSslObj is string useSslValue - && bool.TryParse(useSslValue, out var parsed)) - { - UseSsl = parsed; - } - - if (connectionBuilder.TryGetValue(AccessKey, out var accessKeyValue) && - connectionBuilder.TryGetValue(SecretKey, out var secretKeyValue) && - accessKeyValue is string accessKey && - secretKeyValue is string secretKey && - !string.IsNullOrEmpty(accessKey) && - !string.IsNullOrEmpty(secretKey)) - { - Credentials = new MinioCredentials - { - AccessKey = accessKey, - SecretKey = secretKey - }; - } - } - -} - -/// -/// Sets app version and name. Used for constructing User-Agent header in all HTTP requests -/// -[Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] -public class HeaderAppInformation -{ - /// - /// Set app name for MinioClient - /// - public string AppName { get; set; } = "CommunityToolkit.Aspire.Minio.Client"; - - /// - /// SetAppVersion for MinioClient - /// - public string AppVersion { get; set; } = "1.0"; -} - -/// -/// MinIO credentials (access and secret keys) -/// -[Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] -public class MinioCredentials -{ - /// - /// MinIO Access Key - /// - public string AccessKey { get; set; } = string.Empty; - - /// - /// MinIO Secret Key - /// - public string SecretKey { get; set; } = string.Empty; -} diff --git a/src/CommunityToolkit.Aspire.Minio.Client/README.md b/src/CommunityToolkit.Aspire.Minio.Client/README.md deleted file mode 100644 index 291082ce1..000000000 --- a/src/CommunityToolkit.Aspire.Minio.Client/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# CommunityToolkit.Aspire.Minio.Client - -> [!WARNING] -> **This integration is deprecated.** The [MinIO OSS project has been archived](https://github.com/minio/minio) and is no longer maintained. This package will be removed in a future version. Please migrate to an alternative S3-compatible storage solution. - -Registers a [MinIOClient](https://github.com/minio/minio-dotnet) in the DI container for connecting to MinIO. - -## Getting started - -### Prerequisites - -- MinIO or other S3-compatible storage. - -### Install the package - -Install the Aspire MinIO Client library with [NuGet](https://www.nuget.org): - -```dotnetcli -dotnet add package CommunityToolkit.Aspire.Minio.Client -``` - -## Usage example - -In the _Program.cs_ file of your project, call the `AddMinioClient` extension method to register a `MinioClient` for use via the dependency injection container. The method takes a connection name parameter. - -```csharp -builder.AddMinioClient("minio"); -``` - -## Configuration - -The Aspire MinIO Client integration provides multiple options to configure the server connection based on the requirements and conventions of your project. - -### Use a connection string - -When using a connection string from the `ConnectionStrings` configuration section, you can provide the name of the connection string when calling `builder.AddMinioClient()`: - -```csharp -builder.AddMinioClient("minio"); -``` - -And then the connection string will be retrieved from the `ConnectionStrings` configuration section: - -```json -{ - "ConnectionStrings": { - "minio": "Endpoint=http://localhost:9001/;AccessKey=minioAdmin;SecretKey=minioAdmin" - } -} -``` - -### Use configuration providers - -The Aspire MinIO Client integration supports [Microsoft.Extensions.Configuration](https://learn.microsoft.com/dotnet/api/microsoft.extensions.configuration). -It loads the `MinioClientSettings` from configuration by using the `Aspire:Minio:Client` key. -This key can be overriden by using the `configurationSectionName` method parameter. -Example `appsettings.json` that configures some of the options: - -```json -{ - "Aspire": { - "Minio": { - "Client": { - "Endpoint": "http://localhost:9001/", - "AccessKey": "minioAdmin", - "SecretKey": "minioAdmin" - } - } - } -} -``` - -### Use inline delegates - -Also you can pass the `Action configureSettings` delegate to set up some or all the options inline, for example to set the API key from code: - -```csharp -builder.AddMinioClient("minio", configureSettings: settings => settings.SecretKey = "minioAdmin"); -``` - -## AppHost extensions - -In your AppHost project, install the `CommunityToolkit.Aspire.Hosting.Minio` library with [NuGet](https://www.nuget.org): - -```dotnetcli -dotnet add package CommunityToolkit.Aspire.Hosting.Minio -``` - -Then, in the _Program.cs_ file of `AppHost`, register a MinIO host and consume the connection using the following methods: - -```csharp -var minio = builder.AddMinioContainer("minio"); - -var myService = builder.AddProject() - .WithReference(minio); -``` - -The `WithReference` method configures a connection in the `MyService` project named `minio`. -In the _Program.cs_ file of `MyService`, the MinIO connection can be consumed using: - -```csharp -builder.AddMinioClient("minio"); -``` - -Then, in your service, inject `IMinioClient` and use it to interact with the MinIO or other S3 compatible API: - -```csharp -public class MyService(IMinioClient minioClient) -{ - // ... -} -``` - -## Additional documentation - -- https://github.com/minio/minio-dotnet -- https://min.io/docs/minio/linux/developers/dotnet/minio-dotnet.html - -## Feedback & contributing - -https://github.com/CommunityToolkit/Aspire - diff --git a/src/CommunityToolkit.Aspire.Minio.Client/api/CommunityToolkit.Aspire.Minio.Client.cs b/src/CommunityToolkit.Aspire.Minio.Client/api/CommunityToolkit.Aspire.Minio.Client.cs deleted file mode 100644 index 96424a7c1..000000000 --- a/src/CommunityToolkit.Aspire.Minio.Client/api/CommunityToolkit.Aspire.Minio.Client.cs +++ /dev/null @@ -1,50 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ -namespace CommunityToolkit.Aspire.Minio.Client -{ - [System.Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] - public partial class HeaderAppInformation - { - public string AppName { get { throw null; } set { } } - - public string AppVersion { get { throw null; } set { } } - } - - [System.Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] - public sealed partial class MinioClientSettings - { - public Microsoft.Extensions.DependencyInjection.ServiceLifetime ServiceLifetime; - public MinioCredentials? Credentials { get { throw null; } set { } } - - public System.Uri? Endpoint { get { throw null; } set { } } - - public bool SetTraceOn { get { throw null; } set { } } - - public HeaderAppInformation? UserAgentHeaderInfo { get { throw null; } set { } } - - public bool UseSsl { get { throw null; } set { } } - } - - [System.Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] - public partial class MinioCredentials - { - public string AccessKey { get { throw null; } set { } } - - public string SecretKey { get { throw null; } set { } } - } -} - -namespace Microsoft.Extensions.Hosting -{ - [System.Obsolete("The MinIO OSS project has been archived and is no longer maintained. This integration is deprecated and will be removed in a future version.")] - public static partial class MinioClientBuilderExtensionMethods - { - public static void AddMinioClient(this IHostApplicationBuilder builder, string? connectionName = null, string? configurationSectionName = "Aspire:Minio:Client", System.Action? configureSettings = null) { } - } -} \ No newline at end of file diff --git a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/AppHostTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/AppHostTests.cs deleted file mode 100644 index f38d5be6e..000000000 --- a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/AppHostTests.cs +++ /dev/null @@ -1,70 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#pragma warning disable CS0618 // Type or member is obsolete -using Aspire.Components.Common.Tests; -using CommunityToolkit.Aspire.Testing; -using System.Text; - -namespace CommunityToolkit.Aspire.Hosting.Minio.Tests; - -[RequiresDocker] -public class AppHostTests(AspireIntegrationTestFixture fixture) : IClassFixture> -{ - [Fact] - public async Task ResourceStartsAndRespondsOk() - { - var resourceName = "apiservice"; - await fixture.ResourceNotificationService.WaitForResourceHealthyAsync(resourceName).WaitAsync(TimeSpan.FromMinutes(5)); - var httpClient = fixture.CreateHttpClient(resourceName); - - var response = await httpClient.GetAsync("/"); - - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } - - [Fact] - public async Task ResourceStartsAndUiRespondsOk() - { - var resourceName = "minio"; - await fixture.ResourceNotificationService.WaitForResourceHealthyAsync(resourceName).WaitAsync(TimeSpan.FromMinutes(5)); - var httpClient = fixture.CreateHttpClient(resourceName, "console"); - - var response = await httpClient.GetAsync("/"); - - Assert.Equal(HttpStatusCode.OK, response.StatusCode); - } - - [Fact] - public async Task ApiServiceCreateData() - { - const string resourceName = "apiservice"; - - var cts = new CancellationTokenSource(TimeSpan.FromMinutes(2)); - - await fixture.ResourceNotificationService.WaitForResourceHealthyAsync("minio", cts.Token).WaitAsync(cts.Token); - await fixture.ResourceNotificationService.WaitForResourceHealthyAsync(resourceName, cts.Token).WaitAsync(cts.Token); - var httpClient = fixture.CreateHttpClient(resourceName); - - var bucketName = "somebucket"; - var createBucketResponse = await httpClient.PutAsync($"/buckets/{bucketName}", null).WaitAsync(cts.Token); - Assert.Equal(HttpStatusCode.OK, createBucketResponse.StatusCode); - - var getBucketResponse = await httpClient.GetAsync($"/buckets/{bucketName}"); - Assert.Equal(HttpStatusCode.OK, getBucketResponse.StatusCode); - - var uploadedString = "Hello World"; - var bytes = Encoding.UTF8.GetBytes(uploadedString); - using var content = new ByteArrayContent(bytes); - content.Headers.ContentType = new("plain/text"); - - var uploadFileResponse = await httpClient.PostAsync($"/buckets/{bucketName}/fileName/upload", content); - Assert.Equal(HttpStatusCode.OK, uploadFileResponse.StatusCode); - - var downloadFileResponse = await httpClient.GetAsync($"/buckets/{bucketName}/fileName/download"); - Assert.Equal(HttpStatusCode.OK, downloadFileResponse.StatusCode); - - var downloadedString = await downloadFileResponse.Content.ReadAsStringAsync(); - Assert.Equal(uploadedString, downloadedString); - } -} diff --git a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/CommunityToolkit.Aspire.Hosting.Minio.Tests.csproj b/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/CommunityToolkit.Aspire.Hosting.Minio.Tests.csproj deleted file mode 100644 index 2ac04873a..000000000 --- a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/CommunityToolkit.Aspire.Hosting.Minio.Tests.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioFunctionalTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioFunctionalTests.cs deleted file mode 100644 index d88488193..000000000 --- a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioFunctionalTests.cs +++ /dev/null @@ -1,244 +0,0 @@ -#pragma warning disable CS0618 // Type or member is obsolete -using Aspire.Components.Common.Tests; -using Aspire.Hosting; -using Aspire.Hosting.Utils; -using CommunityToolkit.Aspire.Testing; -using Microsoft.Extensions.Hosting; -using Minio; -using Minio.DataModel.Args; - -namespace CommunityToolkit.Aspire.Hosting.Minio.Tests; - -[RequiresDocker] -public class MinioFunctionalTests(ITestOutputHelper testOutputHelper) -{ - [Fact] - public async Task StorageGetsCreatedAndUsable() - { - using var distributedApplicationBuilder = TestDistributedApplicationBuilder.Create(testOutputHelper); - var rootUser = "minioadmin"; - - var passwordParameter = ParameterResourceBuilderExtensions.CreateDefaultPasswordParameter(distributedApplicationBuilder, - $"rootPassword"); - distributedApplicationBuilder.Configuration["Parameters:rootPassword"] = await passwordParameter.GetValueAsync(default); - var rootPasswordParameter = distributedApplicationBuilder.AddParameter(passwordParameter.Name); - - var minio = distributedApplicationBuilder - .AddMinioContainer("minio", - distributedApplicationBuilder.AddParameter("username", rootUser), - rootPasswordParameter); - - var minioEndpoint = minio.GetEndpoint("http"); - - await using var app = await distributedApplicationBuilder.BuildAsync(); - - await app.StartAsync(); - - var rns = app.Services.GetRequiredService(); - - await rns.WaitForResourceHealthyAsync(minio.Resource.Name); - - var webApplicationBuilder = Host.CreateApplicationBuilder(); - - webApplicationBuilder.Services.AddMinio(async configureClient => configureClient - .WithEndpoint("localhost", minioEndpoint.Port) - .WithCredentials(rootUser, await passwordParameter.GetValueAsync(default)) - .WithSSL(false) - .Build()); - - using var host = webApplicationBuilder.Build(); - - await host.StartAsync(); - - var minioClient = host.Services.GetRequiredService(); - - await TestApi(minioClient); - } - - [Theory] - [InlineData(true)] - [InlineData(false)] - public async Task WithDataShouldPersistStateBetweenUsages(bool useVolume) - { - string? volumeName = null; - string? bindMountPath = null; - - try - { - using var builder1 = TestDistributedApplicationBuilder.Create(testOutputHelper); - - var rootUser = "minioadmin"; - - var passwordParameter = ParameterResourceBuilderExtensions.CreateDefaultPasswordParameter(builder1, - $"rootPassword"); - builder1.Configuration["Parameters:rootPassword"] = await passwordParameter.GetValueAsync(default); - var rootPasswordParameter = builder1.AddParameter(passwordParameter.Name); - - var minio1 = builder1.AddMinioContainer("minio", - builder1.AddParameter("username", rootUser), - rootPasswordParameter); - - var minio1Endpoint = minio1.GetEndpoint("http"); - - if (useVolume) - { - // Use a deterministic volume name to prevent them from exhausting the machines if deletion fails - volumeName = VolumeNameGenerator.Generate(minio1, nameof(WithDataShouldPersistStateBetweenUsages)); - - // if the volume already exists (because of a crashing previous run), delete it - DockerUtils.AttemptDeleteDockerVolume(volumeName, throwOnFailure: true); - minio1.WithDataVolume(volumeName); - } - else - { - bindMountPath = Directory.CreateTempSubdirectory().FullName; - minio1.WithDataBindMount(bindMountPath); - } - - using (var app = builder1.Build()) - { - await app.StartAsync(); - - var rns = app.Services.GetRequiredService(); - - await rns.WaitForResourceHealthyAsync(minio1.Resource.Name); - - try - { - var webApplicationBuilder = Host.CreateApplicationBuilder(); - - webApplicationBuilder.Services.AddMinio(async configureClient => configureClient - .WithEndpoint("localhost", minio1Endpoint.Port) - .WithCredentials(rootUser, await passwordParameter.GetValueAsync(default)) - .WithSSL(false) - .Build()); - - using var host = webApplicationBuilder.Build(); - - await host.StartAsync(); - - var minioClient = host.Services.GetRequiredService(); - await TestApi(minioClient); - } - finally - { - // Stops the container, or the Volume would still be in use - await app.StopAsync(); - } - } - - using var builder2 = TestDistributedApplicationBuilder.Create(testOutputHelper); - builder2.Configuration["Parameters:rootPassword"] = await passwordParameter.GetValueAsync(default); - var rootPasswordParameter2 = builder2.AddParameter(passwordParameter.Name); - - - var minio2 = builder2.AddMinioContainer("minio", - builder2.AddParameter("username", rootUser), - rootPasswordParameter2); - - var minio2Endpoint = minio2.GetEndpoint("http"); - - if (useVolume) - { - minio2.WithDataVolume(volumeName); - } - else - { - minio2.WithDataBindMount(bindMountPath!); - } - - using (var app = builder2.Build()) - { - await app.StartAsync(); - - var rns = app.Services.GetRequiredService(); - - await rns.WaitForResourceHealthyAsync(minio1.Resource.Name); - - - try - { - var webApplicationBuilder = Host.CreateApplicationBuilder(); - - webApplicationBuilder.Services.AddMinio(async configureClient => configureClient - .WithEndpoint("localhost", minio2Endpoint.Port) - .WithCredentials(rootUser, await passwordParameter.GetValueAsync(default)) - .WithSSL(false) - .Build()); - - using var host = webApplicationBuilder.Build(); - - await host.StartAsync(); - - var minioClient = host.Services.GetRequiredService(); - await TestApi(minioClient, isDataPreGenerated: false); - } - finally - { - // Stops the container, or the Volume would still be in use - await app.StopAsync(); - } - } - - } - finally - { - if (volumeName is not null) - { - DockerUtils.AttemptDeleteDockerVolume(volumeName); - } - - if (bindMountPath is not null) - { - try - { - Directory.Delete(bindMountPath, recursive: true); - } - catch - { - // Don't fail test if we can't clean the temporary folder - } - } - } - } - - private static async Task TestApi(IMinioClient minioClient, bool isDataPreGenerated = true) - { - const string bucketName = "somebucket"; - - const string objectName = "someobj"; - const string contentType = "text/plain"; - - if (isDataPreGenerated) - { - var mbArgs = new MakeBucketArgs() - .WithBucket(bucketName); - await minioClient.MakeBucketAsync(mbArgs); - - var res = await minioClient.ListBucketsAsync(); - - Assert.NotEmpty(res.Buckets); - - var bytearr = "Hey, I'm using minio client! It's awesome!"u8.ToArray(); - var stream = new MemoryStream(bytearr); - - var putObjectArgs = new PutObjectArgs() - .WithBucket(bucketName) - .WithObject(objectName) - .WithStreamData(stream) - .WithObjectSize(stream.Length) - .WithContentType(contentType); - - await minioClient.PutObjectAsync(putObjectArgs); - } - - var statObject = new StatObjectArgs() - .WithBucket(bucketName) - .WithObject(objectName); - - var meta = await minioClient.StatObjectAsync(statObject); - - Assert.NotNull(meta); - Assert.Equal(contentType, meta.ContentType); - } -} \ No newline at end of file diff --git a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioPublicApiTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioPublicApiTests.cs deleted file mode 100644 index cb467eb0a..000000000 --- a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/MinioPublicApiTests.cs +++ /dev/null @@ -1,112 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#pragma warning disable CS0618 // Type or member is obsolete -using Aspire.Hosting; - -namespace CommunityToolkit.Aspire.Hosting.Minio.Tests; - -public class MinioPublicApiTests -{ - [Fact] - public void AddMinioContainerShouldThrowWhenBuilderIsNull() - { - IDistributedApplicationBuilder builder = null!; - const string name = "Minio"; - - var action = () => builder.AddMinioContainer(name); - - var exception = Assert.Throws(action); - Assert.Equal(nameof(builder), exception.ParamName); - } - - [Fact] - public void AddMinioContainerShouldThrowWhenNameIsNull() - { - IDistributedApplicationBuilder builder = new DistributedApplicationBuilder([]); - string name = null!; - - var action = () => builder.AddMinioContainer(name); - - var exception = Assert.Throws(action); - Assert.Equal(nameof(name), exception.ParamName); - } - - [Theory] - [InlineData(false)] - [InlineData(true)] - public void WithDataShouldThrowWhenBuilderIsNull(bool useVolume) - { - IResourceBuilder builder = null!; - - Func>? action = null; - - if (useVolume) - { - action = () => builder.WithDataVolume(); - } - else - { - const string source = "/data"; - - action = () => builder.WithDataBindMount(source); - } - - var exception = Assert.Throws(action); - Assert.Equal(nameof(builder), exception.ParamName); - } - - [Fact] - public void WithDataBindMountShouldThrowWhenSourceIsNull() - { - var builder = new DistributedApplicationBuilder([]); - var resourceBuilder = builder.AddMinioContainer("minio"); - - string source = null!; - - var action = () => resourceBuilder.WithDataBindMount(source); - - var exception = Assert.Throws(action); - Assert.Equal(nameof(source), exception.ParamName); - } - - [Fact] - public void VerifyMinioContainerResourceWithHostPort() - { - var builder = DistributedApplication.CreateBuilder(); - builder.AddMinioContainer("minio") - .WithHostPort(1000); - - var resource = Assert.Single(builder.Resources.OfType()); - var endpoint = Assert.Single(resource.Annotations.OfType(), x => x.Name == "http"); - Assert.Equal(1000, endpoint.Port); - } - - [Fact] - public async Task VerifyMinioContainerResourceWithPassword() - { - var builder = DistributedApplication.CreateBuilder(); - var password = "p@ssw0rd1"; - var pass = builder.AddParameter("pass", password); - var minio = builder.AddMinioContainer("minio") - .WithPassword(pass) - .WithEndpoint("http", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 2000)); - - var connectionString = await minio.Resource.GetConnectionStringAsync(); - Assert.Equal(await ReferenceExpression.Create($"Endpoint=http://localhost:2000;AccessKey=minioadmin;SecretKey={password}").GetValueAsync(CancellationToken.None), connectionString); - } - - [Fact] - public async Task VerifyMinioContainerResourceWithUserName() - { - var builder = DistributedApplication.CreateBuilder(); - var user = "user1"; - var pass = builder.AddParameter("user", user); - var postgres = builder.AddMinioContainer("minio") - .WithUserName(pass) - .WithEndpoint("http", e => e.AllocatedEndpoint = new AllocatedEndpoint(e, "localhost", 2000)); - - var connectionString = await postgres.Resource.GetConnectionStringAsync(); - Assert.Equal($"Endpoint=http://localhost:2000;AccessKey=user1;SecretKey={await postgres.Resource.PasswordParameter.GetValueAsync(default)}", connectionString); - } -} diff --git a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/ResourceCreationTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/ResourceCreationTests.cs deleted file mode 100644 index d5b2891ec..000000000 --- a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/ResourceCreationTests.cs +++ /dev/null @@ -1,48 +0,0 @@ -#pragma warning disable CS0618 // Type or member is obsolete -using Aspire.Hosting; - -namespace CommunityToolkit.Aspire.Hosting.Minio.Tests; - -public class ResourceCreationTests -{ - [Fact] - public void MinioResourceGetsAdded() - { - var builder = DistributedApplication.CreateBuilder(); - - builder.AddMinioContainer("minio"); - - using var app = builder.Build(); - - var appModel = app.Services.GetRequiredService(); - - var resource = Assert.Single(appModel.Resources.OfType()); - - Assert.Equal("minio", resource.Name); - } - - [Fact] - public void MinioResourceHasHealthCheck() - { - var builder = DistributedApplication.CreateBuilder(); - - builder.AddMinioContainer("minio"); - - using var app = builder.Build(); - - var appModel = app.Services.GetRequiredService(); - - var resource = appModel.Resources.OfType().SingleOrDefault(); - - Assert.NotNull(resource); - - Assert.Equal("minio", resource.Name); - - var result = resource.TryGetAnnotationsOfType(out var annotations); - - Assert.True(result); - Assert.NotNull(annotations); - - Assert.Single(annotations); - } -} \ No newline at end of file diff --git a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/TypeScriptAppHostTests.cs b/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/TypeScriptAppHostTests.cs deleted file mode 100644 index c734a926a..000000000 --- a/tests/CommunityToolkit.Aspire.Hosting.Minio.Tests/TypeScriptAppHostTests.cs +++ /dev/null @@ -1,18 +0,0 @@ -using CommunityToolkit.Aspire.Testing; - -namespace CommunityToolkit.Aspire.Hosting.Minio.Tests; - -[RequiresDocker] -public class TypeScriptAppHostTests -{ - [Fact] - public async Task TypeScriptAppHostCompilesAndStarts() - { - await TypeScriptAppHostTest.Run( - appHostProject: "CommunityToolkit.Aspire.Hosting.Minio.AppHost.TypeScript", - packageName: "CommunityToolkit.Aspire.Hosting.Minio", - exampleName: "minio", - waitForResources: ["minio", "minio-defaults", "minio-bind-mount"], - cancellationToken: TestContext.Current.CancellationToken); - } -} \ No newline at end of file diff --git a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/CommunityToolkit.Aspire.Minio.Client.Tests.csproj b/tests/CommunityToolkit.Aspire.Minio.Client.Tests/CommunityToolkit.Aspire.Minio.Client.Tests.csproj deleted file mode 100644 index 81fa1b4c6..000000000 --- a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/CommunityToolkit.Aspire.Minio.Client.Tests.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConfigurationTests.cs b/tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConfigurationTests.cs deleted file mode 100644 index 160ddfb9f..000000000 --- a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConfigurationTests.cs +++ /dev/null @@ -1,115 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#pragma warning disable CS0618 // Type or member is obsolete -namespace CommunityToolkit.Aspire.Minio.Client.Tests; - -public class ConfigurationTests -{ - [Fact] - public void EndpointIsNullByDefault() => - Assert.Null(new MinioClientSettings().Endpoint); - - [Fact] - public void CredentialsIsNullByDefault() => - Assert.Null(new MinioClientSettings().Credentials); - - [Fact] - public void UseSslIsFalseByDefault() - { - var settings = new MinioClientSettings(); - Assert.False(settings.UseSsl); - } - - [Fact] - public void ParseConnectionString_HttpsUri_DoesNotInferUseSsl() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString("https://minio.example.com:9000"); - - Assert.NotNull(settings.Endpoint); - Assert.Equal("https://minio.example.com:9000/", settings.Endpoint.ToString()); - Assert.False(settings.UseSsl); // Should remain false since UseSsl was not explicitly set - } - - [Fact] - public void ParseConnectionString_HttpUri_DoesNotInferUseSsl() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString("http://minio.example.com:9000"); - - Assert.NotNull(settings.Endpoint); - Assert.Equal("http://minio.example.com:9000/", settings.Endpoint.ToString()); - Assert.False(settings.UseSsl); // Should remain false - } - - [Fact] - public void ParseConnectionString_ExplicitUseSslTrue() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString("Endpoint=http://minio.example.com:9000;UseSsl=true;AccessKey=key;SecretKey=secret"); - - Assert.NotNull(settings.Endpoint); - Assert.True(settings.UseSsl); - } - - [Fact] - public void ParseConnectionString_ExplicitUseSslFalse() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString("Endpoint=https://minio.example.com:9000;UseSsl=false;AccessKey=key;SecretKey=secret"); - - Assert.NotNull(settings.Endpoint); - Assert.False(settings.UseSsl); - } - - [Fact] - public void ParseConnectionString_UseSslCaseInsensitive() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString("Endpoint=http://minio.example.com:9000;UseSsl=True;AccessKey=key;SecretKey=secret"); - - Assert.True(settings.UseSsl); - } - - - [Fact] - public void ParseConnectionString_WithCredentials() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString("Endpoint=http://minio.example.com:9000;AccessKey=mykey;SecretKey=mysecret;UseSsl=true"); - - Assert.NotNull(settings.Endpoint); - Assert.NotNull(settings.Credentials); - Assert.Equal("mykey", settings.Credentials.AccessKey); - Assert.Equal("mysecret", settings.Credentials.SecretKey); - Assert.True(settings.UseSsl); - } - - [Fact] - public void ParseConnectionString_NullOrEmpty_DoesNotThrow() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString(null); - Assert.Null(settings.Endpoint); - - settings = new MinioClientSettings(); - settings.ParseConnectionString(""); - Assert.Null(settings.Endpoint); - - settings = new MinioClientSettings(); - settings.ParseConnectionString(" "); - Assert.Null(settings.Endpoint); - } - - [Fact] - public void ParseConnectionString_HttpsEndpointInConnectionString_DoesNotInferUseSsl() - { - var settings = new MinioClientSettings(); - settings.ParseConnectionString("Endpoint=https://minio.example.com:9000;AccessKey=key;SecretKey=secret"); - - Assert.NotNull(settings.Endpoint); - Assert.Equal("https://minio.example.com:9000/", settings.Endpoint.ToString()); - Assert.False(settings.UseSsl); // Should remain false without explicit UseSsl - } -} diff --git a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConformanceTests.cs b/tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConformanceTests.cs deleted file mode 100644 index a9b5fc299..000000000 --- a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/ConformanceTests.cs +++ /dev/null @@ -1,92 +0,0 @@ -#pragma warning disable CS0618 // Type or member is obsolete -using Aspire.Components.Common.Tests; -using Aspire.Components.ConformanceTests; -using CommunityToolkit.Aspire.Testing; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; -using Minio; -using Minio.DataModel.Args; - -namespace CommunityToolkit.Aspire.Minio.Client.Tests; - -public class ConformanceTests(MinioContainerFeature minioContainerFeature) : ConformanceTests, IClassFixture -{ - protected override ServiceLifetime ServiceLifetime => ServiceLifetime.Singleton; - - protected override string ActivitySourceName => string.Empty; - - protected override string[] RequiredLogCategories => []; - - protected override bool CanConnectToServer => RequiresDockerAttribute.IsSupported; - - protected override bool SupportsKeyedRegistrations => false; - - protected override string ConfigurationSectionName => "Aspire:Minio:Client"; - - protected override void PopulateConfiguration(ConfigurationManager configuration, string? key = null) - { - var endpoint = RequiresDockerAttribute.IsSupported ? - $"{minioContainerFeature.GetContainerEndpoint()}" : - "Endpoint=http://localhost:9000"; - - const string accessKey = "minioadmin"; - const string secretKey = "minioadmin"; - - var connString = $"{endpoint};AccessKey={accessKey}; SecretKey={secretKey}"; - - configuration.AddInMemoryCollection( - [ - new KeyValuePair(CreateConfigKey(ConfigurationSectionName, null, suffix: "Endpoint"), endpoint), - new KeyValuePair(CreateConfigKey(ConfigurationSectionName+":Credentials", null, suffix: "AccessKey"), accessKey), - new KeyValuePair(CreateConfigKey(ConfigurationSectionName+":Credentials", null, suffix: "SecretKey"), secretKey), - new KeyValuePair($"ConnectionStrings:{key ?? "minio"}", connString) - ]); - } - - protected override void RegisterComponent(HostApplicationBuilder builder, Action? configure = null, string? key = null) - { - builder.AddMinioClient("minio", configureSettings: configure); - } - - protected override void SetHealthCheck(MinioClientSettings options, bool enabled) - { - throw new NotImplementedException(); - } - - protected override void SetMetrics(MinioClientSettings options, bool enabled) - { - throw new NotImplementedException(); - } - - protected override void SetTracing(MinioClientSettings options, bool enabled) - { - throw new NotImplementedException(); - } - - protected override void TriggerActivity(IMinioClient service) - { - using var source = new CancellationTokenSource(100); - - if (service is MinioClient minioClient) - { - minioClient.ListBucketsAsync(source.Token).Wait(); - } - } - - protected override string ValidJsonConfig => """ - { - "Aspire": { - "Minio": { - "Client": { - "Endpoint": "http://localhost:9001", - "Credentials": { - "AccessKey": "minioadmin", - "SecretKey": "minioadmin", - } - } - } - } - } - """; - -} \ No newline at end of file diff --git a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioClientPublicApiTests.cs b/tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioClientPublicApiTests.cs deleted file mode 100644 index 3316fee68..000000000 --- a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioClientPublicApiTests.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -#pragma warning disable CS0618 // Type or member is obsolete -using Microsoft.Extensions.Hosting; - -namespace CommunityToolkit.Aspire.Minio.Client.Tests; - -public class MinioClientPublicApiTests -{ - [Fact] - public void AddMinioClientShouldThrowWhenBuilderIsNull() - { - IHostApplicationBuilder builder = null!; - - var configurationSectionName = "minio"; - - var action = () => builder.AddMinioClient(configurationSectionName); - - var exception = Assert.Throws(action); - Assert.Equal(nameof(builder), exception.ParamName); - } - - [Fact] - public void AddMinioClientShouldThrowWhenConfigurationSectionNameIsNull() - { - IHostApplicationBuilder builder = null!; - - string? configurationSectionName = null; - - var action = () => builder.AddMinioClient(configurationSectionName: configurationSectionName); - - var exception = Assert.Throws(action); - Assert.Equal(nameof(builder), exception.ParamName); - } -} diff --git a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioContainerFeature.cs b/tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioContainerFeature.cs deleted file mode 100644 index c99a3c2c9..000000000 --- a/tests/CommunityToolkit.Aspire.Minio.Client.Tests/MinioContainerFeature.cs +++ /dev/null @@ -1,51 +0,0 @@ -#pragma warning disable CS0618 // Type or member is obsolete -using Aspire.Components.Common.Tests; -using CommunityToolkit.Aspire.Hosting.Minio; -using CommunityToolkit.Aspire.Testing; -using DotNet.Testcontainers.Builders; -using DotNet.Testcontainers.Containers; - -namespace CommunityToolkit.Aspire.Minio.Client.Tests; - -public class MinioContainerFeature : IAsyncLifetime -{ - private const int MinioPort = 9000; - public IContainer? Container { get; private set; } - public string GetContainerEndpoint() - { - if (Container is null) - { - throw new InvalidOperationException("The test container was not initialized."); - } - var endpoint = new UriBuilder("http", Container.Hostname, Container.GetMappedPublicPort(MinioPort)).ToString(); - return endpoint; - } - - public async ValueTask InitializeAsync() - { - if (RequiresDockerAttribute.IsSupported) - { - Container = new ContainerBuilder() - .WithImage($"{MinioContainerImageTags.Registry}/{MinioContainerImageTags.Image}:{MinioContainerImageTags.Tag}") - .WithPortBinding(MinioPort, true) - .WithCommand("server", "/data") - .WithEnvironment("MINIO_ADDRESS", $":{9000.ToString()}") - .WithEnvironment("MINIO_ROOT_USER", "minioadmin") - .WithEnvironment("MINIO_ROOT_PASSWORD", "minioadmin") - .WithWaitStrategy(Wait.ForUnixContainer() - .UntilHttpRequestIsSucceeded(request => request.ForPath("/minio/health/ready") - .ForPort(MinioPort))) - .Build(); - - await Container.StartAsync(); - } - } - - public async ValueTask DisposeAsync() - { - if (Container is not null) - { - await Container.DisposeAsync(); - } - } -}