JoreNoe 7.4.7
dotnet add package JoreNoe --version 7.4.7
NuGet\Install-Package JoreNoe -Version 7.4.7
<PackageReference Include="JoreNoe" Version="7.4.7" />
paket add JoreNoe --version 7.4.7
#r "nuget: JoreNoe, 7.4.7"
// Install JoreNoe as a Cake Addin #addin nuget:?package=JoreNoe&version=7.4.7 // Install JoreNoe as a Cake Tool #tool nuget:?package=JoreNoe&version=7.4.7
🎉 JoreNoe Package
📦 安装方法
Build | NuGet | Downloads |
---|---|---|
<a href="https://www.nuget.org/packages/JoreNoe/" rel="nofollow noreferrer"><img src="https://img.shields.io/nuget/dt/JoreNoe?label=Downloads" alt="NuGet Downloads"></a> |
Install-Package JoreNoe -Version Laster
install-package Jorenoe -version 7.4.6
📂 文档目录
ORM使用
Redis扩展如何使用
发送Email消息扩展如何使用
辅助开发帮助类或者函数如何使用
NetCore中间件使用
RabbitMQ如何使用
ORM使用说明
JoreNoe包目前支持数据库:Mysql , SqlServer
支持,ORM框架 Dapper,EFCore
<a name="OPT1-1"></a>
🏗 1. Dapper 使用指南
📌 第一步:引用依赖
在代码中引入 JoreNoe.DB.Dapper,确保 Dapper 能够正确使用。
using JoreNoe.DB.Dapper;
🛠 第二步:注册 Dapper 服务
在应用程序启动时,将 Dapper 添加到 依赖注入容器。
在 Startup.cs 文件中的 ConfigureServices
方法中,调用 AddJoreNoeDapper
进行注册:
public void ConfigureServices(IServiceCollection services)
{
services.AddJoreNoeDapper("your_connection_string_here", IDBType.SqlServer);
// 或者
services.AddJoreNoeDapper("your_connection_string_here", IDBType.MySql);
}
🔹 最新版本支持 单库 & 多库模式
单库模式
// 单个模式注入
builder.Services.AddJoreNoeDapper("your_connection_string_here", IDBType.MySql, true);
多库模式
// 多个模式注入
builder.Services.AddJoreNoeDapper(
new List<DatabaseSettings>
{
new DatabaseSettings("your_connection_string_here", IDBType.MySql, true,
AvailableTables: new List<string> { "User" }), // 绑定 User 表
new DatabaseSettings("your_connection_string_here", IDBType.MySql, true,
AvailableTables: new List<string> { "test" }) // 绑定 test 表
}
);
🚀 第三步:使用 Dapper 服务
🔹 在业务逻辑中使用 Repository
public class YourService
{
private readonly IRepository<test> TestRepository;
public YourService(IRepository<test> TestRepository)
{
this.TestRepository = TestRepository;
}
public void YourMethod()
{
this.TestRepository.Add(new test { ... });
}
}
🔍 获取数据库属性
public class YourService
{
private readonly IDatabaseService dataBaseService;
public YourService(IDatabaseService dataBaseService)
{
this.dataBaseService = dataBaseService;
}
public IDbConnection GetConnection()
{
return this.dataBaseService.GetConnection(); // 获取数据库连接
}
public string GetPropValue()
{
return this.dataBaseService.DataBaseSettings.connectionString; // 数据库连接字符串
return this.dataBaseService.DataBaseSettings.dbType; // 数据库类型
return this.dataBaseService.DataBaseSettings.mulitInsertBatchcount; // 批量插入时每批数量
}
}
❌ 不使用依赖注入方式(手动创建实例)
如果不想使用 依赖注入(DI),可以手动创建 Repository
实例:
public class UserController
{
var database = new Repository<test>(new DatabaseService("your_connection_string_here", IDBType.MySql, 200000));
database.Add(new test { ... });
}
✅ 总结:
- 支持单库 & 多库模式
- 支持依赖注入 & 手动实例化
- 提供数据库连接 & 批量插入配置
- 便捷的 Repository 操作,提升开发效率
🚀 Dapper + JoreNoe 让数据操作更简单! 🎯
<a name="OPT1-2"></a>
🏗 2. EntityFramework.Core 使用指南
📌 第一步:项目结构
在 仓储项目 中创建以下文件:
1. RepositoryModule.cs
2. IntegratedPlatformSupporRegister.cs // 名称可自定义
在 数据访问层 中创建 DbContext 文件:
3. IntegratedPlatformSupporDBContext.cs // 名称可自定义
🛠 第二步:代码实现
1️⃣ RepositoryModule.cs - 依赖注入模块
using Autofac;
using JoreNoe;
using JoreNoe.DB.EntityFrameWork.Core.SqlServer;
namespace IntegratedPlatformSuppor.Repository
{
public class RepositoryModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.RegisterType<IntegratedPlatformSupporRegister>().As<ICurrencyRegister>().InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(Repository<,>)).As(typeof(IRepository<,>));
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerLifetimeScope();
}
}
}
2️⃣ IntegratedPlatformSupporRegister.cs - 注册 DbContext
using JoreNoe;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
namespace IntegratedPlatformSuppor.Repository
{
public class IntegratedPlatformSupporRegister : ICurrencyRegister, IDisposable
{
private DbContext _dbContext;
public IntegratedPlatformSupporRegister(IConfiguration Configuration)
{
this._dbContext = new IntegratedPlatformSupporDBContext { Configuration = Configuration };
}
public DbContext Dbcontext { get => this._dbContext; set { this._dbContext = value; } }
public void Dispose()
{
this._dbContext.Dispose();
}
}
}
3️⃣ IntegratedPlatformSupporDBContext.cs - 数据库上下文
using IntegratedPlatformSuppor.Domain.Entity;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
namespace IntegratedPlatformSuppor.Repository
{
public class IntegratedPlatformSupporDBContext : DbContext
{
public IntegratedPlatformSupporDBContext() { }
public IConfiguration Configuration { set; get; }
public DbSet<User> Users { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connStr = this.Configuration.GetConnectionString("DbConnect");
optionsBuilder.UseSqlServer(string.IsNullOrEmpty(connStr) ? "Server=47.106.198.147;Database=IntegratedPlatformSuppor;Uid=sa;Password=JoreNoe123$%^" : connStr);
base.OnConfiguring(optionsBuilder);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Test>().HasQueryFilter(t => t.IsDelete == false);
modelBuilder.Entity<User>().HasQueryFilter(t => t.IsDelete == false);
modelBuilder.Entity<MeansCategory>().HasQueryFilter(d => !d.IsDelete);
}
}
}
🔹 第三步:注册 AutoFac 依赖
在项目根目录创建 Autofac.json,调整模块配置:
{
"modules": [
{ "type": "IntegratedPlatformSuppor.Repository.RepositoryModule,IntegratedPlatformSuppor.Repository" },
{ "type": "IntegratedPlatformSuppor.API.APIModule,IntegratedPlatformSuppor.API" },
{ "type": "IntegratedPlatformSuppor.DomainService.DomainServiceModule,IntegratedPlatformSuppor.DomainService" }
]
}
1️⃣ WebApi 项目 Program.cs 配置
using Autofac.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using System.IO;
namespace IntegratedPlatformSuppor.API
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureAppConfiguration((appConfiguration, builder) =>
{
builder.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("Configs/Redis.json", optional: false, reloadOnChange: true)
.AddJsonFile("Configs/Exceptionless.json", optional: false, reloadOnChange: true)
.AddJsonFile("Configs/WeChatOpenConfig.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables().Build();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseUrls("http://*:5000");
});
}
}
2️⃣ 在 Startup.cs 里注册 AutoFac
public void ConfigureContainer(ContainerBuilder builder)
{
var config = new ConfigurationBuilder();
config.AddJsonFile("./Configs/Autofac.json");
builder.RegisterModule(new ConfigurationModule(config.Build()));
}
🚀 实战使用示例
public class testDomainService : BaseRepository, ItestDomainService
{
private readonly IRepository<Guid, Test> _testRepository;
public testDomainService(IRepository<Guid, Test> testRepository, IUnitOfWork unit) : base(unit)
{
_testRepository = testRepository;
}
public TestValue GetTest()
{
return _testRepository.Single(Guid.NewGuid());
}
}
✅ 总结
- 支持 AutoFac 依赖注入,模块化管理依赖
- 统一管理数据库上下文,支持多数据库配置
- 提供自动查询过滤器,提升数据查询效率
- 可扩展性强,适用于企业级应用
🚀 EFCore + JoreNoe 让数据访问更简单高效! 🎯
<a name="OPT2"></a>
3. 🏗 Redis 使用说明
如何使用
1. 注入 JoreNoe Redis 中注册上下文
📌 步骤 1:注入 Redis
public void ConfigureServices(IServiceCollection services)
{
services.AddJoreNoeRedis("your_connection_string_here", "InstanceName", DefaultDB = 0);
}
🔧 **步骤 2: 如何使用Redis**
```C#
using JoreNoe.Cache.Redis;
public class RedisTest
{
private readonly JoreNoe.Cache.Redis.IRedisManager ReadisManager;
public RedisTest(JoreNoe.Cache.Redis.IRedisManager ReadisManager) {
this.ReadisManager = ReadisManager;
}
public void test()
{
this.ReadisManager.Add("Test", "test", JoreNoe.Cache.Redis.ExpireModel.LongCache);
Console.WriteLine(this.ReadisManager.Get("Test"));
}
}
🔗 步骤3:手动创建实例并调用
JoreNoe.Cache.Redis.JoreNoeRedisBaseService RedisDataBase = new JoreNoe.Cache.Redis.JoreNoeRedisBaseService(new JoreNoe.Cache.Redis.SettingConfigs {
ConnectionString= "localhost:6379,password=mima",
DefaultDB=1,
InstanceName="TestRedis"
});
JoreNoe.Cache.Redis.IRedisManager RedisManager = new JoreNoe.Cache.Redis.RedisManager(RedisDataBase);
RedisManager.Add("Test","test", JoreNoe.Cache.Redis.ExpireModel.LongCache);
Console.WriteLine(RedisManager.Get("Test"));
Console.ReadLine();
<a name="OPT3"></a>
🏗 发送消息
📧目前支持:Email
📌1.邮箱发送
如何使用
using JoreNoe.Message;
public class test{
public void sendtest(){
// 首先注册
var EmailHelper = new EmailMessageAPI(发送者,SMTP地址,SMTP端口,密码(个人是授权码),是否开启SSL认证);
EmailHelper.Send(收件人,标题,主题内容,是否开启兼容HTML);
}
}
<a name="OPT4"></a>
🏗 帮助扩展方法
🚀支持:boolean,字典转SQL,映射,实体转字典,Resolve扩展
🔗1.bool 扩展方法
using JoreNoe.Extend;
public class test{
public void sendtest(){
/// <summary>
/// 可用枚举类型 默认 1
/// 类型1:IsOrDeny 是 否
/// 类型2:TrueOrFalse 真 假
/// 类型3:OnOrOff 开 关
/// 类型4:EnableOrDisable 启用 关闭
/// </summary>
var booltest = false;
var REsult = booltest.BooleanToString(AvailableType.IsOrDeny);
// 输出 否
}
}
🔗2.映射(AutoMapper)
// 直接使用方式
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<test, test1>();
cfg.CreateMap<test1, test>();
});
var mapper = new Mapper(config);
JoreNoe.Extend.JoreNoeObjectToObjectExtension.UseJoreNoeObjectToOBject(mapper);
var test = new test() {
name = "c",
age=123
};
var test1 = new test1();
// 将 test 数据 给 test1
var ment = test.Map(test1);
Console.ReadLine();
// NET 使用方式
// StartUp
public partial class Startup
{
protected void AddAutoMapper(IServiceCollection services)
{
services.TryAddSingleton<MapperConfigurationExpression>();
services.TryAddSingleton(serviceProvider =>
{
var mapperConfigurationExpression = serviceProvider.GetRequiredService<MapperConfigurationExpression>();
var instance = new MapperConfiguration(mapperConfigurationExpression);
instance.AssertConfigurationIsValid();
return instance;
});
services.TryAddSingleton(serviceProvider =>
{
var mapperConfiguration = serviceProvider.GetRequiredService<MapperConfiguration>();
return mapperConfiguration.CreateMapper();
});
}
public void UseAutoMapper(IApplicationBuilder applicationBuilder)
{
var config = applicationBuilder.ApplicationServices.GetRequiredService<MapperConfigurationExpression>();
//订单
config.CreateMap<OrderModel, Order>(MemberList.None);
config.CreateMap<Order, OrderValue>(MemberList.None);
//config.CreateMap<User, UserInfo>().ForMember(d => d.names, option => option.MapFrom(d => d.name)).ReverseMap();
}
// Program
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseServiceProviderFactory(new AutofacServiceProviderFactory())
.ConfigureAppConfiguration((appConfiguration, builder) =>
{
builder
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("Configs/Redis.json", optional: false, reloadOnChange: true)
.AddJsonFile("Configs/Exceptionless.json", optional: false, reloadOnChange: true)
.AddJsonFile("Configs/WeChatOpenConfig.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables().Build();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseUrls("http://*:5000");
});
// StartUp Configure 中
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment() || env.IsProduction())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "ZerroMovies.API v1"));
}
app.UseObjectToOBjectExtension();
}
🔗3.Resolve扩展
// 在程序启动时设置容器工厂
AutofacResolver.SetContainerFactory(() => container);
// 在需要解析依赖项的地方使用 AutofacResolver
var service = AutofacResolver.Resolve<IMyService>();
🔗4.网络请求HttpClientAPI
🔗4.1注入方式
// 注入 在 StartUp 或者 (NEt6以上在Program中注册)
services.AddHttpClientApi();
//使用Demo
using Microsoft.AspNetCore.Mvc;
using JoreNoe.JoreHttpClient; // 引入你的命名空间
namespace MyApp.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
private readonly HttpClientApi _httpClientApi;
public TestController(HttpClientApi httpClientApi)
{
_httpClientApi = httpClientApi;
}
[HttpGet("get")]
public async Task<IActionResult> Get()
{
try
{
var response = await _httpClientApi.GetAsync("https://api.example.com/data");
return Ok(response);
}
catch (HttpRequestException ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
}
[HttpPost("post")]
public async Task<IActionResult> Post([FromBody] string content)
{
try
{
var response = await _httpClientApi.PostAsync("https://api.example.com/data", content);
return Ok(response);
}
catch (HttpRequestException ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
}
}
}
🔗4.2 直接使用方式
// 创建 HttpClientHandler(可以配置 SSL 验证等)
var handler = new HttpClientHandler
{
// 例如:禁用 SSL 证书验证
ServerCertificateCustomValidationCallback = (message, cert, chain, sslPolicyErrors) => true
};
// 创建 HttpClient 实例
var httpClient = new HttpClient(handler)
{
BaseAddress = new Uri("https://api.example.com/")
};
// 创建 IHttpClientFactory 的模拟实现
var httpClientFactory = new FakeHttpClientFactory(httpClient);
// 创建 HttpClientApi 实例
var httpClientApi = new HttpClientApi(httpClientFactory);
// 使用 HttpClientApi 发送请求
try
{
var response = await httpClientApi.GetAsync("data");
Console.WriteLine(response);
}
catch (HttpRequestException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
🔗5.Swagger暗黑主题
app.UseSwagger();
app.UseJoreNoeSwaggerThemeDark(); // 注入
app.UseSwaggerUI(option =>
{
option.InjectStylesheet(SwaggerThemsExtend.DarkTheme); // 注入主题地址
option.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
option.SwaggerEndpoint("/swagger/v2/swagger.json", "v2");
});
<a name="OPT5"></a>
🚀中间件的使用
🔗1.全局错误日志中间件
// 使用方式1 webapi 全局错误日志中间件 直接使用方式
app.UseJoreNoeGlobalErrorHandlingMiddleware(async (ex, context) =>
{
// 返回错误信息 // 处理自己的数据
await Console.Out.WriteLineAsync(ex.Message);
});
// 使用方式2 注入 自定义类继承使用方式
builder.Services.AddJoreNoeGlobalErrorHandlingMiddleware<TestErrorMiddleWare>();
app.UseJoreNoeGlobalErrorHandlingMiddleware();
// 使用案例
using JoreNoe.Middleware;
namespace TestNET6Project
{
public class TestErrorMiddleWare : IJoreNoeGlobalErrorHandling
{
public async Task GlobalErrorHandling(Exception Ex)
{
await Console.Out.WriteLineAsync(JoreNoeRequestCommonTools.FormatError(Ex));
}
}
}
🔗2.全局运行日志中间件
// webapi 全局运行日志中间件 直接使用方式
app.UseJoreNoeRequestLoggingMiddleware(info => {
Console.WriteLine("方法"+info.Method);
Console.WriteLine("路径" + info.Path);
Console.WriteLine("开始时间" + info.StartTime);
Console.WriteLine("总时长" + info.Duration);
Console.WriteLine("Get请求参数" + info.QueryString);
Console.WriteLine("BODY请求参数" + info.RequestBody);
Console.WriteLine("完整路径" + info.FullPathUrl);
Console.WriteLine("Headers" + info.Headers);
});
// 注入 自定义类继承使用方式
builder.Services.AddJoreNoeRequestLoggingMiddleware<TestMiddleWare>();
app.UseJoreNoeRequestLoggingMiddleware();
// 使用案例
using JoreNoe.Middleware;
namespace TestNET6Project
{
public class TestMiddleWare : IJorenoeRuningRequestLogging
{
public async Task RunningRequestLogging(JorenoeRuningRequestLoggingModel info)
{
Console.WriteLine("方法" + info.Method);
Console.WriteLine("路径" + info.Path);
Console.WriteLine("开始时间" + info.StartTime);
Console.WriteLine("总时长" + info.Duration);
Console.WriteLine("Get请求参数" + info.QueryString);
Console.WriteLine("BODY请求参数" + info.RequestBody);
Console.WriteLine("完整路径" + info.FullPathUrl);
Console.WriteLine("Headers" + info.Headers);
}
}
}
<a name="OPT6"></a>
🚀 RabbitMQ使用
🔗1.初始化
// 在Program 或者 StrartUp 中 进行初始化
// 加入RabbitMQ 外部使用 监控使用 特殊用法
JoreNoe.Queue.RBMQ.Register.RegisterQueue("Ip", "账户", "密码", "/虚机", "队列名称");
// 例子
JoreNoe.Queue.RBMQ.Register.RegisterQueue("124.70.12.123", "jorenoe", "jorenoe", "/", "Moitoring");
📌注意 如果只推送 不接受按照第一步初始化即可,如果需要接受请按一下配置
JoreNoe.Queue.RBMQ.Register.RegisterQueue("124.70.12.123", "jorenoe", "jorenoe", "/", "Moitoring");
QueueManager.Receive<MoitoringEvent>(new CustomerRabbitMQ(), "Moitoring");// 增加一条接受配置
public class CustomerRabbitMQ : ICustome<MoitoringEvent>
{
public async Task<MoitoringEvent> ConSume(CustomeContent<MoitoringEvent> Context)
{
MessageBox.Show(Context.Context.SID);
return null;
}
}
🔗2.使用 推送 和 接受
public class MoitoringEvent
{
/// <summary>
/// 设备ID
/// </summary>
public string SID { get; set; }
/// <summary>
/// 上线还是下线
/// </summary>
public string Type { get; set; }
}
// 推送
QueueManager.SendPublish<MoitoringEvent>(new MoitoringEvent { SID = SID,Type= Type });
// 接收
public class CustomerRabbitMQ : ICustome<MoitoringEvent>
{
public async Task<MoitoringEvent> ConSume(CustomeContent<MoitoringEvent> Context)
{
MessageBox.Show(Context.Context.SID);
return null;
}
}
📜 版权声明
版权所有 © JoreNoe。保留所有权利。
未经许可,不得复制、修改、分发或用于商业用途。
📌 许可条款
- 允许个人或组织在 非商业用途 下使用、学习和研究本软件。
- 禁止未经授权的商业使用、转载、二次开发或销售。
- 如需商业授权,请联系 jorenoe@163.com。
📞 联系方式
📧 Email: jorenoe@163.com
🌍 官网: JoreNoe 官方网站
JoreNoe 感谢您的支持!🚀
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. |
-
net6.0
- Autofac (>= 8.2.0)
- AutoMapper (>= 13.0.1)
- Dapper (>= 2.1.66)
- Dapper.Contrib (>= 2.0.78)
- EPPlus (>= 7.6.0)
- Microsoft.AspNetCore.Http.Abstractions (>= 2.3.0)
- Microsoft.AspNetCore.Mvc.Core (>= 2.3.0)
- Microsoft.EntityFrameworkCore (>= 6.0.36)
- Microsoft.EntityFrameworkCore.SqlServer (>= 6.0.36)
- Microsoft.Extensions.Configuration (>= 9.0.2)
- Microsoft.Extensions.Http (>= 9.0.2)
- MySql.Data (>= 9.2.0)
- Newtonsoft.Json (>= 13.0.3)
- NPOI (>= 2.7.2)
- Pomelo.EntityFrameworkCore.MySql (>= 6.0.3)
- RabbitMQ.Client (>= 6.8.1)
- SharpZipLib (>= 1.4.2)
- StackExchange.Redis (>= 2.8.24)
- System.Data.Odbc (>= 8.0.0)
- Z.EntityFramework.Extensions.EFCore (>= 6.102.2.3)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
7.4.7 | 8,824 | 3/5/2025 |
7.4.7-test | 181 | 3/5/2025 |
7.4.6 | 61,996 | 2/28/2025 |
7.4.5 | 91 | 2/27/2025 |
7.4.4 | 100 | 2/19/2025 |
7.4.3 | 83 | 2/19/2025 |
7.4.2 | 74 | 2/18/2025 |
7.3.6 | 15,552 | 2/12/2025 |
7.3.5 | 235 | 2/12/2025 |
7.3.4 | 244 | 2/12/2025 |
7.3.2 | 247 | 2/12/2025 |
7.3.1 | 278 | 1/21/2025 |
7.3.0 | 229 | 1/15/2025 |
7.2.9 | 248 | 12/24/2024 |
7.2.8 | 243 | 12/24/2024 |
7.2.7 | 265 | 12/19/2024 |
7.2.6 | 277 | 12/10/2024 |
7.2.5 | 252 | 11/27/2024 |
7.2.4 | 239 | 11/27/2024 |
7.2.3 | 231 | 11/25/2024 |
7.2.1 | 226 | 11/25/2024 |
7.2.0 | 245 | 11/25/2024 |
7.1.9 | 250 | 11/22/2024 |
7.1.8 | 233 | 11/22/2024 |
7.1.7 | 227 | 11/22/2024 |
7.1.6 | 9,282 | 11/20/2024 |
7.1.5 | 244 | 11/20/2024 |
7.1.4 | 238 | 11/20/2024 |
7.1.3 | 258 | 10/31/2024 |
7.1.2 | 7,940 | 10/18/2024 |
7.1.1 | 309 | 10/18/2024 |
7.1.0 | 246 | 10/17/2024 |
7.0.9 | 246 | 10/16/2024 |
7.0.8 | 252 | 10/15/2024 |
7.0.7 | 255 | 10/15/2024 |
7.0.6 | 260 | 10/15/2024 |
7.0.5 | 252 | 10/14/2024 |
7.0.4 | 249 | 10/14/2024 |
7.0.3 | 252 | 10/14/2024 |
7.0.2.2 | 256 | 10/14/2024 |
7.0.2.1 | 258 | 10/12/2024 |
7.0.2 | 252 | 10/12/2024 |
7.0.1.9 | 272 | 9/15/2024 |
7.0.1.8 | 249 | 9/15/2024 |
7.0.1.7 | 271 | 9/15/2024 |
7.0.1.6 | 7,803 | 9/15/2024 |
7.0.1.5 | 268 | 9/14/2024 |
7.0.1.4 | 276 | 9/14/2024 |
7.0.1.3 | 271 | 9/14/2024 |
7.0.1.2 | 270 | 9/14/2024 |
7.0.1.1 | 291 | 7/5/2024 |
7.0.1 | 272 | 7/3/2024 |
7.0.0.9 | 344 | 5/31/2024 |
7.0.0.8 | 298 | 5/31/2024 |
7.0.0.7 | 290 | 5/31/2024 |
7.0.0.6 | 280 | 5/31/2024 |
7.0.0.5 | 297 | 5/29/2024 |
7.0.0.4 | 292 | 5/29/2024 |
7.0.0.3 | 285 | 5/29/2024 |
7.0.0.2 | 288 | 5/27/2024 |
7.0.0.1 | 289 | 5/26/2024 |
6.9.9.9 | 304 | 5/26/2024 |
6.9.9.8 | 411 | 4/24/2024 |
6.9.9.7 | 298 | 4/24/2024 |
6.9.9.6 | 7,987 | 4/23/2024 |
6.9.9.5 | 291 | 4/23/2024 |
6.9.9.4 | 284 | 4/18/2024 |
6.9.9.3 | 273 | 4/16/2024 |
6.9.9.2 | 298 | 4/12/2024 |
6.9.9.1 | 293 | 4/11/2024 |
6.9.9 | 9,243 | 4/1/2024 |
6.9.7 | 307 | 4/1/2024 |
6.9.6 | 301 | 3/30/2024 |
6.7.7 | 366 | 12/28/2023 |
6.7.6 | 288 | 12/28/2023 |
6.7.5 | 358 | 11/3/2023 |
6.7.4 | 312 | 10/26/2023 |
6.7.3 | 304 | 10/26/2023 |
6.7.2 | 287 | 10/25/2023 |
6.7.1 | 308 | 10/25/2023 |
6.7.0 | 402 | 4/9/2023 |
6.6.9 | 9,290 | 4/5/2023 |
6.6.8 | 421 | 3/11/2023 |
6.5.8 | 721 | 7/30/2022 |
6.5.7 | 687 | 7/30/2022 |
6.5.6 | 651 | 7/29/2022 |
6.5.5 | 679 | 6/30/2022 |
6.5.4 | 675 | 6/28/2022 |
6.5.3 | 706 | 6/28/2022 |
6.5.2 | 678 | 6/28/2022 |
6.5.1 | 761 | 6/28/2022 |
6.5.0 | 694 | 6/27/2022 |
6.4.9 | 701 | 6/18/2022 |
6.4.8 | 662 | 6/17/2022 |
6.4.7 | 646 | 6/17/2022 |
6.4.6 | 683 | 6/17/2022 |
6.3.6 | 684 | 6/17/2022 |
6.3.4 | 680 | 6/17/2022 |
6.3.3 | 693 | 6/17/2022 |
6.3.2 | 658 | 6/17/2022 |
6.3.0 | 666 | 6/9/2022 |
6.2.0 | 722 | 6/8/2022 |
6.1.9 | 676 | 6/8/2022 |
6.1.8 | 673 | 6/7/2022 |
6.1.7 | 855 | 5/12/2022 |
6.1.6 | 708 | 5/12/2022 |
6.1.5 | 725 | 5/10/2022 |
6.1.4 | 705 | 5/10/2022 |
6.1.3 | 741 | 5/9/2022 |
6.1.2 | 718 | 5/9/2022 |
6.1.1 | 750 | 4/30/2022 |
6.1.0 | 722 | 4/30/2022 |
6.0.9 | 752 | 4/30/2022 |
6.0.8 | 731 | 4/30/2022 |
6.0.7 | 714 | 4/28/2022 |
6.0.6 | 736 | 4/28/2022 |
6.0.5 | 711 | 4/27/2022 |
6.0.4 | 706 | 4/27/2022 |
6.0.3 | 587 | 4/17/2022 |
6.0.2 | 593 | 4/17/2022 |
6.0.1 | 595 | 4/16/2022 |
6.0.0 | 9,527 | 4/16/2022 |
5.1.8 | 632 | 4/16/2022 |
5.1.7 | 598 | 4/16/2022 |
5.1.6 | 590 | 4/16/2022 |
5.1.5 | 601 | 4/16/2022 |
5.1.4 | 584 | 4/16/2022 |
5.1.3 | 601 | 4/16/2022 |
5.1.2 | 621 | 4/13/2022 |
5.1.1 | 509 | 10/22/2021 |
5.1.0 | 538 | 10/11/2021 |
5.0.9 | 480 | 9/23/2021 |
5.0.8 | 579 | 9/23/2021 |
5.0.7 | 609 | 9/23/2021 |
5.0.6 | 490 | 9/16/2021 |
5.0.5 | 513 | 9/15/2021 |
5.0.4 | 606 | 9/15/2021 |
5.0.3 | 459 | 9/15/2021 |
5.0.1 | 494 | 9/7/2021 |
5.0.0 | 449 | 9/3/2021 |
4.1.7 | 487 | 8/31/2021 |
4.1.6 | 8,291 | 8/31/2021 |
4.1.5 | 464 | 8/31/2021 |
4.1.4 | 458 | 8/31/2021 |
4.1.3 | 470 | 8/31/2021 |
4.1.2 | 488 | 8/31/2021 |
4.1.1 | 452 | 8/31/2021 |
1.0.5 | 506 | 8/18/2021 |
1.0.3 | 529 | 8/18/2021 |
1.0.2 | 516 | 8/18/2021 |
1.0.1 | 612 | 8/18/2021 |
1.0.0 | 9,623 | 8/18/2021 |
0.1.1 | 8,135 | 8/31/2021 |