UNPKG

parallel.es

Version:
55 lines (54 loc) 2.75 kB
"use strict"; var parallel_collection_generator_1 = require("./generator/parallel-collection-generator"); var parallel_range_generator_1 = require("./generator/parallel-range-generator"); var parallel_times_generator_1 = require("./generator/parallel-times-generator"); var parallel_chain_factory_1 = require("./chain/parallel-chain-factory"); var function_id_1 = require("../function/function-id"); function parallelFactory(defaultOptions) { function mergeOptions(userOptions) { if (userOptions) { if (userOptions.hasOwnProperty("threadPool") && typeof (userOptions.threadPool) === "undefined") { throw new Error("The thread pool is mandatory and cannot be unset"); } if (userOptions.hasOwnProperty("maxConcurrencyLevel") && typeof (userOptions.maxConcurrencyLevel) !== "number") { throw new Error("The maxConcurrencyLevel is mandatory and has to be a number"); } } return Object.assign({}, defaultOptions, userOptions); } return { defaultOptions: function (options) { if (options) { defaultOptions = mergeOptions(options); } else { return Object.assign({}, defaultOptions); } }, from: function (collection, options) { return parallel_chain_factory_1.createParallelChain(new parallel_collection_generator_1.ParallelCollectionGenerator(collection), mergeOptions(options)); }, range: function (start, end, step, options) { var generator = parallel_range_generator_1.ParallelRangeGenerator.create(start, end, step); return parallel_chain_factory_1.createParallelChain(generator, mergeOptions(options)); }, times: function (n, generator, env, options) { if (env) { return parallel_chain_factory_1.createParallelChain(parallel_times_generator_1.ParallelTimesGenerator.create(n, generator), mergeOptions(options), env); } return parallel_chain_factory_1.createParallelChain(parallel_times_generator_1.ParallelTimesGenerator.create(n, generator), mergeOptions(options)); }, schedule: function (func) { var params = []; for (var _i = 1; _i < arguments.length; _i++) { params[_i - 1] = arguments[_i]; } if (function_id_1.isFunctionId(func)) { return (_a = defaultOptions.threadPool).schedule.apply(_a, [func].concat(params)); } return (_b = defaultOptions.threadPool).schedule.apply(_b, [func].concat(params)); var _a, _b; } }; } exports.parallelFactory = parallelFactory;