@idlebox/chokidar 0.0.26 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,5 +6,5 @@
6
6
  "../../src/__create_index.generated.ts"
7
7
  ],
8
8
  "names": [],
9
- "mappings": ";AAAA,wBAAwB;AACxB,aAAa;AACb,oBAAoB;;;AAEpB,aAAa;AACZ,cAAc;AACd,sCAAsC;AAA9B,sGAAA,WAAW,OAAA;AAEnB,sCAAwC;AAAhC,wGAAA,aAAa,OAAA;AACtB,kBAAkB;AACjB,cAAc;AACd,gDAAyC;AAAjC,yGAAA,SAAS,OAAA"
9
+ "mappings": ";AAAA,wBAAwB;AACxB,aAAa;AACb,oBAAoB;;;AAEpB,aAAa;AACZ,cAAc;AACd,sCAAsC;AAA9B,sGAAA,WAAW,OAAA;AAGnB,sCAAwC;AAAhC,wGAAA,aAAa,OAAA;AACtB,kBAAkB;AACjB,cAAc;AACd,gDAAyC;AAAjC,yGAAA,SAAS,OAAA"
10
10
  }
package/lib/cjs/main.cjs CHANGED
@@ -3,9 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WatchHelper = void 0;
4
4
  exports.startChokidar = startChokidar;
5
5
  const tslib_1 = require("tslib");
6
- const common_1 = require("@idlebox/common");
7
6
  const chokidar_1 = require("chokidar");
8
7
  const debug_1 = tslib_1.__importDefault(require("debug"));
8
+ const node_path_1 = require("node:path");
9
+ const node_util_1 = require("node:util");
9
10
  const log = (0, debug_1.default)('chokidar');
10
11
  var State;
