asyncawait
Version:
async/await for node.js
46 lines (35 loc) • 1.81 kB
text/typescript
import assert = require('assert');
import types = require('../types');
export = Config;
/** A config object holds the configuration options for a variant of the async function. */
class Config implements types.AsyncOptions {
/** Construct a new Config instance. */
constructor(options?: types.AsyncOptions) {
if (options) {
this.returnValue = options.returnValue;
this.acceptsCallback = options.acceptsCallback;
this.isIterable = options.isIterable;
this.maxConcurrency = options.maxConcurrency;
}
}
/** Recognised values: 'none', 'promise', 'thunk', 'result'. */
returnValue: string = Config.PROMISE;
/** Indicates whether a callback function, if supplied, will be used to notify waiters of results. */
acceptsCallback: boolean = false;
/** Indicates whether the suspendable function has iterator semantics or normal semantics. */
isIterable: boolean = false;
/** Indicates whether top-level concurrency should be limited to a specified ceiling. */
maxConcurrency: number = null;
// Constants for use with returnValue and callbackArg
static PROMISE = 'promise';
static THUNK = 'thunk';
static RESULT = 'result';
static NONE = 'none';
/** Checks all configuration values and throw an error if anything is invalid. */
validate() {
var knownRetVal = [Config.PROMISE, Config.THUNK, Config.RESULT, Config.NONE].indexOf(this.returnValue) !== -1;
assert(knownRetVal, 'Unrecognised return value: ' + this.returnValue);
var hasNotifier = this.returnValue !== Config.NONE || this.acceptsCallback;
assert(hasNotifier, 'At least one notification method must be enabled.');
}
}