UNPKG

typed-patterns

Version:
172 lines 9.74 kB
"use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); const async = __importStar(require("async")); const unexpected_1 = require("./unexpected"); /** * Fails specified callback * @param [callback] Callback function * @param error Exception object */ function fail(callback, error) { if (typeof callback === 'function') { callback(error); } else if (typeof callback !== 'undefined') { throw new TypeError('Function expected'); } } exports.fail = fail; /** * Successes specified callback * @param [callback] Callback function * @param result Array of result items */ function success(callback, ...result) { if (typeof callback === 'function') { callback(null, ...result); } else if (typeof callback !== 'undefined') { throw new TypeError('Function expected'); } } exports.success = success; /** * Joins onSuccess and onFail callback into classical asynchronous callback function * @param onSuccess Callback function that must be called on success result * @param onFail Callback function that must be called on error */ function join(onSuccess, onFail) { if (typeof onSuccess !== 'function') { throw new TypeError('Function expected'); } if (typeof onFail !== 'function') { throw new TypeError('Function expected'); } return function (error, ...result) { if (error) { onFail(error); } else { onSuccess.apply(null, result); } }; } exports.join = join; /** * Returns callback that wraps array of success results into single tuple * @param callback Callback that accepts array of results as tuple */ function wrapCallback(callback) { if (typeof callback !== 'function') { throw new TypeError('Function expected'); } return function (error, ...result) { if (error) { fail(callback, error); } else { success(callback, result); } }; } exports.wrapCallback = wrapCallback; /** * Returns callback that unwraps single tuple to an array of success results * @param callback Callback that accepts array of success results */ function unwrapCallback(callback) { if (typeof callback !== 'function') { throw new TypeError('Function expected'); } return function (error, ...result) { if (error) { fail(callback, error); } else { success(callback, ...(result[0] || [])); } }; } exports.unwrapCallback = unwrapCallback; /** * Returns asynchronous worker function that wraps array of results into single tuple * @param worker Asynchronous worker function that provides array of results to a callback */ function wrapWorker(worker) { if (typeof worker !== 'function') { throw new TypeError('Function expected'); } return function (callback) { worker(callback ? wrapCallback(callback) : undefined); }; } exports.wrapWorker = wrapWorker; /** * Returns asynchronous worker function that unwraps single result to an array of results * @param worker Asynchronous worker function that provides single result as tuple */ function unwrapWorker(worker) { if (typeof worker !== 'function') { throw new TypeError('Function expected'); } return function (callback) { worker(callback ? unwrapCallback(callback) : undefined); }; } exports.unwrapWorker = unwrapWorker; function collect(collection) { return function (callback) { if (Array.isArray(collection)) { async.parallel(collection, (error, results) => { if (error) { fail(callback, error); } else { success(callback, results); } }); } else { async.parallel(collection, (error, results) => { if (error) { fail(callback, error); } else { success(callback, results); } }); } }; } exports.collect = collect; /** * Returns asynchronous processor functions that uses type-guard for accepting specific context * and delegates work to specified processor * @param guard Type-guard function for specific context acceptance * @param processor Asynchronous processor function for specific context */ function guardAsyncProcessor(guard, processor) { if (typeof guard !== 'function') { throw new TypeError('Function expected as guard'); } if (typeof processor !== 'function') { throw new TypeError('Function expected as guard'); } return (context, callback, next) => { if (!guard(context)) { unexpected_1.unexpected(undefined, callback, next); } else { processor(context, callback, next); } }; } exports.guardAsyncProcessor = guardAsyncProcessor; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMuaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NvdXJjZS91dGlsL2FzeW5jLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsNkNBQStCO0FBSS9CLDZDQUEwQztBQTRCMUM7Ozs7R0FJRztBQUNILFNBQWdCLElBQUksQ0FDbEIsUUFBaUQsRUFDakQsS0FBZ0I7SUFFaEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUU7UUFDakMsUUFBdUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNqRDtTQUFNLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1FBQzFDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQUMxQztBQUNILENBQUM7QUFURCxvQkFTQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixPQUFPLENBQ3JCLFFBQWlELEVBQ2pELEdBQUcsTUFBYztJQUVqQixJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRTtRQUNsQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7S0FDM0I7U0FBTSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVcsRUFBRTtRQUMxQyxNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDMUM7QUFDSCxDQUFDO0FBVEQsMEJBU0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsSUFBSSxDQUNsQixTQUFzQyxFQUN0QyxNQUF3QztJQUV4QyxJQUFJLE9BQU8sU0FBUyxLQUFLLFVBQVUsRUFBRTtRQUNuQyxNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDMUM7SUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsRUFBRTtRQUNoQyxNQUFNLElBQUksU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDMUM7SUFDRCxPQUFPLFVBQVMsS0FBd0IsRUFBRSxHQUFHLE1B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