Skip to content

Latest commit

 

History

History
83 lines (72 loc) · 5.32 KB

CONTRIBUTING.md

File metadata and controls

83 lines (72 loc) · 5.32 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 npm run compat with the installed required NodeJS version and you will see the results in the console. Use npm run compat-json if you want to get the result as JSON.
  • If you want to add new data for Deno, run npm run compat-deno with the installed required Deno version and you will see the results in the console. Use npm run compat-deno-json if you want to get the result as JSON.
  • 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