Skip to content

samchon/ttsc

Repository files navigation

ttsc

banner of ttsc

GitHub license NPM Version NPM Downloads Build Status

A typescript-go toolchain for compiler-powered transforms and type-safe execution.

  • ttsc: build, check, and transform.
  • ttsx: execute TypeScript with type checking.
    • 10x faster than ts-node.
    • type checking that tsx does not provide.
  • transformer support: compiler-powered libraries, such as typia.

ttsx (CLI command) can run existing typescript@6 projects.

Setup

Install the native TypeScript preview package with ttsc:

npm i -D ttsc @typescript/native-preview

Run TypeScript directly with ttsx (CLI command):

npx ttsx src/index.ts

Build, check, or watch the project with ttsc:

npx ttsc
npx ttsc --noEmit
npx ttsc --watch

Transformer Configuration

ttsc reads compilerOptions.plugins from tsconfig.json.

{
  "compilerOptions": {
    "plugins": [
      { "transform": "typia/lib/transform" }
    ]
  }
}

The same configuration is used by both ttsc commands.

# compile
npx ttsc

# execute
npx ttsx src/index.ts

This gives compiler-powered libraries one transform path for both build-time and runtime execution.

What Is a Transform?

A transform uses TypeScript types to generate JavaScript before runtime.

import typia, { tags } from "typia";
import { v4 } from "uuid";

const matched: boolean = typia.is<IMember>({
  id: v4(),
  email: "samchon.github@gmail.com",
  age: 30,
});
console.log(matched); // true

interface IMember {
  id: string & tags.Format<"uuid">;
  email: string & tags.Format<"email">;
  age: number &
    tags.Type<"uint32"> &
    tags.ExclusiveMinimum<19> &
    tags.Maximum<100>;
}

It is transformed into dedicated JavaScript:

import typia from "typia";
import * as __typia_transform__isFormatEmail from "typia/lib/internal/_isFormatEmail";
import * as __typia_transform__isFormatUuid from "typia/lib/internal/_isFormatUuid";
import * as __typia_transform__isTypeUint32 from "typia/lib/internal/_isTypeUint32";
import { v4 } from "uuid";

const matched = (() => {
  const _io0 = (input) =>
    "string" === typeof input.id &&
    __typia_transform__isFormatUuid._isFormatUuid(input.id) &&
    "string" === typeof input.email &&
    __typia_transform__isFormatEmail._isFormatEmail(input.email) &&
    "number" === typeof input.age &&
    __typia_transform__isTypeUint32._isTypeUint32(input.age) &&
    19 < input.age &&
    input.age <= 100;
  return (input) => "object" === typeof input && null !== input && _io0(input);
})()({
  id: v4(),
  email: "samchon.github@gmail.com",
  age: 30,
});
console.log(matched); // true

ttsc runs this transform during build, and ttsx runs through the same transform path during execution.

References

About

A `typescript-go` toolchain for compiler-powered transforms and type-safe execution.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors