Skip to content

MichaelMitchell-at/rules_ts

This branch is 5 commits ahead of, 42 commits behind aspect-build/rules_ts:main.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
MichaelMitchell-at
Oct 6, 2024
b332742 · Oct 6, 2024
May 29, 2024
Feb 2, 2024
Sep 7, 2024
Oct 4, 2022
Sep 27, 2024
Sep 24, 2024
Sep 27, 2024
May 29, 2024
Oct 6, 2024
Jul 26, 2024
Apr 30, 2024
Jun 7, 2024
May 11, 2024
Nov 1, 2023
May 14, 2024
May 14, 2024
Apr 30, 2024
Aug 26, 2023
Apr 22, 2022
Apr 30, 2024
Apr 18, 2023
Apr 22, 2022
Aug 15, 2024
Jan 11, 2024
Aug 15, 2024
May 29, 2024
Aug 15, 2024
Feb 18, 2023

Repository files navigation

Bazel rules for TypeScript

This is the canonical ruleset for using Bazel with TypeScript, based on https://github.com/aspect-build/rules_js.

Many companies are successfully building with rules_ts. If you're getting value from the project, please let us know! Just comment on our Adoption Discussion.

This is a high-performance alternative to the @bazel/typescript npm package from rules_nodejs. The ts_project rule here is identical to the one in rules_nodejs, making it easy to migrate. Since rules_js always runs tools from the bazel-out tree, rules_ts naturally fixes most usability bugs with rules_nodejs:

  • Freely mix generated *.ts and tsconfig.json files in the bazel-out tree with source files
  • Fixes the need for any rootDirs settings in tsconfig.json as reported in microsoft/TypeScript#37378
  • "worker mode" for ts_project now shares workers across all targets, rather than requiring one worker pool per target

rules_ts is just a part of what Aspect provides:

Known issues:

Installation

Follow instructions from the release you wish to use: https://github.com/aspect-build/rules_ts/releases

Examples

There are a number of examples in the examples/ folder and larger examples in the bazel-examples repository using rules_ts such as jest, react, angular.

If you'd like an example added, you can fund a Feature Request.

Usage

See the API documentation in the docs/ folder.

From a BUILD file

The most common use is with the ts_project macro which invokes a transpiler you configure to transform source files like .ts files into outputs such as .js and .js.map, and the tsc CLI to type-check the program and produce .d.ts files.

In a macro

Many organizations set default values, so it's common to write a macro to wrap ts_project, then ensure that your developers load your macro rather than loading from @aspect_rules_ts directly.

BUILD file generation

Aspect provides a TypeScript BUILD file generator as part of the Aspect CLI. Run aspect configure to create or update BUILD.bazel files as you edit TypeScript sources. See https://docs.aspect.build/cli/commands/aspect_configure.

Advanced: custom rules

If you know how to write Bazel rules, you might find that ts_project doesn't do what you want.

One way to customize it is to peel off one layer of indirection, by calling the ts_project_rule directly. This bypasses our default setting logic, and also the validation program which checks that ts_project attributes are well-formed.

You can also write a custom rule from scratch. We expose helper functions from /ts/private in this repo. Be aware that these are not a public API, so you may have to account for breaking changes which aren't subject to our usual semver policy.

Releases

No releases published

Packages

No packages published

Languages

  • Starlark 63.9%
  • JavaScript 25.1%
  • Shell 10.4%
  • TypeScript 0.6%