Pull requests are very welcome, but should be within the scope of the project, and follow the repository's code conventions. Before submitting a pull request, it's always good to file an issue, so we can discuss the details of the PR.
-
Ensure you've replicated the issue against
main
. There is a chance the issue may have already been fixed. -
Search for any similar issues (both opened and closed). There is a chance someone may have reported it already.
-
Provide a demo of the bug isolated in a codesandbox.io. Sometimes this is not a possibility, in which case provide a detailed description along with any code snippets that would help in triaging the issue. If we cannot reproduce it, we will close it.
-
The best way to demonstrate a bug is to build a failing test. This is not required, however, it will generally speed up the development process.
-
Fork the repository.
-
Ensure that all tests are passing prior to submitting.
-
If you are adding new functionality, or fixing a bug, provide test coverage.
-
Follow syntax guidelines detailed below.
-
Push the changes to your fork and submit a pull request. If this resolves any issues, please mark in the body
fix #ID
within the body of your pull request. This allows for github to automatically close the related issue once the pull request is merged. -
Last step, submit the pull request!
You can build & test with pnpm
. At the moment version >= 9 is not supported:
pnpm i && pnpm t
To run examples:
npm run examples
Releases can be done with the following steps:
# Make sure you have GH_TOKEN setup as indicated by:
# https://github.com/lerna/lerna/blob/05ad1860e2da7fc16c9c0a072c9389e94792ab64/commands/version/README.md#--create-release-type
GH_TOKEN=xxxxxxx npm run prerelease
bazel build :dist
mkdir ../formatjs2
cp -rf dist/bin/formatjs_dist/ ../formatjs2/
# Use `--access=public` to publish new packages with `@formatjs/` scope.
cd ../formatjs2
npx pnpm -r publish --access=public
tzdata
requires Docker
to be installed. This is because tzdata compilation requires make
.
-
Change
IANA_TZ_VERSION
in packages/intl-datetimeformat/index.bzl to the desired version -
Update the sha256 for tzdata & tzcode targets
-
Run the Docker image & update the tz_data.tar.gz
bazel run //packages/intl-datetimeformat:update_tz_data
-
Test to make sure everything passes
-
New TimeZones or renames of TimeZones are not updated using the Bazel script. You need to manually update
index.bzl
.
You can update the snapshot by running the test target + _update_snapshots
, e.g
bazel run //packages/cli/integration-tests:compile_folder_integration_test_update_snapshots
- Check out
./BUILD
file for generatable data — which are identifiable viagenerate_src_file()
call
generate_src_file(
name = "regex",
...
)
- Create an empty file with the given
src
attribute — path is relative to module root
touch packages/icu-messageformat-parser/regex.generated.ts
- Run update script
bazel run //packages/icu-messageformat-parser:regex.update
- Verify
bazel run //packages/icu-messageformat-parser:regex
We use docusaurus for documentation. To run the website locally:
cd website
npx docusaurus start
To deploy:
cd website
GIT_PASS="<your_personal_token>" GIT_USER="your_username" DEPLOYMENT_BRANCH=main npx docusaurus deploy