load("@rules_rs//rs:rust_binary.bzl", "rust_binary")
load("@rules_rs//rs:rust_library.bzl", "rust_library")
load("@rules_rs//rs:rust_test.bzl", "rust_test")
load(
":release_binary.bzl",
"release_binary_darwin_arm64",
"release_binary_linux_arm64",
"release_binary_linux_x64",
"release_binary_windows_x64",
"release_binary_windows_x64_gnullvm",
)
FORMATJS_CLI_VERSION = "1.1.9"
exports_files(
[
"Cargo.toml",
"src/lib.rs",
"src/main.rs",
"src/extract.rs",
"src/extractor.rs",
"src/compile.rs",
"src/compile_folder.rs",
"src/verify.rs",
"src/id_generator.rs",
"src/formatters/mod.rs",
"src/formatters/default.rs",
"src/formatters/simple.rs",
"src/formatters/transifex.rs",
"src/formatters/smartling.rs",
"src/formatters/lokalise.rs",
"src/formatters/crowdin.rs",
],
visibility = ["//visibility:public"],
)
COMMON_DEPS = [
"//crates/icu_messageformat_parser",
"//crates/icu_skeleton_parser",
"@crates//:anyhow",
"@crates//:base64",
"@crates//:clap",
"@crates//:fast-glob",
"@crates//:walkdir",
"@crates//:hex",
"@crates//:once_cell",
"@crates//:oxc",
"@crates//:oxc_allocator",
"@crates//:oxc_ast",
"@crates//:oxc_parser",
"@crates//:oxc_span",
"@crates//:rayon",
"@crates//:regex",
"@crates//:serde",
"@crates//:serde_json",
"@crates//:sha2",
]
TEST_DEPS = COMMON_DEPS + [
"@crates//:tempfile",
]
rust_library(
name = "formatjs_cli_lib",
srcs = [
"src/compile.rs",
"src/compile_folder.rs",
"src/extract.rs",
"src/extractor.rs",
"src/formatters/crowdin.rs",
"src/formatters/default.rs",
"src/formatters/lokalise.rs",
"src/formatters/mod.rs",
"src/formatters/simple.rs",
"src/formatters/smartling.rs",
"src/formatters/transifex.rs",
"src/id_generator.rs",
"src/lib.rs",
"src/verify.rs",
],
crate_name = "formatjs_cli",
edition = "2024",
version = FORMATJS_CLI_VERSION,
visibility = ["//visibility:public"],
deps = COMMON_DEPS,
)
rust_binary(
name = "formatjs_cli",
srcs = [
"src/main.rs",
],
crate_name = "formatjs",
edition = "2024",
version = FORMATJS_CLI_VERSION,
visibility = ["//visibility:public"],
deps = [
":formatjs_cli_lib",
"@crates//:anyhow",
"@crates//:clap",
],
)
rust_test(
name = "formatjs_cli_test",
crate = ":formatjs_cli_lib",
data = [
"//packages/ts-transformer:test_fixtures",
],
deps = TEST_DEPS,
)
alias(
name = "formatjs",
actual = ":formatjs_cli",
visibility = ["//visibility:public"],
)
genrule(
name = "release_binary",
srcs = [":formatjs_cli"],
outs = ["formatjs_cli_release"],
cmd = "cp $< $@ && chmod +x $@",
visibility = ["//visibility:public"],
)
release_binary_linux_x64(
name = "release_binary_linux_x64",
srcs = [":formatjs_cli"],
outs = ["formatjs_cli_linux_x64"],
cmd = "cp $< $@ && chmod +x $@",
visibility = ["//visibility:public"],
)
release_binary_linux_arm64(
name = "release_binary_linux_arm64",
srcs = [":formatjs_cli"],
outs = ["formatjs_cli_linux_arm64"],
cmd = "cp $< $@ && chmod +x $@",
visibility = ["//visibility:public"],
)
release_binary_darwin_arm64(
name = "release_binary_darwin_arm64",
srcs = [":formatjs_cli"],
outs = ["formatjs_cli_darwin_arm64"],
cmd = "cp $< $@ && chmod +x $@",
visibility = ["//visibility:public"],
)
release_binary_windows_x64(
name = "release_binary_windows_x64",
srcs = [":formatjs_cli"],
outs = ["formatjs_cli_win32_x64.exe"],
cmd_ps = "Copy-Item -Path '$(location :formatjs_cli)' -Destination '$@'",
target_compatible_with = [
"@platforms//cpu:x86_64",
"@platforms//os:windows",
],
visibility = ["//visibility:public"],
)
release_binary_windows_x64_gnullvm(
name = "release_binary_windows_x64_gnullvm",
srcs = [":formatjs_cli"],
outs = ["formatjs_cli_win32_x64_gnullvm.exe"],
cmd = "cp $< $@",
visibility = ["//visibility:public"],
)
filegroup(
name = "release_binaries",
srcs = [
":release_binary_darwin_arm64",
":release_binary_linux_arm64",
":release_binary_linux_x64",
":release_binary_windows_x64_gnullvm",
],
visibility = ["//visibility:public"],
)