formatjs_cli 1.1.11

Command-line interface for FormatJS - A Rust-based CLI for internationalization
Documentation
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"  # x-release-please-version

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 dependencies for all targets
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,
)

# Base rust binary (builds for host platform)
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 for convenience (defaults to host platform)
alias(
    name = "formatjs",
    actual = ":formatjs_cli",
    visibility = ["//visibility:public"],
)

# Release targets - these build for the current platform and copy to release directory
# Use --platforms flag to build for different platforms:
#   macOS: bazel build --platforms=//crates/formatjs_cli/platforms:darwin_arm64 //crates/formatjs_cli:release_binary
#   Linux: bazel build --platforms=//crates/formatjs_cli/platforms:linux_x86_64 //crates/formatjs_cli:release_binary
#   Linux ARM64: bazel build --platforms=//crates/formatjs_cli/platforms:linux_aarch64 //crates/formatjs_cli:release_binary

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"],
)