Skip to content

Latest commit

 

History

History
103 lines (70 loc) · 9.98 KB

swc.md

File metadata and controls

103 lines (70 loc) · 9.98 KB

API for running the SWC cli under Bazel

The simplest usage relies on the swcrc attribute automatically discovering .swcrc:

load("@aspect_rules_swc//swc:defs.bzl", "swc")

swc(
    name = "compile",
    srcs = ["file.ts"],
)

swc_compile

swc_compile(name, args, data, js_outs, map_outs, out_dir, output_dir, plugins, root_dir,
            source_maps, source_root, srcs, swcrc)

Underlying rule for the swc macro.

Most users should use swc instead, as it predicts the output files and has convenient default values.

Use this if you need more control over how the rule is called, for example to set your own output labels for js_outs.

ATTRIBUTES

Name Description Type Mandatory Default
name A unique name for this target. Name required
args Additional arguments to pass to swcx cli (NOT swc!).

NB: this is not the same as the CLI arguments for @swc/cli npm package. For performance, rules_swc does not call a Node.js program wrapping the swc rust binding. Instead, we directly spawn the (somewhat experimental) native Rust binary shipped inside the @swc/core npm package, which the swc project calls "swcx" Tracking issue for feature parity: swc-project/swc#4017
List of strings optional []
data Runtime dependencies to include in binaries/tests that depend on this target.

The transitive npm dependencies, transitive sources, default outputs and runfiles of targets in the data attribute are added to the runfiles of this target. They should appear in the '*.runfiles' area of any executable which has a runtime dependency on this target.

If this list contains linked npm packages, npm package store targets or other targets that provide JsInfo, NpmPackageStoreInfo providers are gathered from JsInfo. This is done directly from the npm_package_store_deps field of these. For linked npm package targets, the underlying npm_package_store target(s) that back the links is used. Gathered NpmPackageStoreInfo providers are propagated to the direct dependencies of downstream linked npm_package targets.

NB: Linked npm package targets that are "dev" dependencies do not forward their underlying npm_package_store target(s) through npm_package_store_deps and will therefore not be propagated to the direct dependencies of downstream linked npm_package targets. npm packages that come in from npm_translate_lock are considered "dev" dependencies if they are have dev: true set in the pnpm lock file. This should be all packages that are only listed as "devDependencies" in all package.json files within the pnpm workspace. This behavior is intentional to mimic how devDependencies work in published npm packages.
List of labels optional []
js_outs list of expected JavaScript output files.

There should be one for each entry in srcs.
List of labels optional
map_outs list of expected source map output files.

Can be empty, meaning no source maps should be produced. If non-empty, there should be one for each entry in srcs.
List of labels optional
out_dir With output_dir=False, output files will have this directory prefix.

With output_dir=True, this is the name of the output directory.
String optional ""
output_dir Whether to produce a directory output rather than individual files.

If out_dir is also specified, it is used as the name of the output directory. Otherwise, the directory is named the same as the target.
Boolean optional False
plugins swc compilation plugins, created with swc_plugin rule List of labels optional []
root_dir a subdirectory under the input package which should be consider the root directory of all the input files String optional ""
source_maps Create source map files for emitted JavaScript files.

see https://swc.rs/docs/usage/cli#--source-maps--s
String optional "false"
source_root Specify the root path for debuggers to find the reference source code.

see https://swc.rs/docs/usage/cli#--source-root

If not set, then the directory containing the source file is used.
String optional ""
srcs source files, typically .ts files in the source tree List of labels required
swcrc label of a configuration file for swc, see https://swc.rs/docs/configuration/swcrc Label optional None

swc

swc(name, srcs, args, data, plugins, output_dir, swcrc, source_maps, out_dir, root_dir, kwargs)

Execute the SWC compiler

PARAMETERS

Name Description Default Value
name A name for this target none
srcs List of labels of TypeScript source files. none
args Additional options to pass to swcx cli, see swc-project/swc#3859 Note: we do not run the NodeJS wrapper @swc/cli []
data Files needed at runtime by binaries or tests that transitively depend on this target. See https://bazel.build/reference/be/common-definitions#typical-attributes []
plugins List of plugin labels created with swc_plugin. []
output_dir Whether to produce a directory output rather than individual files.

If out_dir is set, then that is used as the name of the output directory. Otherwise, the output directory is named the same as the target.
False
swcrc Label of a .swcrc configuration file for the SWC cli, see https://swc.rs/docs/configuration/swcrc Instead of a label, you can pass a dictionary matching the JSON schema. If this attribute isn't specified, and a file .swcrc exists in the same folder as this rule, it is used.

Note that some settings in .swcrc also appear in tsconfig.json. See the notes in [/docs/tsconfig.md].
None
source_maps If set, the --source-maps argument is passed to the SWC cli with the value. See https://swc.rs/docs/usage/cli#--source-maps--s. True/False are automaticaly converted to "true"/"false" string values the cli expects. False
out_dir The base directory for output files relative to the output directory for this package.

If output_dir is True, then this is used as the name of the output directory.
None
root_dir A subdirectory under the input package which should be considered the root directory of all the input files None
kwargs additional keyword arguments passed through to underlying swc_compile, eg. visibility, tags none

swc_plugin

swc_plugin(name, src, config, kwargs)

Configure an SWC plugin

PARAMETERS

Name Description Default Value
name A name for this target none
src Label for the plugin, either a directory containing a package.json pointing at a wasm file as the main entrypoint, or a wasm file. Usually a linked npm package target via rules_js. None
config Optional configuration dict for the plugin. This is passed as a JSON object into the jsc.experimental.plugins entry for the plugin. {}
kwargs additional keyword arguments passed through to underlying rule, eg. visibility, tags none