Cheat sheet

Every mapping, grouped by package. The long form on the left, the compact form Smoower uses on the right. Same behaviour, same compiled IL.

Smoower.Minified.Core

Guards

Long formCompact
string.IsNullOrWhiteSpace(s)s.nil()
string.IsNullOrEmpty(s)s.emp()
!items.Any()items.none()

Aliases

Long formCompact
CancellationToken ctCT ct
IConfiguration cfgCfg cfg

Smoower.Minified.AspNetCore

Attributes

Long formCompact
[ApiController][API]
[Route("api/users")][RT("api/users")]
[HttpGet("{id}")][HG("{id}")]
[HttpPost][HPO]
[HttpPut][HPU]
[HttpPatch][HPA]
[HttpDelete("{id}")][HD("{id}")]
[Authorize][AUTH]
[AllowAnonymous][ANON]
[FromBody][FB]
[FromRoute][FR]
[FromQuery][FQ]
[FromHeader][FH]

Aliases

Long formCompact
: ControllerBase:Ctl
IActionResultRes
ActionResultAR
Task<IActionResult>Tr

Result-fusing terminators

Long formCompact
var x=await q.FirstOrDefaultAsync();return x==null?NotFound():Ok(x);q.ok1()
Ok(await q.ToListAsync())q.okl()
Ok(await q.CountAsync())q.okc()
var x=await set.FindAsync(id);return x==null?NotFound():Ok(x);set.okId(id)
db.Add(e);await db.SaveChangesAsync();return Ok(e);db.okAdd(e)
db.Add(e);await db.SaveChangesAsync();return CreatedAtAction(...);db.okNew(e)
CreatedAtAction(nameof(Get), new { id = value.Id }, value)value.created()
FindAsync+NotFound+Remove+SaveChanges+NoContentdb.delById<User>(id)

Response-type attributes (Swagger)

Long formCompact
[ProducesResponseType(StatusCodes.Status200OK)][P200]
[ProducesResponseType(typeof(UserDto), StatusCodes.Status200OK)][P200<UserDto>]
[ProducesResponseType(StatusCodes.Status201Created)][P201]
[ProducesResponseType(StatusCodes.Status400BadRequest)][P400]
[ProducesResponseType(StatusCodes.Status404NotFound)][P404]

Smoower.Minified.EFCore

Query — composition

Long formCompact
q.Where(x=>x.Id==id)q.w(x=>x.Id==id)
q.Select(x=>x.Name)q.s(x=>x.Name)
q.OrderBy(x=>x.Name)q.ob(x=>x.Name)
q.OrderByDescending(x=>x.Name)q.obd(x=>x.Name)
q.ThenBy(x=>x.Name)q.tb(x=>x.Name)
q.ThenByDescending(x=>x.Name)q.tbd(x=>x.Name)
q.Skip(10)q.sk(10)
q.Take(10)q.tk(10)
q.AsNoTracking()q.nt()
q.AsNoTrackingWithIdentityResolution()q.ntir()
q.Include(x=>x.Orders)q.inc(x=>x.Orders)
q.ThenInclude(x=>x.Lines)q.tinc(x=>x.Lines)
q.GroupBy(x=>x.Status)q.gb(x=>x.Status)

Query — async terminators

Long formCompact
q.ToListAsync()q.lst()
q.FirstOrDefaultAsync()q.one()
q.SingleOrDefaultAsync()q.single()
q.AnyAsync()q.any()
q.CountAsync()q.cnt()
q.MaxAsync(x=>x.Total)q.max(x=>x.Total)
q.MinAsync(x=>x.Total)q.min(x=>x.Total)

Write (async; S-suffixed sync variants exist)

Long formCompact
set.FindAsync(key)set.id(key)
await db.SaveChangesAsync()await db.save()
db.Add(e);await db.SaveChangesAsync();await db.add(e)
db.Update(e);await db.SaveChangesAsync();await db.upd(e)
db.Remove(e);await db.SaveChangesAsync();await db.del(e)

Model config (OnModelCreating)

