Add node modules and compiled JavaScript from main (#54)
Co-authored-by: Oliver King <oking3@uncc.edu>
This commit is contained in:
committed by
GitHub
parent
4a983766a0
commit
52d71d28bd
285
node_modules/jest-haste-map/build/watchers/FSEventsWatcher.js
generated
vendored
Normal file
285
node_modules/jest-haste-map/build/watchers/FSEventsWatcher.js
generated
vendored
Normal file
@@ -0,0 +1,285 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.FSEventsWatcher = void 0;
|
||||
|
||||
function _events() {
|
||||
const data = require('events');
|
||||
|
||||
_events = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function path() {
|
||||
const data = _interopRequireWildcard(require('path'));
|
||||
|
||||
path = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _anymatch() {
|
||||
const data = _interopRequireDefault(require('anymatch'));
|
||||
|
||||
_anymatch = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function fs() {
|
||||
const data = _interopRequireWildcard(require('graceful-fs'));
|
||||
|
||||
fs = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _micromatch() {
|
||||
const data = _interopRequireDefault(require('micromatch'));
|
||||
|
||||
_micromatch = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _walker() {
|
||||
const data = _interopRequireDefault(require('walker'));
|
||||
|
||||
_walker = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
function _getRequireWildcardCache(nodeInterop) {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cacheBabelInterop = new WeakMap();
|
||||
var cacheNodeInterop = new WeakMap();
|
||||
return (_getRequireWildcardCache = function (nodeInterop) {
|
||||
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
||||
})(nodeInterop);
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj, nodeInterop) {
|
||||
if (!nodeInterop && obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache(nodeInterop);
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor
|
||||
? Object.getOwnPropertyDescriptor(obj, key)
|
||||
: null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
*/
|
||||
// @ts-expect-error no types
|
||||
// eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/ban-ts-comment
|
||||
// @ts-ignore: this is for CI which runs linux and might not have this
|
||||
let fsevents = null;
|
||||
|
||||
try {
|
||||
fsevents = require('fsevents');
|
||||
} catch {
|
||||
// Optional dependency, only supported on Darwin.
|
||||
}
|
||||
|
||||
const CHANGE_EVENT = 'change';
|
||||
const DELETE_EVENT = 'delete';
|
||||
const ADD_EVENT = 'add';
|
||||
const ALL_EVENT = 'all';
|
||||
|
||||
/**
|
||||
* Export `FSEventsWatcher` class.
|
||||
* Watches `dir`.
|
||||
*/
|
||||
class FSEventsWatcher extends _events().EventEmitter {
|
||||
root;
|
||||
ignored;
|
||||
glob;
|
||||
dot;
|
||||
hasIgnore;
|
||||
doIgnore;
|
||||
fsEventsWatchStopper;
|
||||
_tracked;
|
||||
|
||||
static isSupported() {
|
||||
return fsevents !== null;
|
||||
}
|
||||
|
||||
static normalizeProxy(callback) {
|
||||
return (filepath, stats) => callback(path().normalize(filepath), stats);
|
||||
}
|
||||
|
||||
static recReaddir(
|
||||
dir,
|
||||
dirCallback,
|
||||
fileCallback,
|
||||
endCallback,
|
||||
errorCallback,
|
||||
ignored
|
||||
) {
|
||||
(0, _walker().default)(dir)
|
||||
.filterDir(
|
||||
currentDir => !ignored || !(0, _anymatch().default)(ignored, currentDir)
|
||||
)
|
||||
.on('dir', FSEventsWatcher.normalizeProxy(dirCallback))
|
||||
.on('file', FSEventsWatcher.normalizeProxy(fileCallback))
|
||||
.on('error', errorCallback)
|
||||
.on('end', () => {
|
||||
endCallback();
|
||||
});
|
||||
}
|
||||
|
||||
constructor(dir, opts) {
|
||||
if (!fsevents) {
|
||||
throw new Error(
|
||||
'`fsevents` unavailable (this watcher can only be used on Darwin)'
|
||||
);
|
||||
}
|
||||
|
||||
super();
|
||||
this.dot = opts.dot || false;
|
||||
this.ignored = opts.ignored;
|
||||
this.glob = Array.isArray(opts.glob) ? opts.glob : [opts.glob];
|
||||
this.hasIgnore =
|
||||
Boolean(opts.ignored) && !(Array.isArray(opts) && opts.length > 0);
|
||||
this.doIgnore = opts.ignored
|
||||
? (0, _anymatch().default)(opts.ignored)
|
||||
: () => false;
|
||||
this.root = path().resolve(dir);
|
||||
this.fsEventsWatchStopper = fsevents.watch(
|
||||
this.root,
|
||||
this.handleEvent.bind(this)
|
||||
);
|
||||
this._tracked = new Set();
|
||||
FSEventsWatcher.recReaddir(
|
||||
this.root,
|
||||
filepath => {
|
||||
this._tracked.add(filepath);
|
||||
},
|
||||
filepath => {
|
||||
this._tracked.add(filepath);
|
||||
},
|
||||
this.emit.bind(this, 'ready'),
|
||||
this.emit.bind(this, 'error'),
|
||||
this.ignored
|
||||
);
|
||||
}
|
||||
/**
|
||||
* End watching.
|
||||
*/
|
||||
|
||||
async close(callback) {
|
||||
await this.fsEventsWatchStopper();
|
||||
this.removeAllListeners();
|
||||
|
||||
if (typeof callback === 'function') {
|
||||
process.nextTick(callback.bind(null, null, true));
|
||||
}
|
||||
}
|
||||
|
||||
isFileIncluded(relativePath) {
|
||||
if (this.doIgnore(relativePath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return this.glob.length
|
||||
? (0, _micromatch().default)([relativePath], this.glob, {
|
||||
dot: this.dot
|
||||
}).length > 0
|
||||
: this.dot ||
|
||||
(0, _micromatch().default)([relativePath], '**/*').length > 0;
|
||||
}
|
||||
|
||||
handleEvent(filepath) {
|
||||
const relativePath = path().relative(this.root, filepath);
|
||||
|
||||
if (!this.isFileIncluded(relativePath)) {
|
||||
return;
|
||||
}
|
||||
|
||||
fs().lstat(filepath, (error, stat) => {
|
||||
if (error && error.code !== 'ENOENT') {
|
||||
this.emit('error', error);
|
||||
return;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
// Ignore files that aren't tracked and don't exist.
|
||||
if (!this._tracked.has(filepath)) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._emit(DELETE_EVENT, relativePath);
|
||||
|
||||
this._tracked.delete(filepath);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (this._tracked.has(filepath)) {
|
||||
this._emit(CHANGE_EVENT, relativePath, stat);
|
||||
} else {
|
||||
this._tracked.add(filepath);
|
||||
|
||||
this._emit(ADD_EVENT, relativePath, stat);
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Emit events.
|
||||
*/
|
||||
|
||||
_emit(type, file, stat) {
|
||||
this.emit(type, file, this.root, stat);
|
||||
this.emit(ALL_EVENT, type, file, this.root, stat);
|
||||
}
|
||||
}
|
||||
|
||||
exports.FSEventsWatcher = FSEventsWatcher;
|
375
node_modules/jest-haste-map/build/watchers/NodeWatcher.js
generated
vendored
Normal file
375
node_modules/jest-haste-map/build/watchers/NodeWatcher.js
generated
vendored
Normal file
@@ -0,0 +1,375 @@
|
||||
// vendored from https://github.com/amasad/sane/blob/64ff3a870c42e84f744086884bf55a4f9c22d376/src/node_watcher.js
|
||||
'use strict';
|
||||
|
||||
const EventEmitter = require('events').EventEmitter;
|
||||
|
||||
const fs = require('fs');
|
||||
|
||||
const platform = require('os').platform();
|
||||
|
||||
const path = require('path');
|
||||
|
||||
const common = require('./common');
|
||||
/**
|
||||
* Constants
|
||||
*/
|
||||
|
||||
const DEFAULT_DELAY = common.DEFAULT_DELAY;
|
||||
const CHANGE_EVENT = common.CHANGE_EVENT;
|
||||
const DELETE_EVENT = common.DELETE_EVENT;
|
||||
const ADD_EVENT = common.ADD_EVENT;
|
||||
const ALL_EVENT = common.ALL_EVENT;
|
||||
/**
|
||||
* Export `NodeWatcher` class.
|
||||
* Watches `dir`.
|
||||
*
|
||||
* @class NodeWatcher
|
||||
* @param {String} dir
|
||||
* @param {Object} opts
|
||||
* @public
|
||||
*/
|
||||
|
||||
module.exports = class NodeWatcher extends EventEmitter {
|
||||
constructor(dir, opts) {
|
||||
super();
|
||||
common.assignOptions(this, opts);
|
||||
this.watched = Object.create(null);
|
||||
this.changeTimers = Object.create(null);
|
||||
this.dirRegistery = Object.create(null);
|
||||
this.root = path.resolve(dir);
|
||||
this.watchdir = this.watchdir.bind(this);
|
||||
this.register = this.register.bind(this);
|
||||
this.checkedEmitError = this.checkedEmitError.bind(this);
|
||||
this.watchdir(this.root);
|
||||
common.recReaddir(
|
||||
this.root,
|
||||
this.watchdir,
|
||||
this.register,
|
||||
this.emit.bind(this, 'ready'),
|
||||
this.checkedEmitError,
|
||||
this.ignored
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Register files that matches our globs to know what to type of event to
|
||||
* emit in the future.
|
||||
*
|
||||
* Registery looks like the following:
|
||||
*
|
||||
* dirRegister => Map {
|
||||
* dirpath => Map {
|
||||
* filename => true
|
||||
* }
|
||||
* }
|
||||
*
|
||||
* @param {string} filepath
|
||||
* @return {boolean} whether or not we have registered the file.
|
||||
* @private
|
||||
*/
|
||||
|
||||
register(filepath) {
|
||||
const relativePath = path.relative(this.root, filepath);
|
||||
|
||||
if (
|
||||
!common.isFileIncluded(this.globs, this.dot, this.doIgnore, relativePath)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const dir = path.dirname(filepath);
|
||||
|
||||
if (!this.dirRegistery[dir]) {
|
||||
this.dirRegistery[dir] = Object.create(null);
|
||||
}
|
||||
|
||||
const filename = path.basename(filepath);
|
||||
this.dirRegistery[dir][filename] = true;
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
* Removes a file from the registery.
|
||||
*
|
||||
* @param {string} filepath
|
||||
* @private
|
||||
*/
|
||||
|
||||
unregister(filepath) {
|
||||
const dir = path.dirname(filepath);
|
||||
|
||||
if (this.dirRegistery[dir]) {
|
||||
const filename = path.basename(filepath);
|
||||
delete this.dirRegistery[dir][filename];
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Removes a dir from the registery.
|
||||
*
|
||||
* @param {string} dirpath
|
||||
* @private
|
||||
*/
|
||||
|
||||
unregisterDir(dirpath) {
|
||||
if (this.dirRegistery[dirpath]) {
|
||||
delete this.dirRegistery[dirpath];
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Checks if a file or directory exists in the registery.
|
||||
*
|
||||
* @param {string} fullpath
|
||||
* @return {boolean}
|
||||
* @private
|
||||
*/
|
||||
|
||||
registered(fullpath) {
|
||||
const dir = path.dirname(fullpath);
|
||||
return (
|
||||
this.dirRegistery[fullpath] ||
|
||||
(this.dirRegistery[dir] &&
|
||||
this.dirRegistery[dir][path.basename(fullpath)])
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Emit "error" event if it's not an ignorable event
|
||||
*
|
||||
* @param error
|
||||
* @private
|
||||
*/
|
||||
|
||||
checkedEmitError(error) {
|
||||
if (!isIgnorableFileError(error)) {
|
||||
this.emit('error', error);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Watch a directory.
|
||||
*
|
||||
* @param {string} dir
|
||||
* @private
|
||||
*/
|
||||
|
||||
watchdir(dir) {
|
||||
if (this.watched[dir]) {
|
||||
return;
|
||||
}
|
||||
|
||||
const watcher = fs.watch(
|
||||
dir,
|
||||
{
|
||||
persistent: true
|
||||
},
|
||||
this.normalizeChange.bind(this, dir)
|
||||
);
|
||||
this.watched[dir] = watcher;
|
||||
watcher.on('error', this.checkedEmitError);
|
||||
|
||||
if (this.root !== dir) {
|
||||
this.register(dir);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Stop watching a directory.
|
||||
*
|
||||
* @param {string} dir
|
||||
* @private
|
||||
*/
|
||||
|
||||
stopWatching(dir) {
|
||||
if (this.watched[dir]) {
|
||||
this.watched[dir].close();
|
||||
delete this.watched[dir];
|
||||
}
|
||||
}
|
||||
/**
|
||||
* End watching.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
|
||||
close() {
|
||||
Object.keys(this.watched).forEach(this.stopWatching, this);
|
||||
this.removeAllListeners();
|
||||
return Promise.resolve();
|
||||
}
|
||||
/**
|
||||
* On some platforms, as pointed out on the fs docs (most likely just win32)
|
||||
* the file argument might be missing from the fs event. Try to detect what
|
||||
* change by detecting if something was deleted or the most recent file change.
|
||||
*
|
||||
* @param {string} dir
|
||||
* @param {string} event
|
||||
* @param {string} file
|
||||
* @public
|
||||
*/
|
||||
|
||||
detectChangedFile(dir, event, callback) {
|
||||
if (!this.dirRegistery[dir]) {
|
||||
return;
|
||||
}
|
||||
|
||||
let found = false;
|
||||
let closest = {
|
||||
mtime: 0
|
||||
};
|
||||
let c = 0;
|
||||
Object.keys(this.dirRegistery[dir]).forEach(function (file, i, arr) {
|
||||
fs.lstat(path.join(dir, file), (error, stat) => {
|
||||
if (found) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (error) {
|
||||
if (isIgnorableFileError(error)) {
|
||||
found = true;
|
||||
callback(file);
|
||||
} else {
|
||||
this.emit('error', error);
|
||||
}
|
||||
} else {
|
||||
if (stat.mtime > closest.mtime) {
|
||||
stat.file = file;
|
||||
closest = stat;
|
||||
}
|
||||
|
||||
if (arr.length === ++c) {
|
||||
callback(closest.file);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, this);
|
||||
}
|
||||
/**
|
||||
* Normalize fs events and pass it on to be processed.
|
||||
*
|
||||
* @param {string} dir
|
||||
* @param {string} event
|
||||
* @param {string} file
|
||||
* @public
|
||||
*/
|
||||
|
||||
normalizeChange(dir, event, file) {
|
||||
if (!file) {
|
||||
this.detectChangedFile(dir, event, actualFile => {
|
||||
if (actualFile) {
|
||||
this.processChange(dir, event, actualFile);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.processChange(dir, event, path.normalize(file));
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Process changes.
|
||||
*
|
||||
* @param {string} dir
|
||||
* @param {string} event
|
||||
* @param {string} file
|
||||
* @public
|
||||
*/
|
||||
|
||||
processChange(dir, event, file) {
|
||||
const fullPath = path.join(dir, file);
|
||||
const relativePath = path.join(path.relative(this.root, dir), file);
|
||||
fs.lstat(fullPath, (error, stat) => {
|
||||
if (error && error.code !== 'ENOENT') {
|
||||
this.emit('error', error);
|
||||
} else if (!error && stat.isDirectory()) {
|
||||
// win32 emits usless change events on dirs.
|
||||
if (event !== 'change') {
|
||||
this.watchdir(fullPath);
|
||||
|
||||
if (
|
||||
common.isFileIncluded(
|
||||
this.globs,
|
||||
this.dot,
|
||||
this.doIgnore,
|
||||
relativePath
|
||||
)
|
||||
) {
|
||||
this.emitEvent(ADD_EVENT, relativePath, stat);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const registered = this.registered(fullPath);
|
||||
|
||||
if (error && error.code === 'ENOENT') {
|
||||
this.unregister(fullPath);
|
||||
this.stopWatching(fullPath);
|
||||
this.unregisterDir(fullPath);
|
||||
|
||||
if (registered) {
|
||||
this.emitEvent(DELETE_EVENT, relativePath);
|
||||
}
|
||||
} else if (registered) {
|
||||
this.emitEvent(CHANGE_EVENT, relativePath, stat);
|
||||
} else {
|
||||
if (this.register(fullPath)) {
|
||||
this.emitEvent(ADD_EVENT, relativePath, stat);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
/**
|
||||
* Triggers a 'change' event after debounding it to take care of duplicate
|
||||
* events on os x.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
|
||||
emitEvent(type, file, stat) {
|
||||
const key = `${type}-${file}`;
|
||||
const addKey = `${ADD_EVENT}-${file}`;
|
||||
|
||||
if (type === CHANGE_EVENT && this.changeTimers[addKey]) {
|
||||
// Ignore the change event that is immediately fired after an add event.
|
||||
// (This happens on Linux).
|
||||
return;
|
||||
}
|
||||
|
||||
clearTimeout(this.changeTimers[key]);
|
||||
this.changeTimers[key] = setTimeout(() => {
|
||||
delete this.changeTimers[key];
|
||||
|
||||
if (type === ADD_EVENT && stat.isDirectory()) {
|
||||
// Recursively emit add events and watch for sub-files/folders
|
||||
common.recReaddir(
|
||||
path.resolve(this.root, file),
|
||||
function emitAddDir(dir, stats) {
|
||||
this.watchdir(dir);
|
||||
this.rawEmitEvent(ADD_EVENT, path.relative(this.root, dir), stats);
|
||||
}.bind(this),
|
||||
function emitAddFile(file, stats) {
|
||||
this.register(file);
|
||||
this.rawEmitEvent(ADD_EVENT, path.relative(this.root, file), stats);
|
||||
}.bind(this),
|
||||
function endCallback() {},
|
||||
this.checkedEmitError,
|
||||
this.ignored
|
||||
);
|
||||
} else {
|
||||
this.rawEmitEvent(type, file, stat);
|
||||
}
|
||||
}, DEFAULT_DELAY);
|
||||
}
|
||||
/**
|
||||
* Actually emit the events
|
||||
*/
|
||||
|
||||
rawEmitEvent(type, file, stat) {
|
||||
this.emit(type, file, this.root, stat);
|
||||
this.emit(ALL_EVENT, type, file, this.root, stat);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Determine if a given FS error can be ignored
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
|
||||
function isIgnorableFileError(error) {
|
||||
return (
|
||||
error.code === 'ENOENT' || // Workaround Windows node issue #4337.
|
||||
(error.code === 'EPERM' && platform === 'win32')
|
||||
);
|
||||
}
|
57
node_modules/jest-haste-map/build/watchers/RecrawlWarning.js
generated
vendored
Normal file
57
node_modules/jest-haste-map/build/watchers/RecrawlWarning.js
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
||||
// vendored from https://github.com/amasad/sane/blob/64ff3a870c42e84f744086884bf55a4f9c22d376/src/utils/recrawl-warning-dedupe.js
|
||||
'use strict';
|
||||
|
||||
class RecrawlWarning {
|
||||
constructor(root, count) {
|
||||
this.root = root;
|
||||
this.count = count;
|
||||
}
|
||||
|
||||
static findByRoot(root) {
|
||||
for (let i = 0; i < this.RECRAWL_WARNINGS.length; i++) {
|
||||
const warning = this.RECRAWL_WARNINGS[i];
|
||||
|
||||
if (warning.root === root) {
|
||||
return warning;
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
|
||||
static isRecrawlWarningDupe(warningMessage) {
|
||||
if (typeof warningMessage !== 'string') {
|
||||
return false;
|
||||
}
|
||||
|
||||
const match = warningMessage.match(this.REGEXP);
|
||||
|
||||
if (!match) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const count = Number(match[1]);
|
||||
const root = match[2];
|
||||
const warning = this.findByRoot(root);
|
||||
|
||||
if (warning) {
|
||||
// only keep the highest count, assume count to either stay the same or
|
||||
// increase.
|
||||
if (warning.count >= count) {
|
||||
return true;
|
||||
} else {
|
||||
// update the existing warning to the latest (highest) count
|
||||
warning.count = count;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
this.RECRAWL_WARNINGS.push(new RecrawlWarning(root, count));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
RecrawlWarning.RECRAWL_WARNINGS = [];
|
||||
RecrawlWarning.REGEXP =
|
||||
/Recrawled this watch (\d+) times, most recently because:\n([^:]+)/;
|
||||
module.exports = RecrawlWarning;
|
418
node_modules/jest-haste-map/build/watchers/WatchmanWatcher.js
generated
vendored
Normal file
418
node_modules/jest-haste-map/build/watchers/WatchmanWatcher.js
generated
vendored
Normal file
@@ -0,0 +1,418 @@
|
||||
'use strict';
|
||||
|
||||
Object.defineProperty(exports, '__esModule', {
|
||||
value: true
|
||||
});
|
||||
exports.default = WatchmanWatcher;
|
||||
|
||||
function _assert() {
|
||||
const data = _interopRequireDefault(require('assert'));
|
||||
|
||||
_assert = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _events() {
|
||||
const data = require('events');
|
||||
|
||||
_events = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _path() {
|
||||
const data = _interopRequireDefault(require('path'));
|
||||
|
||||
_path = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function _fbWatchman() {
|
||||
const data = _interopRequireDefault(require('fb-watchman'));
|
||||
|
||||
_fbWatchman = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
function fs() {
|
||||
const data = _interopRequireWildcard(require('graceful-fs'));
|
||||
|
||||
fs = function () {
|
||||
return data;
|
||||
};
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
var _RecrawlWarning = _interopRequireDefault(require('./RecrawlWarning'));
|
||||
|
||||
var _common = _interopRequireDefault(require('./common'));
|
||||
|
||||
function _getRequireWildcardCache(nodeInterop) {
|
||||
if (typeof WeakMap !== 'function') return null;
|
||||
var cacheBabelInterop = new WeakMap();
|
||||
var cacheNodeInterop = new WeakMap();
|
||||
return (_getRequireWildcardCache = function (nodeInterop) {
|
||||
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
||||
})(nodeInterop);
|
||||
}
|
||||
|
||||
function _interopRequireWildcard(obj, nodeInterop) {
|
||||
if (!nodeInterop && obj && obj.__esModule) {
|
||||
return obj;
|
||||
}
|
||||
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
|
||||
return {default: obj};
|
||||
}
|
||||
var cache = _getRequireWildcardCache(nodeInterop);
|
||||
if (cache && cache.has(obj)) {
|
||||
return cache.get(obj);
|
||||
}
|
||||
var newObj = {};
|
||||
var hasPropertyDescriptor =
|
||||
Object.defineProperty && Object.getOwnPropertyDescriptor;
|
||||
for (var key in obj) {
|
||||
if (key !== 'default' && Object.prototype.hasOwnProperty.call(obj, key)) {
|
||||
var desc = hasPropertyDescriptor
|
||||
? Object.getOwnPropertyDescriptor(obj, key)
|
||||
: null;
|
||||
if (desc && (desc.get || desc.set)) {
|
||||
Object.defineProperty(newObj, key, desc);
|
||||
} else {
|
||||
newObj[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
newObj.default = obj;
|
||||
if (cache) {
|
||||
cache.set(obj, newObj);
|
||||
}
|
||||
return newObj;
|
||||
}
|
||||
|
||||
function _interopRequireDefault(obj) {
|
||||
return obj && obj.__esModule ? obj : {default: obj};
|
||||
}
|
||||
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
const CHANGE_EVENT = _common.default.CHANGE_EVENT;
|
||||
const DELETE_EVENT = _common.default.DELETE_EVENT;
|
||||
const ADD_EVENT = _common.default.ADD_EVENT;
|
||||
const ALL_EVENT = _common.default.ALL_EVENT;
|
||||
const SUB_NAME = 'sane-sub';
|
||||
/**
|
||||
* Watches `dir`.
|
||||
*
|
||||
* @class PollWatcher
|
||||
* @param String dir
|
||||
* @param {Object} opts
|
||||
* @public
|
||||
*/
|
||||
|
||||
function WatchmanWatcher(dir, opts) {
|
||||
_common.default.assignOptions(this, opts);
|
||||
|
||||
this.root = _path().default.resolve(dir);
|
||||
this.init();
|
||||
} // eslint-disable-next-line no-proto
|
||||
|
||||
WatchmanWatcher.prototype.__proto__ = _events().EventEmitter.prototype;
|
||||
/**
|
||||
* Run the watchman `watch` command on the root and subscribe to changes.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
|
||||
WatchmanWatcher.prototype.init = function () {
|
||||
if (this.client) {
|
||||
this.client.removeAllListeners();
|
||||
}
|
||||
|
||||
const self = this;
|
||||
this.client = new (_fbWatchman().default.Client)();
|
||||
this.client.on('error', error => {
|
||||
self.emit('error', error);
|
||||
});
|
||||
this.client.on('subscription', this.handleChangeEvent.bind(this));
|
||||
this.client.on('end', () => {
|
||||
console.warn('[sane] Warning: Lost connection to watchman, reconnecting..');
|
||||
self.init();
|
||||
});
|
||||
this.watchProjectInfo = null;
|
||||
|
||||
function getWatchRoot() {
|
||||
return self.watchProjectInfo ? self.watchProjectInfo.root : self.root;
|
||||
}
|
||||
|
||||
function onCapability(error, resp) {
|
||||
if (handleError(self, error)) {
|
||||
// The Watchman watcher is unusable on this system, we cannot continue
|
||||
return;
|
||||
}
|
||||
|
||||
handleWarning(resp);
|
||||
self.capabilities = resp.capabilities;
|
||||
|
||||
if (self.capabilities.relative_root) {
|
||||
self.client.command(['watch-project', getWatchRoot()], onWatchProject);
|
||||
} else {
|
||||
self.client.command(['watch', getWatchRoot()], onWatch);
|
||||
}
|
||||
}
|
||||
|
||||
function onWatchProject(error, resp) {
|
||||
if (handleError(self, error)) {
|
||||
return;
|
||||
}
|
||||
|
||||
handleWarning(resp);
|
||||
self.watchProjectInfo = {
|
||||
relativePath: resp.relative_path ? resp.relative_path : '',
|
||||
root: resp.watch
|
||||
};
|
||||
self.client.command(['clock', getWatchRoot()], onClock);
|
||||
}
|
||||
|
||||
function onWatch(error, resp) {
|
||||
if (handleError(self, error)) {
|
||||
return;
|
||||
}
|
||||
|
||||
handleWarning(resp);
|
||||
self.client.command(['clock', getWatchRoot()], onClock);
|
||||
}
|
||||
|
||||
function onClock(error, resp) {
|
||||
if (handleError(self, error)) {
|
||||
return;
|
||||
}
|
||||
|
||||
handleWarning(resp);
|
||||
const options = {
|
||||
fields: ['name', 'exists', 'new'],
|
||||
since: resp.clock
|
||||
}; // If the server has the wildmatch capability available it supports
|
||||
// the recursive **/*.foo style match and we can offload our globs
|
||||
// to the watchman server. This saves both on data size to be
|
||||
// communicated back to us and compute for evaluating the globs
|
||||
// in our node process.
|
||||
|
||||
if (self.capabilities.wildmatch) {
|
||||
if (self.globs.length === 0) {
|
||||
if (!self.dot) {
|
||||
// Make sure we honor the dot option if even we're not using globs.
|
||||
options.expression = [
|
||||
'match',
|
||||
'**',
|
||||
'wholename',
|
||||
{
|
||||
includedotfiles: false
|
||||
}
|
||||
];
|
||||
}
|
||||
} else {
|
||||
options.expression = ['anyof'];
|
||||
|
||||
for (const i in self.globs) {
|
||||
options.expression.push([
|
||||
'match',
|
||||
self.globs[i],
|
||||
'wholename',
|
||||
{
|
||||
includedotfiles: self.dot
|
||||
}
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (self.capabilities.relative_root) {
|
||||
options.relative_root = self.watchProjectInfo.relativePath;
|
||||
}
|
||||
|
||||
self.client.command(
|
||||
['subscribe', getWatchRoot(), SUB_NAME, options],
|
||||
onSubscribe
|
||||
);
|
||||
}
|
||||
|
||||
function onSubscribe(error, resp) {
|
||||
if (handleError(self, error)) {
|
||||
return;
|
||||
}
|
||||
|
||||
handleWarning(resp);
|
||||
self.emit('ready');
|
||||
}
|
||||
|
||||
self.client.capabilityCheck(
|
||||
{
|
||||
optional: ['wildmatch', 'relative_root']
|
||||
},
|
||||
onCapability
|
||||
);
|
||||
};
|
||||
/**
|
||||
* Handles a change event coming from the subscription.
|
||||
*
|
||||
* @param {Object} resp
|
||||
* @private
|
||||
*/
|
||||
|
||||
WatchmanWatcher.prototype.handleChangeEvent = function (resp) {
|
||||
_assert().default.equal(
|
||||
resp.subscription,
|
||||
SUB_NAME,
|
||||
'Invalid subscription event.'
|
||||
);
|
||||
|
||||
if (resp.is_fresh_instance) {
|
||||
this.emit('fresh_instance');
|
||||
}
|
||||
|
||||
if (resp.is_fresh_instance) {
|
||||
this.emit('fresh_instance');
|
||||
}
|
||||
|
||||
if (Array.isArray(resp.files)) {
|
||||
resp.files.forEach(this.handleFileChange, this);
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Handles a single change event record.
|
||||
*
|
||||
* @param {Object} changeDescriptor
|
||||
* @private
|
||||
*/
|
||||
|
||||
WatchmanWatcher.prototype.handleFileChange = function (changeDescriptor) {
|
||||
const self = this;
|
||||
let absPath;
|
||||
let relativePath;
|
||||
|
||||
if (this.capabilities.relative_root) {
|
||||
relativePath = changeDescriptor.name;
|
||||
absPath = _path().default.join(
|
||||
this.watchProjectInfo.root,
|
||||
this.watchProjectInfo.relativePath,
|
||||
relativePath
|
||||
);
|
||||
} else {
|
||||
absPath = _path().default.join(this.root, changeDescriptor.name);
|
||||
relativePath = changeDescriptor.name;
|
||||
}
|
||||
|
||||
if (
|
||||
!(self.capabilities.wildmatch && !this.hasIgnore) &&
|
||||
!_common.default.isFileIncluded(
|
||||
this.globs,
|
||||
this.dot,
|
||||
this.doIgnore,
|
||||
relativePath
|
||||
)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!changeDescriptor.exists) {
|
||||
self.emitEvent(DELETE_EVENT, relativePath, self.root);
|
||||
} else {
|
||||
fs().lstat(absPath, (error, stat) => {
|
||||
// Files can be deleted between the event and the lstat call
|
||||
// the most reliable thing to do here is to ignore the event.
|
||||
if (error && error.code === 'ENOENT') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (handleError(self, error)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const eventType = changeDescriptor.new ? ADD_EVENT : CHANGE_EVENT; // Change event on dirs are mostly useless.
|
||||
|
||||
if (!(eventType === CHANGE_EVENT && stat.isDirectory())) {
|
||||
self.emitEvent(eventType, relativePath, self.root, stat);
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Dispatches the event.
|
||||
*
|
||||
* @param {string} eventType
|
||||
* @param {string} filepath
|
||||
* @param {string} root
|
||||
* @param {fs.Stat} stat
|
||||
* @private
|
||||
*/
|
||||
|
||||
WatchmanWatcher.prototype.emitEvent = function (
|
||||
eventType,
|
||||
filepath,
|
||||
root,
|
||||
stat
|
||||
) {
|
||||
this.emit(eventType, filepath, root, stat);
|
||||
this.emit(ALL_EVENT, eventType, filepath, root, stat);
|
||||
};
|
||||
/**
|
||||
* Closes the watcher.
|
||||
*
|
||||
*/
|
||||
|
||||
WatchmanWatcher.prototype.close = function () {
|
||||
this.client.removeAllListeners();
|
||||
this.client.end();
|
||||
return Promise.resolve();
|
||||
};
|
||||
/**
|
||||
* Handles an error and returns true if exists.
|
||||
*
|
||||
* @param {WatchmanWatcher} self
|
||||
* @param {Error} error
|
||||
* @private
|
||||
*/
|
||||
|
||||
function handleError(self, error) {
|
||||
if (error != null) {
|
||||
self.emit('error', error);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Handles a warning in the watchman resp object.
|
||||
*
|
||||
* @param {object} resp
|
||||
* @private
|
||||
*/
|
||||
|
||||
function handleWarning(resp) {
|
||||
if ('warning' in resp) {
|
||||
if (_RecrawlWarning.default.isRecrawlWarningDupe(resp.warning)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
console.warn(resp.warning);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
114
node_modules/jest-haste-map/build/watchers/common.js
generated
vendored
Normal file
114
node_modules/jest-haste-map/build/watchers/common.js
generated
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
// 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);
|
||||
}
|
Reference in New Issue
Block a user