UNPKG

find-node-modules

Version:

Return an array of all parent node_modules directories

62 lines (61 loc) 2.34 kB
"use strict"; const taskManager = require("./managers/tasks"); 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/index"); function FastGlob(source, options) { try { assertPatternsInput(source); } catch (error) { return Promise.reject(error); } const works = getWorks(source, async_1.default, options); return Promise.all(works).then(utils.array.flatten); } (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 = [].concat(source); const settings = new settings_1.default(options); return taskManager.generate(patterns, settings); } FastGlob.generateTasks = generateTasks; })(FastGlob || (FastGlob = {})); function getWorks(source, _Provider, options) { const patterns = [].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(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'; } module.exports = FastGlob;