/* * Copyright (c) 2015-present, Vitaly Tomilov * * See the LICENSE file at the top-level directory of this distribution * for licensing information. * * Removal or modification of this copyright notice is prohibited. */ const {PromiseAdapter} = require('./promise-adapter'); ////////////////////////////////////////// // Parses and validates a promise library; function parse(pl) { let promise; if (pl instanceof PromiseAdapter) { promise = function (func) { return pl.create(func); }; promise.resolve = pl.resolve; promise.reject = pl.reject; promise.all = pl.all; return promise; } const t = typeof pl; if (t === 'function' || t === 'object') { const Root = typeof pl.Promise === 'function' ? pl.Promise : pl; promise = function (func) { return new Root(func); }; promise.resolve = Root.resolve; promise.reject = Root.reject; promise.all = Root.all; if (typeof promise.resolve === 'function' && typeof promise.reject === 'function' && typeof promise.all === 'function') { return promise; } } throw new TypeError('Invalid promise library specified.'); } function parsePromise(promiseLib) { const result = {promiseLib}; if (promiseLib) { result.promise = parse(promiseLib); } else { result.promise = parse(Promise); result.promiseLib = Promise; } return result; } module.exports = {parsePromise};