| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.enable = enable;
- exports.onFilesChange = onFilesChange;
- exports.startWatcher = startWatcher;
- exports.updateExternalDependencies = updateExternalDependencies;
- exports.watch = watch;
- function _path() {
- const data = require("path");
- _path = function () {
- return data;
- };
- return data;
- }
- const fileToDeps = new Map();
- const depToFiles = new Map();
- let isWatchMode = false;
- let watcher;
- const watchQueue = new Set();
- let hasStarted = false;
- function enable({
- enableGlobbing
- }) {
- isWatchMode = true;
- const {
- FSWatcher
- } = requireChokidar();
- const options = {
- disableGlobbing: !enableGlobbing,
- persistent: true,
- ignoreInitial: true,
- awaitWriteFinish: {
- stabilityThreshold: 50,
- pollInterval: 10
- }
- };
- watcher = new FSWatcher(options);
- watcher.on("unlink", unwatchFile);
- }
- function startWatcher() {
- hasStarted = true;
- for (const dep of watchQueue) {
- watcher.add(dep);
- }
- watchQueue.clear();
- watcher.on("ready", () => {
- console.log("The watcher is ready.");
- });
- }
- function watch(filename) {
- if (!isWatchMode) {
- throw new Error("Internal Babel error: .watch called when not in watch mode.");
- }
- if (!hasStarted) {
- watchQueue.add(_path().resolve(filename));
- } else {
- watcher.add(_path().resolve(filename));
- }
- }
- function onFilesChange(callback) {
- if (!isWatchMode) {
- throw new Error("Internal Babel error: .onFilesChange called when not in watch mode.");
- }
- watcher.on("all", (event, filename) => {
- var _depToFiles$get;
- if (event !== "change" && event !== "add") return;
- const absoluteFile = _path().resolve(filename);
- callback([absoluteFile, ...((_depToFiles$get = depToFiles.get(absoluteFile)) != null ? _depToFiles$get : [])], event, absoluteFile);
- });
- }
- function updateExternalDependencies(filename, dependencies) {
- if (!isWatchMode) return;
- const absFilename = _path().resolve(filename);
- const absDependencies = new Set(Array.from(dependencies, dep => _path().resolve(dep)));
- const deps = fileToDeps.get(absFilename);
- if (deps) {
- for (const dep of deps) {
- if (!absDependencies.has(dep)) {
- removeFileDependency(absFilename, dep);
- }
- }
- }
- for (const dep of absDependencies) {
- let deps = depToFiles.get(dep);
- if (!deps) {
- depToFiles.set(dep, deps = new Set());
- if (!hasStarted) {
- watchQueue.add(dep);
- } else {
- watcher.add(dep);
- }
- }
- deps.add(absFilename);
- }
- fileToDeps.set(absFilename, absDependencies);
- }
- function removeFileDependency(filename, dep) {
- const deps = depToFiles.get(dep);
- deps.delete(filename);
- if (deps.size === 0) {
- depToFiles.delete(dep);
- if (!hasStarted) {
- watchQueue.delete(dep);
- } else {
- watcher.unwatch(dep);
- }
- }
- }
- function unwatchFile(filename) {
- const deps = fileToDeps.get(filename);
- if (!deps) return;
- for (const dep of deps) {
- removeFileDependency(filename, dep);
- }
- fileToDeps.delete(filename);
- }
- function requireChokidar() {
- try {
- return parseInt(process.versions.node) >= 8 ? require("chokidar") : require("@nicolo-ribaudo/chokidar-2");
- } catch (err) {
- console.error("The optional dependency chokidar failed to install and is required for " + "--watch. Chokidar is likely not supported on your platform.");
- throw err;
- }
- }
- //# sourceMappingURL=watcher.js.map
|