Contributions are always welcome. If you don't know what how you can help, you can check issues or ask @zloirock.
- The polyfill implementation should be added to the
packages/core-js/modulesdirectory. - Any shared helpers should be added to the
packages/core-js/internalsdirectory. - If the implementation for the
pureversion differs from the global version, add it topackages/core-js-pure/overridedirectory. The rest parts ofcore-js-purewill be copied fromcore-jspackage. - For export the polyfill, in almost all cases use
internals/exporthelper. - Add feature detection of the polyfill to
tests/compat/tests.jsand compatibility data topackages/core-js-compat/src/data.jsandpackages/core-js-compat/src/modules-by-versions.js(this data also used for getting default list of polyfills at bundling). - Add it to entry points where it's required: directories
packages/core-js/features,packages/core-js/es,packages/core-js/proposals,packages/core-js/stageandpackages/core-js/web. - Add unit tests to
tests/testsandtests/pure. - Add tests of entry points to
tests/commonjs.js. - Add documentation to README.md.
Coding style should follow our .eslintrc. You can test it by calling npm run lint. Different places have different syntax and standard library limitations:
- Polyfill implementations should use only ES3 syntax and standard library. Polyfills should not use another polyfill from the global namespace.
- In unit tests should be used modern syntax with our minimalistic Babel config. Unit tests for the
pureversion should not use any modern standard library features. - In building tools and tests, performed in Node.js, should be used only available in Node.js 4 syntax and standard library.
File names should be in kebab-case. Name of files with polyfills should follow naming convention namespace.subnamespase-where-required.feature-name, for example, esnext.promise.try. Top level namespace could be es for stable ECMAScript features, esnext for ECMAScript proposals, web for another web standards and core for helpers.
Before testing, you should install dependencies:
$ npm i
You can run all tests by
$ npm run test
You can run parts of the test case separately:
- Linting:
$ npm run lint
- Global version unit tests:
$ npm run unit-tests
pureversion unit tests:
$ npm run unit-tests-pure
$ npm run promises-tests
$ npm run observables-tests
- CommonJS entry points tests:
$ npm run commonjs-tests
If you want to run tests in a certain browser at first you should build packages and test bundles:
$ npm run build
- For running global version unit test case use this file:
tests/tests.html
- For running the
pureversion unit test case use this file:
tests/pure.html
- Before running Promises/A+ test case in the browser you should bundle it:
$ npm run bundle-promises-tests
and after that use this file:
tests/promises-aplus.html
For updating core-js-compat data:
- Clone
core-jsrepo. - If you wanna add new data for a browser, run in this browser
tests/compat/index.htmland you will see whichcore-jsmodules required for this browser. - If you wanna add new data for Node.js, run
tests/compat/node-runner.jsin required Node.js version and you will see results in the console. - After getting this data, add it to
packages/core-js-compat/src/data.js. - If you wanna add new mapping (for example, add a new iOS Safari version based on Safari or Node.js based on Chrome), add it to
packages/core-js-compat/src/mapping.js. - Add a pull request to
core-jsrepo.