|
"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';
|
|
}
|