formatjs_cli 0.1.6

Command-line interface for FormatJS - A Rust-based CLI for internationalization
load("@rules_rust//rust:defs.bzl", "rust_binary", "rust_test")

exports_files(
    [
        "Cargo.toml",
        "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 = [
    "//rust/icu_messageformat_parser",
    "//rust/icu_skeleton_parser",
    "@crates//:anyhow",
    "@crates//:base64",
    "@crates//:clap",
    "@crates//:glob",
    "@crates//:hex",
    "@crates//:oxc",
    "@crates//:oxc_allocator",
    "@crates//:oxc_ast",
    "@crates//:oxc_parser",
    "@crates//:oxc_span",
    "@crates//:serde",
    "@crates//:serde_json",
    "@crates//:sha2",
]

TEST_DEPS = COMMON_DEPS + [
    "@crates//:tempfile",
]

# Base rust binary (builds for host platform)
rust_binary(
    name = "formatjs_cli",
    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/main.rs",
        "src/verify.rs",
    ],
    crate_name = "formatjs",
    edition = "2024",
    visibility = ["//visibility:public"],
    deps = COMMON_DEPS,
)

rust_test(
    name = "formatjs_cli_test",
    crate = ":formatjs_cli",
    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=//rust/formatjs_cli/platforms:darwin_arm64 //rust/formatjs_cli:release_binary
#   Linux: bazel build --platforms=//rust/formatjs_cli/platforms:linux_x86_64 //rust/formatjs_cli:release_binary

genrule(
    name = "release_binary",
    srcs = [":formatjs_cli"],
    outs = ["formatjs_cli_release"],
    cmd = "cp $< $@ && chmod +x $@",
    visibility = ["//visibility:public"],
)