summaryrefslogtreecommitdiff
path: root/date-fns/CONTRIBUTING.md
diff options
context:
space:
mode:
Diffstat (limited to 'date-fns/CONTRIBUTING.md')
-rw-r--r--date-fns/CONTRIBUTING.md139
1 files changed, 139 insertions, 0 deletions
diff --git a/date-fns/CONTRIBUTING.md b/date-fns/CONTRIBUTING.md
new file mode 100644
index 0000000..a823db7
--- /dev/null
+++ b/date-fns/CONTRIBUTING.md
@@ -0,0 +1,139 @@
+# Contributing Guide
+
+**⚠⚠⚠ Please contribute new code in TypeScript ⚠⚠⚠**
+
+[Read more about migration to TypeScript](https://github.com/date-fns/date-fns/discussions/1932)
+
+## Table of Contents
+
+- [How to Help?](#how-to-help)
+
+- [Contribution Guidelines](#contribution-guidelines)
+
+- [Getting Started](#getting-started)
+
+- [Testing](#testing)
+
+- [Code Style Guide](#code-style-guide)
+
+ - [Lint the Code](#lint-the-code)
+
+ - [Use EditorConfig](#use-editorconfig)
+
+- [Documentation](#documentation)
+
+ - [JSDoc](#jsdoc)
+
+## How to Help?
+
+Help is always welcome. There are areas where you can help:
+
+- The core functionality (performance improvements, bug fixes,
+ new features, etc.).
+
+- Documentation ([markdown documents](https://github.com/date-fns/date-fns/search?l=markdown),
+ inline JSDoc comments).
+
+- Test suite & development environment improvements.
+
+- The [website](https://github.com/date-fns/date-fns.org).
+
+If you see a gap, but don't have time, experience, or you just need help
+with the library, don't hesitate to [start a discussion](https://github.com/date-fns/date-fns/discussions/new) or
+[shoot an issue](https://github.com/date-fns/date-fns/issues/new).
+
+The date-fns functionality is comprehensive and covers most of the use cases,
+however it doesn't have an extended time zone support. Please leave a comment
+to the [Extended time zones support issue](https://github.com/date-fns/date-fns/issues/180)
+if you are interested in the functionality or want to help with development.
+
+If you are interested in Elm/ClojureScript/etc. wrappers,
+please [file an issue](https://github.com/date-fns/date-fns/issues/new).
+
+## Contribution Guidelines
+
+Due to the modular nature of date-fns, it's more than open to new features.
+However, when a new function duplicates the existing functionality, native API
+or causes significant build size increase, a PR might be rejected or
+the author can be asked to move the code to a new or another package.
+
+Please follow the main contributing rules, to maintain date-fns' top quality:
+
+- Follow style guides:
+
+ - [Lint the code](#lint-the-code).
+
+ - [Use EditorConfig](#use-editorconfig).
+
+- Write tests.
+
+- [Write documentation](#documentation).
+
+- Don't update the changelog.
+
+- Don't change the library version.
+
+## Getting Started
+
+1. Install [Node.js](https://nodejs.org/en/download) and [Yarn](https://yarnpkg.com/en/docs/install).
+
+2. Fork the project and clone the fork repo.
+
+3. Run `yarn` to install the application dependencies.
+
+## Testing
+
+Run all tests:
+
+```sh
+yarn test
+```
+
+Run tests once:
+
+```sh
+yarn test --single-run
+```
+
+To test a function in REPL, use `babel-node` located in `./node_modules/.bin` (mind the `-x` flag to support also TypeScript files):
+
+```sh
+./node_modules/.bin/babel-node -x ".js",".ts"
+
+> const toDate = require('./src/toDate')
+undefined
+> toDate(1392098430000).toString()
+'Tue Feb 11 2014 01:00:30 GMT-0500 (Eastern Standard Time)'
+>
+```
+
+Build date-fns to test in in your project:
+
+```sh
+env PACKAGE_OUTPUT_PATH="$(pwd)/../PATH-TO-YOUR-MODULE/node_modules/date-fns" ./scripts/build/package.sh
+```
+
+## Code Style Guide
+
+### Lint the Code
+
+The project follows [Prettier] code style and uses [ESLint] as the linter.
+To lint the code, run:
+
+```bash
+yarn lint
+```
+
+[prettier]: https://prettier.io/
+[eslint]: https://eslint.org/
+
+## Documentation
+
+### JSDoc
+
+[JSDoc](http://usejsdoc.org) is used for the code documentation. Along with the
+standard JSDoc tags, date-fns uses `@category` tag that allows
+to group functions.
+
+[jsdoc-parse](https://github.com/jsdoc2md/jsdoc-parse) is used to parse
+JSDoc annotations.