Coder Social home page Coder Social logo

jonathanchris / polyfill-service Goto Github PK

View Code? Open in Web Editor NEW

This project forked from polyfillpolyfill/polyfill-service

0.0 1.0 0.0 1.31 MB

A polyfill combinator

Home Page: https://cdn.polyfill.io/

License: Other

JavaScript 97.20% VCL 0.46% Handlebars 2.35%

polyfill-service's Introduction

Polyfill service

Build Status

polyfill makes web development less frustrating by selectively polyfilling just what the browser needs. Use it on your own site, or as a service. For usage information see the hosted service, which formats and displays the service API documentation located in the docs folder.

Installing as a service

  1. Install git and Node on your system
  2. Clone this repository to your system (git clone [email protected]:Financial-Times/polyfill-service.git)
  3. Run npm install (this will also run grunt build which you will need to do again if you edit any polyfills)

To run the app for development:

Run npm run watch from the root of the working tree (or, if you have nodemon installed, you may prefer to use that). This will watch your filesystem and automatically restart if you make any changes to any of the app source code. If you change polyfill code, you will need to recompile the polyfills by manually running grunt buildsources, because it takes a few seconds.

To run the app for production:

Run npm start. This will run the service using forever, which runs the process in the background, monitors it and restarts it automatically if it dies. It doesn't watch the filesystem for changes and you won't see any console output.

In either case, once the service is running, navigate to http://localhost:3000 in your browser

Alternatively, deploy straight to Heroku:

Deploy

For an HTTP API reference, see the hosted service documentation.

Environment configuration

The service reads a number of environment variables when started as a service:

  • PORT: The port on which to listen for HTTP requests (default 3000)
  • FASTLY_SERVICE_ID, FASTLY_API_KEY: Used to fetch and render cache hit stats on the Usage page of the hosted documentation. If not specified, no stats will be shown.
  • PINGDOM_CHECK_ID, PINGDOM_API_KEY, PINGDOM_ACCOUNT, PINGDOM_USERNAME, PINGDOM_PASSWORD: Used to fetch and render uptime and response time stats on the Usage page of the hosted documentation. If not specified, no stats will be shown.
  • GRAPHITE_HOST: Host to which to send Carbon metrics. If not set, no metrics will be sent.
  • GRAPHITE_PORT: Port on the GRAPHITE_HOST to which to send Carbon metrics (default 2002).

Using as a library

Polyfill service can also be used as a library in NodeJS projects. To do this:

  1. Add this repo as a dependency in your package.json e.g. npm install polyfill-service --save
  2. Rebuild your project using npm install
  3. Use the API from your code

Library API reference

getPolyfillString(options) (method)

Returns a bundle of polyfills as a string. Options is an object with the following keys:

  • uaString: String, required. The user agent to evaluate for polyfills that should be included conditionally
  • minify: Boolean, optional. Whether to minify the bundle
  • features: Object, optional. An object with the features that are to be considered for polyfill inclusion. If not supplied, all default features will be considered. Each feature must be an entry in the features object with the key corresponding to the name of the feature and the value an object with the following properties:
    • flags: Array, optional. Array of flags to apply to this feature (see below)
  • libVersion: String, optional. Version of the polyfill collection to use. Accepts any valid semver expression. This is useful if you wish to synronise releases in the polyfill service with your own release process, to ensure that incompatibilities cannot cause errors in your applications without warning. Intended for when deployed as a service. Not generally useful in a library context.
  • unknown: String, optional. What to do when the user agent is not recognised. Set to polyfill to return default polyfill variants of all qualifying features, ignore to return nothing. Defaults to ignore.

Flags that may be applied to polyfills are:

  • gated: Wrap this polyfill in a feature-detect, to avoid overwriting the native implementation
  • always: Include this polyfill regardless of the user-agent

Example:

require('polyfill-service').getPolyfillString({
	uaString: 'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
	minify: true,
	features: {
		'Element.prototype.matches': { flags: ['always', 'gated'] },
		'modernizr:es5array': {}
	}
});

getPolyfills(options) (method)

Returns a list of features whose configuration matches the given user agent string. Options is an object with the following keys:

  • uaString: String, required. The user agent to evaluate for features that should be included conditionally
  • features: Object, optional. An object with the features that are to be considered for polyfill inclusion. If not supplied, all default features will be considered. Each feature must be an entry in the features object with the key corresponding to the name of the feature and the value an object with the following properties:
    • flags: Array, optional. Array of flags to apply to this feature (see below)

Example:

require('polyfill-service').getPolyfills({
	uaString: 'Mozilla/5.0 (Windows; U; MSIE 7.0; Windows NT 6.0; en-US)',
	features: {
		'Element.prototype.matches': { flags: ['always', 'gated'] },
		'modernizr:es5array': {}
	}
});

getAllPolyfills() (method)

Return a list of all the features with polyfills as an array of strings. This list corresponds to directories in the /polyfills directory.

Example:

require('polyfill-service').getAllPolyfills();

polyfill-service's People

Contributors

aintgoin2goa avatar alrra avatar apaleslimghost avatar arthurvr avatar daniel-hug avatar dpen2000 avatar felixgilles avatar jonathanong avatar jonathantneal avatar juandopazo avatar kaelig avatar lvivier avatar mathiasbynens avatar matthew-andrews avatar mdevils avatar monolithed avatar ondras avatar samgiles avatar sk-scd91 avatar tejacques avatar triblondon avatar wheresrhys avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.