Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ examples export-ignore
# Occasionally there's a need to "stamp" the release version into a file
# See https://blog.aspect.build/releasing-bazel-rulesets-rust for details if you need this.
# formatjs/version.bzl export-subst
*.lock linguist-generated
2 changes: 1 addition & 1 deletion MODULE.bazel.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion examples/aggregate/MODULE.bazel.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 67 additions & 0 deletions examples/custom_version/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
"""Example BUILD file demonstrating extraction with custom FormatJS CLI version."""

load("@rules_formatjs//formatjs:defs.bzl", "formatjs_extract")
load("@rules_shell//shell:sh_test.bzl", "sh_test")

# Simple TypeScript/React file with FormatJS messages
genrule(
name = "generate_source",
outs = ["App.tsx"],
cmd = """cat > $@ << 'EOF'
import { FormattedMessage, defineMessages } from 'react-intl';

const messages = defineMessages({
welcome: {
id: 'app.welcome',
defaultMessage: 'Welcome to the custom version example!',
description: 'Welcome message on homepage',
},
goodbye: {
id: 'app.goodbye',
defaultMessage: 'Goodbye!',
description: 'Farewell message',
},
});

export function App() {
return (
<div>
<h1><FormattedMessage {...messages.welcome} /></h1>
<p><FormattedMessage {...messages.goodbye} /></p>
<FormattedMessage
id="app.inline"
defaultMessage="This is an inline message"
description="Inline message example"
/>
</div>
);
}
EOF
""",
)

# Extract messages using the custom FormatJS CLI version (0.1.0)
# This demonstrates that custom platform configurations work correctly
formatjs_extract(
name = "messages",
srcs = [":App.tsx"],
out = "messages.json",
)

# Test that we can read the extracted messages
sh_test(
name = "test_extraction",
srcs = ["test_extraction.sh"],
data = [":messages"],
)

# Test that verifies we're using the custom CLI version (0.1.0)
# This test accesses the CLI binaries directly to check their version
sh_test(
name = "test_cli_version",
srcs = ["test_cli_version.sh"],
data = [
"@formatjs_v0_1_0_darwin_arm64//:cli",
"@formatjs_v0_1_0_linux_x64//:cli",
],
)
54 changes: 54 additions & 0 deletions examples/custom_version/MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
"""Example demonstrating custom FormatJS CLI version configuration.

This example shows how to use a custom version (0.1.0) that is not in the built-in
FORMATJS_CLI_VERSIONS dictionary. This is useful for:
- Testing unreleased versions
- Using custom builds
- Supporting platforms not yet officially supported
"""

module(name = "custom_version_example")

bazel_dep(name = "rules_formatjs", version = "")
bazel_dep(name = "rules_shell", version = "0.3.0")

# Use local override since we're developing rules_formatjs
local_path_override(
module_name = "rules_formatjs",
path = "../..",
)

# Configure custom FormatJS CLI version 0.1.0
# This version was removed from the built-in versions but we can still use it
formatjs_cli = use_extension("@rules_formatjs//formatjs_cli:extensions.bzl", "formatjs_cli")

# Single toolchain call with custom binaries (similar to rules_nodejs pattern)
formatjs_cli.toolchain(
name = "formatjs_v0_1_0",
formatjs_repositories = {
"0.1.0.darwin-arm64": [
"https://github.com/formatjs/formatjs/releases/download/formatjs_cli_v0.1.0/formatjs_cli-darwin-arm64",
"9b2c736b48cc65e763cf19ac7c190e527f9a8d4aa0798185e602f58becb99feb",
],
"0.1.0.linux-x64": [
"https://github.com/formatjs/formatjs/releases/download/formatjs_cli_v0.1.0/formatjs_cli-linux-x64",
"884b9a41b9f6be649ea72277ebf22af0146043466d2ab94b28a57f95ffb7da1a",
],
},
)

# Repository names are: {name}_{platform} and {name}_toolchains
# Examples: formatjs_v0_1_0_darwin_arm64, formatjs_v0_1_0_linux_x64, formatjs_v0_1_0_toolchains
use_repo(
formatjs_cli,
"formatjs_v0_1_0_darwin_arm64",
"formatjs_v0_1_0_linux_x64",
"formatjs_v0_1_0_toolchains",
)

# Register the custom version toolchains (0.1.0)
# Note: Standard toolchains (0.1.2) are already registered by rules_formatjs root MODULE.bazel
# Bazel will select the appropriate one based on platform constraints and registration order
register_toolchains(
"@formatjs_v0_1_0_toolchains//:all",
)
Loading
Loading