Spaces:
Running
Running
; | |
const taskManager = require("./managers/tasks"); | |
const patternManager = require("./managers/patterns"); | |
const async_1 = require("./providers/async"); | |
const stream_1 = require("./providers/stream"); | |
const sync_1 = require("./providers/sync"); | |
const settings_1 = require("./settings"); | |
const utils = require("./utils"); | |
async function FastGlob(source, options) { | |
assertPatternsInput(source); | |
const works = getWorks(source, async_1.default, options); | |
const result = await Promise.all(works); | |
return utils.array.flatten(result); | |
} | |
// https://github.com/typescript-eslint/typescript-eslint/issues/60 | |
// eslint-disable-next-line no-redeclare | |
(function (FastGlob) { | |
function sync(source, options) { | |
assertPatternsInput(source); | |
const works = getWorks(source, sync_1.default, options); | |
return utils.array.flatten(works); | |
} | |
FastGlob.sync = sync; | |
function stream(source, options) { | |
assertPatternsInput(source); | |
const works = getWorks(source, stream_1.default, options); | |
/** | |
* The stream returned by the provider cannot work with an asynchronous iterator. | |
* To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams. | |
* This affects performance (+25%). I don't see best solution right now. | |
*/ | |
return utils.stream.merge(works); | |
} | |
FastGlob.stream = stream; | |
function generateTasks(source, options) { | |
assertPatternsInput(source); | |
const patterns = patternManager.transform([].concat(source)); | |
const settings = new settings_1.default(options); | |
return taskManager.generate(patterns, settings); | |
} | |
FastGlob.generateTasks = generateTasks; | |
function isDynamicPattern(source, options) { | |
assertPatternsInput(source); | |
const settings = new settings_1.default(options); | |
return utils.pattern.isDynamicPattern(source, settings); | |
} | |
FastGlob.isDynamicPattern = isDynamicPattern; | |
function escapePath(source) { | |
assertPatternsInput(source); | |
return utils.path.escape(source); | |
} | |
FastGlob.escapePath = escapePath; | |
})(FastGlob || (FastGlob = {})); | |
function getWorks(source, _Provider, options) { | |
const patterns = patternManager.transform([].concat(source)); | |
const settings = new settings_1.default(options); | |
const tasks = taskManager.generate(patterns, settings); | |
const provider = new _Provider(settings); | |
return tasks.map(provider.read, provider); | |
} | |
function assertPatternsInput(input) { | |
const source = [].concat(input); | |
const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item)); | |
if (!isValidSource) { | |
throw new TypeError('Patterns must be a string (non empty) or an array of strings'); | |
} | |
} | |
module.exports = FastGlob; | |