1.5.1 • Published 7 years ago

all-promises v1.5.1

Weekly downloads
3
License
ISC
Repository
github
Last release
7 years ago

all-promises

Build status Greenkeeper badge NPM version Dependency status

This project is try to collect all Promise implementations which follow ECMAScript 6 (which based on Promises/A+ 1.1.1).

Usage

The goal of this project is to provide a centric location to ease the comparison and testings of different implementations. Normally you only need one Promise implementation in your application, so you would mostly never use this package in the productions.

Install

npm install all-promises

API

function getPromiseConstructor(name: string): PromiseConstructor

var Promise = require('all-promises').getPromiseConstructor('q') // q implementation
var p = new Promise(function (resolve) { resolve(1) })
p.then(function (x) { assert(x === 1) })

default: PromiseConstructor

test.js file:

var Promise = require('all-promises').default // default implementation

You can specify default implementation by passing env variable:

P=rsvp node test

If no env P is provided, default to V8 native implementation

list: Array<PromiseImplementation>

interface PromiseImplementation {
	name: string,
	version: string,
	aliases: Array<string>,
	Promise: PromiseConstructor?,
	error: Error?
}
var list = require('all-promises').list

list.forEach(function (impl, index) {
	console.log(index + '.',
		'package name:', impl.name,
		'aliases:', impl.aliases,
		'version:', impl.version)
	var Promise = impl.Promise // Promise constructor
	if (Promise) Promise.resolve(1).then(function (x) { assert(x === 1) })
	else console.warn(impl.error)
})

function register(packageName: string, alias?: string|Array<string>, exportPromise?: string|function)

function unregister(name: string): boolean

function has(name: string): boolean

function get(name: string): PromiseImplementation

var promises = require('all-promises')

promises.has('es6-promise-polyfill') // false
promises.register('es6-promise-polyfill')
promises.has('es6-promise-polyfill') // true
var impl = promises.get('es6-promise-polyfill')
assert.deepEqual(impl, {
	name: 'es6-promise-polyfill',
	aliases: [],
	Promise: promises.getPromiseConstructor('es6-promise-polyfill'),
})
promises.unregister('es6-promise-polyfill') // true
promises.has('es6-promise-polyfill') // false
promises.unregister('es6-promise-polyfill') // false

Current list of implementations (order by alphabet)

packagerepoalias
bluebirdpetkaantonov/bluebirdbb
es6-promisejakearchibald/es6-promise
es6-promise-polyfill ^1lahmatiy/es6-promise-polyfill
es6-promisesOctane/Promise
liecalvinmetcalf/lie
my-promisehax/my-promisemy
native-promise-onlygetify/native-promise-onlynpo
promiscuousRubenVerborgh/promiscuous
promisethen/promisethen
promizZolmeister/promiz
qkriskowal/q
rsvptildeio/rsvp.js
vowdfilatov/vow
whencujojs/whenw
yakuysmood/yaku

^1: based on es6-promise, so excluded from the registery by default

How to add a new implementation

Criteria

  • MUST register on npm

  • MUST support new Promise(function executor(resolve, reject) { ... }), Promise.resolve() and Promise.reject() API

  • SHOULD pass all Promise/A+ Tests

    	NOTE: Currently most implementations don't pass [ES6 Promise Tests](https://github.com/promises-es6/promises-es6), so it's not on the MUST list up to now.

Contribute

  1. Edit implementations.js
  2. Edit package.json (npm install package-name-of-new-implementation --save)
  3. Run npm test, if everything is ok then
  4. Send pull request