Documentation
Build
First clone the project from github:
git clone git@github.com:josdejong/mathjs.git
cd mathjs
Install the project dependencies:
npm install
Then, the project can be build by executing the build script via npm:
npm run build
This will build ESM output, CommonJS output, and the bundle math.js from the source files and put them in the folder lib.
Develop
When developing new features for mathjs, it is good to be aware of the following background information.
Code
The code of mathjs
is written in ES modules, and requires all files to have a real, relative path, meaning the files must have a *.js
extension. Please configure adding file extensions on auto import in your IDE.
Implementing a new function
A common case is to implement a new function. This involves the following steps:
- Implement the function in the right category, for example
./src/function/arithmetic/myNewFunction.js
, where you can replacearithmetic
with the proper category, andmyNewFunction
with the name of the new function. Add the new function to the index files./src/factoriesAny.js
and possibly./src/factoriesNumber.js
. - Write documentation on the function in the source code comment of
myNewFunction.js
. This documentation is used to auto generate documentation on the website. - Write embedded documentation for the new function in
./src/expression/embeddedDocs/function/arithmetic/myNewFunction.js
. Add the new documentation to the index file./src/expression/embeddedDocs/embeddedDocs.js
. - Write unit tests for the function in
./test/unit-tests/function/arithmetic/myNewFunction.test.js
. - Write the necessary TypeScript definitions for the new function in
./types/index.d.ts
, and write tests for it in./test/typescript-tests/testTypes.ts
. This is described in ./types/EXPLANATION.md. - Ensure the code style is ok by running
npm run lint
(runnpm run format
to fix the code style automatically).
Test
To execute tests for the library, install the project dependencies once:
npm install
Then, the tests can be executed:
npm test
To test the type definitions:
npm run test:types
Additionally, the tests can be run on FireFox using headless mode:
npm run test:browser
To run the tests remotely on BrowserStack, first set the environment variables BROWSER_STACK_USERNAME
and BROWSER_STACK_ACCESS_KEY
with your username and access key and then execute:
npm run test:browserstack
You can separately run the code linter, though it is also executed with npm test
:
npm run lint
To automatically fix linting issue, run:
npm run format
To test code coverage of the tests:
npm run coverage
To see the coverage results, open the generated report in your browser:
./coverage/lcov-report/index.html
Continuous integration testing
Continuous integration tests are run on Github Actions and BrowserStack every time a commit is pushed to github. Github Actions runs the tests for different versions of node.js, and BrowserStack runs the tests on all major browsers.
Thanks Github Actions and BrowserStack for the generous free hosting of this open source project!