103 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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");
 | |
| 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) {
 | |
|     FastGlob.glob = FastGlob;
 | |
|     FastGlob.globSync = sync;
 | |
|     FastGlob.globStream = stream;
 | |
|     FastGlob.async = 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;
 | |
|     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;
 | |
|     function convertPathToPattern(source) {
 | |
|         assertPatternsInput(source);
 | |
|         return utils.path.convertPathToPattern(source);
 | |
|     }
 | |
|     FastGlob.convertPathToPattern = convertPathToPattern;
 | |
|     let posix;
 | |
|     (function (posix) {
 | |
|         function escapePath(source) {
 | |
|             assertPatternsInput(source);
 | |
|             return utils.path.escapePosixPath(source);
 | |
|         }
 | |
|         posix.escapePath = escapePath;
 | |
|         function convertPathToPattern(source) {
 | |
|             assertPatternsInput(source);
 | |
|             return utils.path.convertPosixPathToPattern(source);
 | |
|         }
 | |
|         posix.convertPathToPattern = convertPathToPattern;
 | |
|     })(posix = FastGlob.posix || (FastGlob.posix = {}));
 | |
|     let win32;
 | |
|     (function (win32) {
 | |
|         function escapePath(source) {
 | |
|             assertPatternsInput(source);
 | |
|             return utils.path.escapeWindowsPath(source);
 | |
|         }
 | |
|         win32.escapePath = escapePath;
 | |
|         function convertPathToPattern(source) {
 | |
|             assertPatternsInput(source);
 | |
|             return utils.path.convertWindowsPathToPattern(source);
 | |
|         }
 | |
|         win32.convertPathToPattern = convertPathToPattern;
 | |
|     })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));
 | |
| })(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(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;
 |