11
12
  (function (State) {
@@ -21,18 +22,32 @@ var State;
21
22
  class WatchHelper {
22
23
  watcher;
23
24
  onChange;
24
- _watches = new Set();
25
25
  state = State.IDLE;
26
26
  debounceMs = 800;
27
27
  lastRun;
28
28
  changes = new Set();
29
+ cwd;
30
+ trackedFiles = new Set();
29
31
  constructor(watcher, onChange) {
30
32
  this.watcher = watcher;
31
33
  this.onChange = onChange;
32
- this.realTrigger = this.realTrigger.bind(this);
33
- const change = this.handleChange.bind(this);
34
- watcher.on('add', change);
35
- watcher.on('change', change);
34
+ this.lowlevel_handler = this.lowlevel_handler.bind(this);
35
+ this.handler = this.handler.bind(this);
36
+ this.cwd = watcher.options.cwd;
37
+ }
38
+ listen(item) {
39
+ if (!allowedEvents.includes(item)) {
40
+ throw new Error(`not allowed watcher event name: ${item}`);
41
+ }
42
+ if (this.watcher.listenerCount(item) === 0) {
43
+ this.watcher.addListener(item, this.lowlevel_handler);
44
+ }
45
+ }
46
+ unlisten(item) {
47
+ if (!allowedEvents.includes(item)) {
48
+ throw new Error(`not allowed watcher event name: ${item}`);
49
+ }
50
+ this.watcher.removeAllListeners(item);
36
51
  }
37
52
  _debounce;
38
53
  debounce() {
@@ -40,13 +55,13 @@ class WatchHelper {
40
55
  clearTimeout(this._debounce);
41
56
  this._debounce = undefined;
42
57
  }
43
- this._debounce = setTimeout(this.realTrigger, this.debounceMs);
58
+ this._debounce = setTimeout(this.handler, this.debounceMs);
44
59
  }
45
60
  changeState(s) {
46
61
  log(`state change: ${State[s]}`);
47
62
  this.state = s;
48
63
  }
49
- handleChange(path) {
64
+ lowlevel_handler(path) {
50
65
  log('file changes: %s', path);
51
66
  this.changes.add(path);
52
67
  switch (this.state) {
@@ -66,7 +81,7 @@ class WatchHelper {
66
81
  throw new Error(`Invalid program state. ${this.state}`);
67
82
  }
68
83
  }
69
- realTrigger() {
84
+ handler() {
70
85
  log('trigger...');
71
86
  const changes = [...this.changes.values()];
72
87
  this.changes.clear();
@@ -76,12 +91,12 @@ class WatchHelper {
76
91
  .then(() => {
77
92
  this.onChange(changes);
78
93
  })
79
- .catch((e) => {
94
+ .catch(e => {
80
95
  log('Failed callback: %s', e.stack);
81
96
  })
82
97
  .finally(() => {
83
98
  if (this.state === State.RESCHEDULE) {
84
- this.realTrigger();
99
+ this.handler();
85
100
  }
86
101
  else if (this.state === State.BUSY) {
87
102
  this.changeState(State.IDLE);
@@ -95,52 +110,98 @@ class WatchHelper {
95
110
  this.lastRun = undefined;
96
111
  });
97
112
  }
98
- size() {
99
- // return Object.keys(this.watcher.getWatched()).length;
100
- return this._watches.size;
113
+ get empty() {
114
+ return Object.keys(this.watcher.getWatched()).length === 0;
101
115
  }
102
- replaceWatch(newList) {
116
+ get size() {
117
+ let sum = 0;
118
+ for (const item of Object.values(this.watcher.getWatched())) {
119
+ sum += item.length;
120
+ }
121
+ return sum;
122
+ }
123
+ replace(newList) {
103
124
  const newSet = new Set(newList);
104
- for (const item of newSet) {
105
- this.addWatch(item);
125
+ for (const item of this.trackedFiles) {
126
+ if (!newSet.has(item)) {
127
+ this.delete(item);
128
+ }
106
129
  }
107
- for (const item of this._watches) {
130
+ for (const item of this.watches) {
108
131
  if (!newSet.has(item)) {
109
- this.delWatch(item);
132
+ this.delete(item);
110
133
  }
111
134
  }
135
+ this.add([...newSet]);
112
136
  }
113
- addWatch(newWatch) {
114
- if (!this._watches.has(newWatch)) {
115
- // console.log('[watch:add] %s', newWatch)
116
- this.watcher.add(newWatch);
117
- this._watches.add(newWatch);
137
+ addWatch = (0, node_util_1.deprecate)(this.add.bind(this), 'use add instead of addWatch');
138
+ delWatch = (0, node_util_1.deprecate)(this.delete.bind(this), 'use delete instead of delWatch');
139
+ add(files) {
140
+ // console.log('[watch:add] %s', files)
141
+ if (typeof files === 'string') {
142
+ this.trackedFiles.add(files);
118
143
  }
144
+ else {
145
+ for (const file of files) {
146
+ this.trackedFiles.add(file);
147
+ }
148
+ }
149
+ this.watcher.add(files);
119
150
  }
120
- delWatch(oldWatch) {
121
- if (!this._watches.has(oldWatch)) {
122
- // console.log('[watch:del] %s', oldWatch)
123
- this.watcher.unwatch(oldWatch);
124
- this._watches.delete(oldWatch);
151
+ delete(files) {
152
+ // console.log('[watch:del] %s', files)
153
+ if (typeof files === 'string') {
154
+ this.trackedFiles.delete(files);
125
155
  }
156
+ else {
157
+ for (const file of files) {
158
+ this.trackedFiles.delete(file);
159
+ }
160
+ }
161
+ this.watcher.unwatch(files);
126
162
  }
127
163
  reset() {
128
- this.watcher.unwatch([...this._watches.values()]);
129
- this._watches.clear();
164
+ this.watcher.unwatch([...this.trackedFiles]);
165
+ this.trackedFiles.clear();
166
+ this.watcher.unwatch(this.watches);
167
+ }
168
+ get expectedWatches() {
169
+ return [...this.trackedFiles];
170
+ }
171
+ get trackingSize() {
172
+ return this.trackedFiles.size;
130
173
  }
131
174
  get watches() {
132
- return [...this._watches.values()];
175
+ const list = [];
176
+ for (const [folder, files] of Object.entries(this.watcher.getWatched())) {
177
+ for (const file of files) {
178
+ if (this.cwd) {
179
+ list.push((0, node_path_1.join)(this.cwd, folder, file));
180
+ }
181
+ else {
182
+ list.push((0, node_path_1.join)(folder, file));
183
+ }
184
+ }
185
+ }
186
+ return list;
133
187
  }
134
- dispose() {
135
- return Promise.all([this.watcher.close(), this.lastRun]).then();
188
+ async dispose() {
189
+ await Promise.all([this.watcher.close(), this.lastRun]);
136
190
  }
137
191
  }
138
192
  exports.WatchHelper = WatchHelper;
139
- function startChokidar(reload) {
140
- const w = new WatchHelper(new chokidar_1.FSWatcher({
141
- ignoreInitial: true,
142
- }), reload);
143
- (0, common_1.registerGlobalLifecycle)(w);
144
- return w;
193
+ const allowedEvents = ['add', 'addDir', 'change', 'unlink', 'unlinkDir', 'ready'];
194
+ const defaultOptions = {
195
+ ignoreInitial: true,
196
+ debounceMs: 500,
197
+ watchingEvents: ['add', 'change'],
198
+ };
199
+ function startChokidar(reload, options = {}) {
200
+ const opts = Object.assign({}, defaultOptions, options);
201
+ const watcher = new WatchHelper(new chokidar_1.FSWatcher(opts), reload);
202
+ for (const item of opts.watchingEvents) {
203
+ watcher.listen(item);
204
+ }
205
+ return watcher;
145
206
  }
146
207
  //# sourceMappingURL=main.cjs.map
@@ -6,5 +6,5 @@
6
6
  "../../src/main.ts"
7
7
  ],
8
8
  "names": [],
9
- "mappings": "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"
9
+ "mappings": "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"
10
10
  }
@@ -1,5 +1,6 @@
1
1
  export { WatchHelper } from "./main.js";
2
2
  export { type IWatchHelper } from "./main.js";
3
+ export { type IExtraOptions } from "./main.js";
3
4
  export { startChokidar } from "./main.js";
4
5
  export { FSWatcher } from "./re-export.js";
5
6
  //# sourceMappingURL=__create_index.generated.d.ts.map
@@ -6,5 +6,5 @@
6
6
  "../../src/__create_index.generated.ts"
7
7
  ],
8
8
  "names": [],
9
- "mappings": "AAMC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,KAAK,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC"
9
+ "mappings": "AAMC,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AACtC,OAAO,EAAC,KAAK,YAAY,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,KAAK,aAAa,EAAC,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AAGxC,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC"
10
10
  }
@@ -6,5 +6,5 @@
6
6
  "../../src/__create_index.generated.ts"
7
7
  ],
8
8
  "names": [],
9
- "mappings": "AAAA,wBAAwB;AACxB,aAAa;AACb,oBAAoB;AAEpB,aAAa;AACZ,cAAc;AACd,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AACzC,kBAAkB;AACjB,cAAc;AACd,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC"
9
+ "mappings": "AAAA,wBAAwB;AACxB,aAAa;AACb,oBAAoB;AAEpB,aAAa;AACZ,cAAc;AACd,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAC,aAAa,EAAC,MAAM,WAAW,CAAC;AACzC,kBAAkB;AACjB,cAAc;AACd,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC"
10
10
  }
package/lib/esm/main.d.ts CHANGED
@@ -1,34 +1,61 @@
1
- import { FSWatcher } from 'chokidar';
1
+ import { FSWatcher, type ChokidarOptions } from 'chokidar';
2
2
  export declare class WatchHelper implements IWatchHelper {
3
3
  private readonly watcher;
4
4
  private readonly onChange;
5
- private _watches;
6
5
  private state;
7
6
  debounceMs: number;
8
7
  private lastRun?;
9
8
  private changes;
9
+ private readonly cwd;
10
+ private trackedFiles;
10
11
  constructor(watcher: FSWatcher, onChange: IReloadFunction);
12
+ listen(item: (typeof allowedEvents)[number]): void;
13
+ unlisten(item: (typeof allowedEvents)[number]): void;
11
14
  private _debounce?;
12
15
  private debounce;
13
16
  private changeState;
14
- private handleChange;
15
- private realTrigger;
16
- size(): number;
17
- replaceWatch(newList: Iterable<string>): void;
18
- addWatch(newWatch: string): void;
19
- delWatch(oldWatch: string): void;
17
+ private lowlevel_handler;
18
+ private handler;
19
+ get empty(): boolean;
20
+ get size(): number;
21
+ replace(newList: readonly string[]): void;
22
+ addWatch: (files: string | readonly string[]) => void;
23
+ delWatch: (files: string | readonly string[]) => void;
24
+ add(files: string | readonly string[]): void;
25
+ delete(files: string | readonly string[]): void;
20
26
  reset(): void;
21
- get watches(): ReadonlyArray<string>;
27
+ get expectedWatches(): string[];
28
+ get trackingSize(): number;
29
+ get watches(): string[];
22
30
  dispose(): Promise<void>;
23
31
  }
24
32
  export interface IWatchHelper {
25
- addWatch(newWatch: string): void;
26
- delWatch(oldWatch: string): void;
33
+ /** @deprecated use add */
34
+ addWatch(files: string | readonly string[]): void;
35
+ /** @deprecated use delete */
36
+ delWatch(files: string | readonly string[]): void;
37
+ add(files: string | readonly string[]): void;
38
+ delete(files: string | readonly string[]): void;
39
+ replace(files: readonly string[]): void;
27
40
  reset(): void;
41
+ /** 注意: chokidar的api无法同步获取监听文件数量,这个数值不会实时的反映实际情况 */
42
+ readonly size: number;
43
+ /** 注意: chokidar的api无法同步获取监听文件数量,这个数值不会实时的反映实际情况 */
44
+ readonly empty: boolean;
45
+ /** 本地维护的文件列表,和实际不一定相符,比如 符号链接、文件删除自动取消监视 等情况均无法同步 */
46
+ readonly trackingSize: number;
47
+ readonly expectedWatches: string[];
48
+ listen(item: (typeof allowedEvents)[number]): void;
49
+ unlisten(item: (typeof allowedEvents)[number]): void;
28
50
  dispose(): Promise<void>;
29
- readonly watches: ReadonlyArray<string>;
51
+ readonly watches: string[];
30
52
  }
31
53
  type IReloadFunction = (changes: string[]) => void | Promise<void>;
32
- export declare function startChokidar(reload: IReloadFunction): IWatchHelper;
54
+ declare const allowedEvents: readonly ["add", "addDir", "change", "unlink", "unlinkDir", "ready"];
55
+ export interface IExtraOptions extends ChokidarOptions {
56
+ debounceMs: number;
57
+ watchingEvents: (typeof allowedEvents)[number][];
58
+ }
59
+ export declare function startChokidar(reload: IReloadFunction, options?: Partial<IExtraOptions>): IWatchHelper;
33
60
  export {};
34
61
  //# sourceMappingURL=main.d.ts.map
@@ -6,5 +6,5 @@
6
6
  "../../src/main.ts"
7
7
  ],
8
8
  "names": [],
9
- "mappings": "AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAgBrC,qBAAa,WAAY,YAAW,YAAY;IAS9C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAT1B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,KAAK,CAAc;IAEpB,UAAU,SAAO;IACxB,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,OAAO,CAAqB;gBAGlB,OAAO,EAAE,SAAS,EAClB,QAAQ,EAAE,eAAe;IAQ3C,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,WAAW;IA8BnB,IAAI;IAKJ,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;IAatC,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAOzB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAQzB,KAAK;IAKL,IAAI,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAEnC;IAED,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGxB;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,KAAK,eAAe,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnE,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,YAAY,CASnE"
9
+ "mappings": "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"
10
10
  }
package/lib/esm/main.js CHANGED
@@ -1,7 +1,8 @@
1
- import { registerGlobalLifecycle } from '@idlebox/common';
2
- import _chokidar_59 from 'chokidar';
3
- const { FSWatcher } = _chokidar_59;
1
+ import _chokidar_0 from 'chokidar';
2
+ const { FSWatcher, ChokidarOptions } = _chokidar_0;
4
3
  import debug from 'debug';
4
+ import { join } from 'node:path';
5
+ import { deprecate } from 'node:util';
5
6
  const log = debug('chokidar');
6
7
  var State;
7
8
  (function (State) {
@@ -17,18 +18,32 @@ var State;
17
18
  export class WatchHelper {
18
19
  watcher;
19
20
  onChange;
20
- _watches = new Set();
21
21
  state = State.IDLE;
22
22
  debounceMs = 800;
23
23
  lastRun;
24
24
  changes = new Set();
25
+ cwd;
26
+ trackedFiles = new Set();
25
27
  constructor(watcher, onChange) {
26
28
  this.watcher = watcher;
27
29
  this.onChange = onChange;
28
- this.realTrigger = this.realTrigger.bind(this);
29
- const change = this.handleChange.bind(this);
30
- watcher.on('add', change);
31
- watcher.on('change', change);
30
+ this.lowlevel_handler = this.lowlevel_handler.bind(this);
31
+ this.handler = this.handler.bind(this);
32
+ this.cwd = watcher.options.cwd;
33
+ }
34
+ listen(item) {
35
+ if (!allowedEvents.includes(item)) {
36
+ throw new Error(`not allowed watcher event name: ${item}`);
37
+ }
38
+ if (this.watcher.listenerCount(item) === 0) {
39
+ this.watcher.addListener(item, this.lowlevel_handler);
40
+ }
41
+ }
42
+ unlisten(item) {
43
+ if (!allowedEvents.includes(item)) {
44
+ throw new Error(`not allowed watcher event name: ${item}`);
45
+ }
46
+ this.watcher.removeAllListeners(item);
32
47
  }
33
48
  _debounce;
34
49
  debounce() {
@@ -36,13 +51,13 @@ export class WatchHelper {
36
51
  clearTimeout(this._debounce);
37
52
  this._debounce = undefined;
38
53
  }
39
- this._debounce = setTimeout(this.realTrigger, this.debounceMs);
54
+ this._debounce = setTimeout(this.handler, this.debounceMs);
40
55
  }
41
56
  changeState(s) {
42
57
  log(`state change: ${State[s]}`);
43
58
  this.state = s;
44
59
  }
45
- handleChange(path) {
60
+ lowlevel_handler(path) {
46
61
  log('file changes: %s', path);
47
62
  this.changes.add(path);
48
63
  switch (this.state) {
@@ -62,7 +77,7 @@ export class WatchHelper {
62
77
  throw new Error(`Invalid program state. ${this.state}`);
63
78
  }
64
79
  }
65
- realTrigger() {
80
+ handler() {
66
81
  log('trigger...');
67
82
  const changes = [...this.changes.values()];
68
83
  this.changes.clear();
@@ -72,12 +87,12 @@ export class WatchHelper {
72
87
  .then(() => {
73
88
  this.onChange(changes);
74
89
  })
75
- .catch((e) => {
90
+ .catch(e => {
76
91
  log('Failed callback: %s', e.stack);
77
92
  })
78
93
  .finally(() => {
79
94
  if (this.state === State.RESCHEDULE) {
80
- this.realTrigger();
95
+ this.handler();
81
96
  }
82
97
  else if (this.state === State.BUSY) {
83
98
  this.changeState(State.IDLE);
@@ -91,51 +106,97 @@ export class WatchHelper {
91
106
  this.lastRun = undefined;
92
107
  });
93
108
  }
94
- size() {
95
- // return Object.keys(this.watcher.getWatched()).length;
96
- return this._watches.size;
109
+ get empty() {
110
+ return Object.keys(this.watcher.getWatched()).length === 0;
97
111
  }
98
- replaceWatch(newList) {
112
+ get size() {
113
+ let sum = 0;
114
+ for (const item of Object.values(this.watcher.getWatched())) {
115
+ sum += item.length;
116
+ }
117
+ return sum;
118
+ }
119
+ replace(newList) {
99
120
  const newSet = new Set(newList);
100
- for (const item of newSet) {
101
- this.addWatch(item);
121
+ for (const item of this.trackedFiles) {
122
+ if (!newSet.has(item)) {
123
+ this.delete(item);
124
+ }
102
125
  }
103
- for (const item of this._watches) {
126
+ for (const item of this.watches) {
104
127
  if (!newSet.has(item)) {
105
- this.delWatch(item);
128
+ this.delete(item);
106
129
  }
107
130
  }
131
+ this.add([...newSet]);
108
132
  }
109
- addWatch(newWatch) {
110
- if (!this._watches.has(newWatch)) {
111
- // console.log('[watch:add] %s', newWatch)
112
- this.watcher.add(newWatch);
113
- this._watches.add(newWatch);
133
+ addWatch = deprecate(this.add.bind(this), 'use add instead of addWatch');
134
+ delWatch = deprecate(this.delete.bind(this), 'use delete instead of delWatch');
135
+ add(files) {
136
+ // console.log('[watch:add] %s', files)
137
+ if (typeof files === 'string') {
138
+ this.trackedFiles.add(files);
114
139
  }
140
+ else {
141
+ for (const file of files) {
142
+ this.trackedFiles.add(file);
143
+ }
144
+ }
145
+ this.watcher.add(files);
115
146
  }
116
- delWatch(oldWatch) {
117
- if (!this._watches.has(oldWatch)) {
118
- // console.log('[watch:del] %s', oldWatch)
119
- this.watcher.unwatch(oldWatch);
120
- this._watches.delete(oldWatch);
147
+ delete(files) {
148
+ // console.log('[watch:del] %s', files)
149
+ if (typeof files === 'string') {
150
+ this.trackedFiles.delete(files);
121
151
  }
152
+ else {
153
+ for (const file of files) {
154
+ this.trackedFiles.delete(file);
155
+ }
156
+ }
157
+ this.watcher.unwatch(files);
122
158
  }
123
159
  reset() {
124
- this.watcher.unwatch([...this._watches.values()]);
125
- this._watches.clear();
160
+ this.watcher.unwatch([...this.trackedFiles]);
161
+ this.trackedFiles.clear();
162
+ this.watcher.unwatch(this.watches);
163
+ }
164
+ get expectedWatches() {
165
+ return [...this.trackedFiles];
166
+ }
167
+ get trackingSize() {
168
+ return this.trackedFiles.size;
126
169
  }
127
170
  get watches() {
128
- return [...this._watches.values()];
171
+ const list = [];
172
+ for (const [folder, files] of Object.entries(this.watcher.getWatched())) {
173
+ for (const file of files) {
174
+ if (this.cwd) {
175
+ list.push(join(this.cwd, folder, file));
176
+ }
177
+ else {
178
+ list.push(join(folder, file));
179
+ }
180
+ }
181
+ }
182
+ return list;
129
183
  }
130
- dispose() {
131
- return Promise.all([this.watcher.close(), this.lastRun]).then();
184
+ async dispose() {
185
+ await Promise.all([this.watcher.close(), this.lastRun]);
132
186
  }
133
187
  }
134
- export function startChokidar(reload) {
135
- const w = new WatchHelper(new FSWatcher({
136
- ignoreInitial: true,
137
- }), reload);
138
- registerGlobalLifecycle(w);
139
- return w;
188
+ const allowedEvents = ['add', 'addDir', 'change', 'unlink', 'unlinkDir', 'ready'];
189
+ const defaultOptions = {
190
+ ignoreInitial: true,
191
+ debounceMs: 500,
192
+ watchingEvents: ['add', 'change'],
193
+ };
194
+ export function startChokidar(reload, options = {}) {
195
+ const opts = Object.assign({}, defaultOptions, options);
196
+ const watcher = new WatchHelper(new FSWatcher(opts), reload);
197
+ for (const item of opts.watchingEvents) {
198
+ watcher.listen(item);
199
+ }
200
+ return watcher;
140
201
  }
141
202
  //# sourceMappingURL=main.js.map
@@ -6,5 +6,5 @@
6
6
  "../../src/main.ts"
7
7
  ],
8
8
  "names": [],
9
- "mappings": "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"
9
+ "mappings": "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"
10
10
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@idlebox/chokidar",
3
3
  "type": "module",
4
- "version": "0.0.26",
4
+ "version": "0.1.0",
5
5
  "license": "MIT",
6
6
  "author": "GongT <admin@gongt.me> https://github.com/gongt/",
7
7
  "main": "./lib/cjs/__create_index.generated.cjs",
@@ -18,7 +18,7 @@
18
18
  "dependencies": {
19
19
  "chokidar": "^4.0.1",
20
20
  "debug": "^4.3.7",
21
- "@idlebox/common": "^1.4.3"
21
+ "@idlebox/common": "^1.4.6"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@rushstack/heft": "^0.68.2",
package/src/main.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { registerGlobalLifecycle } from '@idlebox/common';
2
- import { FSWatcher } from 'chokidar';
1
+ import { FSWatcher, type ChokidarOptions } from 'chokidar';
3
2
  import debug from 'debug';
3
+ import { join } from 'node:path';
4
+ import { deprecate } from 'node:util';
4
5
 
5
6
  const log = debug('chokidar');
6
7
 
@@ -16,21 +17,38 @@ enum State {
16
17
  }
17
18
 
18
19
  export class WatchHelper implements IWatchHelper {
19
- private _watches = new Set<string>();
20
20
  private state = State.IDLE;
21
21
 
22
22
  public debounceMs = 800;
23
23
  private lastRun?: Promise<void>;
24
24
  private changes = new Set<string>();
25
+ private readonly cwd: string | undefined;
26
+ private trackedFiles = new Set<string>();
25
27
 
26
28
  constructor(
27
29
  private readonly watcher: FSWatcher,
28
- private readonly onChange: IReloadFunction
30
+ private readonly onChange: IReloadFunction,
29
31
  ) {
30
- this.realTrigger = this.realTrigger.bind(this);
31
- const change = this.handleChange.bind(this);
32
- watcher.on('add', change);
33
- watcher.on('change', change);
32
+ this.lowlevel_handler = this.lowlevel_handler.bind(this);
33
+ this.handler = this.handler.bind(this);
34
+
35
+ this.cwd = watcher.options.cwd;
36
+ }
37
+
38
+ listen(item: (typeof allowedEvents)[number]) {
39
+ if (!allowedEvents.includes(item)) {
40
+ throw new Error(`not allowed watcher event name: ${item}`);
41
+ }
42
+ if (this.watcher.listenerCount(item) === 0) {
43
+ this.watcher.addListener(item, this.lowlevel_handler);
44
+ }
45
+ }
46
+ unlisten(item: (typeof allowedEvents)[number]) {
47
+ if (!allowedEvents.includes(item)) {
48
+ throw new Error(`not allowed watcher event name: ${item}`);
49
+ }
50
+
51
+ this.watcher.removeAllListeners(item);
34
52
  }
35
53
 
36
54
  private _debounce?: NodeJS.Timeout;
@@ -39,7 +57,7 @@ export class WatchHelper implements IWatchHelper {
39
57
  clearTimeout(this._debounce);
40
58
  this._debounce = undefined;
41
59
  }
42
- this._debounce = setTimeout(this.realTrigger, this.debounceMs);
60
+ this._debounce = setTimeout(this.handler, this.debounceMs);
43
61
  }
44
62
 
45
63
  private changeState(s: State) {
@@ -47,7 +65,7 @@ export class WatchHelper implements IWatchHelper {
47
65
  this.state = s;
48
66
  }
49
67
 
50
- private handleChange(path: string) {
68
+ private lowlevel_handler(path: string) {
51
69
  log('file changes: %s', path);
52
70
  this.changes.add(path);
53
71
  switch (this.state) {
@@ -68,7 +86,7 @@ export class WatchHelper implements IWatchHelper {
68
86
  }
69
87
  }
70
88
 
71
- private realTrigger() {
89
+ private handler() {
72
90
  log('trigger...');
73
91
 
74
92
  const changes = [...this.changes.values()];
@@ -80,12 +98,12 @@ export class WatchHelper implements IWatchHelper {
80
98
  .then(() => {
81
99
  this.onChange(changes);
82
100
  })
83
- .catch((e) => {
101
+ .catch(e => {
84
102
  log('Failed callback: %s', e.stack);
85
103
  })
86
104
  .finally(() => {
87
105
  if (this.state === State.RESCHEDULE) {
88
- this.realTrigger();
106
+ this.handler();
89
107
  } else if (this.state === State.BUSY) {
90
108
  this.changeState(State.IDLE);
91
109
  } else {
@@ -98,70 +116,140 @@ export class WatchHelper implements IWatchHelper {
98
116
  });
99
117
  }
100
118
 
101
- size() {
102
- // return Object.keys(this.watcher.getWatched()).length;
103
- return this._watches.size;
119
+ get empty() {
120
+ return Object.keys(this.watcher.getWatched()).length === 0;
104
121
  }
105
122
 
106
- replaceWatch(newList: Iterable<string>) {
107
- const newSet = new Set(newList);
108
- for (const item of newSet) {
109
- this.addWatch(item);
123
+ get size() {
124
+ let sum = 0;
125
+ for (const item of Object.values(this.watcher.getWatched())) {
126
+ sum += item.length;
110
127
  }
128
+ return sum;
129
+ }
111
130
 
112
- for (const item of this._watches) {
131
+ replace(newList: readonly string[]) {
132
+ const newSet = new Set(newList);
133
+ for (const item of this.trackedFiles) {
134
+ if (!newSet.has(item)) {
135
+ this.delete(item);
136
+ }
137
+ }
138
+ for (const item of this.watches) {
113
139
  if (!newSet.has(item)) {
114
- this.delWatch(item);
140
+ this.delete(item);
115
141
  }
116
142
  }
143
+
144
+ this.add([...newSet]);
117
145
  }
118
146
 
119
- addWatch(newWatch: string) {
120
- if (!this._watches.has(newWatch)) {
121
- // console.log('[watch:add] %s', newWatch)
122
- this.watcher.add(newWatch);
123
- this._watches.add(newWatch);
147
+ addWatch = deprecate(this.add.bind(this), 'use add instead of addWatch');
148
+ delWatch = deprecate(this.delete.bind(this), 'use delete instead of delWatch');
149
+
150
+ add(files: string | readonly string[]) {
151
+ // console.log('[watch:add] %s', files)
152
+ if (typeof files === 'string') {
153
+ this.trackedFiles.add(files);
154
+ } else {
155
+ for (const file of files) {
156
+ this.trackedFiles.add(file);
157
+ }
124
158
  }
159
+ this.watcher.add(files as string[]);
125
160
  }
126
- delWatch(oldWatch: string) {
127
- if (!this._watches.has(oldWatch)) {
128
- // console.log('[watch:del] %s', oldWatch)
129
- this.watcher.unwatch(oldWatch);
130
- this._watches.delete(oldWatch);
161
+
162
+ delete(files: string | readonly string[]) {
163
+ // console.log('[watch:del] %s', files)
164
+ if (typeof files === 'string') {
165
+ this.trackedFiles.delete(files);
166
+ } else {
167
+ for (const file of files) {
168
+ this.trackedFiles.delete(file);
169
+ }
131
170
  }
171
+ this.watcher.unwatch(files as string[]);
132
172
  }
133
173
 
134
174
  reset() {
135
- this.watcher.unwatch([...this._watches.values()]);
136
- this._watches.clear();
175
+ this.watcher.unwatch([...this.trackedFiles]);
176
+ this.trackedFiles.clear();
177
+ this.watcher.unwatch(this.watches);
137
178
  }
138
179
 
139
- get watches(): ReadonlyArray<string> {
140
- return [...this._watches.values()];
180
+ get expectedWatches() {
181
+ return [...this.trackedFiles];
141
182
  }
142
183
 
143
- dispose(): Promise<void> {
144
- return Promise.all([this.watcher.close(), this.lastRun]).then();
184
+ get trackingSize() {
185
+ return this.trackedFiles.size;
186
+ }
187
+
188
+ get watches(): string[] {
189
+ const list = [];
190
+ for (const [folder, files] of Object.entries(this.watcher.getWatched())) {
191
+ for (const file of files) {
192
+ if (this.cwd) {
193
+ list.push(join(this.cwd, folder, file));
194
+ } else {
195
+ list.push(join(folder, file));
196
+ }
197
+ }
198
+ }
199
+ return list;
200
+ }
201
+
202
+ async dispose() {
203
+ await Promise.all([this.watcher.close(), this.lastRun]);
145
204
  }
146
205
  }
147
206
 
148
207
  export interface IWatchHelper {
149
- addWatch(newWatch: string): void;
150
- delWatch(oldWatch: string): void;
208
+ /** @deprecated use add */
209
+ addWatch(files: string | readonly string[]): void;
210
+ /** @deprecated use delete */
211
+ delWatch(files: string | readonly string[]): void;
212
+
213
+ add(files: string | readonly string[]): void;
214
+ delete(files: string | readonly string[]): void;
215
+ replace(files: readonly string[]): void;
151
216
  reset(): void;
217
+
218
+ /** 注意: chokidar的api无法同步获取监听文件数量,这个数值不会实时的反映实际情况 */
219
+ readonly size: number;
220
+ /** 注意: chokidar的api无法同步获取监听文件数量,这个数值不会实时的反映实际情况 */
221
+ readonly empty: boolean;
222
+
223
+ /** 本地维护的文件列表,和实际不一定相符,比如 符号链接、文件删除自动取消监视 等情况均无法同步 */
224
+ readonly trackingSize: number;
225
+ readonly expectedWatches: string[];
226
+
227
+ listen(item: (typeof allowedEvents)[number]): void;
228
+ unlisten(item: (typeof allowedEvents)[number]): void;
229
+
152
230
  dispose(): Promise<void>;
153
- readonly watches: ReadonlyArray<string>;
231
+ readonly watches: string[];
154
232
  }
155
233
 
156
234
  type IReloadFunction = (changes: string[]) => void | Promise<void>;
235
+ const allowedEvents = ['add', 'addDir', 'change', 'unlink', 'unlinkDir', 'ready'] as const;
236
+
237
+ export interface IExtraOptions extends ChokidarOptions {
238
+ debounceMs: number;
239
+ watchingEvents: (typeof allowedEvents)[number][];
240
+ }
157
241
 
158
- export function startChokidar(reload: IReloadFunction): IWatchHelper {
159
- const w = new WatchHelper(
160
- new FSWatcher({
161
- ignoreInitial: true,
162
- }),
163
- reload
164
- );
165
- registerGlobalLifecycle(w);
166
- return w;
242
+ const defaultOptions: IExtraOptions = {
243
+ ignoreInitial: true,
244
+ debounceMs: 500,
245
+ watchingEvents: ['add', 'change'],
246
+ };
247
+
248
+ export function startChokidar(reload: IReloadFunction, options: Partial<IExtraOptions> = {}): IWatchHelper {
249
+ const opts = Object.assign({}, defaultOptions, options);
250
+ const watcher = new WatchHelper(new FSWatcher(opts), reload);
251
+ for (const item of opts.watchingEvents) {
252
+ watcher.listen(item);
253
+ }
254
+ return watcher;
167
255
  }