@eggjs/watcher 5.0.0-beta.20 → 5.0.0-beta.21

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.
Files changed (45) hide show
  1. package/dist/agent.d.ts +2 -2
  2. package/dist/agent.js +3 -10
  3. package/dist/app.d.ts +2 -2
  4. package/dist/app.js +3 -10
  5. package/dist/config/config.default.d.ts +21 -2
  6. package/dist/config/config.default.js +16 -13
  7. package/dist/config/config.local.d.ts +2 -5
  8. package/dist/config/config.local.js +6 -5
  9. package/dist/config/config.unittest.d.ts +2 -5
  10. package/dist/config/config.unittest.js +6 -5
  11. package/dist/index.d.ts +3 -8
  12. package/dist/index.js +4 -9
  13. package/dist/lib/boot.d.ts +6 -2
  14. package/dist/lib/boot.js +30 -6
  15. package/dist/lib/event-sources/base.d.ts +5 -2
  16. package/dist/lib/event-sources/base.js +4 -3
  17. package/dist/lib/event-sources/default.d.ts +6 -3
  18. package/dist/lib/event-sources/default.js +16 -4
  19. package/dist/lib/event-sources/development.d.ts +7 -3
  20. package/dist/lib/event-sources/development.js +97 -4
  21. package/dist/lib/event-sources/index.d.ts +4 -5
  22. package/dist/lib/event-sources/index.js +5 -6
  23. package/dist/lib/utils.d.ts +1 -4
  24. package/dist/lib/utils.js +8 -3
  25. package/dist/lib/watcher.d.ts +19 -2
  26. package/dist/lib/watcher.js +115 -5
  27. package/dist/types.d.ts +10 -3
  28. package/dist/types.js +2 -3
  29. package/package.json +7 -7
  30. package/dist/base-C8f9YO9e.js +0 -7
  31. package/dist/base-DJbFfMBT.d.ts +0 -9
  32. package/dist/boot-0zKWMxhf.js +0 -26
  33. package/dist/boot-DG5R1PH_.d.ts +0 -10
  34. package/dist/config.default-Chl85mlX.d.ts +0 -23
  35. package/dist/default-GKOXgWps.js +0 -19
  36. package/dist/default-HrAUw2OK.d.ts +0 -10
  37. package/dist/development-Dxou8BHR.js +0 -66
  38. package/dist/development-x407-Xwn.d.ts +0 -11
  39. package/dist/event-sources-BjXjuNzX.js +0 -1
  40. package/dist/index-C9nY9t1j.d.ts +0 -1
  41. package/dist/types-CQtQr8gw.js +0 -1
  42. package/dist/types-DWelR7br.d.ts +0 -12
  43. package/dist/utils-BSqdCAAj.js +0 -9
  44. package/dist/watcher-BGaGRNx5.js +0 -63
  45. package/dist/watcher-J8AUQIOb.d.ts +0 -23
package/dist/agent.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- import { Boot } from "./boot-DG5R1PH_.js";
2
- export { Boot as default };
1
+ import { Boot } from './lib/boot.ts';
2
+ export default Boot;
package/dist/agent.js CHANGED
@@ -1,10 +1,3 @@
1
- import "./base-C8f9YO9e.js";
2
- import "./utils-BSqdCAAj.js";
3
- import "./watcher-BGaGRNx5.js";
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 "./boot-DG5R1PH_.js";
2
- export { Boot as default };
1
+ import { Boot } from './lib/boot.ts';
2
+ export default Boot;
package/dist/app.js CHANGED
@@ -1,10 +1,3 @@
1
- import "./base-C8f9YO9e.js";
2
- import "./utils-BSqdCAAj.js";
3
- import "./watcher-BGaGRNx5.js";
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
- import { WatcherConfig, _default } from "../config.default-Chl85mlX.js";
2
- export { WatcherConfig, _default as default };
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 "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
+ 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,6 +1,3 @@
1
- import { PartialEggConfig } from "egg";
2
-
3
- //#region src/config/config.local.d.ts
1
+ import type { PartialEggConfig } from 'egg';
4
2
  declare const _default: PartialEggConfig;
