"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var optionsManager = require("./managers/options"); var taskManager = require("./managers/tasks"); var reader_async_1 = require("./providers/reader-async"); var reader_stream_1 = require("./providers/reader-stream"); var reader_sync_1 = require("./providers/reader-sync"); var arrayUtils = require("./utils/array"); var streamUtils = require("./utils/stream"); /** * Synchronous API. */ function sync(source, opts) { assertPatternsInput(source); var works = getWorks(source, reader_sync_1.default, opts); return arrayUtils.flatten(works); } exports.sync = sync; /** * Asynchronous API. */ function async(source, opts) { try { assertPatternsInput(source); } catch (error) { return Promise.reject(error); } var works = getWorks(source, reader_async_1.default, opts); return Promise.all(works).then(arrayUtils.flatten); } exports.async = async; /** * Stream API. */ function stream(source, opts) { assertPatternsInput(source); var works = getWorks(source, reader_stream_1.default, opts); return streamUtils.merge(works); } exports.stream = stream; /** * Return a set of tasks based on provided patterns. */ function generateTasks(source, opts) { assertPatternsInput(source); var patterns = [].concat(source); var options = optionsManager.prepare(opts); return taskManager.generate(patterns, options); } exports.generateTasks = generateTasks; /** * Returns a set of works based on provided tasks and class of the reader. */ function getWorks(source, _Reader, opts) { var patterns = [].concat(source); var options = optionsManager.prepare(opts); var tasks = taskManager.generate(patterns, options); var reader = new _Reader(options); return tasks.map(reader.read, reader); } function assertPatternsInput(source) { if ([].concat(source).every(isString)) { return; } throw new TypeError('Patterns must be a string or an array of strings'); } function isString(source) { /* tslint:disable-next-line strict-type-predicates */ return typeof source === 'string'; }