Files
react-native-devtools-frontend/third_party/typescript
Takuto Ikuta 0795505dd0 typescript: use esbuild for non-official in-chromium build
I confirmed that devtools_skip_typecheck works in chromium CQ in
https://crrev.com/c/3435231/6

This improves build time of chrome like belows
* 279.3s -> 223.7s in debug build
* 327.8s -> 170.7s in release build
on my 24C/48T Z840 Linux machine when goma backend cache is warmed.

Caveat is slight increase of execution time in tests if that run
devtools code path.
https://crbug.com/1278663#c90

Bug: 1278663
Cq-Include-Trybots: luci.devtools-frontend.try:devtools_frontend_linux_blink_light_rel_fastbuild,devtools_frontend_linux_dbg_fastbuild
Change-Id: Ie9e5b4788a36fd46b259376baf35beeccecab70c
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3439325
Reviewed-by: Tim Van der Lippe <tvanderlippe@chromium.org>
Commit-Queue: Takuto Ikuta <tikuta@chromium.org>
2022-02-04 11:05:10 +00:00
..
2019-11-25 11:52:53 +00:00
2022-01-14 16:41:50 +00:00

GN TypeScript integration

To integrate gn with TypeScript, this directory contains a ts_library action to compile TypeScript and JavaScript sources with the TypeScript compiler tsc.

To use the action, import the typescript.gni file:

import("../../third_party/typescript/typescript.gni")

After importing, you can now use the ts_library action to define a GN task that compiles with tsc:

ts_library("my_typescript_library") {
  sources = [
    "foo.ts",
  ]
}

ts_library("my_javascript_library") {
  sources = [
    "bar.js",
  ]
}

ts_library("my_mixed_library") {
  sources = [
    "typescript.ts",
    "javascript.js",
  ]
}

The sources will be compiled with tsc and generate corresponding output in the gen folder in the out directory.

To depend on other ts_libraries, specify the deps:

ts_library("my_user_library") {
  sources = [
    "dependent.ts",
  ]

  deps = [
    ":my_mixed_library",
  ]
}

deps use the same notation as GN deps. Therefore, ninja will parallelize compilation of ts_library dependencies.

A ts_library either needs to specify sources, deps or both.

For tests compiled with ts_library, set testonly = true:

ts_library("my_test_library") {
  testonly = true,
  sources = [
    "my_library_test.ts",
  ]

  deps = [
    "../../../../front_end/my_library",
  ]
}

Compiling with testonly = true will include the type definitions for Node, Chai and Mocha.

To instruct Ninja to execute the ts_library task, make sure that there is a dependency chain from /BUILD.gn (or test/*/BUILD.gn) to the ts_library in question.

Implementation details

A ts_library task will generate a tsconfig.json based on /config/typescript/tsconfig.base.json and write it to disk in the gen directory. Ater that, it will instruct tsc to compile the project based on the tsconfig.json.

All deps are desugared to project references. tsc will not recursively compile dependencies, Ninja handles that.

Since Ninja does not recompile unchanged actions, all ts_library actions generate corresponding .d.ts files which specify the public API's of the sources, as well as the .tsbuildinfo for efficient recompilation with tsc.

There are several global .d.ts files added to every ts_library. The GLOBAL_TYPESCRIPT_DEFINITION_FILES list in ts_library.py contains the list of all definition files. These files must also be listed as inputs in typescript.gni.

Legacy: For legacy reasons, all non-testonly outputs are also copied to resources/inspector in the out directory.