UNPKG

1.41 kBJavaScriptView Raw
1const chokidar = require ("chokidar")
2const dir = require ("path").dirname
3const Queue = require ("better-queue")
4
5module.exports = (() => {
6 let queue
7 let ready = false
8
9 const q = () => {
10 queue =
11 queue ||
12 new Queue (
13 (result, done) => {
14 done (result)
15 },
16 {
17 "precondition": (done) => {
18 done (null, ready)
19 }
20 }
21 )
22 return queue
23 }
24
25 const watch = (opts, fn) => {
26 opts.ignored = Array.prototype
27 .concat (opts.ignored, "**/node_modules")
28 .filter (Boolean)
29
30 return chokidar
31 .watch (opts.src, opts)
32
33 .on ("add", (src) =>
34 q ().push ({ "evt": "add", "obj": "file", src }, fn))
35 .on ("change", (src) =>
36 q ().push ({ "evt": "mod", "obj": "file", src }, fn))
37 .on ("unlink", (src) =>
38 q ().push ({ "evt": "del", "obj": "file", src }, fn))
39
40 .on ("addDir", (src) =>
41 q ().push ({ "evt": "add", "obj": "dir", src }, fn))
42 .on ("add", (src) =>
43 q ().push ({ "evt": "mod", "obj": "dir", "src": dir (src) }, fn))
44 .on ("unlink", (src) =>
45 q ().push ({ "evt": "mod", "obj": "dir", "src": dir (src) }, fn))
46 .on ("unlinkDir", (src) =>
47 q ().push ({ "evt": "del", "obj": "dir", src }, fn))
48
49 .on ("ready", () => {
50 ready = true
51 })
52 }
53
54 return {
55 "queue": q (),
56 "watch": watch
57 }
58}) ()