@eggjs/watcher 5.0.0-beta.34 → 5.0.0-beta.36
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.
- package/dist/agent.d.ts +2 -2
- package/dist/agent.js +6 -2
- package/dist/app.d.ts +2 -2
- package/dist/app.js +6 -2
- package/dist/config/config.default.d.ts +20 -18
- package/dist/config/config.default.js +13 -16
- package/dist/config/config.local.d.ts +6 -3
- package/dist/config/config.local.js +6 -6
- package/dist/config/config.unittest.d.ts +6 -3
- package/dist/config/config.unittest.js +6 -6
- package/dist/index.d.ts +11 -5
- package/dist/index.js +15 -9
- package/dist/lib/boot.d.ts +9 -5
- package/dist/lib/boot.js +17 -16
- package/dist/lib/event-sources/base.d.ts +8 -4
- package/dist/lib/event-sources/base.js +7 -4
- package/dist/lib/event-sources/default.d.ts +9 -5
- package/dist/lib/event-sources/default.js +18 -15
- package/dist/lib/event-sources/development.d.ts +10 -6
- package/dist/lib/event-sources/development.js +65 -96
- package/dist/lib/event-sources/index.d.ts +4 -4
- package/dist/lib/event-sources/index.js +2 -2
- package/dist/lib/utils.d.ts +4 -1
- package/dist/lib/utils.js +8 -7
- package/dist/lib/watcher.d.ts +21 -17
- package/dist/lib/watcher.js +63 -114
- package/dist/types.d.ts +12 -10
- package/dist/types.js +1 -2
- package/package.json +35 -40
package/dist/agent.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Boot } from
|
|
2
|
-
export default
|
|
1
|
+
import { Boot } from "./lib/boot.js";
|
|
2
|
+
export { Boot as default };
|
package/dist/agent.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { Boot } from "./lib/boot.js";
|
|
2
|
-
|
|
3
|
-
//#
|
|
2
|
+
|
|
3
|
+
//#region src/agent.ts
|
|
4
|
+
var agent_default = Boot;
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
export { agent_default as default };
|
package/dist/app.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Boot } from
|
|
2
|
-
export default
|
|
1
|
+
import { Boot } from "./lib/boot.js";
|
|
2
|
+
export { Boot as default };
|
package/dist/app.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { Boot } from "./lib/boot.js";
|
|
2
|
-
|
|
3
|
-
//#
|
|
2
|
+
|
|
3
|
+
//#region src/app.ts
|
|
4
|
+
var app_default = Boot;
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
export { app_default as default };
|
|
@@ -1,21 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
//#region src/config/config.default.d.ts
|
|
2
|
+
interface WatcherConfig {
|
|
3
|
+
/**
|
|
4
|
+
* event source type, default is `default`
|
|
5
|
+
* can be `default` or `development`
|
|
6
|
+
*/
|
|
7
|
+
type: string;
|
|
8
|
+
/**
|
|
9
|
+
* event sources
|
|
10
|
+
* key is event source type, value is event source module path
|
|
11
|
+
*/
|
|
12
|
+
eventSources: Record<string, string>;
|
|
12
13
|
}
|
|
13
14
|
declare const _default: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
15
|
+
/**
|
|
16
|
+
* watcher options
|
|
17
|
+
* @member Config#watcher
|
|
18
|
+
* @property {string} type - event source type
|
|
19
|
+
*/
|
|
20
|
+
watcher: WatcherConfig;
|
|
20
21
|
};
|
|
21
|
-
|
|
22
|
+
//#endregion
|
|
23
|
+
export { WatcherConfig, _default as default };
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
},
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQWU3QixlQUFlO0lBQ2I7Ozs7T0FJRztJQUNILE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTLEVBQUUsdUJBQXVCO1FBQ3hDLFlBQVksRUFBRTtZQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDhCQUE4QixDQUFDO1lBQ3ZFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtDQUFrQyxDQUFDO1NBQ2hGO0tBQ2U7Q0FDbkIsQ0FBQyJ9
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
|
|
3
|
+
//#region src/config/config.default.ts
|
|
4
|
+
var config_default_default = { watcher: {
|
|
5
|
+
type: "default",
|
|
6
|
+
eventSources: {
|
|
7
|
+
default: path.join(import.meta.dirname, "../lib/event-sources/default"),
|
|
8
|
+
development: path.join(import.meta.dirname, "../lib/event-sources/development")
|
|
9
|
+
}
|
|
10
|
+
} };
|
|
11
|
+
|
|
12
|
+
//#endregion
|
|
13
|
+
export { config_default_default as default };
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { PartialEggConfig } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/config/config.local.d.ts
|
|
4
|
+
declare const config: PartialEggConfig;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { config as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
//#region src/config/config.local.ts
|
|
2
|
+
const config = { watcher: { type: "development" } };
|
|
3
|
+
var config_local_default = config;
|
|
4
|
+
|
|
5
|
+
//#endregion
|
|
6
|
+
export { config_local_default as default };
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { PartialEggConfig } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/config/config.unittest.d.ts
|
|
4
|
+
declare const config: PartialEggConfig;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { config as default };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
//#region src/config/config.unittest.ts
|
|
2
|
+
const config = { watcher: { type: "development" } };
|
|
3
|
+
var config_unittest_default = config;
|
|
4
|
+
|
|
5
|
+
//#endregion
|
|
6
|
+
export { config_unittest_default as default };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import { ChangeInfo, WatchListener, Watcher } from "./lib/watcher.js";
|
|
2
|
+
import "./types.js";
|
|
3
|
+
import { BaseEventSource } from "./lib/event-sources/base.js";
|
|
4
|
+
import DefaultEventSource from "./lib/event-sources/default.js";
|
|
5
|
+
import DevelopmentEventSource from "./lib/event-sources/development.js";
|
|
6
|
+
import "./lib/event-sources/index.js";
|
|
7
|
+
import { EggPluginFactory } from "egg";
|
|
8
|
+
|
|
9
|
+
//#region src/index.d.ts
|
|
3
10
|
declare const _default: EggPluginFactory;
|
|
4
|
-
|
|
5
|
-
export
|
|
6
|
-
export * from './lib/event-sources/index.ts';
|
|
11
|
+
//#endregion
|
|
12
|
+
export { BaseEventSource, ChangeInfo, DefaultEventSource, DevelopmentEventSource, WatchListener, Watcher, _default as default };
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { BaseEventSource } from "./lib/event-sources/base.js";
|
|
2
|
+
import { Watcher } from "./lib/watcher.js";
|
|
3
|
+
import DefaultEventSource from "./lib/event-sources/default.js";
|
|
4
|
+
import DevelopmentEventSource from "./lib/event-sources/development.js";
|
|
5
|
+
import "./lib/event-sources/index.js";
|
|
6
|
+
import { definePluginFactory } from "egg";
|
|
7
|
+
|
|
8
|
+
//#region src/index.ts
|
|
9
|
+
var src_default = definePluginFactory({
|
|
10
|
+
name: "watcher",
|
|
11
|
+
enable: true,
|
|
12
|
+
path: import.meta.dirname
|
|
7
13
|
});
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
14
|
+
|
|
15
|
+
//#endregion
|
|
16
|
+
export { BaseEventSource, DefaultEventSource, DevelopmentEventSource, Watcher, src_default as default };
|
package/dist/lib/boot.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { EggApplicationCore, ILifecycleBoot } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/boot.d.ts
|
|
4
|
+
declare class Boot implements ILifecycleBoot {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(appOrAgent: EggApplicationCore);
|
|
7
|
+
didLoad(): Promise<void>;
|
|
6
8
|
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { Boot };
|
package/dist/lib/boot.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { Watcher } from "./watcher.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
//#
|
|
2
|
+
|
|
3
|
+
//#region src/lib/boot.ts
|
|
4
|
+
var Boot = class {
|
|
5
|
+
#app;
|
|
6
|
+
constructor(appOrAgent) {
|
|
7
|
+
this.#app = appOrAgent;
|
|
8
|
+
this.#app.watcher = this.#app.clusterWrapper(Watcher, {}).delegate("watch", "subscribe").create(appOrAgent.config);
|
|
9
|
+
this.#app.watcher.on("info", (msg, ...args) => this.#app.coreLogger.info(msg, ...args)).on("warn", (msg, ...args) => this.#app.coreLogger.warn(msg, ...args)).on("error", (msg, ...args) => this.#app.coreLogger.error(msg, ...args));
|
|
10
|
+
}
|
|
11
|
+
async didLoad() {
|
|
12
|
+
await this.#app.watcher.ready();
|
|
13
|
+
this.#app.coreLogger.info("[@eggjs/watcher:%s] watcher start success", this.#app.type);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
//#endregion
|
|
18
|
+
export { Boot };
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { Base } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Base } from "sdk-base";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/event-sources/base.d.ts
|
|
4
|
+
declare abstract class BaseEventSource extends Base {
|
|
5
|
+
abstract watch(file: string): void;
|
|
6
|
+
abstract unwatch(file: string): void;
|
|
5
7
|
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { BaseEventSource };
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { Base } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { Base } from "sdk-base";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/event-sources/base.ts
|
|
4
|
+
var BaseEventSource = class extends Base {};
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
export { BaseEventSource };
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import { BaseEventSource } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { BaseEventSource } from "./base.js";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/event-sources/default.d.ts
|
|
4
|
+
declare class DefaultEventSource extends BaseEventSource {
|
|
5
|
+
constructor();
|
|
6
|
+
watch(): void;
|
|
7
|
+
unwatch(): void;
|
|
6
8
|
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { DefaultEventSource as default };
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import { BaseEventSource } from "./base.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
2
|
+
|
|
3
|
+
//#region src/lib/event-sources/default.ts
|
|
4
|
+
var DefaultEventSource = class extends BaseEventSource {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
setImmediate(() => this.emit("info", "[@eggjs/watcher] defaultEventSource watcher will NOT take effect"));
|
|
8
|
+
this.ready(true);
|
|
9
|
+
}
|
|
10
|
+
watch() {
|
|
11
|
+
this.emit("info", "[@eggjs/watcher] using defaultEventSource watcher.watch() does NOTHING");
|
|
12
|
+
}
|
|
13
|
+
unwatch() {
|
|
14
|
+
this.emit("info", "[@eggjs/watcher] using defaultEventSource watcher.unwatch() does NOTHING");
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
//#endregion
|
|
19
|
+
export { DefaultEventSource as default };
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import { BaseEventSource } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { BaseEventSource } from "./base.js";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/event-sources/development.d.ts
|
|
4
|
+
declare class DevelopmentEventSource extends BaseEventSource {
|
|
5
|
+
#private;
|
|
6
|
+
constructor();
|
|
7
|
+
watch(file: string): void;
|
|
8
|
+
unwatch(file: string): void;
|
|
7
9
|
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { DevelopmentEventSource as default };
|
|
@@ -1,97 +1,66 @@
|
|
|
1
|
-
import { debuglog } from 'node:util';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import fs, {} from 'node:fs';
|
|
4
1
|
import { BaseEventSource } from "./base.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
// { event: 'change',
|
|
71
|
-
// path: '/Users/mk2/git/changing/test/fixtures/foo.js',
|
|
72
|
-
// stat:
|
|
73
|
-
// { dev: 16777220,
|
|
74
|
-
// mode: 33188,
|
|
75
|
-
// nlink: 1,
|
|
76
|
-
// uid: 501,
|
|
77
|
-
// gid: 20,
|
|
78
|
-
// rdev: 0,
|
|
79
|
-
// blksize: 4096,
|
|
80
|
-
// ino: 72656587,
|
|
81
|
-
// size: 11,
|
|
82
|
-
// blocks: 8,
|
|
83
|
-
// atime: Wed Jun 17 2015 00:08:11 GMT+0800 (CST),
|
|
84
|
-
// mtime: Wed Jun 17 2015 00:08:38 GMT+0800 (CST),
|
|
85
|
-
// ctime: Wed Jun 17 2015 00:08:38 GMT+0800 (CST),
|
|
86
|
-
// birthtime: Tue Jun 16 2015 23:19:13 GMT+0800 (CST) } }
|
|
87
|
-
const stat = fs.statSync(file, { throwIfNoEntry: false });
|
|
88
|
-
const info = {
|
|
89
|
-
path: file,
|
|
90
|
-
event,
|
|
91
|
-
stat,
|
|
92
|
-
isDirectory: stat?.isDirectory(),
|
|
93
|
-
};
|
|
94
|
-
this.emit('change', info);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LXNvdXJjZXMvZGV2ZWxvcG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLEVBQUUsRUFBdUMsTUFBTSxTQUFTLENBQUM7QUFFbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUc1QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUVwRSxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE9BQU8sT0FBTyxzQkFBdUIsU0FBUSxlQUFlO0lBQ2pFLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztJQUU3QztRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVk7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxPQUFPO1lBQ1QsQ0FBQztZQUNELEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbkQsOEVBQThFO1lBQzlFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFB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
|
|
2
|
+
import { debuglog } from "node:util";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import fs from "node:fs";
|
|
5
|
+
|
|
6
|
+
//#region src/lib/event-sources/development.ts
|
|
7
|
+
const debug = debuglog("egg-watcher/lib/event-sources/development");
|
|
8
|
+
var DevelopmentEventSource = class extends BaseEventSource {
|
|
9
|
+
#fileWatching = /* @__PURE__ */ new Map();
|
|
10
|
+
constructor() {
|
|
11
|
+
super();
|
|
12
|
+
this.ready(true);
|
|
13
|
+
}
|
|
14
|
+
watch(file) {
|
|
15
|
+
try {
|
|
16
|
+
const stat = fs.statSync(file, { throwIfNoEntry: false });
|
|
17
|
+
if (!stat) {
|
|
18
|
+
debug("watch %o ignore, file not exists", file);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
debug("watch %o, isFile: %o", file, stat.isFile());
|
|
22
|
+
let recursive = true;
|
|
23
|
+
if (process.platform === "linux" && process.version.startsWith("v18.")) recursive = false;
|
|
24
|
+
const handler = fs.watch(file, {
|
|
25
|
+
persistent: true,
|
|
26
|
+
recursive
|
|
27
|
+
}, (event, filename) => {
|
|
28
|
+
debug("watch %o => event: %o, filename: %o", file, event, filename);
|
|
29
|
+
let changePath = file;
|
|
30
|
+
if (stat.isFile()) this.#onFsWatchChange(event, changePath);
|
|
31
|
+
else {
|
|
32
|
+
if (filename) changePath = path.join(file, filename);
|
|
33
|
+
this.#onFsWatchChange(event, changePath);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
this.#fileWatching.set(file, handler);
|
|
37
|
+
} catch (e) {
|
|
38
|
+
this.emit("warn", "[@eggjs/watcher:DevelopmentEventSource] watch %o error: %s", file, e);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
unwatch(file) {
|
|
42
|
+
if (!file) return;
|
|
43
|
+
const h = this.#fileWatching.get(file);
|
|
44
|
+
if (!h) return;
|
|
45
|
+
h.removeAllListeners();
|
|
46
|
+
h.close();
|
|
47
|
+
this.#fileWatching.delete(file);
|
|
48
|
+
}
|
|
49
|
+
#onFsWatchChange(event, file) {
|
|
50
|
+
if (!file) {
|
|
51
|
+
this.emit("warn", "[@eggjs/watcher:DevelopmentEventSource] event: %o", event);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const stat = fs.statSync(file, { throwIfNoEntry: false });
|
|
55
|
+
const info = {
|
|
56
|
+
path: file,
|
|
57
|
+
event,
|
|
58
|
+
stat,
|
|
59
|
+
isDirectory: stat?.isDirectory()
|
|
60
|
+
};
|
|
61
|
+
this.emit("change", info);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
//#endregion
|
|
66
|
+
export { DevelopmentEventSource as default };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseEventSource } from
|
|
2
|
-
import DefaultEventSource from
|
|
3
|
-
import DevelopmentEventSource from
|
|
4
|
-
export { BaseEventSource, DefaultEventSource, DevelopmentEventSource };
|
|
1
|
+
import { BaseEventSource } from "./base.js";
|
|
2
|
+
import DefaultEventSource from "./default.js";
|
|
3
|
+
import DevelopmentEventSource from "./development.js";
|
|
4
|
+
export { BaseEventSource, DefaultEventSource, DevelopmentEventSource };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { BaseEventSource } from "./base.js";
|
|
2
2
|
import DefaultEventSource from "./default.js";
|
|
3
3
|
import DevelopmentEventSource from "./development.js";
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
|
|
5
|
+
export { BaseEventSource, DefaultEventSource, DevelopmentEventSource };
|
package/dist/lib/utils.d.ts
CHANGED
package/dist/lib/utils.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
return !path.relative(parent, child).startsWith('..');
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
|
|
3
|
+
//#region src/lib/utils.ts
|
|
4
|
+
function isEqualOrParentPath(parent, child) {
|
|
5
|
+
return !path.relative(parent, child).startsWith("..");
|
|
7
6
|
}
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
//#endregion
|
|
9
|
+
export { isEqualOrParentPath };
|
package/dist/lib/watcher.d.ts
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { Base } from "sdk-base";
|
|
2
|
+
import { EggAppConfig } from "egg";
|
|
3
|
+
import { Stats, WatchEventType } from "node:fs";
|
|
4
|
+
|
|
5
|
+
//#region src/lib/watcher.d.ts
|
|
6
|
+
interface ChangeInfo extends Record<string, any> {
|
|
7
|
+
event: WatchEventType;
|
|
8
|
+
/**
|
|
9
|
+
* file stat if path exists
|
|
10
|
+
*/
|
|
11
|
+
stat?: Stats;
|
|
12
|
+
path: string;
|
|
13
|
+
isDirectory?: boolean;
|
|
12
14
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
type WatchListener = (info: ChangeInfo) => void;
|
|
16
|
+
declare class Watcher extends Base {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(config: EggAppConfig);
|
|
19
|
+
protected _init(): Promise<void>;
|
|
20
|
+
watch(path: string | string[], listener: WatchListener): void;
|
|
19
21
|
}
|
|
22
|
+
//#endregion
|
|
23
|
+
export { ChangeInfo, WatchListener, Watcher };
|
package/dist/lib/watcher.js
CHANGED
|
@@ -1,115 +1,64 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Base } from 'sdk-base';
|
|
3
|
-
import camelcase from 'camelcase';
|
|
4
|
-
import { importModule } from '@eggjs/utils';
|
|
5
|
-
import { BaseEventSource } from "./event-sources/base.js";
|
|
1
|
+
import "./event-sources/base.js";
|
|
6
2
|
import { isEqualOrParentPath } from "./utils.js";
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (Array.isArray(path)) {
|
|
70
|
-
path.forEach(p => this.unwatch(p, callback));
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
if (callback) {
|
|
75
|
-
this.removeListener(path, callback);
|
|
76
|
-
// stop watching when no listener bound to the path
|
|
77
|
-
if (this.listenerCount(path) === 0) {
|
|
78
|
-
this._eventSource.unwatch(path);
|
|
79
|
-
}
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
this.removeAllListeners(path);
|
|
84
|
-
this._eventSource.unwatch(path);
|
|
85
|
-
}
|
|
86
|
-
*/
|
|
87
|
-
#onChange(info) {
|
|
88
|
-
debug('onChange %o', info);
|
|
89
|
-
this.emit('info', '[@eggjs/watcher] Received a change event from eventSource: %j', info);
|
|
90
|
-
const path = info.path;
|
|
91
|
-
for (const p of this.eventNames()) {
|
|
92
|
-
if (typeof p !== 'string')
|
|
93
|
-
continue;
|
|
94
|
-
// if it is a sub path, emit a `change` event
|
|
95
|
-
if (isEqualOrParentPath(p, path)) {
|
|
96
|
-
this.emit(p, info);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
#onFuzzyChange(info) {
|
|
101
|
-
debug('onFuzzyChange %o', info);
|
|
102
|
-
this.emit('info', '[@eggjs/watcher] Received a fuzzy-change event from eventSource: %j', info);
|
|
103
|
-
const path = info.path;
|
|
104
|
-
for (const p of this.eventNames()) {
|
|
105
|
-
if (typeof p !== 'string')
|
|
106
|
-
continue;
|
|
107
|
-
// if it is a parent path, emit a `change` event
|
|
108
|
-
// just the opposite to `_onChange`
|
|
109
|
-
if (isEqualOrParentPath(path, p)) {
|
|
110
|
-
this.emit(p, info);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvd2F0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxTQUFTLE1BQU0sV0FBVyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHNUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQWNsRCxNQUFNLE9BQU8sT0FBUSxTQUFRLElBQUk7SUFDL0IsT0FBTyxDQUFlO0lBQ3RCLFlBQVksQ0FBa0I7SUFFOUIsWUFBWSxNQUFvQjtRQUM5QixLQUFLLENBQUM7WUFDSixVQUFVLEVBQUUsT0FBTztTQUNwQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRVMsS0FBSyxDQUFDLEtBQUs7UUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDO1FBQy9DLEtBQUssQ0FBQywwQkFBMEIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsd0RBQXdEO1lBQ3hELEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxDQUFDO1lBQ3pELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLFdBQVcsQ0FBc0MsQ0FBQztRQUN2RyxJQUFJLE9BQU8sV0FBVyxLQUFL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
|
|
3
|
+
import { debuglog } from "node:util";
|
|
4
|
+
import { importModule } from "@eggjs/utils";
|
|
5
|
+
import camelcase from "camelcase";
|
|
6
|
+
import { Base } from "sdk-base";
|
|
7
|
+
|
|
8
|
+
//#region src/lib/watcher.ts
|
|
9
|
+
const debug = debuglog("egg/watcher/lib/watcher");
|
|
10
|
+
var Watcher = class extends Base {
|
|
11
|
+
#config;
|
|
12
|
+
#eventSource;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
super({ initMethod: "_init" });
|
|
15
|
+
this.#config = config;
|
|
16
|
+
}
|
|
17
|
+
async _init() {
|
|
18
|
+
const watcherType = this.#config.watcher?.type;
|
|
19
|
+
debug("init with watcherType %o", watcherType);
|
|
20
|
+
if (!watcherType) {
|
|
21
|
+
debug("watcherType is not defined, skip initialization");
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
let EventSource = this.#config.watcher?.eventSources[watcherType];
|
|
25
|
+
if (typeof EventSource === "string") EventSource = await importModule(EventSource, { importDefaultOnly: true });
|
|
26
|
+
const key = camelcase(["watcher", watcherType]);
|
|
27
|
+
const eventSourceOptions = this.#config[key] ?? {};
|
|
28
|
+
this.#eventSource = Reflect.construct(EventSource, [eventSourceOptions]);
|
|
29
|
+
this.#eventSource.on("change", this.#onChange.bind(this)).on("fuzzy-change", this.#onFuzzyChange.bind(this)).on("info", (...args) => this.emit("info", ...args)).on("warn", (...args) => this.emit("warn", ...args)).on("error", (...args) => this.emit("error", ...args));
|
|
30
|
+
await this.#eventSource.ready();
|
|
31
|
+
}
|
|
32
|
+
watch(path, listener) {
|
|
33
|
+
debug("watch %o", path);
|
|
34
|
+
this.emit("info", "[@eggjs/watcher] Start watching: %j", path);
|
|
35
|
+
if (!path) return;
|
|
36
|
+
if (Array.isArray(path)) {
|
|
37
|
+
path.forEach((p) => this.watch(p, listener));
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!this.listenerCount(path)) this.#eventSource.watch(path);
|
|
41
|
+
this.on(path, listener);
|
|
42
|
+
}
|
|
43
|
+
#onChange(info) {
|
|
44
|
+
debug("onChange %o", info);
|
|
45
|
+
this.emit("info", "[@eggjs/watcher] Received a change event from eventSource: %j", info);
|
|
46
|
+
const path = info.path;
|
|
47
|
+
for (const p of this.eventNames()) {
|
|
48
|
+
if (typeof p !== "string") continue;
|
|
49
|
+
if (isEqualOrParentPath(p, path)) this.emit(p, info);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
#onFuzzyChange(info) {
|
|
53
|
+
debug("onFuzzyChange %o", info);
|
|
54
|
+
this.emit("info", "[@eggjs/watcher] Received a fuzzy-change event from eventSource: %j", info);
|
|
55
|
+
const path = info.path;
|
|
56
|
+
for (const p of this.eventNames()) {
|
|
57
|
+
if (typeof p !== "string") continue;
|
|
58
|
+
if (isEqualOrParentPath(path, p)) this.emit(p, info);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
//#endregion
|
|
64
|
+
export { Watcher };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { WatcherConfig } from "./config/config.default.js";
|
|
2
|
+
import { Watcher } from "./lib/watcher.js";
|
|
3
|
+
|
|
4
|
+
//#region src/types.d.ts
|
|
5
|
+
declare module "egg" {
|
|
6
|
+
interface EggApplicationCore {
|
|
7
|
+
watcher: Watcher;
|
|
8
|
+
}
|
|
9
|
+
interface EggAppConfig {
|
|
10
|
+
watcher?: WatcherConfig;
|
|
11
|
+
}
|
|
12
|
+
}
|
package/dist/types.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
|
1
|
+
export { };
|
package/package.json
CHANGED
|
@@ -1,43 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/watcher",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
4
|
-
"publishConfig": {
|
|
5
|
-
"access": "public"
|
|
6
|
-
},
|
|
3
|
+
"version": "5.0.0-beta.36",
|
|
7
4
|
"description": "file watcher plugin for egg",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"egg",
|
|
7
|
+
"egg-watcher",
|
|
8
|
+
"watch",
|
|
9
|
+
"watcher"
|
|
10
|
+
],
|
|
8
11
|
"homepage": "https://github.com/eggjs/egg/tree/next/plugins/watcher",
|
|
12
|
+
"license": "MIT",
|
|
9
13
|
"repository": {
|
|
10
14
|
"type": "git",
|
|
11
|
-
"url": "git://github.com/eggjs/egg.git",
|
|
15
|
+
"url": "git+https://github.com/eggjs/egg.git",
|
|
12
16
|
"directory": "plugins/watcher"
|
|
13
17
|
},
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"egg",
|
|
17
|
-
"watcher",
|
|
18
|
-
"watch"
|
|
18
|
+
"files": [
|
|
19
|
+
"dist"
|
|
19
20
|
],
|
|
20
|
-
"engines": {
|
|
21
|
-
"node": ">=22.18.0"
|
|
22
|
-
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"camelcase": "^8.0.0",
|
|
25
|
-
"sdk-base": "^5.0.1",
|
|
26
|
-
"@eggjs/utils": "5.0.0-beta.34"
|
|
27
|
-
},
|
|
28
|
-
"peerDependencies": {
|
|
29
|
-
"egg": "4.1.0-beta.34"
|
|
30
|
-
},
|
|
31
|
-
"devDependencies": {
|
|
32
|
-
"tsdown": "0.15.11",
|
|
33
|
-
"typescript": "^5.9.3",
|
|
34
|
-
"vitest": "4.0.5",
|
|
35
|
-
"@eggjs/mock": "7.0.0-beta.34",
|
|
36
|
-
"@eggjs/tsconfig": "3.1.0-beta.34",
|
|
37
|
-
"egg": "4.1.0-beta.34",
|
|
38
|
-
"@eggjs/utils": "5.0.0-beta.34"
|
|
39
|
-
},
|
|
40
21
|
"type": "module",
|
|
22
|
+
"main": "./dist/index.js",
|
|
23
|
+
"module": "./dist/index.js",
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
41
25
|
"exports": {
|
|
42
26
|
".": "./dist/index.js",
|
|
43
27
|
"./agent": "./dist/agent.js",
|
|
@@ -55,16 +39,27 @@
|
|
|
55
39
|
"./types": "./dist/types.js",
|
|
56
40
|
"./package.json": "./package.json"
|
|
57
41
|
},
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
|
|
61
|
-
"
|
|
62
|
-
|
|
63
|
-
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"camelcase": "^9.0.0",
|
|
47
|
+
"sdk-base": "^5.0.1",
|
|
48
|
+
"@eggjs/utils": "5.0.0-beta.36"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"typescript": "^5.9.3",
|
|
52
|
+
"@eggjs/utils": "5.0.0-beta.36",
|
|
53
|
+
"@eggjs/mock": "7.0.0-beta.36",
|
|
54
|
+
"egg": "4.1.0-beta.36"
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"egg": "4.1.0-beta.36"
|
|
58
|
+
},
|
|
59
|
+
"engines": {
|
|
60
|
+
"node": ">=22.18.0"
|
|
61
|
+
},
|
|
64
62
|
"scripts": {
|
|
65
|
-
"
|
|
66
|
-
"typecheck": "tsc --noEmit",
|
|
67
|
-
"test": "vitest run",
|
|
68
|
-
"build": "tsdown && rimraf dist *.tsbuildinfo && tsc -p tsconfig.build.json"
|
|
63
|
+
"typecheck": "tsgo --noEmit"
|
|
69
64
|
}
|
|
70
65
|
}
|