# Typia
![Typia Logo](https://typia.io/logo.png)

[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/samchon/typia/blob/master/LICENSE)
[![NPM Version](https://img.shields.io/npm/v/typia.svg)](https://www.npmjs.com/package/typia)
[![NPM Downloads](https://img.shields.io/npm/dm/typia.svg)](https://www.npmjs.com/package/typia)
[![Build Status](https://github.com/samchon/typia/workflows/build/badge.svg)](https://github.com/samchon/typia/actions?query=workflow%3Abuild)
[![Guide Documents](https://img.shields.io/badge/guide-documents-forestgreen)](https://typia.io/docs/)
[![Gurubase](https://img.shields.io/badge/Gurubase-Ask%20Typia%20Guru-006BFF)](https://gurubase.io/g/typia)
[![Discord Badge](https://img.shields.io/badge/discord-samchon-d91965?style=flat&labelColor=5866f2&logo=discord&logoColor=white&link=https://discord.gg/E94XhzrUCZ)](https://discord.gg/E94XhzrUCZ)

```typescript
// RUNTIME VALIDATORS
export function is<T>(input: unknown): input is T; // returns boolean
export function assert<T>(input: unknown): T; // throws TypeGuardError
export function assertGuard<T>(input: unknown): asserts input is T;
export function validate<T>(input: unknown): IValidation<T>; // detailed

// JSON FUNCTIONS
export namespace json {
  export function application<T>(): IJsonApplication; // JSON schema
  export function assertParse<T>(input: string): T; // type safe parser
  export function assertStringify<T>(input: T): string; // safe and faster
}

// LLM FUNCTION CALLING SCHEMA
export namespace llm {
  // application schema from a class or interface type
  export function application<App, Model>(): ILlmApplication<Model>;
  // structured output
  export function parameters<P, Moodel>(): ILlmSchema.IParameters<Model>; 
  export function schema<T, Model>(): ILlmSchema<Model>; // type schema
}

// PROTOCOL BUFFER
export namespace protobuf {
  export function message<T>(): string; // Protocol Buffer message
  export function assertDecode<T>(buffer: Uint8Array): T; // safe decoder
  export function assertEncode<T>(input: T): Uint8Array; // safe encoder
}

// RANDOM GENERATOR
export function random<T>(g?: Partial<IRandomGenerator>): T;
```

Typia is a transformer library supporting below features:

  - Super-fast Runtime Validators
  - Enhanced JSON schema and serde functions
  - LLM function calling schema and structured output
  - Protocol Buffer encoder and decoder
  - Random data generator

> [!NOTE]
>
> - **Only one line** required, with pure TypeScript type
> - Runtime validator is **20,000x faster** than `class-validator`
> - JSON serialization is **200x faster** than `class-transformer`




## Sponsors
Thanks for your support.

Your donation encourages `typia` development.

Also, `typia` is re-distributing half of donations to core contributors of `typia`.

  - [`nonara/ts-patch`](https://github.com/nonara/ts-patch)
  - [`ryoppippi/unplugin-typia`](https://github.com/ryoppippi/unplugin-typia)

[![Sponsers](https://opencollective.com/typia/badge.svg?avatarHeight=75&width=600)](https://opencollective.com/typia)




## Playground
You can experience how typia works by [playground website](https://typia.io/playground):

  - 💻 https://typia.io/playground




## Guide Documents
Check out the document in the [website](https://typia.io/docs/):

### 🏠 Home
  - [Introduction](https://typia.io/docs/)
  - [Setup](https://typia.io/docs/setup/)
  - [Pure TypeScript](https://typia.io/docs/pure/)
  
### 📖 Features
  - Runtime Validators
    - [`assert()` function](https://typia.io/docs/validators/assert/)
    - [`is()` function](https://typia.io/docs/validators/is/)
    - [`validate()` function](https://typia.io/docs/validators/validate/)
    - [Functional Module](https://typia.io/docs/validators/functional)
    - [Special Tags](https://typia.io/docs/validators/tags/)
  - Enhanced JSON
    - [JSON Schema](https://typia.io/docs/json/schema/)
    - [`stringify()` functions](https://typia.io/docs/json/stringify/)
    - [`parse()` functions](https://typia.io/docs/json/parse/)
  - LLM Function Calling
    - [`application()` function](https://typia.io/docs/llm/application/)
    - [`parameters()` function](https://typia.io/docs/llm/parameters/)
    - [`schema()` function](https://typia.io/docs/llm/schema/)
  - Protocol Buffer
    - [Message Schema](https://typia.io/docs/protobuf/message)
    - [`decode()` functions](https://typia.io/docs/protobuf/decode/)
    - [`encode()` functions](https://typia.io/docs/protobuf/encode/)
  - [Random Generator](https://typia.io/docs/random/)
  - [Miscellaneous](https://typia.io/docs/misc/)

### 🔗 Appendix
  - [API Documents](https://typia.io/api)
  - Utillization Cases
    - [NestJS](https://typia.io/docs/utilization/nestjs/)
    - [Prisma](https://typia.io/docs/utilization/prisma/)
    - [tRPC](https://typia.io/docs/utilization/trpc/)
  - [⇲ Benchmark Result](https://github.com/samchon/typia/tree/master/benchmark/results/11th%20Gen%20Intel(R)%20Core(TM)%20i5-1135G7%20%40%202.40GHz)
  - [⇲ `dev.to` Articles](https://dev.to/samchon/series/22474)
