polyfiller
v0.0.32
Published
A polyfill combinator
Downloads
652
Maintainers
Readme
Polyfiller
A polyfill combinator
Getting Started
This package requires Node ~0.10.0
If you haven't used npm before, be sure to check out the Getting Started guide, as it explains how to install npm and use a package.json file. Once you're familiar with that process, you may install this package with this command:
npm install polyfiller --save-dev
Once the package has been installed, it may be used inside your files with this line of JavaScript:
var Polyfiller = require('polyfiller');
Usage Example
var fs = require('fs');
var polyfiller = new Polyfiller;
var list = polyfiller.find([ 'Promise', 'Fetch', 'URL' ]);
fs.writeFile('./polyfills.js', polyfiller.pack(list));
Catalog
A list of available features
| Feature | What's included? | Type | License | |:--------|:-----------------|:----:|:-------:| Array.from | Array.from | | MIT | Array.prototype.find | Array.prototype.find | | MIT | Array.prototype.findIndex | Array.prototype.findIndex | | MIT | CSS.escape | CSS.escape | | MIT | Object.observe | Object.observe | | MIT | Reflect | ReflectProxy handler | | Apache License, MPL | Collections | SetMapWeakSetWeakMap | | MIT | DOM4 | CustomEventElement#appendElement#prependElement#afterElement#beforeElement#replaceWithElement#removeElement#queryElement#queryAllElement#matchesElement#closestElement#classList | | MIT | Element.prototype.dataset | Element.prototype.dataset | | MIT | EventSource | EventSource | | MIT | Fetch | window.fetchBodyHeadersRequestResponse | | MIT | Promise | Promise | | MIT | KeyboardEvent | URL | | MIT | Notification | Notification | | MIT | Number.prototype.toLocaleString | Number.prototype.toLocaleString | | Public Domain | Object.create (patch) | Object.create | | MIT | Object.getOwnPropertySymbols | Object.getOwnPropertySymbols | | MIT | PointerEvents | PointerEvents | | Apache License | window.setImmediate | window.setImmediatewindow.clearImmediate | | MIT | RegExp.prototype.match | RegExp.prototype.match | | MIT | RegExp.prototype.search | RegExp.prototype.search | | MIT | String.fromCodePoint | RegExp.prototype.search | | MIT | String.prototype.at | String.prototype.at | | MIT | String.prototype.codePointAt | String.prototype.codePointAt | | MIT | String.prototype.endsWith | String.prototype.endsWith | | MIT | String.prototype.includes | String.prototype.includes | | MIT | String.prototype.normalize | String.prototype.normalize | | MIT, GPL | String.prototype.repeat | String.prototype.repeat | | MIT | String.prototype.startsWith | String.prototype.startsWith | | MIT | System | System | | MIT | TextEncoder | TextEncoder | | Apache License | TypedArray | TypedArrayArrayBufferDataView | | MIT | URL | URL | | MIT | UserTiming | window.performance.clearMarkswindow.performance.clearMeasureswindow.performance.getEntrieswindow.performance.getEntriesByNamewindow.performance.getEntriesByTypewindow.performance.markwindow.performance.measure | | MIT | WindowBase64 | WindowBase64 | | WTFPL | document.currentScript | document.scrollingElement | | MIT | document.scrollingElement | document.scrollingElement | | MIT | window.location.origin | window.location.origin | | MIT | window.navigator.geolocation | window.navigator.geolocation | | MIT | window.navigator.getUserMedia | window.navigator.getUserMedia | | MIT | window.navigator.language | window.location.origin | | MIT | window.performance.now | window.performance.now | | MIT | window.requestAnimationFrame | window.requestAnimationFramewindow.cancelAnimationFrame | | MIT |
Compatibility
Theoretically compatible with all contemporary browsers since IE9. For IE8 only it's recommended to include ie8 script before your build
Methods
find
Type: Function (Array, [ Function (feature, name, features) ])
Returns: Array
Returns an unordered bundle of polyfills as an array of objects
var polyfiller = new Polyfiller;
var list = polyfiller.find([
'Promise'
],
function (feature, name) {
console.log(feature.source, feature.config, name);
});
list[0].source; // source code
list[0].config.name; // Promise
Also available the second format (it may be useful in the future versions):
var polyfiller = new Polyfiller;
var list = polyfiller.find([
{
name: 'Promise'
}
],
function (feature, name) {
console.log(name, feature.source, feature.config);
});
list
Type: Function ([extended=false])
Returns: Array
Returns a list of all available features as an array of strings.
var polyfiller = new Polyfiller;
polyfiller.list(); // ['Promise', 'Reflect', 'URL', ...]
extended option
var polyfiller = new Polyfiller;
var list = polyfiller.list(true);
list; // [{ config }, ...]
list[0].name; // Array.from
list[0].author; // Mathias Bynens
list[0].licenses[0].type; // MIT
...
For more information see the config format
pack
Type: Function (features)
Returns: String
Packs a list of polyfills into one string
var polyfiller = new Polyfiller;
var list = polyfiller.find([ 'Promise' ]),
code = polyfiller.pack(list);
Options
exclude
Type: Array
Default: []
Some polyfills have dependencies that you can exclude here
var polyfiller = new Polyfiller({
exclude: ['setImmediate']
});
verbose
Type: Boolean
Default: false
Verbose mode is an option that provides additional details as to what the package is doing.
var polyfiller = new Polyfiller({
verbose: true
});
wrapper
Type: Function
Default (find
): None
Default (pack
): see
A custom wrapper for your environment.
var polyfiller = new Polyfiller({
wrapper: function (source) {
return ';(function () {' + source + '}.call(self));'
}
});
Also this option is available like a method:
var polyfiller = new Polyfiller;
polyfiller.options.wrapper(function (source) {
return source;
});
modules
Do you want to use some specific npm
or bower
modules?
var path = require('path');
var polyfiller = new Polyfiller({
modules: [
path.join(__dirname, '../your_catalog/npm_modules'),
path.join(__dirname, '../your_catalog/bower_components')
]
});
NOTE: Please use only with the option catalog
.
catalog
Type: Array
Default: [trunk/catalog]
Have custom polyfills? Add paths to their location here.
var path = require('path');
var polyfiller = new Polyfiller({
catalog: [
path.resolve(__dirname, '../your/catalog')
]
});
If you want to use npm
or bower
packages in your catalog, please see modules
section.
Required file structure for each new package:
catalog
Promise
index.json
index.js
index.json
{
"name": "Promise"
}
There are dependencies?
"dependencies": ["window.setImmediate"]
index.js
module.exports = [
{
type: 'npm',
name: 'es6-promises'
}
];
type
Type: string [npm | bower | file]
Default: None
name
Type: string
Default: None
The files are located locally?
catalog
Promise
files
index.js — your polyfill
index.json
index.js
// index.js
var path = require('path');
module.exports = [
{
type: 'file',
name: path.join(__dirname, './files/index.js')
}
];
Tests
npm test
Contributing
Please see our contributing guide
Have an interesting and well-tested polyfill?
License
MIT
Task submitted by Alexander Abashkin