{
  "manifest": {
    "name": "watchpack",
    "version": "2.4.1",
    "description": "Wrapper library for directory and file watching.",
    "main": "./lib/watchpack.js",
    "files": [
      "lib/"
    ],
    "scripts": {
      "pretty-files": "prettier \"lib/**.*\" \"test/**/*.js\" --write",
      "lint": "eslint lib",
      "test:only": "mocha",
      "test:coverage": "istanbul cover node_modules/mocha/bin/_mocha",
      "pretest": "yarn lint",
      "test": "mocha"
    },
    "repository": {
      "type": "git",
      "url": "https://github.com/webpack/watchpack.git"
    },
    "author": {
      "name": "Tobias Koppers @sokra"
    },
    "license": "MIT",
    "bugs": {
      "url": "https://github.com/webpack/watchpack/issues"
    },
    "homepage": "https://github.com/webpack/watchpack",
    "devDependencies": {
      "coveralls": "^3.0.0",
      "eslint": "^5.11.1",
      "eslint-config-prettier": "^4.3.0",
      "eslint-plugin-prettier": "^3.1.0",
      "istanbul": "^0.4.3",
      "mocha": "^5.0.1",
      "prettier": "^1.11.0",
      "rimraf": "^2.6.2",
      "should": "^8.3.1",
      "write-file-atomic": "^3.0.1"
    },
    "dependencies": {
      "glob-to-regexp": "^0.4.1",
      "graceful-fs": "^4.1.2"
    },
    "engines": {
      "node": ">=10.13.0"
    },
    "_registry": "npm",
    "_loc": "/homez.1033/heliovt/.cache/yarn/v6/npm-watchpack-2.4.1-29308f2cac150fa8e4c92f90e0ec954a9fed7fff-integrity/node_modules/watchpack/package.json",
    "readmeFilename": "README.md",
    "readme": "# watchpack\n\nWrapper library for directory and file watching.\n\n[![Test](https://github.com/webpack/watchpack/actions/workflows/test.yml/badge.svg)](https://github.com/webpack/watchpack/actions/workflows/test.yml)\n[![Codecov](https://codecov.io/gh/webpack/watchpack/graph/badge.svg?token=8xk2OrrxWm)](https://codecov.io/gh/webpack/watchpack)\n[![Downloads](https://img.shields.io/npm/dm/watchpack.svg)](https://www.npmjs.com/package/watchpack)\n\n## Concept\n\nwatchpack high level API doesn't map directly to watchers. Instead a three level architecture ensures that for each directory only a single watcher exists.\n\n- The high level API requests `DirectoryWatchers` from a `WatcherManager`, which ensures that only a single `DirectoryWatcher` per directory is created.\n- A user-faced `Watcher` can be obtained from a `DirectoryWatcher` and provides a filtered view on the `DirectoryWatcher`.\n- Reference-counting is used on the `DirectoryWatcher` and `Watcher` to decide when to close them.\n- The real watchers are created by the `DirectoryWatcher`.\n- Files are never watched directly. This should keep the watcher count low.\n- Watching can be started in the past. This way watching can start after file reading.\n- Symlinks are not followed, instead the symlink is watched.\n\n## API\n\n```javascript\nvar Watchpack = require(\"watchpack\");\n\nvar wp = new Watchpack({\n\t// options:\n\taggregateTimeout: 1000,\n\t// fire \"aggregated\" event when after a change for 1000ms no additional change occurred\n\t// aggregated defaults to undefined, which doesn't fire an \"aggregated\" event\n\n\tpoll: true,\n\t// poll: true - use polling with the default interval\n\t// poll: 10000 - use polling with an interval of 10s\n\t// poll defaults to undefined, which prefer native watching methods\n\t// Note: enable polling when watching on a network path\n\t// When WATCHPACK_POLLING environment variable is set it will override this option\n\n\tfollowSymlinks: true,\n\t// true: follows symlinks and watches symlinks and real files\n\t//   (This makes sense when symlinks has not been resolved yet, comes with a performance hit)\n\t// false (default): watches only specified item they may be real files or symlinks\n\t//   (This makes sense when symlinks has already been resolved)\n\n\tignored: \"**/.git\"\n\t// ignored: \"string\" - a glob pattern for files or folders that should not be watched\n\t// ignored: [\"string\", \"string\"] - multiple glob patterns that should be ignored\n\t// ignored: /regexp/ - a regular expression for files or folders that should not be watched\n\t// ignored: (entry) => boolean - an arbitrary function which must return truthy to ignore an entry\n\t// For all cases expect the arbitrary function the path will have path separator normalized to '/'.\n\t// All subdirectories are ignored too\n});\n\n// Watchpack.prototype.watch({\n//   files: Iterable<string>,\n//   directories: Iterable<string>,\n//   missing: Iterable<string>,\n//   startTime?: number\n// })\nwp.watch({\n\tfiles: listOfFiles,\n\tdirectories: listOfDirectories,\n\tmissing: listOfNotExistingItems,\n\tstartTime: Date.now() - 10000\n});\n// starts watching these files and directories\n// calling this again will override the files and directories\n// files: can be files or directories, for files: content and existence changes are tracked\n//        for directories: only existence and timestamp changes are tracked\n// directories: only directories, directory content (and content of children, ...) and\n//              existence changes are tracked.\n//              assumed to exist, when directory is not found without further information a remove event is emitted\n// missing: can be files or directorees,\n//          only existence changes are tracked\n//          expected to not exist, no remove event is emitted when not found initially\n// files and directories are assumed to exist, when they are not found without further information a remove event is emitted\n// missing is assumed to not exist and no remove event is emitted\n\nwp.on(\"change\", function(filePath, mtime, explanation) {\n\t// filePath: the changed file\n\t// mtime: last modified time for the changed file\n\t// explanation: textual information how this change was detected\n});\n\nwp.on(\"remove\", function(filePath, explanation) {\n\t// filePath: the removed file or directory\n\t// explanation: textual information how this change was detected\n});\n\nwp.on(\"aggregated\", function(changes, removals) {\n\t// changes: a Set of all changed files\n\t// removals: a Set of all removed files\n\t// watchpack gives up ownership on these Sets.\n});\n\n// Watchpack.prototype.pause()\nwp.pause();\n// stops emitting events, but keeps watchers open\n// next \"watch\" call can reuse the watchers\n// The watcher will keep aggregating events\n// which can be received with getAggregated()\n\n// Watchpack.prototype.close()\nwp.close();\n// stops emitting events and closes all watchers\n\n// Watchpack.prototype.getAggregated(): { changes: Set<string>, removals: Set<string> }\nconst { changes, removals } = wp.getAggregated();\n// returns the current aggregated info and removes that from the watcher\n// The next aggregated event won't include that info and will only emitted\n// when futher changes happen\n// Can also be used when paused.\n\n// Watchpack.prototype.collectTimeInfoEntries(fileInfoEntries: Map<string, Entry>, directoryInfoEntries: Map<string, Entry>)\nwp.collectTimeInfoEntries(fileInfoEntries, directoryInfoEntries);\n// collects time info objects for all known files and directories\n// this include info from files not directly watched\n// key: absolute path, value: object with { safeTime, timestamp }\n// safeTime: a point in time at which it is safe to say all changes happened before that\n// timestamp: only for files, the mtime timestamp of the file\n\n// Watchpack.prototype.getTimeInfoEntries()\nvar fileTimes = wp.getTimeInfoEntries();\n// returns a Map with all known time info objects for files and directories\n// similar to collectTimeInfoEntries but returns a single map with all entries\n\n// (deprecated)\n// Watchpack.prototype.getTimes()\nvar fileTimes = wp.getTimes();\n// returns an object with all known change times for files\n// this include timestamps from files not directly watched\n// key: absolute path, value: timestamp as number\n```\n",
    "licenseText": "Copyright JS Foundation and other contributors\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  "artifacts": [],
  "remote": {
    "resolved": "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz#29308f2cac150fa8e4c92f90e0ec954a9fed7fff",
    "type": "tarball",
    "reference": "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.1.tgz",
    "hash": "29308f2cac150fa8e4c92f90e0ec954a9fed7fff",
    "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==",
    "registry": "npm",
    "packageName": "watchpack",
    "cacheIntegrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg== sha1-KTCPLKwVD6jkyS+Q4OyVSp/tf/8="
  },
  "registry": "npm",
  "hash": "29308f2cac150fa8e4c92f90e0ec954a9fed7fff"
}