You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.8 KiB
68 lines
2.8 KiB
"use strict"; |
|
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;
|
|
|