123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- // vendored from https://github.com/amasad/sane/blob/64ff3a870c42e84f744086884bf55a4f9c22d376/src/common.js
- 'use strict';
-
- const platform = require('os').platform();
-
- const path = require('path');
-
- const anymatch = require('anymatch');
-
- const micromatch = require('micromatch');
-
- const walker = require('walker');
- /**
- * Constants
- */
-
- exports.DEFAULT_DELAY = 100;
- exports.CHANGE_EVENT = 'change';
- exports.DELETE_EVENT = 'delete';
- exports.ADD_EVENT = 'add';
- exports.ALL_EVENT = 'all';
- /**
- * Assigns options to the watcher.
- *
- * @param {NodeWatcher|PollWatcher|WatchmanWatcher} watcher
- * @param {?object} opts
- * @return {boolean}
- * @public
- */
-
- exports.assignOptions = function (watcher, opts) {
- opts = opts || {};
- watcher.globs = opts.glob || [];
- watcher.dot = opts.dot || false;
- watcher.ignored = opts.ignored || false;
-
- if (!Array.isArray(watcher.globs)) {
- watcher.globs = [watcher.globs];
- }
-
- watcher.hasIgnore =
- Boolean(opts.ignored) && !(Array.isArray(opts) && opts.length > 0);
- watcher.doIgnore = opts.ignored ? anymatch(opts.ignored) : () => false;
-
- if (opts.watchman && opts.watchmanPath) {
- watcher.watchmanPath = opts.watchmanPath;
- }
-
- return opts;
- };
- /**
- * Checks a file relative path against the globs array.
- *
- * @param {array} globs
- * @param {string} relativePath
- * @return {boolean}
- * @public
- */
-
- exports.isFileIncluded = function (globs, dot, doIgnore, relativePath) {
- if (doIgnore(relativePath)) {
- return false;
- }
-
- return globs.length
- ? micromatch.some(relativePath, globs, {
- dot
- })
- : dot || micromatch.some(relativePath, '**/*');
- };
- /**
- * Traverse a directory recursively calling `callback` on every directory.
- *
- * @param {string} dir
- * @param {function} dirCallback
- * @param {function} fileCallback
- * @param {function} endCallback
- * @param {*} ignored
- * @public
- */
-
- exports.recReaddir = function (
- dir,
- dirCallback,
- fileCallback,
- endCallback,
- errorCallback,
- ignored
- ) {
- walker(dir)
- .filterDir(currentDir => !anymatch(ignored, currentDir))
- .on('dir', normalizeProxy(dirCallback))
- .on('file', normalizeProxy(fileCallback))
- .on('error', errorCallback)
- .on('end', () => {
- if (platform === 'win32') {
- setTimeout(endCallback, 1000);
- } else {
- endCallback();
- }
- });
- };
- /**
- * Returns a callback that when called will normalize a path and call the
- * original callback
- *
- * @param {function} callback
- * @return {function}
- * @private
- */
-
- function normalizeProxy(callback) {
- return (filepath, stats) => callback(path.normalize(filepath), stats);
- }
|