polyfiller

0.0.32 • Public • Published

Polyfiller

npm version Build Status Coverage Status Dependency Status License Codacy Badge

Sauce Test Status

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
ecma MIT
Array.prototype.find Array.prototype.find
ecma MIT
Array.prototype.findIndex Array.prototype.findIndex
ecma MIT
CSS.escape CSS.escape
w3c MIT
Object.observe Object.observe
proposal MIT
Reflect Reflect
Proxy handler
ecma Apache License, MPL
Collections Set
Map
WeakSet
WeakMap
ecma MIT
DOM4 CustomEvent
Element#append
Element#prepend
Element#after
Element#before
Element#replaceWith
Element#remove
Element#query
Element#queryAll
Element#matches
Element#closest
Element#classList
w3c whatwg MIT
Element.prototype.dataset Element.prototype.dataset
w3c whatwg MIT
EventSource EventSource
whatwg MIT
Fetch window.fetch
Body
Headers
Request
Response
whatwg MIT
Promise Promise
ecma MIT
KeyboardEvent URL
w3c MIT
Notification Notification
whatwg MIT
Number.prototype.toLocaleString Number.prototype.toLocaleString
ecma Public Domain
Object.create (patch) Object.create
ecma MIT
Object.getOwnPropertySymbols Object.getOwnPropertySymbols
ecma MIT
PointerEvents PointerEvents
w3c Apache License
window.setImmediate window.setImmediate
window.clearImmediate
w3c MIT
RegExp.prototype.match RegExp.prototype.match
ecma MIT
RegExp.prototype.search RegExp.prototype.search
ecma MIT
String.fromCodePoint RegExp.prototype.search
ecma MIT
String.prototype.at String.prototype.at
proposal MIT
String.prototype.codePointAt String.prototype.codePointAt
ecma MIT
String.prototype.endsWith String.prototype.endsWith
ecma MIT
String.prototype.includes String.prototype.includes
ecma MIT
String.prototype.normalize String.prototype.normalize
ecma MIT, GPL
String.prototype.repeat String.prototype.repeat
ecma MIT
String.prototype.startsWith String.prototype.startsWith
ecma MIT
System System
ecma MIT
TextEncoder TextEncoder
whatwg Apache License
TypedArray TypedArray
ArrayBuffer
DataView
ecma MIT
URL URL
whatwg MIT
UserTiming window.performance.clearMarks
window.performance.clearMeasures
window.performance.getEntries
window.performance.getEntriesByName
window.performance.getEntriesByType
window.performance.mark
window.performance.measure
w3c MIT
WindowBase64 WindowBase64
w3c whatwg WTFPL
document.currentScript document.scrollingElement
whatwg MIT
document.scrollingElement document.scrollingElement
w3c MIT
window.location.origin window.location.origin
whatwg MIT
window.navigator.geolocation window.navigator.geolocation
w3c MIT
window.navigator.getUserMedia window.navigator.getUserMedia
w3c MIT
window.navigator.language window.location.origin
whatwg MIT
window.performance.now window.performance.now
w3c MIT
window.requestAnimationFrame window.requestAnimationFrame
window.cancelAnimationFrame
w3c 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

Analytics

Package Sidebar

Install

npm i polyfiller

Weekly Downloads

181

Version

0.0.32

License

MIT

Last publish

Collaborators

  • monolithed