Long formCompact
modelBuilder.Entity<T>().HasQueryFilter(f)mb.qf<T>(f)
entity.HasKey(e=>e.Id)entity.key(e=>e.Id)
entity.HasIndex(e=>e.Email)entity.idx(e=>e.Email)
.IsUnique().uniq()
entity.Property(e=>e.Name)entity.p(e=>e.Name)
.IsRequired().req()
.HasMaxLength(100).max(100)
.HasConversion<string>().conv<string>()
entity.HasOne(e=>e.Author)entity.one(e=>e.Author)
.WithMany(a=>a.Books).many(a=>a.Books)
entity.HasMany(e=>e.Books)entity.hasM(e=>e.Books)
.WithOne(b=>b.Author).wOne(b=>b.Author)
.HasForeignKey(e=>e.AuthorId).fk(e=>e.AuthorId)
.OnDelete(DeleteBehavior.Cascade).cascade()
.OnDelete(DeleteBehavior.Restrict).restrict()
.OnDelete(DeleteBehavior.SetNull).setNull()
.OnDelete(DeleteBehavior.ClientSetNull).clientSetNull()
.OnDelete(behavior).onDel(behavior)

Smoower.Minified.Extensions

Clock (injectable) / Clk (static)

Long formCompact
DateTime.UtcNowclock.utc
DateTime.Nowclock.now
DateOnly.FromDateTime(DateTime.UtcNow)clock.today
DateTimeOffset.UtcNow.ToUnixTimeSeconds()clock.unix

DateTime

Long formCompact
dt.ToUniversalTime()dt.utc()
dt.ToShortDateString()dt.sd()
dt.ToLongDateString()dt.ld()
dt.ToShortTimeString()dt.st()
dt.ToLongTimeString()dt.lt()

TimeSpan factories (on int)

Long formCompact
TimeSpan.FromMilliseconds(250)250.ms()
TimeSpan.FromSeconds(30)30.secs()
TimeSpan.FromMinutes(5)5.mins()
TimeSpan.FromHours(2)2.hrs()
TimeSpan.FromDays(7)7.days()

Environment

Long formCompact
Environment.GetEnvironmentVariable("X")Env.get("X")
Environment.SetEnvironmentVariable("X", v)Env.set("X", v)

Smoower.Minified.Hosting

IServiceCollection / IServiceProvider

Long formCompact
services.AddScoped<IFoo, Foo>()svc.scoped<IFoo, Foo>()
services.AddSingleton<Bar>()svc.single<Bar>()
services.AddTransient<Baz>()svc.trans<Baz>()
provider.GetRequiredService<T>()provider.svc<T>()

Smoower.Minified.Logging

ILogger

Long formCompact
log.LogInformation("created {Id}", id)log.inf("created {Id}", id)
log.LogWarning("slow {Ms}", ms)log.wrn("slow {Ms}", ms)
log.LogError("failed {Id}", id)log.err("failed {Id}", id)
log.LogDebug("state {S}", s)log.dbg("state {S}", s)

Smoower.Minified.Http

HttpClient

Long formCompact
c.GetFromJsonAsync<T>(url)c.getJson<T>(url)
c.PostAsJsonAsync(url, body)c.postJson(url, body)
c.PutAsJsonAsync(url, body)c.putJson(url, body)
c.PatchAsJsonAsync(url, body)c.patchJson(url, body)
c.DeleteAsync(url)c.del(url)

Smoower.Minified.Validation

Rules (on MiniValidator<T>)

Long formCompact
RuleFor(x=>x.Name).NotEmpty()req(x=>x.Name)
RuleFor(x=>x.Age)rule(x=>x.Age)
r.MaximumLength(100)r.max(100)
r.MinimumLength(2)r.min(2)
r.EmailAddress()r.email()
r.GreaterThan(0)r.gt(0)
r.LessThanOrEqualTo(120)r.lte(120)
r.InclusiveBetween(1, 5)r.rng(1, 5)

Smoower.Minified.Json

System.Text.Json (Newtonsoft variant identical)

Long formCompact
JsonSerializer.Serialize(x)x.toJson()
JsonSerializer.Deserialize<T>(s)s.fromJson<T>()

Smoower.Minified.Dapper

IDbConnection

Long formCompact
c.QueryAsync<T>(sql, p)c.q<T>(sql, p)
c.QueryFirstOrDefaultAsync<T>(sql, p)c.q1<T>(sql, p)
c.QuerySingleOrDefaultAsync<T>(sql, p)c.qs<T>(sql, p)
c.ExecuteAsync(sql, p)c.ex(sql, p)
c.ExecuteScalarAsync<T>(sql, p)c.scalar<T>(sql, p)