ArnaudBuchholz/gpf-js

View on GitHub
src/interfaces/thenable.js

Summary

Maintainability
A
0 mins
Test Coverage
/**
 * @file IThenable interface
 * @since 0.2.2
 */
/*#ifndef(UMD)*/
"use strict";
/*global _gpfDefineInterface*/ // Internal interface definition helper
/*global _gpfSyncReadSourceJSON*/ // Reads a source json file (only in source mode)
/*exported _gpfIThenable*/ // gpf.interfaces.IThenable
/*exported _gpfPromisify*/ // Converts any value into a Promise
/*exported _gpfPromisifyDefined*/ // Converts any value but undefined into a Promise
/*#endif*/

/**
 * The Thenable interface helps identifying Promise object through the
 * [then](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) method
 *
 * @interface gpf.interfaces.IThenable
 * @since 0.2.2
 */

/**
 * The then() method returns a Promise. It takes up to two arguments: callback functions for the success and failure
 * cases of the Promise
 *
 * @method gpf.interfaces.IThenable#then
 * @param {Function} onFulfilled called if the Promise is fulfilled
 * @param {Function} [onRejected] called if the Promise is rejected
 * @return {Promise} Promise
 * @since 0.2.2
 */

/**
 * IThenable interface specifier
 *
 * @type {gpf.interfaces.IThenable}
 * @since 0.2.2
 */
var _gpfIThenable = _gpfDefineInterface("Thenable",
    _gpfSyncReadSourceJSON("interfaces/thenable.json"));

/**
 * Converts any value into a promise.
 * If the value implements {@link gpf.interfaces.IThenable}, it is considered as a promise.
 *
 * @param {*} value Value to convert
 * @return {Promise<*>} Promisified version of the value
 * @since 0.2.2
 */
function _gpfPromisify (value) {
    if (gpf.interfaces.isImplementedBy(gpf.interfaces.IThenable, value)) {
        return value;
    }
    return Promise.resolve(value);
}

/**
 * Converts value into a promise if not undefined.
 * If the value implements {@link gpf.interfaces.IThenable}, it is considered as a promise.
 *
 * @param {*} value Value to convert
 * @return {Promise<*>|undefined} Promisified version of the value or undefined
 * @since 0.2.2
 */
function _gpfPromisifyDefined (value) {
    if (undefined !== value) {
        return _gpfPromisify(value);
    }
}

/**
 * @gpf:sameas _gpfPromisify
 * @since 0.2.2
 * @deprecated since version 0.2.6, use
 * [Promise.resolve](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve)
 * instead
 */
gpf.promisify = _gpfPromisify;

/**
 * @gpf:sameas _gpfPromisifyDefined
 * @since 0.2.2
 * @deprecated since version 0.2.6, use
 * [Promise.resolve](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve)
 * combined with a condition instead
 */
gpf.promisifyDefined = _gpfPromisifyDefined;