constructor(api) {

        if (!api || typeof api !== 'object') {
            throw new TypeError('Adapter requires an api configuration object.');
        }

        api = assert(api, ['create', 'resolve', 'reject', 'all']);

        this.create = api.create;
        this.resolve = api.resolve;
        this.reject = api.reject;
        this.all = api.all;

        if (typeof this.create !== 'function') {
            throw new TypeError('Function \'create\' must be specified.');
        }

        if (typeof this.resolve !== 'function') {
            throw new TypeError('Function \'resolve\' must be specified.');
        }

        if (typeof this.reject !== 'function') {
            throw new TypeError('Function \'reject\' must be specified.');
        }

        if (typeof this.all !== 'function') {
            throw new TypeError('Function \'all\' must be specified.');
        }
    }
@class PromiseAdapter
@summary Adapter for the primary promise operations.
@description
Provides compatibility with promise libraries that cannot be recognized automatically,
via functions that implement the primary operations with promises:

 - construct a new promise with a callback function
 - resolve a promise with some result data
 - reject a promise with a reason
 - resolve an array of promises

The type is available from the library's root: `pgp.PromiseAdapter`.

@param {object} api
Promise API configuration object.

Passing in anything other than an object will throw {@link external:TypeError TypeError} = `Adapter requires an api configuration object.`

@param {function} api.create
A function that takes a callback parameter and returns a new promise object.
The callback parameter is expected to be `function(resolve, reject)`.

Passing in anything other than a function will throw {@link external:TypeError TypeError} = `Function 'create' must be specified.`

@param {function} api.resolve
A function that takes an optional data parameter and resolves a promise with it.

Passing in anything other than a function will throw {@link external:TypeError TypeError} = `Function 'resolve' must be specified.`

@param {function} api.reject
A function that takes an optional error parameter and rejects a promise with it.

Passing in anything other than a function will throw {@link external:TypeError TypeError} = `Function 'reject' must be specified.`

@param {function} api.all
A function that resolves an array of promises.

Passing in anything other than a function will throw {@link external:TypeError TypeError} = `Function 'all' must be specified.`

@returns {PromiseAdapter}