diff options
Diffstat (limited to 'node_modules/@babel/cli/lib/babel/watcher.js')
| -rw-r--r-- | node_modules/@babel/cli/lib/babel/watcher.js | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/node_modules/@babel/cli/lib/babel/watcher.js b/node_modules/@babel/cli/lib/babel/watcher.js new file mode 100644 index 00000000..203e8ca8 --- /dev/null +++ b/node_modules/@babel/cli/lib/babel/watcher.js @@ -0,0 +1,129 @@ +"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 |