5
- //#endregion
6
- export { _default as default };
3
+ export default _default;
@@ -1,5 +1,6 @@
1
- //#region src/config/config.local.ts
2
- var config_local_default = { watcher: { type: "development" } };
3
-
4
- //#endregion
5
- export { config_local_default as default };
1
+ export default {
2
+ watcher: {
3
+ type: 'development',
4
+ },
5
+ };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmxvY2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbmZpZy9jb25maWcubG9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsZUFBZTtJQUNiLE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxhQUFhO0tBQ3BCO0NBQ2tCLENBQUMifQ==
@@ -1,6 +1,3 @@
1
- import { PartialEggConfig } from "egg";
2
-
3
- //#region src/config/config.unittest.d.ts
1
+ import type { PartialEggConfig } from 'egg';
4
2
  declare const _default: PartialEggConfig;
5
- //#endregion
6
- export { _default as default };
3
+ export default _default;
@@ -1,5 +1,6 @@
1
- //#region src/config/config.unittest.ts
2
- var config_unittest_default = { watcher: { type: "development" } };
3
-
4
- //#endregion
5
- export { config_unittest_default as default };
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 "./config.default-Chl85mlX.js";
2
- import { ChangeInfo, WatchListener, Watcher } from "./watcher-J8AUQIOb.js";
3
- import "./types-DWelR7br.js";
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 { BaseEventSource } from "./base-C8f9YO9e.js";
2
- import "./utils-BSqdCAAj.js";
3
- import { Watcher } from "./watcher-BGaGRNx5.js";
4
- import "./types-CQtQr8gw.js";
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=
@@ -1,2 +1,6 @@
1
- import { Boot } from "../boot-DG5R1PH_.js";
2
- export { Boot };
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 "../base-C8f9YO9e.js";
2
- import "../utils-BSqdCAAj.js";
3
- import "../watcher-BGaGRNx5.js";
4
- import { Boot } from "../boot-0zKWMxhf.js";
5
-
6
- export { Boot };
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,2 +1,5 @@
1
- import { BaseEventSource } from "../../base-DJbFfMBT.js";
2
- export { BaseEventSource };
1
+ import { Base } from 'sdk-base';
2
+ export declare abstract class BaseEventSource extends Base {
3
+ abstract watch(file: string): void;
4
+ abstract unwatch(file: string): void;
5
+ }
@@ -1,3 +1,4 @@
1
- import { BaseEventSource } from "../../base-C8f9YO9e.js";
2
-
3
- export { BaseEventSource };
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 "../../base-DJbFfMBT.js";
2
- import { DefaultEventSource } from "../../default-HrAUw2OK.js";
3
- export { DefaultEventSource as default };
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 "../../base-C8f9YO9e.js";
2
- import { DefaultEventSource } from "../../default-GKOXgWps.js";
3
-
4
- export { DefaultEventSource as default };
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 "../../base-DJbFfMBT.js";
2
- import { DevelopmentEventSource } from "../../development-x407-Xwn.js";
3
- export { DevelopmentEventSource as default };
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 "../../base-C8f9YO9e.js";
2
- import { DevelopmentEventSource } from "../../development-Dxou8BHR.js";
3
-
4
- export { DevelopmentEventSource as default };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2V2ZW50LXNvdXJjZXMvZGV2ZWxvcG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLEVBQUUsRUFBdUMsTUFBTSxTQUFTLENBQUM7QUFFbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUc1QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUVwRSxxQ0FBcUM7QUFDckMsTUFBTSxDQUFDLE9BQU8sT0FBTyxzQkFBdUIsU0FBUSxlQUFlO0lBQ2pFLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztJQUU3QztRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVk7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ1YsS0FBSyxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNoRCxPQUFPO1lBQ1QsQ0FBQztZQUNELEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDbkQsOEVBQThFO1lBQzlFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZFLCtDQUErQztnQkFDL0MsNkNBQTZDO2dCQUM3QyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLENBQUM7WUFDRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUN0QixJQUFJLEVBQ0o7Z0JBQ0UsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFNBQVM7YUFDVixFQUNELENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxFQUFFO2dCQUNsQixLQUFLLENBQUMscUNBQXFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sTUFBTTtvQkFDTixJQUFJLFFBQVEsRUFBRSxDQUFDO3dCQUNiLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDekMsQ0FBQztvQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7WUFDRixvQkFBb0I7WUFDcEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsNkJBQTZCO1lBQzdCLDhDQUE4QztZQUM5QyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSw0REFBNEQsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0YsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsSUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFFbEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLENBQUM7WUFBRSxPQUFPO1FBRWYsZ0JBQWdCO1FBQ2hCLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFxQixFQUFFLElBQVk7UUFDbEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsbURBQW1ELEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUUsT0FBTztRQUNULENBQUM7UUFDRCxxQkFBcUI7UUFDckIsd0RBQXdEO1FBQ3hELFFBQVE7UUFDUixvQkFBb0I7UUFDcEIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZixlQUFlO1FBQ2YsY0FBYztRQUNkLGNBQWM7UUFDZCxvQkFBb0I7UUFDcEIsb0JBQW9CO1FBQ3BCLGVBQWU7UUFDZixnQkFBZ0I7UUFDaEIscURBQXFEO1FBQ3JELHFEQUFxRDtRQUNyRCxxREFBcUQ7UUFDckQsNERBQTREO1FBQzVELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUQsTUFBTSxJQUFJLEdBQUc7WUFDWCxJQUFJLEVBQUUsSUFBSTtZQUNWLEtBQUs7WUFDTCxJQUFJO1lBQ0osV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7U0FDbkIsQ0FBQztRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YifQ==
@@ -1,5 +1,4 @@
1
- import { BaseEventSource } from "../../base-DJbFfMBT.js";
2
- import { DefaultEventSource } from "../../default-HrAUw2OK.js";
3
- import { DevelopmentEventSource } from "../../development-x407-Xwn.js";
4
- import "../../index-C9nY9t1j.js";
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 "../../base-C8f9YO9e.js";
2
- import { DefaultEventSource } from "../../default-GKOXgWps.js";
3
- import { DevelopmentEventSource } from "../../development-Dxou8BHR.js";
4
- import "../../event-sources-BjXjuNzX.js";
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
@@ -1,4 +1 @@
1
- //#region src/lib/utils.d.ts
2
- declare function isEqualOrParentPath(parent: string, child: string): boolean;
3
- //#endregion
4
- export { isEqualOrParentPath };
1
+ export declare function isEqualOrParentPath(parent: string, child: string): boolean;
package/dist/lib/utils.js CHANGED
@@ -1,3 +1,8 @@
1
- import { isEqualOrParentPath } from "../utils-BSqdCAAj.js";
2
-
3
- export { isEqualOrParentPath };
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=
@@ -1,2 +1,19 @@
1
- import { ChangeInfo, WatchListener, Watcher } from "../watcher-J8AUQIOb.js";
2
- export { ChangeInfo, WatchListener, Watcher };
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
+ }
@@ -1,5 +1,115 @@
1
- import "../base-C8f9YO9e.js";
2
- import "../utils-BSqdCAAj.js";
3
- import { Watcher } from "../watcher-BGaGRNx5.js";
4
-
5
- export { Watcher };
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 "./config.default-Chl85mlX.js";
2
- import "./watcher-J8AUQIOb.js";
3
- import "./types-DWelR7br.js";
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
- import "./types-CQtQr8gw.js";
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.20",
3
+ "version": "5.0.0-beta.21",
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.20"
29
+ "@eggjs/utils": "5.0.0-beta.21"
30
30
  },
31
31
  "peerDependencies": {
32
- "egg": "4.1.0-beta.20"
32
+ "egg": "4.1.0-beta.21"
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.20",
39
- "@eggjs/tsconfig": "3.1.0-beta.20",
40
- "@eggjs/utils": "5.0.0-beta.20"
38
+ "@eggjs/tsconfig": "3.1.0-beta.21",
39
+ "@eggjs/mock": "7.0.0-beta.21",
40
+ "@eggjs/utils": "5.0.0-beta.21"
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
  }
@@ -1,7 +0,0 @@
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,9 +0,0 @@
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;
7
- }
8
- //#endregion
9
- export { BaseEventSource };
@@ -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 };
@@ -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 };
@@ -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 { };
@@ -1 +0,0 @@
1
- export { };
@@ -1 +0,0 @@
1
- export { };
@@ -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
- }
@@ -1,9 +0,0 @@
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("..");
6
- }
7
-
8
- //#endregion
9
- export { isEqualOrParentPath };
@@ -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 };