@eggjs/watcher 5.0.0-beta.20 → 5.0.0-beta.22
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 +3 -10
- package/dist/app.d.ts +2 -2
- package/dist/app.js +3 -10
- package/dist/config/config.default.d.ts +21 -2
- package/dist/config/config.default.js +16 -13
- package/dist/config/config.local.d.ts +2 -5
- package/dist/config/config.local.js +6 -5
- package/dist/config/config.unittest.d.ts +2 -5
- package/dist/config/config.unittest.js +6 -5
- package/dist/index.d.ts +3 -8
- package/dist/index.js +4 -9
- package/dist/lib/boot.d.ts +6 -2
- package/dist/lib/boot.js +30 -6
- package/dist/lib/event-sources/base.d.ts +5 -2
- package/dist/lib/event-sources/base.js +4 -3
- package/dist/lib/event-sources/default.d.ts +6 -3
- package/dist/lib/event-sources/default.js +16 -4
- package/dist/lib/event-sources/development.d.ts +7 -3
- package/dist/lib/event-sources/development.js +97 -4
- package/dist/lib/event-sources/index.d.ts +4 -5
- package/dist/lib/event-sources/index.js +5 -6
- package/dist/lib/utils.d.ts +1 -4
- package/dist/lib/utils.js +8 -3
- package/dist/lib/watcher.d.ts +19 -2
- package/dist/lib/watcher.js +115 -5
- package/dist/types.d.ts +10 -3
- package/dist/types.js +2 -3
- package/package.json +7 -7
- package/dist/base-C8f9YO9e.js +0 -7
- package/dist/base-DJbFfMBT.d.ts +0 -9
- package/dist/boot-0zKWMxhf.js +0 -26
- package/dist/boot-DG5R1PH_.d.ts +0 -10
- package/dist/config.default-Chl85mlX.d.ts +0 -23
- package/dist/default-GKOXgWps.js +0 -19
- package/dist/default-HrAUw2OK.d.ts +0 -10
- package/dist/development-Dxou8BHR.js +0 -66
- package/dist/development-x407-Xwn.d.ts +0 -11
- package/dist/event-sources-BjXjuNzX.js +0 -1
- package/dist/index-C9nY9t1j.d.ts +0 -1
- package/dist/types-CQtQr8gw.js +0 -1
- package/dist/types-DWelR7br.d.ts +0 -12
- package/dist/utils-BSqdCAAj.js +0 -9
- package/dist/watcher-BGaGRNx5.js +0 -63
- package/dist/watcher-J8AUQIOb.d.ts +0 -23
package/dist/agent.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Boot } from
|
|
2
|
-
export
|
|
1
|
+
import { Boot } from './lib/boot.ts';
|
|
2
|
+
export default Boot;
|
package/dist/agent.js
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { Boot } from "./boot-0zKWMxhf.js";
|
|
5
|
-
|
|
6
|
-
//#region src/agent.ts
|
|
7
|
-
var agent_default = Boot;
|
|
8
|
-
|
|
9
|
-
//#endregion
|
|
10
|
-
export { agent_default as default };
|
|
1
|
+
import { Boot } from "./lib/boot.js";
|
|
2
|
+
export default Boot;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyQyxlQUFlLElBQUksQ0FBQyJ9
|
package/dist/app.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Boot } from
|
|
2
|
-
export
|
|
1
|
+
import { Boot } from './lib/boot.ts';
|
|
2
|
+
export default Boot;
|
package/dist/app.js
CHANGED
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
import "./
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { Boot } from "./boot-0zKWMxhf.js";
|
|
5
|
-
|
|
6
|
-
//#region src/app.ts
|
|
7
|
-
var app_default = Boot;
|
|
8
|
-
|
|
9
|
-
//#endregion
|
|
10
|
-
export { app_default as default };
|
|
1
|
+
import { Boot } from "./lib/boot.js";
|
|
2
|
+
export default Boot;
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXJDLGVBQWUsSUFBSSxDQUFDIn0=
|
|
@@ -1,2 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
export interface WatcherConfig {
|
|
2
|
+
/**
|
|
3
|
+
* event source type, default is `default`
|
|
4
|
+
* can be `default` or `development`
|
|
5
|
+
*/
|
|
6
|
+
type: string;
|
|
7
|
+
/**
|
|
8
|
+
* event sources
|
|
9
|
+
* key is event source type, value is event source module path
|
|
10
|
+
*/
|
|
11
|
+
eventSources: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: {
|
|
14
|
+
/**
|
|
15
|
+
* watcher options
|
|
16
|
+
* @member Config#watcher
|
|
17
|
+
* @property {string} type - event source type
|
|
18
|
+
*/
|
|
19
|
+
watcher: WatcherConfig;
|
|
20
|
+
};
|
|
21
|
+
export default _default;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
export default {
|
|
3
|
+
/**
|
|
4
|
+
* watcher options
|
|
5
|
+
* @member Config#watcher
|
|
6
|
+
* @property {string} type - event source type
|
|
7
|
+
*/
|
|
8
|
+
watcher: {
|
|
9
|
+
type: 'default', // default event source
|
|
10
|
+
eventSources: {
|
|
11
|
+
default: path.join(import.meta.dirname, '../lib/event-sources/default'),
|
|
12
|
+
development: path.join(import.meta.dirname, '../lib/event-sources/development'),
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQWU3QixlQUFlO0lBQ2I7Ozs7T0FJRztJQUNILE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxTQUFTLEVBQUUsdUJBQXVCO1FBQ3hDLFlBQVksRUFBRTtZQUNaLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDhCQUE4QixDQUFDO1lBQ3ZFLFdBQVcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtDQUFrQyxDQUFDO1NBQ2hGO0tBQ2U7Q0FDbkIsQ0FBQyJ9
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export default {
|
|
2
|
+
watcher: {
|
|
3
|
+
type: 'development',
|
|
4
|
+
},
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmxvY2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWcubG9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZUFBZTtJQUNiLE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxhQUFhO0tBQ3BCO0NBQ2tCLENBQUMifQ==
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export default {
|
|
2
|
+
watcher: {
|
|
3
|
+
type: 'development',
|
|
4
|
+
},
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnVuaXR0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWcudW5pdHRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZUFBZTtJQUNiLE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxhQUFhO0tBQ3BCO0NBQ2tCLENBQUMifQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { BaseEventSource } from "./base-DJbFfMBT.js";
|
|
5
|
-
import { DefaultEventSource } from "./default-HrAUw2OK.js";
|
|
6
|
-
import { DevelopmentEventSource } from "./development-x407-Xwn.js";
|
|
7
|
-
import "./index-C9nY9t1j.js";
|
|
8
|
-
export { BaseEventSource, ChangeInfo, DefaultEventSource, DevelopmentEventSource, WatchListener, Watcher };
|
|
1
|
+
import './types.ts';
|
|
2
|
+
export * from './lib/watcher.ts';
|
|
3
|
+
export * from './lib/event-sources/index.ts';
|
package/dist/index.js
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { DefaultEventSource } from "./default-GKOXgWps.js";
|
|
6
|
-
import { DevelopmentEventSource } from "./development-Dxou8BHR.js";
|
|
7
|
-
import "./event-sources-BjXjuNzX.js";
|
|
8
|
-
|
|
9
|
-
export { BaseEventSource, DefaultEventSource, DevelopmentEventSource, Watcher };
|
|
1
|
+
import "./types.js";
|
|
2
|
+
export * from "./lib/watcher.js";
|
|
3
|
+
export * from "./lib/event-sources/index.js";
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxZQUFZLENBQUM7QUFFcEIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLDhCQUE4QixDQUFDIn0=
|
package/dist/lib/boot.d.ts
CHANGED
|
@@ -1,2 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import type { ILifecycleBoot, EggApplicationCore } from 'egg';
|
|
2
|
+
export declare class Boot implements ILifecycleBoot {
|
|
3
|
+
#private;
|
|
4
|
+
constructor(appOrAgent: EggApplicationCore);
|
|
5
|
+
didLoad(): Promise<void>;
|
|
6
|
+
}
|
package/dist/lib/boot.js
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import { Watcher } from "./watcher.js";
|
|
3
|
+
const debug = debuglog('egg/watcher/lib/boot');
|
|
4
|
+
export class Boot {
|
|
5
|
+
#app;
|
|
6
|
+
constructor(appOrAgent) {
|
|
7
|
+
this.#app = appOrAgent;
|
|
8
|
+
if (this.#app.options.mode === 'all-in-one-process') {
|
|
9
|
+
debug('init watcher in all-in-one-process mode');
|
|
10
|
+
// FIXME: should use single instance of Watcher for all-in-one-process mode, avoid network port listen
|
|
11
|
+
this.#app.watcher = new Watcher(appOrAgent.config);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
debug('init watcher in cluster mode');
|
|
15
|
+
this.#app.watcher = this.#app
|
|
16
|
+
.clusterWrapper(Watcher, {})
|
|
17
|
+
.delegate('watch', 'subscribe')
|
|
18
|
+
.create(appOrAgent.config);
|
|
19
|
+
}
|
|
20
|
+
this.#app.watcher
|
|
21
|
+
.on('info', (msg, ...args) => this.#app.coreLogger.info(msg, ...args))
|
|
22
|
+
.on('warn', (msg, ...args) => this.#app.coreLogger.warn(msg, ...args))
|
|
23
|
+
.on('error', (msg, ...args) => this.#app.coreLogger.error(msg, ...args));
|
|
24
|
+
}
|
|
25
|
+
async didLoad() {
|
|
26
|
+
await this.#app.watcher.ready();
|
|
27
|
+
this.#app.coreLogger.info('[@eggjs/watcher:%s] watcher start success', this.#app.type);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYm9vdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXJDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFdkMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFFL0MsTUFBTSxPQUFPLElBQUk7SUFDZixJQUFJLENBQXFCO0lBRXpCLFlBQVksVUFBOEI7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztZQUNwRCxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUNqRCxzR0FBc0c7WUFDdEcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JELENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUk7aUJBQzFCLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2lCQUMzQixRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQztpQkFDOUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2FBQ2QsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ3BGLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUNwRixFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0FDRiJ9
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { Base } from 'sdk-base';
|
|
2
|
+
export class BaseEventSource extends Base {
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZXZlbnQtc291cmNlcy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFaEMsTUFBTSxPQUFnQixlQUFnQixTQUFRLElBQUk7Q0FHakQifQ==
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { BaseEventSource } from './base.ts';
|
|
2
|
+
export default class DefaultEventSource extends BaseEventSource {
|
|
3
|
+
constructor();
|
|
4
|
+
watch(): void;
|
|
5
|
+
unwatch(): void;
|
|
6
|
+
}
|
|
@@ -1,4 +1,16 @@
|
|
|
1
|
-
import "
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { BaseEventSource } from "./base.js";
|
|
2
|
+
export default class DefaultEventSource extends BaseEventSource {
|
|
3
|
+
constructor() {
|
|
4
|
+
super();
|
|
5
|
+
// delay emit so that can be listened
|
|
6
|
+
setImmediate(() => this.emit('info', '[@eggjs/watcher] defaultEventSource watcher will NOT take effect'));
|
|
7
|
+
this.ready(true);
|
|
8
|
+
}
|
|
9
|
+
watch() {
|
|
10
|
+
this.emit('info', '[@eggjs/watcher] using defaultEventSource watcher.watch() does NOTHING');
|
|
11
|
+
}
|
|
12
|
+
unwatch() {
|
|
13
|
+
this.emit('info', '[@eggjs/watcher] using defaultEventSource watcher.unwatch() does NOTHING');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvZXZlbnQtc291cmNlcy9kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFNUMsTUFBTSxDQUFDLE9BQU8sT0FBTyxrQkFBbUIsU0FBUSxlQUFlO0lBQzdEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixxQ0FBcUM7UUFDckMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGtFQUFrRSxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsd0VBQXdFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLDBFQUEwRSxDQUFDLENBQUM7SUFDaEcsQ0FBQztDQUNGIn0=
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { BaseEventSource } from './base.ts';
|
|
2
|
+
export default class DevelopmentEventSource extends BaseEventSource {
|
|
3
|
+
#private;
|
|
4
|
+
constructor();
|
|
5
|
+
watch(file: string): void;
|
|
6
|
+
unwatch(file: string): void;
|
|
7
|
+
}
|
|
@@ -1,4 +1,97 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fs, {} from 'node:fs';
|
|
4
|
+
import { BaseEventSource } from "./base.js";
|
|
5
|
+
const debug = debuglog('egg-watcher/lib/event-sources/development');
|
|
6
|
+
// only used by local dev environment
|
|
7
|
+
export default class DevelopmentEventSource extends BaseEventSource {
|
|
8
|
+
#fileWatching = new Map();
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
this.ready(true);
|
|
12
|
+
}
|
|
13
|
+
watch(file) {
|
|
14
|
+
try {
|
|
15
|
+
const stat = fs.statSync(file, { throwIfNoEntry: false });
|
|
16
|
+
if (!stat) {
|
|
17
|
+
debug('watch %o ignore, file not exists', file);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
debug('watch %o, isFile: %o', file, stat.isFile());
|
|
21
|
+
// https://nodejs.org/docs/latest/api/fs.html#fswatchfilename-options-listener
|
|
22
|
+
let recursive = true;
|
|
23
|
+
if (process.platform === 'linux' && process.version.startsWith('v18.')) {
|
|
24
|
+
// https://github.com/fgnass/filewatcher/pull/6
|
|
25
|
+
// disable recursive on linux + Node.js <= 18
|
|
26
|
+
recursive = false;
|
|
27
|
+
}
|
|
28
|
+
const handler = fs.watch(file, {
|
|
29
|
+
persistent: true,
|
|
30
|
+
recursive,
|
|
31
|
+
}, (event, filename) => {
|
|
32
|
+
debug('watch %o => event: %o, filename: %o', file, event, filename);
|
|
33
|
+
let changePath = file;
|
|
34
|
+
if (stat.isFile()) {
|
|
35
|
+
this.#onFsWatchChange(event, changePath);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// dir
|
|
39
|
+
if (filename) {
|
|
40
|
+
changePath = path.join(file, filename);
|
|
41
|
+
}
|
|
42
|
+
this.#onFsWatchChange(event, changePath);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
// 保存 handler,用于解除监听
|
|
46
|
+
this.#fileWatching.set(file, handler);
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
// file not exist, do nothing
|
|
50
|
+
// do not emit error, in case of too many logs
|
|
51
|
+
this.emit('warn', '[@eggjs/watcher:DevelopmentEventSource] watch %o error: %s', file, e);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
unwatch(file) {
|
|
55
|
+
if (!file)
|
|
56
|
+
return;
|
|
57
|
+
const h = this.#fileWatching.get(file);
|
|
58
|
+
if (!h)
|
|
59
|
+
return;
|
|
60
|
+
// fs.watch 文件监听
|
|
61
|
+
h.removeAllListeners();
|
|
62
|
+
h.close();
|
|
63
|
+
this.#fileWatching.delete(file);
|
|
64
|
+
}
|
|
65
|
+
#onFsWatchChange(event, file) {
|
|
66
|
+
if (!file) {
|
|
67
|
+
this.emit('warn', '[@eggjs/watcher:DevelopmentEventSource] event: %o', event);
|
|
68
|
+
return;
|
|
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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
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { BaseEventSource } from
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
export { BaseEventSource, DefaultEventSource, DevelopmentEventSource };
|
|
1
|
+
import { BaseEventSource } from './base.ts';
|
|
2
|
+
import DefaultEventSource from './default.ts';
|
|
3
|
+
import DevelopmentEventSource from './development.ts';
|
|
4
|
+
export { BaseEventSource, DefaultEventSource, DevelopmentEventSource };
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { BaseEventSource } from "
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
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 };
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LXNvdXJjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1QyxPQUFPLGtCQUFrQixNQUFNLGNBQWMsQ0FBQztBQUM5QyxPQUFPLHNCQUFzQixNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyJ9
|
package/dist/lib/utils.d.ts
CHANGED
package/dist/lib/utils.js
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
// judge if parent is child's parent path
|
|
3
|
+
// isEqualOrParentPath('/foo', '/foo/bar') => true
|
|
4
|
+
// isEqualOrParentPath('/foo/bar', '/foo') => false
|
|
5
|
+
export function isEqualOrParentPath(parent, child) {
|
|
6
|
+
return !path.relative(parent, child).startsWith('..');
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUU3Qix5Q0FBeUM7QUFDekMsa0RBQWtEO0FBQ2xELG1EQUFtRDtBQUNuRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsTUFBYyxFQUFFLEtBQWE7SUFDL0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDIn0=
|
package/dist/lib/watcher.d.ts
CHANGED
|
@@ -1,2 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import type { WatchEventType, Stats } from 'node:fs';
|
|
2
|
+
import { Base } from 'sdk-base';
|
|
3
|
+
import type { EggAppConfig } from 'egg';
|
|
4
|
+
export interface ChangeInfo extends Record<string, any> {
|
|
5
|
+
event: WatchEventType;
|
|
6
|
+
/**
|
|
7
|
+
* file stat if path exists
|
|
8
|
+
*/
|
|
9
|
+
stat?: Stats;
|
|
10
|
+
path: string;
|
|
11
|
+
isDirectory?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export type WatchListener = (info: ChangeInfo) => void;
|
|
14
|
+
export declare class Watcher extends Base {
|
|
15
|
+
#private;
|
|
16
|
+
constructor(config: EggAppConfig);
|
|
17
|
+
protected _init(): Promise<void>;
|
|
18
|
+
watch(path: string | string[], listener: WatchListener): void;
|
|
19
|
+
}
|
package/dist/lib/watcher.js
CHANGED
|
@@ -1,5 +1,115 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
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";
|
|
6
|
+
import { isEqualOrParentPath } from "./utils.js";
|
|
7
|
+
const debug = debuglog('egg/watcher/lib/watcher');
|
|
8
|
+
export class Watcher extends Base {
|
|
9
|
+
#config;
|
|
10
|
+
#eventSource;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
super({
|
|
13
|
+
initMethod: '_init',
|
|
14
|
+
});
|
|
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
|
+
// If watcher config is not defined, skip initialization
|
|
22
|
+
debug('watcherType is not defined, skip initialization');
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
let EventSource = this.#config.watcher?.eventSources[watcherType];
|
|
26
|
+
if (typeof EventSource === 'string') {
|
|
27
|
+
EventSource = await importModule(EventSource, {
|
|
28
|
+
importDefaultOnly: true,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// chokidar => watcherChokidar
|
|
32
|
+
// custom => watcherCustom
|
|
33
|
+
//
|
|
34
|
+
// e.g:
|
|
35
|
+
// config => { watcher: { type: 'custom' }, watcherCustom: { ... } }
|
|
36
|
+
const key = camelcase(['watcher', watcherType]);
|
|
37
|
+
const eventSourceOptions = this.#config[key] ?? {};
|
|
38
|
+
this.#eventSource = Reflect.construct(EventSource, [eventSourceOptions]);
|
|
39
|
+
this.#eventSource
|
|
40
|
+
.on('change', this.#onChange.bind(this))
|
|
41
|
+
.on('fuzzy-change', this.#onFuzzyChange.bind(this))
|
|
42
|
+
.on('info', (...args) => this.emit('info', ...args))
|
|
43
|
+
.on('warn', (...args) => this.emit('warn', ...args))
|
|
44
|
+
.on('error', (...args) => this.emit('error', ...args));
|
|
45
|
+
await this.#eventSource.ready();
|
|
46
|
+
}
|
|
47
|
+
watch(path, listener) {
|
|
48
|
+
debug('watch %o', path);
|
|
49
|
+
this.emit('info', '[@eggjs/watcher] Start watching: %j', path);
|
|
50
|
+
if (!path)
|
|
51
|
+
return;
|
|
52
|
+
// support array
|
|
53
|
+
if (Array.isArray(path)) {
|
|
54
|
+
path.forEach(p => this.watch(p, listener));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// one file only watch once
|
|
58
|
+
if (!this.listenerCount(path)) {
|
|
59
|
+
this.#eventSource.watch(path);
|
|
60
|
+
}
|
|
61
|
+
this.on(path, listener);
|
|
62
|
+
}
|
|
63
|
+
/*
|
|
64
|
+
// TODO wait unsubscribe implementation of cluster-client
|
|
65
|
+
unwatch(path, callback) {
|
|
66
|
+
if (!path) return;
|
|
67
|
+
|
|
68
|
+
// support array
|
|
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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
|
package/dist/types.d.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
|
|
1
|
+
import type { Watcher } from './lib/watcher.ts';
|
|
2
|
+
import type { WatcherConfig } from './config/config.default.ts';
|
|
3
|
+
declare module 'egg' {
|
|
4
|
+
interface EggApplicationCore {
|
|
5
|
+
watcher: Watcher;
|
|
6
|
+
}
|
|
7
|
+
interface EggAppConfig {
|
|
8
|
+
watcher?: WatcherConfig;
|
|
9
|
+
}
|
|
10
|
+
}
|
package/dist/types.js
CHANGED
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export { };
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/watcher",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.22",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -26,18 +26,18 @@
|
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"camelcase": "^8.0.0",
|
|
28
28
|
"sdk-base": "^5.0.1",
|
|
29
|
-
"@eggjs/utils": "5.0.0-beta.
|
|
29
|
+
"@eggjs/utils": "5.0.0-beta.22"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
|
-
"egg": "4.1.0-beta.
|
|
32
|
+
"egg": "4.1.0-beta.22"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"tsdown": "^0.15.4",
|
|
36
36
|
"typescript": "^5.9.3",
|
|
37
37
|
"vitest": "4.0.0-beta.16",
|
|
38
|
-
"@eggjs/mock": "7.0.0-beta.
|
|
39
|
-
"@eggjs/tsconfig": "3.1.0-beta.
|
|
40
|
-
"@eggjs/utils": "5.0.0-beta.
|
|
38
|
+
"@eggjs/mock": "7.0.0-beta.22",
|
|
39
|
+
"@eggjs/tsconfig": "3.1.0-beta.22",
|
|
40
|
+
"@eggjs/utils": "5.0.0-beta.22"
|
|
41
41
|
},
|
|
42
42
|
"type": "module",
|
|
43
43
|
"exports": {
|
|
@@ -67,6 +67,6 @@
|
|
|
67
67
|
"lint": "oxlint --type-aware",
|
|
68
68
|
"typecheck": "tsc --noEmit",
|
|
69
69
|
"test": "vitest run",
|
|
70
|
-
"build": "tsdown"
|
|
70
|
+
"build": "tsdown && rimraf dist && tsc -b --clean && tsc"
|
|
71
71
|
}
|
|
72
72
|
}
|
package/dist/base-C8f9YO9e.js
DELETED
package/dist/base-DJbFfMBT.d.ts
DELETED
package/dist/boot-0zKWMxhf.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Watcher } from "./watcher-BGaGRNx5.js";
|
|
2
|
-
import { debuglog } from "node:util";
|
|
3
|
-
|
|
4
|
-
//#region src/lib/boot.ts
|
|
5
|
-
const debug = debuglog("egg/watcher/lib/boot");
|
|
6
|
-
var Boot = class {
|
|
7
|
-
#app;
|
|
8
|
-
constructor(appOrAgent) {
|
|
9
|
-
this.#app = appOrAgent;
|
|
10
|
-
if (this.#app.options.mode === "all-in-one-process") {
|
|
11
|
-
debug("init watcher in all-in-one-process mode");
|
|
12
|
-
this.#app.watcher = new Watcher(appOrAgent.config);
|
|
13
|
-
} else {
|
|
14
|
-
debug("init watcher in cluster mode");
|
|
15
|
-
this.#app.watcher = this.#app.clusterWrapper(Watcher, {}).delegate("watch", "subscribe").create(appOrAgent.config);
|
|
16
|
-
}
|
|
17
|
-
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));
|
|
18
|
-
}
|
|
19
|
-
async didLoad() {
|
|
20
|
-
await this.#app.watcher.ready();
|
|
21
|
-
this.#app.coreLogger.info("[@eggjs/watcher:%s] watcher start success", this.#app.type);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
//#endregion
|
|
26
|
-
export { Boot };
|
package/dist/boot-DG5R1PH_.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
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>;
|
|
8
|
-
}
|
|
9
|
-
//#endregion
|
|
10
|
-
export { Boot };
|
|
@@ -1,23 +0,0 @@
|
|
|
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>;
|
|
13
|
-
}
|
|
14
|
-
declare const _default: {
|
|
15
|
-
/**
|
|
16
|
-
* watcher options
|
|
17
|
-
* @member Config#watcher
|
|
18
|
-
* @property {string} type - event source type
|
|
19
|
-
*/
|
|
20
|
-
watcher: WatcherConfig;
|
|
21
|
-
};
|
|
22
|
-
//#endregion
|
|
23
|
-
export { WatcherConfig, _default };
|
package/dist/default-GKOXgWps.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { BaseEventSource } from "./base-C8f9YO9e.js";
|
|
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 };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { BaseEventSource } from "./base-DJbFfMBT.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;
|
|
8
|
-
}
|
|
9
|
-
//#endregion
|
|
10
|
-
export { DefaultEventSource };
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { BaseEventSource } from "./base-C8f9YO9e.js";
|
|
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 };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { BaseEventSource } from "./base-DJbFfMBT.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;
|
|
9
|
-
}
|
|
10
|
-
//#endregion
|
|
11
|
-
export { DevelopmentEventSource };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { };
|
package/dist/index-C9nY9t1j.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { };
|
package/dist/types-CQtQr8gw.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { };
|
package/dist/types-DWelR7br.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { WatcherConfig } from "./config.default-Chl85mlX.js";
|
|
2
|
-
import { Watcher } from "./watcher-J8AUQIOb.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/utils-BSqdCAAj.js
DELETED
package/dist/watcher-BGaGRNx5.js
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { isEqualOrParentPath } from "./utils-BSqdCAAj.js";
|
|
2
|
-
import { debuglog } from "node:util";
|
|
3
|
-
import { Base } from "sdk-base";
|
|
4
|
-
import camelcase from "camelcase";
|
|
5
|
-
import { importModule } from "@eggjs/utils";
|
|
6
|
-
|
|
7
|
-
//#region src/lib/watcher.ts
|
|
8
|
-
const debug = debuglog("egg/watcher/lib/watcher");
|
|
9
|
-
var Watcher = class extends Base {
|
|
10
|
-
#config;
|
|
11
|
-
#eventSource;
|
|
12
|
-
constructor(config) {
|
|
13
|
-
super({ initMethod: "_init" });
|
|
14
|
-
this.#config = config;
|
|
15
|
-
}
|
|
16
|
-
async _init() {
|
|
17
|
-
const watcherType = this.#config.watcher?.type;
|
|
18
|
-
debug("init with watcherType %o", watcherType);
|
|
19
|
-
if (!watcherType) {
|
|
20
|
-
debug("watcherType is not defined, skip initialization");
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
let EventSource = this.#config.watcher?.eventSources[watcherType];
|
|
24
|
-
if (typeof EventSource === "string") EventSource = await importModule(EventSource, { importDefaultOnly: true });
|
|
25
|
-
const key = camelcase(["watcher", watcherType]);
|
|
26
|
-
const eventSourceOptions = this.#config[key] ?? {};
|
|
27
|
-
this.#eventSource = Reflect.construct(EventSource, [eventSourceOptions]);
|
|
28
|
-
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));
|
|
29
|
-
await this.#eventSource.ready();
|
|
30
|
-
}
|
|
31
|
-
watch(path, listener) {
|
|
32
|
-
debug("watch %o", path);
|
|
33
|
-
this.emit("info", "[@eggjs/watcher] Start watching: %j", path);
|
|
34
|
-
if (!path) return;
|
|
35
|
-
if (Array.isArray(path)) {
|
|
36
|
-
path.forEach((p) => this.watch(p, listener));
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
if (!this.listenerCount(path)) this.#eventSource.watch(path);
|
|
40
|
-
this.on(path, listener);
|
|
41
|
-
}
|
|
42
|
-
#onChange(info) {
|
|
43
|
-
debug("onChange %o", info);
|
|
44
|
-
this.emit("info", "[@eggjs/watcher] Received a change event from eventSource: %j", info);
|
|
45
|
-
const path = info.path;
|
|
46
|
-
for (const p of this.eventNames()) {
|
|
47
|
-
if (typeof p !== "string") continue;
|
|
48
|
-
if (isEqualOrParentPath(p, path)) this.emit(p, info);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
#onFuzzyChange(info) {
|
|
52
|
-
debug("onFuzzyChange %o", info);
|
|
53
|
-
this.emit("info", "[@eggjs/watcher] Received a fuzzy-change event from eventSource: %j", info);
|
|
54
|
-
const path = info.path;
|
|
55
|
-
for (const p of this.eventNames()) {
|
|
56
|
-
if (typeof p !== "string") continue;
|
|
57
|
-
if (isEqualOrParentPath(path, p)) this.emit(p, info);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
//#endregion
|
|
63
|
-
export { Watcher };
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Base } from "sdk-base";
|
|
2
|
-
import { Stats, WatchEventType } from "node:fs";
|
|
3
|
-
import { EggAppConfig } from "egg";
|
|
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;
|
|
14
|
-
}
|
|
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;
|
|
21
|
-
}
|
|
22
|
-
//#endregion
|
|
23
|
-
export { ChangeInfo, WatchListener, Watcher };
|