Skip to content

Latest commit

 

History

History
82 lines (71 loc) · 5.01 KB

CONTRIBUTING.md

File metadata and controls

82 lines (71 loc) · 5.01 KB

Contributing

Contributions are always welcome. If you don't know how you can help, you can check issues or ask @zloirock.

How to add a new polyfill

How to update core-js-compat data

For updating core-js-compat data:

  • If you want to add new data for a browser, run in this browser tests/compat/index.html and you will see what core-js modules are required for this browser.
  • If you want to add new data for NodeJS, run tests/compat/node-runner.js in the required NodeJS version and you will see the results in the console.
  • After getting this data, add it to packages/core-js-compat/src/data.mjs.
  • If you want to add new mapping (for example, to add a new iOS Safari version based on Safari or NodeJS based on Chrome), add it to packages/core-js-compat/src/mapping.mjs.

Style and standards

The 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, they should not use other polyfills from the global scope.
  • Unit tests should use the modern syntax with our minimalistic Babel config. Unit tests for the pure version should not use any modern standard library features.
  • Tools, scripts and tests, performed in NodeJS, should use only the syntax and the standard library available in NodeJS 8.

File names should be in the kebab-case. Name of polyfill modules should follow the naming convention namespace.subnamespace-where-required.feature-name, for example, esnext.set.intersection. The top-level namespace should be es for stable ECMAScript features, esnext for ECMAScript proposals and web for other web standards.

Testing

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
    
  • The global version unit tests:
    $ npm run test-unit-global-standalone
    
  • The pure version unit tests:
    $ npm run test-unit-pure-standalone
    
  • Promises/A+ and ES6 Promise test cases:
    $ npm run test-promises-standalone
    
  • ECMAScript Observable test case:
    $ npm run test-observables-standalone
    
  • CommonJS entry points tests:
    $ npm run test-entries-standalone
    
  • If you want to run tests in a certain browser, at first, you should build packages and test bundles:
    $ npm run bundle-standalone
    
  • For running the global version of the unit test case, use this file:
    tests/tests.html
    
  • For running the pure version of the unit test case, use this file:
    tests/pure.html