@eggjs/watcher 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +147 -0
- package/dist/commonjs/agent.d.ts +2 -0
- package/dist/commonjs/agent.js +5 -0
- package/dist/commonjs/app.d.ts +2 -0
- package/dist/commonjs/app.js +5 -0
- package/dist/commonjs/config/config.default.d.ts +15 -0
- package/dist/commonjs/config/config.default.js +22 -0
- package/dist/commonjs/config/config.local.d.ts +6 -0
- package/dist/commonjs/config/config.local.js +8 -0
- package/dist/commonjs/config/config.unittest.d.ts +6 -0
- package/dist/commonjs/config/config.unittest.js +8 -0
- package/dist/commonjs/index.d.ts +3 -0
- package/dist/commonjs/index.js +20 -0
- package/dist/commonjs/lib/boot.d.ts +6 -0
- package/dist/commonjs/lib/boot.js +23 -0
- package/dist/commonjs/lib/event-sources/base.d.ts +5 -0
- package/dist/commonjs/lib/event-sources/base.js +8 -0
- package/dist/commonjs/lib/event-sources/default.d.ts +6 -0
- package/dist/commonjs/lib/event-sources/default.js +19 -0
- package/dist/commonjs/lib/event-sources/development.d.ts +7 -0
- package/dist/commonjs/lib/event-sources/development.js +101 -0
- package/dist/commonjs/lib/event-sources/index.d.ts +3 -0
- package/dist/commonjs/lib/event-sources/index.js +20 -0
- package/dist/commonjs/lib/types.d.ts +33 -0
- package/dist/commonjs/lib/types.js +3 -0
- package/dist/commonjs/lib/utils.d.ts +2 -0
- package/dist/commonjs/lib/utils.js +25 -0
- package/dist/commonjs/lib/watcher.d.ts +9 -0
- package/dist/commonjs/lib/watcher.js +111 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/esm/agent.d.ts +2 -0
- package/dist/esm/agent.js +3 -0
- package/dist/esm/app.d.ts +2 -0
- package/dist/esm/app.js +3 -0
- package/dist/esm/config/config.default.d.ts +15 -0
- package/dist/esm/config/config.default.js +17 -0
- package/dist/esm/config/config.local.d.ts +6 -0
- package/dist/esm/config/config.local.js +6 -0
- package/dist/esm/config/config.unittest.d.ts +6 -0
- package/dist/esm/config/config.unittest.js +6 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/lib/boot.d.ts +6 -0
- package/dist/esm/lib/boot.js +19 -0
- package/dist/esm/lib/event-sources/base.d.ts +5 -0
- package/dist/esm/lib/event-sources/base.js +4 -0
- package/dist/esm/lib/event-sources/default.d.ts +6 -0
- package/dist/esm/lib/event-sources/default.js +16 -0
- package/dist/esm/lib/event-sources/development.d.ts +7 -0
- package/dist/esm/lib/event-sources/development.js +95 -0
- package/dist/esm/lib/event-sources/index.d.ts +3 -0
- package/dist/esm/lib/event-sources/index.js +4 -0
- package/dist/esm/lib/types.d.ts +33 -0
- package/dist/esm/lib/types.js +2 -0
- package/dist/esm/lib/utils.d.ts +2 -0
- package/dist/esm/lib/utils.js +18 -0
- package/dist/esm/lib/watcher.d.ts +9 -0
- package/dist/esm/lib/watcher.js +104 -0
- package/dist/esm/package.json +3 -0
- package/dist/package.json +4 -0
- package/package.json +83 -0
- package/src/agent.ts +3 -0
- package/src/app.ts +3 -0
- package/src/config/config.default.ts +17 -0
- package/src/config/config.local.ts +5 -0
- package/src/config/config.unittest.ts +5 -0
- package/src/index.ts +3 -0
- package/src/lib/boot.ts +22 -0
- package/src/lib/event-sources/base.ts +6 -0
- package/src/lib/event-sources/default.ts +18 -0
- package/src/lib/event-sources/development.ts +99 -0
- package/src/lib/event-sources/index.ts +3 -0
- package/src/lib/types.ts +35 -0
- package/src/lib/utils.ts +20 -0
- package/src/lib/watcher.ts +117 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2016-present Alibaba Group Holding Limited and other contributors.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# @eggjs/watcher
|
|
2
|
+
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[](https://github.com/eggjs/egg-watcher/actions/workflows/nodejs.yml)
|
|
5
|
+
[![Test coverage][codecov-image]][codecov-url]
|
|
6
|
+
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
7
|
+
[![npm download][download-image]][download-url]
|
|
8
|
+
[](https://nodejs.org/en/download/)
|
|
9
|
+
|
|
10
|
+
[npm-image]: https://img.shields.io/npm/v/egg-watcher.svg?style=flat-square
|
|
11
|
+
[npm-url]: https://npmjs.org/package/egg-watcher
|
|
12
|
+
[codecov-image]: https://codecov.io/github/eggjs/egg-watcher/coverage.svg?branch=master
|
|
13
|
+
[codecov-url]: https://codecov.io/github/eggjs/egg-watcher?branch=master
|
|
14
|
+
[snyk-image]: https://snyk.io/test/npm/egg-watcher/badge.svg?style=flat-square
|
|
15
|
+
[snyk-url]: https://snyk.io/test/npm/egg-watcher
|
|
16
|
+
[download-image]: https://img.shields.io/npm/dm/egg-watcher.svg?style=flat-square
|
|
17
|
+
[download-url]: https://npmjs.org/package/egg-watcher
|
|
18
|
+
|
|
19
|
+
File watcher plugin for egg
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
In worker process:
|
|
24
|
+
|
|
25
|
+
### app.watcher.watch(path, listener)
|
|
26
|
+
|
|
27
|
+
Start watching file(s).
|
|
28
|
+
|
|
29
|
+
- path(String|Array): file path(s)
|
|
30
|
+
- listener(Function): file change callback
|
|
31
|
+
|
|
32
|
+
### app.watcher.unwatch(path[, listener])
|
|
33
|
+
|
|
34
|
+
Stop watching file(s).
|
|
35
|
+
|
|
36
|
+
- path(String|Array): file path(s)
|
|
37
|
+
- listener(Function): file change callback
|
|
38
|
+
|
|
39
|
+
In agent process:
|
|
40
|
+
|
|
41
|
+
### agent.watcher.watch(path, listener)
|
|
42
|
+
|
|
43
|
+
Start watching file(s).
|
|
44
|
+
|
|
45
|
+
- path(String|Array): file path(s)
|
|
46
|
+
- listener(Function): file change callback
|
|
47
|
+
|
|
48
|
+
### agent.watcher.unwatch(path[, listener])
|
|
49
|
+
|
|
50
|
+
Stop watching file(s).
|
|
51
|
+
|
|
52
|
+
- path(String|Array): file path(s)
|
|
53
|
+
- listener(Function): file change callback
|
|
54
|
+
|
|
55
|
+
## Watching mode
|
|
56
|
+
|
|
57
|
+
### `development` Mode
|
|
58
|
+
|
|
59
|
+
There's a built-in [development mode](https://github.com/eggjs/egg-watcher/blob/master/src/lib/event-sources/development.ts) which works in local(env is `local`). Once files on disk is modified it will emit a `change` event immediately.
|
|
60
|
+
|
|
61
|
+
### Customize Watching Mode
|
|
62
|
+
|
|
63
|
+
Say we want to build a custom event source plugin (package name: `egg-watcher-custom`, eggPlugin.name: `watcherCustom`).
|
|
64
|
+
|
|
65
|
+
Firstly define our custom event source like this:
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
// {plugin_root}/lib/custom_event_source.js
|
|
69
|
+
import { Base } from 'sdk-base';
|
|
70
|
+
|
|
71
|
+
export default class CustomEventSource extends Base {
|
|
72
|
+
// `opts` comes from app.config[${eventSourceName}]
|
|
73
|
+
// `eventSourceName` will be registered later in
|
|
74
|
+
// `config.watcher.eventSources` as the key shown below
|
|
75
|
+
constructor(opts) {
|
|
76
|
+
super(opts);
|
|
77
|
+
this.ready(true);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
watch(path) {
|
|
81
|
+
// replace this with your desired way of watching,
|
|
82
|
+
// when aware of any change, emit a `change` event
|
|
83
|
+
// with an info object containing `path` property
|
|
84
|
+
// specifying the changed directory or file.
|
|
85
|
+
this._h = setInterval(() => {
|
|
86
|
+
this.emit('change', { path });
|
|
87
|
+
}, 1000);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
unwatch() {
|
|
91
|
+
// replace this with your implementation
|
|
92
|
+
if (this._h) {
|
|
93
|
+
clearInterval(this._h);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Event source implementations varies according to your running environment. When working with vagrant, docker, samba or such other non-standard way of development, you should use a different watch API specific to what you are working with.
|
|
100
|
+
|
|
101
|
+
Then add your custom event source to config:
|
|
102
|
+
|
|
103
|
+
```js
|
|
104
|
+
// config/config.default.js
|
|
105
|
+
import CustomEventSource from '../lib/custom_event_source';
|
|
106
|
+
|
|
107
|
+
export default {
|
|
108
|
+
watcher: {
|
|
109
|
+
eventSources: {
|
|
110
|
+
custom: CustomEventSource,
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Choose to use your custom watching mode in your desired env.
|
|
117
|
+
|
|
118
|
+
```js
|
|
119
|
+
// config/config.${env}.js
|
|
120
|
+
|
|
121
|
+
export default {
|
|
122
|
+
watcher: {
|
|
123
|
+
type: 'custom',
|
|
124
|
+
},
|
|
125
|
+
|
|
126
|
+
// this will pass to your CustomEventSource constructor as opts
|
|
127
|
+
watcherCustom: {
|
|
128
|
+
// foo: 'bar',
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
If possible, plugins named like `egg-watcher-${customName}`(`egg-watcher-vagrant` eg.) are recommended.
|
|
134
|
+
|
|
135
|
+
## Questions & Suggestions
|
|
136
|
+
|
|
137
|
+
Please open an issue [here](https://github.com/eggjs/egg/issues).
|
|
138
|
+
|
|
139
|
+
## License
|
|
140
|
+
|
|
141
|
+
[MIT](LICENSE)
|
|
142
|
+
|
|
143
|
+
## Contributors
|
|
144
|
+
|
|
145
|
+
[](https://github.com/eggjs/egg-watcher/graphs/contributors)
|
|
146
|
+
|
|
147
|
+
Made with [contributors-img](https://contrib.rocks).
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const boot_js_1 = require("./lib/boot.js");
|
|
4
|
+
exports.default = boot_js_1.Boot;
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQ0FBcUM7QUFFckMsa0JBQWUsY0FBSSxDQUFDIn0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const boot_js_1 = require("./lib/boot.js");
|
|
4
|
+
exports.default = boot_js_1.Boot;
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDJDQUFxQztBQUVyQyxrQkFBZSxjQUFJLENBQUMifQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
/**
|
|
3
|
+
* watcher options
|
|
4
|
+
* @member Config#watcher
|
|
5
|
+
* @property {string} type - event source type
|
|
6
|
+
*/
|
|
7
|
+
watcher: {
|
|
8
|
+
type: string;
|
|
9
|
+
eventSources: {
|
|
10
|
+
default: string;
|
|
11
|
+
development: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
7
|
+
const utils_js_1 = require("../lib/utils.js");
|
|
8
|
+
exports.default = {
|
|
9
|
+
/**
|
|
10
|
+
* watcher options
|
|
11
|
+
* @member Config#watcher
|
|
12
|
+
* @property {string} type - event source type
|
|
13
|
+
*/
|
|
14
|
+
watcher: {
|
|
15
|
+
type: 'default', // default event source
|
|
16
|
+
eventSources: {
|
|
17
|
+
default: node_path_1.default.join((0, utils_js_1.getSourceDirname)(), 'lib', 'event-sources', 'default'),
|
|
18
|
+
development: node_path_1.default.join((0, utils_js_1.getSourceDirname)(), 'lib', 'event-sources', 'development'),
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMERBQTZCO0FBQzdCLDhDQUFtRDtBQUVuRCxrQkFBZTtJQUNiOzs7O09BSUc7SUFDSCxPQUFPLEVBQUU7UUFDUCxJQUFJLEVBQUUsU0FBUyxFQUFFLHVCQUF1QjtRQUN4QyxZQUFZLEVBQUU7WUFDWixPQUFPLEVBQUUsbUJBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSwyQkFBZ0IsR0FBRSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDO1lBQ3pFLFdBQVcsRUFBRSxtQkFBSSxDQUFDLElBQUksQ0FBQyxJQUFBLDJCQUFnQixHQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxhQUFhLENBQUM7U0FDbEY7S0FDRjtDQUNGLENBQUMifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = {
|
|
4
|
+
watcher: {
|
|
5
|
+
type: 'development',
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmxvY2FsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9jb25maWcubG9jYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZTtJQUNiLE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxhQUFhO0tBQ3BCO0NBQ0YsQ0FBQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = {
|
|
4
|
+
watcher: {
|
|
5
|
+
type: 'development',
|
|
6
|
+
},
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLnVuaXR0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9jb25maWcudW5pdHRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZTtJQUNiLE9BQU8sRUFBRTtRQUNQLElBQUksRUFBRSxhQUFhO0tBQ3BCO0NBQ0YsQ0FBQyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./lib/types.js"), exports);
|
|
18
|
+
__exportStar(require("./lib/watcher.js"), exports);
|
|
19
|
+
__exportStar(require("./lib/event-sources/index.js"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUErQjtBQUMvQixtREFBaUM7QUFDakMsK0RBQTZDIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Boot = void 0;
|
|
4
|
+
const watcher_js_1 = require("./watcher.js");
|
|
5
|
+
class Boot {
|
|
6
|
+
#app;
|
|
7
|
+
#watcher;
|
|
8
|
+
constructor(appOrAgent) {
|
|
9
|
+
this.#app = appOrAgent;
|
|
10
|
+
this.#watcher = this.#app.watcher = this.#app.cluster(watcher_js_1.Watcher, {})
|
|
11
|
+
.delegate('watch', 'subscribe')
|
|
12
|
+
.create(appOrAgent.config)
|
|
13
|
+
.on('info', (msg, ...args) => this.#app.coreLogger.info(msg, ...args))
|
|
14
|
+
.on('warn', (msg, ...args) => this.#app.coreLogger.warn(msg, ...args))
|
|
15
|
+
.on('error', (msg, ...args) => this.#app.coreLogger.error(msg, ...args));
|
|
16
|
+
}
|
|
17
|
+
async didLoad() {
|
|
18
|
+
await this.#watcher.ready();
|
|
19
|
+
this.#app.coreLogger.info('[@eggjs/watcher:%s] watcher start success', this.#app.type);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.Boot = Boot;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYm9vdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw2Q0FBdUM7QUFFdkMsTUFBYSxJQUFJO0lBQ2YsSUFBSSxDQUFzQjtJQUMxQixRQUFRLENBQVU7SUFFbEIsWUFBWSxVQUErQjtRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztRQUN2QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFPLEVBQUUsRUFBRSxDQUFDO2FBQy9ELFFBQVEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDO2FBQzlCLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQ3pCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFXLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQzthQUNwRixFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBVyxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7YUFDcEYsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0FDRjtBQWxCRCxvQkFrQkMifQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseEventSource = void 0;
|
|
4
|
+
const sdk_base_1 = require("sdk-base");
|
|
5
|
+
class BaseEventSource extends sdk_base_1.Base {
|
|
6
|
+
}
|
|
7
|
+
exports.BaseEventSource = BaseEventSource;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZXZlbnQtc291cmNlcy9iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVDQUFnQztBQUVoQyxNQUFzQixlQUFnQixTQUFRLGVBQUk7Q0FHakQ7QUFIRCwwQ0FHQyJ9
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const base_js_1 = require("./base.js");
|
|
4
|
+
class DefaultEventSource extends base_js_1.BaseEventSource {
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
// delay emit so that can be listened
|
|
8
|
+
setImmediate(() => this.emit('info', '[@eggjs/watcher] defaultEventSource watcher will NOT take effect'));
|
|
9
|
+
this.ready(true);
|
|
10
|
+
}
|
|
11
|
+
watch() {
|
|
12
|
+
this.emit('info', '[@eggjs/watcher] using defaultEventSource watcher.watch() does NOTHING');
|
|
13
|
+
}
|
|
14
|
+
unwatch() {
|
|
15
|
+
this.emit('info', '[@eggjs/watcher] using defaultEventSource watcher.unwatch() does NOTHING');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.default = DefaultEventSource;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZXZlbnQtc291cmNlcy9kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsdUNBQTRDO0FBRTVDLE1BQXFCLGtCQUFtQixTQUFRLHlCQUFlO0lBQzdEO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixxQ0FBcUM7UUFDckMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGtFQUFrRSxDQUFDLENBQUMsQ0FBQztRQUMxRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsd0VBQXdFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLDBFQUEwRSxDQUFDLENBQUM7SUFDaEcsQ0FBQztDQUNGO0FBZkQscUNBZUMifQ==
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_util_1 = require("node:util");
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const base_js_1 = require("./base.js");
|
|
10
|
+
const debug = (0, node_util_1.debuglog)('@eggjs/watcher/lib/event-sources/development');
|
|
11
|
+
// only used by local dev environment
|
|
12
|
+
class DevelopmentEventSource extends base_js_1.BaseEventSource {
|
|
13
|
+
#fileWatching = new Map();
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
this.ready(true);
|
|
17
|
+
}
|
|
18
|
+
watch(file) {
|
|
19
|
+
try {
|
|
20
|
+
const stat = node_fs_1.default.statSync(file, { throwIfNoEntry: false });
|
|
21
|
+
if (!stat) {
|
|
22
|
+
debug('watch %o ignore, file not exists', file);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
debug('watch %o, isFile: %o', file, stat.isFile());
|
|
26
|
+
// https://nodejs.org/docs/latest/api/fs.html#fswatchfilename-options-listener
|
|
27
|
+
let recursive = true;
|
|
28
|
+
if (process.platform === 'linux' && process.version.startsWith('v18.')) {
|
|
29
|
+
// https://github.com/fgnass/filewatcher/pull/6
|
|
30
|
+
// disable recursive on linux + Node.js <= 18
|
|
31
|
+
recursive = false;
|
|
32
|
+
}
|
|
33
|
+
const handler = node_fs_1.default.watch(file, {
|
|
34
|
+
persistent: true,
|
|
35
|
+
recursive,
|
|
36
|
+
}, (event, filename) => {
|
|
37
|
+
debug('watch %o => event: %o, filename: %o', file, event, filename);
|
|
38
|
+
let changePath = file;
|
|
39
|
+
if (stat.isFile()) {
|
|
40
|
+
this.#onFsWatchChange(event, changePath);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// dir
|
|
44
|
+
if (filename) {
|
|
45
|
+
changePath = node_path_1.default.join(file, filename);
|
|
46
|
+
}
|
|
47
|
+
this.#onFsWatchChange(event, changePath);
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// 保存 handler,用于解除监听
|
|
51
|
+
this.#fileWatching.set(file, handler);
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
// file not exist, do nothing
|
|
55
|
+
// do not emit error, in case of too many logs
|
|
56
|
+
this.emit('warn', '[@eggjs/watcher:DevelopmentEventSource] watch %o error: %s', file, e);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
unwatch(file) {
|
|
60
|
+
if (!file)
|
|
61
|
+
return;
|
|
62
|
+
const h = this.#fileWatching.get(file);
|
|
63
|
+
if (!h)
|
|
64
|
+
return;
|
|
65
|
+
// fs.watch 文件监听
|
|
66
|
+
h.removeAllListeners();
|
|
67
|
+
h.close();
|
|
68
|
+
this.#fileWatching.delete(file);
|
|
69
|
+
}
|
|
70
|
+
#onFsWatchChange(event, file) {
|
|
71
|
+
if (!file) {
|
|
72
|
+
this.emit('warn', '[@eggjs/watcher:DevelopmentEventSource] event: %o', event);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
// { event: 'change',
|
|
76
|
+
// path: '/Users/mk2/git/changing/test/fixtures/foo.js',
|
|
77
|
+
// stat:
|
|
78
|
+
// { dev: 16777220,
|
|
79
|
+
// mode: 33188,
|
|
80
|
+
// nlink: 1,
|
|
81
|
+
// uid: 501,
|
|
82
|
+
// gid: 20,
|
|
83
|
+
// rdev: 0,
|
|
84
|
+
// blksize: 4096,
|
|
85
|
+
// ino: 72656587,
|
|
86
|
+
// size: 11,
|
|
87
|
+
// blocks: 8,
|
|
88
|
+
// atime: Wed Jun 17 2015 00:08:11 GMT+0800 (CST),
|
|
89
|
+
// mtime: Wed Jun 17 2015 00:08:38 GMT+0800 (CST),
|
|
90
|
+
// ctime: Wed Jun 17 2015 00:08:38 GMT+0800 (CST),
|
|
91
|
+
// birthtime: Tue Jun 16 2015 23:19:13 GMT+0800 (CST) } }
|
|
92
|
+
const info = {
|
|
93
|
+
path: file,
|
|
94
|
+
event,
|
|
95
|
+
stat: node_fs_1.default.statSync(file, { throwIfNoEntry: false }),
|
|
96
|
+
};
|
|
97
|
+
this.emit('change', info);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.default = DevelopmentEventSource;
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2V2ZW50LXNvdXJjZXMvZGV2ZWxvcG1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5Q0FBcUM7QUFDckMsMERBQTZCO0FBQzdCLHNEQUF3RDtBQUN4RCx1Q0FBNEM7QUFHNUMsTUFBTSxLQUFLLEdBQUcsSUFBQSxvQkFBUSxFQUFDLDhDQUE4QyxDQUFDLENBQUM7QUFFdkUscUNBQXFDO0FBQ3JDLE1BQXFCLHNCQUF1QixTQUFRLHlCQUFlO0lBQ2pFLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztJQUU3QztRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQVk7UUFDaEIsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLEdBQUcsaUJBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTztZQUNULENBQUM7WUFDRCxLQUFLLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELDhFQUE4RTtZQUM5RSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN2RSwrQ0FBK0M7Z0JBQy9DLDZDQUE2QztnQkFDN0MsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNwQixDQUFDO1lBQ0QsTUFB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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base.js"), exports);
|
|
18
|
+
__exportStar(require("./default.js"), exports);
|
|
19
|
+
__exportStar(require("./development.js"), exports);
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2V2ZW50LXNvdXJjZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDRDQUEwQjtBQUMxQiwrQ0FBNkI7QUFDN0IsbURBQWlDIn0=
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { WatchEventType, Stats } from 'node:fs';
|
|
2
|
+
import type { Watcher } from './watcher.js';
|
|
3
|
+
export interface WatcherConfig {
|
|
4
|
+
watcher: {
|
|
5
|
+
type: string;
|
|
6
|
+
eventSources: Record<string, string>;
|
|
7
|
+
};
|
|
8
|
+
[key: string]: Record<string, any>;
|
|
9
|
+
}
|
|
10
|
+
export interface ChangeInfo {
|
|
11
|
+
event: WatchEventType;
|
|
12
|
+
/**
|
|
13
|
+
* file stat if path exists
|
|
14
|
+
*/
|
|
15
|
+
stat?: Stats;
|
|
16
|
+
path: string;
|
|
17
|
+
}
|
|
18
|
+
declare module 'egg' {
|
|
19
|
+
interface EggWatcherAgent {
|
|
20
|
+
watcher: Watcher;
|
|
21
|
+
}
|
|
22
|
+
interface Agent extends EggWatcherAgent {
|
|
23
|
+
}
|
|
24
|
+
interface EggWatcherApplication {
|
|
25
|
+
watcher: Watcher;
|
|
26
|
+
}
|
|
27
|
+
interface Application extends EggWatcherApplication {
|
|
28
|
+
}
|
|
29
|
+
interface EggWatcherAppConfig extends WatcherConfig {
|
|
30
|
+
}
|
|
31
|
+
interface EggAppConfig extends EggWatcherAppConfig {
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isEqualOrParentPath = isEqualOrParentPath;
|
|
7
|
+
exports.getSourceDirname = getSourceDirname;
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_url_1 = require("node:url");
|
|
10
|
+
// judge if parent is child's parent path
|
|
11
|
+
// isEqualOrParentPath('/foo', '/foo/bar') => true
|
|
12
|
+
// isEqualOrParentPath('/foo/bar', '/foo') => false
|
|
13
|
+
function isEqualOrParentPath(parent, child) {
|
|
14
|
+
return !node_path_1.default.relative(parent, child).startsWith('..');
|
|
15
|
+
}
|
|
16
|
+
function getSourceDirname() {
|
|
17
|
+
if (typeof __dirname === 'string') {
|
|
18
|
+
return node_path_1.default.dirname(__dirname);
|
|
19
|
+
}
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
const __filename = (0, node_url_1.fileURLToPath)('import_meta_url_placeholder_by_tshy_after');
|
|
23
|
+
return node_path_1.default.dirname(node_path_1.default.dirname(__filename));
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBTUEsa0RBRUM7QUFFRCw0Q0FTQztBQW5CRCwwREFBNkI7QUFDN0IsdUNBQXlDO0FBRXpDLHlDQUF5QztBQUN6QyxrREFBa0Q7QUFDbEQsbURBQW1EO0FBQ25ELFNBQWdCLG1CQUFtQixDQUFDLE1BQWMsRUFBRSxLQUFhO0lBQy9ELE9BQU8sQ0FBQyxtQkFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCxTQUFnQixnQkFBZ0I7SUFDOUIsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxPQUFPLG1CQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE1BQU0sVUFBVSxHQUFHLElBQUEsd0JBQWEsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELE9BQU8sbUJBQUksQ0FBQyxPQUFPLENBQUMsbUJBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUNoRCxDQUFDIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Base } from 'sdk-base';
|
|
2
|
+
import type { ChangeInfo, WatcherConfig } from './types.js';
|
|
3
|
+
export type WatchListener = (info: ChangeInfo) => void;
|
|
4
|
+
export declare class Watcher extends Base {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(config: WatcherConfig);
|
|
7
|
+
protected _init(): Promise<void>;
|
|
8
|
+
watch(path: string | string[], listener: WatchListener): void;
|
|
9
|
+
}
|