@eggjs/development 4.0.0 → 4.0.1-beta.2
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/README.md +9 -13
- package/dist/agent.d.ts +11 -0
- package/dist/agent.js +80 -0
- package/dist/app/middleware/egg_loader_trace.d.ts +6 -0
- package/dist/app/middleware/egg_loader_trace.js +37 -0
- package/dist/app.d.ts +10 -0
- package/dist/app.js +14 -0
- package/dist/{commonjs/config → config}/config.default.d.ts +7 -3
- package/dist/config/config.default.js +23 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/{src/types.ts → dist/types.d.ts} +5 -4
- package/dist/types.js +1 -0
- package/dist/utils.d.ts +4 -0
- package/dist/utils.js +7 -0
- package/package.json +44 -65
- package/dist/commonjs/agent.d.ts +0 -7
- package/dist/commonjs/agent.js +0 -98
- package/dist/commonjs/app/middleware/egg_loader_trace.d.ts +0 -3
- package/dist/commonjs/app/middleware/egg_loader_trace.js +0 -44
- package/dist/commonjs/app.d.ts +0 -6
- package/dist/commonjs/app.js +0 -17
- package/dist/commonjs/config/config.default.js +0 -24
- package/dist/commonjs/config/loader_trace.html +0 -49
- package/dist/commonjs/index.d.ts +0 -1
- package/dist/commonjs/index.js +0 -4
- package/dist/commonjs/package.json +0 -3
- package/dist/commonjs/types.d.ts +0 -35
- package/dist/commonjs/types.js +0 -3
- package/dist/commonjs/utils.d.ts +0 -3
- package/dist/commonjs/utils.js +0 -25
- package/dist/esm/agent.d.ts +0 -7
- package/dist/esm/agent.js +0 -92
- package/dist/esm/app/middleware/egg_loader_trace.d.ts +0 -3
- package/dist/esm/app/middleware/egg_loader_trace.js +0 -39
- package/dist/esm/app.d.ts +0 -6
- package/dist/esm/app.js +0 -14
- package/dist/esm/config/config.default.d.ts +0 -15
- package/dist/esm/config/config.default.js +0 -22
- package/dist/esm/config/loader_trace.html +0 -49
- package/dist/esm/index.d.ts +0 -1
- package/dist/esm/index.js +0 -2
- package/dist/esm/package.json +0 -3
- package/dist/esm/types.d.ts +0 -35
- package/dist/esm/types.js +0 -2
- package/dist/esm/utils.d.ts +0 -3
- package/dist/esm/utils.js +0 -17
- package/dist/package.json +0 -4
- package/src/agent.ts +0 -106
- package/src/app/middleware/egg_loader_trace.ts +0 -39
- package/src/app.ts +0 -17
- package/src/config/config.default.ts +0 -23
- package/src/config/loader_trace.html +0 -49
- package/src/index.ts +0 -1
- package/src/typings/index.d.ts +0 -4
- package/src/utils.ts +0 -19
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
/**
|
|
4
|
-
* @member Config#development
|
|
5
|
-
* @property {Array} watchDirs - dirs needed watch, when files under these change, application will reload, use relative path
|
|
6
|
-
* @property {Array} ignoreDirs - dirs don't need watch, including subdirectories, use relative path
|
|
7
|
-
* @property {Boolean} fastReady - don't wait all plugins ready, default is false.
|
|
8
|
-
* @property {Boolean} reloadOnDebug - whether reload on debug, default is true.
|
|
9
|
-
* @property {Boolean} overrideDefault - whether override default watchDirs, default is false.
|
|
10
|
-
* @property {Boolean} overrideIgnore - whether override default ignoreDirs, default is false.
|
|
11
|
-
* @property {Array|String} reloadPattern - whether to reload, use https://github.com/sindresorhus/multimatch
|
|
12
|
-
*/
|
|
13
|
-
exports.default = {
|
|
14
|
-
development: {
|
|
15
|
-
watchDirs: [],
|
|
16
|
-
ignoreDirs: [],
|
|
17
|
-
fastReady: false,
|
|
18
|
-
reloadOnDebug: true,
|
|
19
|
-
overrideDefault: false,
|
|
20
|
-
overrideIgnore: false,
|
|
21
|
-
reloadPattern: undefined,
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUE7Ozs7Ozs7OztHQVNHO0FBQ0gsa0JBQWU7SUFDYixXQUFXLEVBQUU7UUFDWCxTQUFTLEVBQUUsRUFBRTtRQUNiLFVBQVUsRUFBRSxFQUFFO1FBQ2QsU0FBUyxFQUFFLEtBQUs7UUFDaEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsY0FBYyxFQUFFLEtBQUs7UUFDckIsYUFBYSxFQUFFLFNBQVM7S0FDSjtDQUN2QixDQUFDIn0=
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<title></title>
|
|
5
|
-
</head>
|
|
6
|
-
<body>
|
|
7
|
-
<div id="mountNode"></div>
|
|
8
|
-
<script src="https://gw.alipayobjects.com/os/antv/assets/g2/3.0.9/g2.min.js"></script>
|
|
9
|
-
<script>
|
|
10
|
-
var data = {{placeholder}};
|
|
11
|
-
|
|
12
|
-
const chart = new G2.Chart({
|
|
13
|
-
container: 'mountNode', // 指定图表容器 ID
|
|
14
|
-
height: data.length * 22, // 指定图表高度
|
|
15
|
-
forceFit: true,
|
|
16
|
-
padding: 'auto',
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
// Step 2: 载入数据源
|
|
20
|
-
chart.source(data, {
|
|
21
|
-
range: {
|
|
22
|
-
type: 'time',
|
|
23
|
-
mask: 'HH:mm:ss',
|
|
24
|
-
nice: true,
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
chart
|
|
28
|
-
.coord()
|
|
29
|
-
.transpose()
|
|
30
|
-
.scale(1, -1);
|
|
31
|
-
|
|
32
|
-
chart.legend({ position: 'top' });
|
|
33
|
-
|
|
34
|
-
chart.tooltip({
|
|
35
|
-
showTitle: false,
|
|
36
|
-
itemTpl: '<li>{duration}ms: {name} </li>'
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
chart
|
|
40
|
-
.interval()
|
|
41
|
-
.position('title*range')
|
|
42
|
-
.color('type')
|
|
43
|
-
.tooltip('name*duration', (name, duration) => ({ name, duration }))
|
|
44
|
-
.size(5);
|
|
45
|
-
|
|
46
|
-
chart.render();
|
|
47
|
-
</script>
|
|
48
|
-
</body>
|
|
49
|
-
</html>
|
package/dist/commonjs/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import './types.js';
|
package/dist/commonjs/index.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
require("./types.js");
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQkFBb0IifQ==
|
package/dist/commonjs/types.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export interface DevelopmentConfig {
|
|
2
|
-
/**
|
|
3
|
-
* dirs needed watch, when files under these change, application will reload, use relative path
|
|
4
|
-
*/
|
|
5
|
-
watchDirs: string[];
|
|
6
|
-
/**
|
|
7
|
-
* dirs don't need watch, including subdirectories, use relative path
|
|
8
|
-
*/
|
|
9
|
-
ignoreDirs: string[];
|
|
10
|
-
/**
|
|
11
|
-
* don't wait all plugins ready, default is false.
|
|
12
|
-
*/
|
|
13
|
-
fastReady: boolean;
|
|
14
|
-
/**
|
|
15
|
-
* whether reload on debug, default is true.
|
|
16
|
-
*/
|
|
17
|
-
reloadOnDebug: boolean;
|
|
18
|
-
/**
|
|
19
|
-
* whether override default watchDirs, default is false.
|
|
20
|
-
*/
|
|
21
|
-
overrideDefault: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* whether override default ignoreDirs, default is false.
|
|
24
|
-
*/
|
|
25
|
-
overrideIgnore: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* whether to reload, use https://github.com/sindresorhus/multimatch
|
|
28
|
-
*/
|
|
29
|
-
reloadPattern?: string[] | string;
|
|
30
|
-
}
|
|
31
|
-
declare module '@eggjs/core' {
|
|
32
|
-
interface EggAppConfig {
|
|
33
|
-
development: DevelopmentConfig;
|
|
34
|
-
}
|
|
35
|
-
}
|
package/dist/commonjs/types.js
DELETED
package/dist/commonjs/utils.d.ts
DELETED
package/dist/commonjs/utils.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
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.getSourceDirname = getSourceDirname;
|
|
7
|
-
exports.getSourceFile = getSourceFile;
|
|
8
|
-
exports.isTimingFile = isTimingFile;
|
|
9
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
-
const node_url_1 = require("node:url");
|
|
11
|
-
function getSourceDirname() {
|
|
12
|
-
if (typeof __dirname !== 'undefined') {
|
|
13
|
-
return node_path_1.default.dirname(__dirname);
|
|
14
|
-
}
|
|
15
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
16
|
-
// @ts-ignore
|
|
17
|
-
return node_path_1.default.dirname((0, node_url_1.fileURLToPath)('import_meta_url_placeholder_by_tshy_after'));
|
|
18
|
-
}
|
|
19
|
-
function getSourceFile(filename) {
|
|
20
|
-
return node_path_1.default.join(getSourceDirname(), filename);
|
|
21
|
-
}
|
|
22
|
-
function isTimingFile(file) {
|
|
23
|
-
return /^(agent|application)_timing/.test(file);
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSw0Q0FPQztBQUVELHNDQUVDO0FBRUQsb0NBRUM7QUFsQkQsMERBQTZCO0FBQzdCLHVDQUF5QztBQUV6QyxTQUFnQixnQkFBZ0I7SUFDOUIsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUNyQyxPQUFPLG1CQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCw2REFBNkQ7SUFDN0QsYUFBYTtJQUNiLE9BQU8sbUJBQUksQ0FBQyxPQUFPLENBQUMsSUFBQSx3QkFBYSxFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsU0FBZ0IsYUFBYSxDQUFDLFFBQWdCO0lBQzVDLE9BQU8sbUJBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLElBQVk7SUFDdkMsT0FBTyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsQ0FBQyJ9
|
package/dist/esm/agent.d.ts
DELETED
package/dist/esm/agent.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import fs from 'node:fs/promises';
|
|
3
|
-
import debounce from 'debounce';
|
|
4
|
-
import multimatch from 'multimatch';
|
|
5
|
-
import { exists } from 'utility';
|
|
6
|
-
import { isTimingFile } from './utils.js';
|
|
7
|
-
export default class AgentBoot {
|
|
8
|
-
#agent;
|
|
9
|
-
constructor(agent) {
|
|
10
|
-
this.#agent = agent;
|
|
11
|
-
}
|
|
12
|
-
async didLoad() {
|
|
13
|
-
// clean all timing json
|
|
14
|
-
const rundir = this.#agent.config.rundir;
|
|
15
|
-
const stat = await exists(rundir);
|
|
16
|
-
if (!stat)
|
|
17
|
-
return;
|
|
18
|
-
const files = await fs.readdir(rundir);
|
|
19
|
-
for (const file of files) {
|
|
20
|
-
if (!isTimingFile(file))
|
|
21
|
-
continue;
|
|
22
|
-
await fs.rm(path.join(rundir, file), { force: true, recursive: true });
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
async serverDidReady() {
|
|
26
|
-
const agent = this.#agent;
|
|
27
|
-
// single process mode don't watch and reload
|
|
28
|
-
if (agent.options && Reflect.get(agent.options, 'mode') === 'single') {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const logger = agent.logger;
|
|
32
|
-
const baseDir = agent.config.baseDir;
|
|
33
|
-
const config = agent.config.development;
|
|
34
|
-
let watchDirs = config.overrideDefault ? [] : [
|
|
35
|
-
'app',
|
|
36
|
-
'config',
|
|
37
|
-
'mocks',
|
|
38
|
-
'mocks_proxy',
|
|
39
|
-
'app.js',
|
|
40
|
-
];
|
|
41
|
-
watchDirs = watchDirs.concat(config.watchDirs).map(dir => path.resolve(baseDir, dir));
|
|
42
|
-
let ignoreReloadFileDirs = config.overrideIgnore ? [] : [
|
|
43
|
-
'app/views',
|
|
44
|
-
'app/view',
|
|
45
|
-
'app/assets',
|
|
46
|
-
'app/public',
|
|
47
|
-
'app/web',
|
|
48
|
-
];
|
|
49
|
-
ignoreReloadFileDirs = ignoreReloadFileDirs.concat(config.ignoreDirs).map(dir => path.resolve(baseDir, dir));
|
|
50
|
-
const reloadFile = debounce(function (info) {
|
|
51
|
-
logger.warn(`[agent:development] reload worker because ${info.path} ${info.event}`);
|
|
52
|
-
process.send({
|
|
53
|
-
to: 'master',
|
|
54
|
-
action: 'reload-worker',
|
|
55
|
-
});
|
|
56
|
-
}, 200);
|
|
57
|
-
// watch dirs to reload worker, will debounce 200ms
|
|
58
|
-
/**
|
|
59
|
-
* reload app worker:
|
|
60
|
-
* [AgentWorker] - on file change
|
|
61
|
-
* |-> emit reload-worker
|
|
62
|
-
* [Master] - receive reload-worker event
|
|
63
|
-
* |-> TODO: Mark worker will die
|
|
64
|
-
* |-> Fork new worker
|
|
65
|
-
* |-> kill old worker
|
|
66
|
-
*
|
|
67
|
-
* @param {Object} info - changed fileInfo
|
|
68
|
-
*/
|
|
69
|
-
agent.watcher.watch(watchDirs, info => {
|
|
70
|
-
if (!config.reloadOnDebug) {
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
if (isAssetsDir(info.path) || info.isDirectory) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
// don't reload if don't match
|
|
77
|
-
if (config.reloadPattern && multimatch(info.path, config.reloadPattern).length === 0) {
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
reloadFile(info);
|
|
81
|
-
});
|
|
82
|
-
function isAssetsDir(filepath) {
|
|
83
|
-
for (const ignorePath of ignoreReloadFileDirs) {
|
|
84
|
-
if (filepath.startsWith(ignorePath)) {
|
|
85
|
-
return true;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return false;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xDLE9BQU8sUUFBUSxNQUFNLFVBQVUsQ0FBQztBQUNoQyxPQUFPLFVBQVUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVqQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTFDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FBUztJQUM1QixNQUFNLENBQVU7SUFFaEIsWUFBWSxLQUFjO1FBQ3hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTztRQUNYLHdCQUF3QjtRQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekMsTUFBTSxJQUFJLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dCQUFFLFNBQVM7WUFDbEMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDMUIsNkNBQTZDO1FBQzdDLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDckUsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzVCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRXhDLElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUMsS0FBSztZQUNMLFFBQVE7WUFDUixPQUFPO1lBQ1AsYUFBYTtZQUNiLFFBQVE7U0FDVCxDQUFDO1FBRUYsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFdEYsSUFBSSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RELFdBQVc7WUFDWCxVQUFVO1lBQ1YsWUFBWTtZQUNaLFlBQVk7WUFDWixTQUFTO1NBQ1YsQ0FBQztRQUVGLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3RyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBUyxJQUFJO1lBQ3ZDLE1BQU0sQ0FBQyxJQUFJLENBQUMsNkNBQTZDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFFcEYsT0FBTyxDQUFDLElBQUssQ0FBQztnQkFDWixFQUFFLEVBQUUsUUFBUTtnQkFDWixNQUFNLEVBQUUsZUFBZTthQUN4QixDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixtREFBbUQ7UUFDbkQ7Ozs7Ozs7Ozs7V0FVRztRQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxQixPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQy9DLE9BQU87WUFDVCxDQUFDO1lBRUQsOEJBQThCO1lBQzlCLElBQUksTUFBTSxDQUFDLGFBQWEsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNyRixPQUFPO1lBQ1QsQ0FBQztZQUVELFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUVILFNBQVMsV0FBVyxDQUFDLFFBQWdCO1lBQ25DLEtBQUssTUFBTSxVQUFVLElBQUksb0JBQW9CLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import fs from 'node:fs/promises';
|
|
3
|
-
import { readJSON } from 'utility';
|
|
4
|
-
import { getSourceFile, isTimingFile } from '../../utils.js';
|
|
5
|
-
export default (_, app) => {
|
|
6
|
-
return async (ctx, next) => {
|
|
7
|
-
if (ctx.path !== '/__loader_trace__') {
|
|
8
|
-
return await next();
|
|
9
|
-
}
|
|
10
|
-
const template = await fs.readFile(getSourceFile('config/loader_trace.html'), 'utf8');
|
|
11
|
-
const data = await loadTimingData(app);
|
|
12
|
-
ctx.body = template.replace('{{placeholder}}', JSON.stringify(data));
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
async function loadTimingData(app) {
|
|
16
|
-
const rundir = app.config.rundir;
|
|
17
|
-
const files = await fs.readdir(rundir);
|
|
18
|
-
const data = [];
|
|
19
|
-
for (const file of files) {
|
|
20
|
-
if (!isTimingFile(file))
|
|
21
|
-
continue;
|
|
22
|
-
const json = await readJSON(path.join(rundir, file));
|
|
23
|
-
const isAgent = /^agent/.test(file);
|
|
24
|
-
for (const item of json) {
|
|
25
|
-
if (isAgent) {
|
|
26
|
-
item.type = 'agent';
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
item.type = `app_${item.pid}`;
|
|
30
|
-
}
|
|
31
|
-
item.pid = String(item.pid);
|
|
32
|
-
item.range = [item.start, item.end];
|
|
33
|
-
item.title = `${item.type}(${item.index})`;
|
|
34
|
-
data.push(item);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return data;
|
|
38
|
-
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdnX2xvYWRlcl90cmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvbWlkZGxld2FyZS9lZ2dfbG9hZGVyX3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRW5DLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0QsZUFBZSxDQUFDLENBQVUsRUFBRSxHQUFZLEVBQWtCLEVBQUU7SUFDMUQsT0FBTyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1FBQ3pCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsS0FBSyxVQUFVLGNBQWMsQ0FBQyxHQUFZO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBVSxFQUFFLENBQUM7SUFDdkIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztZQUFFLFNBQVM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNyRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDWixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztZQUN0QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUM7WUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
|
package/dist/esm/app.d.ts
DELETED
package/dist/esm/app.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export default class AppBoot {
|
|
2
|
-
#app;
|
|
3
|
-
constructor(app) {
|
|
4
|
-
this.#app = app;
|
|
5
|
-
// if true, then don't need to wait at local development mode
|
|
6
|
-
if (app.config.development.fastReady) {
|
|
7
|
-
process.nextTick(() => this.#app.ready(true));
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
async configWillLoad() {
|
|
11
|
-
this.#app.config.coreMiddleware.push('eggLoaderTrace');
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsT0FBTyxPQUFPLE9BQU87SUFDMUIsSUFBSSxDQUFVO0lBRWQsWUFBWSxHQUFZO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLDZEQUE2RDtRQUM3RCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0YifQ==
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { DevelopmentConfig } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* @member Config#development
|
|
4
|
-
* @property {Array} watchDirs - dirs needed watch, when files under these change, application will reload, use relative path
|
|
5
|
-
* @property {Array} ignoreDirs - dirs don't need watch, including subdirectories, use relative path
|
|
6
|
-
* @property {Boolean} fastReady - don't wait all plugins ready, default is false.
|
|
7
|
-
* @property {Boolean} reloadOnDebug - whether reload on debug, default is true.
|
|
8
|
-
* @property {Boolean} overrideDefault - whether override default watchDirs, default is false.
|
|
9
|
-
* @property {Boolean} overrideIgnore - whether override default ignoreDirs, default is false.
|
|
10
|
-
* @property {Array|String} reloadPattern - whether to reload, use https://github.com/sindresorhus/multimatch
|
|
11
|
-
*/
|
|
12
|
-
declare const _default: {
|
|
13
|
-
development: DevelopmentConfig;
|
|
14
|
-
};
|
|
15
|
-
export default _default;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @member Config#development
|
|
3
|
-
* @property {Array} watchDirs - dirs needed watch, when files under these change, application will reload, use relative path
|
|
4
|
-
* @property {Array} ignoreDirs - dirs don't need watch, including subdirectories, use relative path
|
|
5
|
-
* @property {Boolean} fastReady - don't wait all plugins ready, default is false.
|
|
6
|
-
* @property {Boolean} reloadOnDebug - whether reload on debug, default is true.
|
|
7
|
-
* @property {Boolean} overrideDefault - whether override default watchDirs, default is false.
|
|
8
|
-
* @property {Boolean} overrideIgnore - whether override default ignoreDirs, default is false.
|
|
9
|
-
* @property {Array|String} reloadPattern - whether to reload, use https://github.com/sindresorhus/multimatch
|
|
10
|
-
*/
|
|
11
|
-
export default {
|
|
12
|
-
development: {
|
|
13
|
-
watchDirs: [],
|
|
14
|
-
ignoreDirs: [],
|
|
15
|
-
fastReady: false,
|
|
16
|
-
reloadOnDebug: true,
|
|
17
|
-
overrideDefault: false,
|
|
18
|
-
overrideIgnore: false,
|
|
19
|
-
reloadPattern: undefined,
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmRlZmF1bHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29uZmlnL2NvbmZpZy5kZWZhdWx0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7Ozs7Ozs7R0FTRztBQUNILGVBQWU7SUFDYixXQUFXLEVBQUU7UUFDWCxTQUFTLEVBQUUsRUFBRTtRQUNiLFVBQVUsRUFBRSxFQUFFO1FBQ2QsU0FBUyxFQUFFLEtBQUs7UUFDaEIsYUFBYSxFQUFFLElBQUk7UUFDbkIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsY0FBYyxFQUFFLEtBQUs7UUFDckIsYUFBYSxFQUFFLFNBQVM7S0FDSjtDQUN2QixDQUFDIn0=
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<title></title>
|
|
5
|
-
</head>
|
|
6
|
-
<body>
|
|
7
|
-
<div id="mountNode"></div>
|
|
8
|
-
<script src="https://gw.alipayobjects.com/os/antv/assets/g2/3.0.9/g2.min.js"></script>
|
|
9
|
-
<script>
|
|
10
|
-
var data = {{placeholder}};
|
|
11
|
-
|
|
12
|
-
const chart = new G2.Chart({
|
|
13
|
-
container: 'mountNode', // 指定图表容器 ID
|
|
14
|
-
height: data.length * 22, // 指定图表高度
|
|
15
|
-
forceFit: true,
|
|
16
|
-
padding: 'auto',
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
// Step 2: 载入数据源
|
|
20
|
-
chart.source(data, {
|
|
21
|
-
range: {
|
|
22
|
-
type: 'time',
|
|
23
|
-
mask: 'HH:mm:ss',
|
|
24
|
-
nice: true,
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
chart
|
|
28
|
-
.coord()
|
|
29
|
-
.transpose()
|
|
30
|
-
.scale(1, -1);
|
|
31
|
-
|
|
32
|
-
chart.legend({ position: 'top' });
|
|
33
|
-
|
|
34
|
-
chart.tooltip({
|
|
35
|
-
showTitle: false,
|
|
36
|
-
itemTpl: '<li>{duration}ms: {name} </li>'
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
chart
|
|
40
|
-
.interval()
|
|
41
|
-
.position('title*range')
|
|
42
|
-
.color('type')
|
|
43
|
-
.tooltip('name*duration', (name, duration) => ({ name, duration }))
|
|
44
|
-
.size(5);
|
|
45
|
-
|
|
46
|
-
chart.render();
|
|
47
|
-
</script>
|
|
48
|
-
</body>
|
|
49
|
-
</html>
|
package/dist/esm/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import './types.js';
|
package/dist/esm/index.js
DELETED
package/dist/esm/package.json
DELETED
package/dist/esm/types.d.ts
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export interface DevelopmentConfig {
|
|
2
|
-
/**
|
|
3
|
-
* dirs needed watch, when files under these change, application will reload, use relative path
|
|
4
|
-
*/
|
|
5
|
-
watchDirs: string[];
|
|
6
|
-
/**
|
|
7
|
-
* dirs don't need watch, including subdirectories, use relative path
|
|
8
|
-
*/
|
|
9
|
-
ignoreDirs: string[];
|
|
10
|
-
/**
|
|
11
|
-
* don't wait all plugins ready, default is false.
|
|
12
|
-
*/
|
|
13
|
-
fastReady: boolean;
|
|
14
|
-
/**
|
|
15
|
-
* whether reload on debug, default is true.
|
|
16
|
-
*/
|
|
17
|
-
reloadOnDebug: boolean;
|
|
18
|
-
/**
|
|
19
|
-
* whether override default watchDirs, default is false.
|
|
20
|
-
*/
|
|
21
|
-
overrideDefault: boolean;
|
|
22
|
-
/**
|
|
23
|
-
* whether override default ignoreDirs, default is false.
|
|
24
|
-
*/
|
|
25
|
-
overrideIgnore: boolean;
|
|
26
|
-
/**
|
|
27
|
-
* whether to reload, use https://github.com/sindresorhus/multimatch
|
|
28
|
-
*/
|
|
29
|
-
reloadPattern?: string[] | string;
|
|
30
|
-
}
|
|
31
|
-
declare module '@eggjs/core' {
|
|
32
|
-
interface EggAppConfig {
|
|
33
|
-
development: DevelopmentConfig;
|
|
34
|
-
}
|
|
35
|
-
}
|
package/dist/esm/types.js
DELETED
package/dist/esm/utils.d.ts
DELETED
package/dist/esm/utils.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { fileURLToPath } from 'node:url';
|
|
3
|
-
export function getSourceDirname() {
|
|
4
|
-
if (typeof __dirname !== 'undefined') {
|
|
5
|
-
return path.dirname(__dirname);
|
|
6
|
-
}
|
|
7
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
8
|
-
// @ts-ignore
|
|
9
|
-
return path.dirname(fileURLToPath(import.meta.url));
|
|
10
|
-
}
|
|
11
|
-
export function getSourceFile(filename) {
|
|
12
|
-
return path.join(getSourceDirname(), filename);
|
|
13
|
-
}
|
|
14
|
-
export function isTimingFile(file) {
|
|
15
|
-
return /^(agent|application)_timing/.test(file);
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsNkRBQTZEO0lBQzdELGFBQWE7SUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFnQjtJQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sNkJBQTZCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xELENBQUMifQ==
|
package/dist/package.json
DELETED
package/src/agent.ts
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import fs from 'node:fs/promises';
|
|
3
|
-
import debounce from 'debounce';
|
|
4
|
-
import multimatch from 'multimatch';
|
|
5
|
-
import { exists } from 'utility';
|
|
6
|
-
import type { ILifecycleBoot, EggCore } from '@eggjs/core';
|
|
7
|
-
import { isTimingFile } from './utils.js';
|
|
8
|
-
|
|
9
|
-
export default class AgentBoot implements ILifecycleBoot {
|
|
10
|
-
#agent: EggCore;
|
|
11
|
-
|
|
12
|
-
constructor(agent: EggCore) {
|
|
13
|
-
this.#agent = agent;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async didLoad() {
|
|
17
|
-
// clean all timing json
|
|
18
|
-
const rundir = this.#agent.config.rundir;
|
|
19
|
-
const stat = await exists(rundir);
|
|
20
|
-
if (!stat) return;
|
|
21
|
-
const files = await fs.readdir(rundir);
|
|
22
|
-
for (const file of files) {
|
|
23
|
-
if (!isTimingFile(file)) continue;
|
|
24
|
-
await fs.rm(path.join(rundir, file), { force: true, recursive: true });
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async serverDidReady() {
|
|
29
|
-
const agent = this.#agent;
|
|
30
|
-
// single process mode don't watch and reload
|
|
31
|
-
if (agent.options && Reflect.get(agent.options, 'mode') === 'single') {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
const logger = agent.logger;
|
|
36
|
-
const baseDir = agent.config.baseDir;
|
|
37
|
-
const config = agent.config.development;
|
|
38
|
-
|
|
39
|
-
let watchDirs = config.overrideDefault ? [] : [
|
|
40
|
-
'app',
|
|
41
|
-
'config',
|
|
42
|
-
'mocks',
|
|
43
|
-
'mocks_proxy',
|
|
44
|
-
'app.js',
|
|
45
|
-
];
|
|
46
|
-
|
|
47
|
-
watchDirs = watchDirs.concat(config.watchDirs).map(dir => path.resolve(baseDir, dir));
|
|
48
|
-
|
|
49
|
-
let ignoreReloadFileDirs = config.overrideIgnore ? [] : [
|
|
50
|
-
'app/views',
|
|
51
|
-
'app/view',
|
|
52
|
-
'app/assets',
|
|
53
|
-
'app/public',
|
|
54
|
-
'app/web',
|
|
55
|
-
];
|
|
56
|
-
|
|
57
|
-
ignoreReloadFileDirs = ignoreReloadFileDirs.concat(config.ignoreDirs).map(dir => path.resolve(baseDir, dir));
|
|
58
|
-
|
|
59
|
-
const reloadFile = debounce(function(info) {
|
|
60
|
-
logger.warn(`[agent:development] reload worker because ${info.path} ${info.event}`);
|
|
61
|
-
|
|
62
|
-
process.send!({
|
|
63
|
-
to: 'master',
|
|
64
|
-
action: 'reload-worker',
|
|
65
|
-
});
|
|
66
|
-
}, 200);
|
|
67
|
-
|
|
68
|
-
// watch dirs to reload worker, will debounce 200ms
|
|
69
|
-
/**
|
|
70
|
-
* reload app worker:
|
|
71
|
-
* [AgentWorker] - on file change
|
|
72
|
-
* |-> emit reload-worker
|
|
73
|
-
* [Master] - receive reload-worker event
|
|
74
|
-
* |-> TODO: Mark worker will die
|
|
75
|
-
* |-> Fork new worker
|
|
76
|
-
* |-> kill old worker
|
|
77
|
-
*
|
|
78
|
-
* @param {Object} info - changed fileInfo
|
|
79
|
-
*/
|
|
80
|
-
agent.watcher.watch(watchDirs, info => {
|
|
81
|
-
if (!config.reloadOnDebug) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
if (isAssetsDir(info.path) || info.isDirectory) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// don't reload if don't match
|
|
90
|
-
if (config.reloadPattern && multimatch(info.path, config.reloadPattern).length === 0) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
reloadFile(info);
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
function isAssetsDir(filepath: string) {
|
|
98
|
-
for (const ignorePath of ignoreReloadFileDirs) {
|
|
99
|
-
if (filepath.startsWith(ignorePath)) {
|
|
100
|
-
return true;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return false;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import fs from 'node:fs/promises';
|
|
3
|
-
import { readJSON } from 'utility';
|
|
4
|
-
import type { EggCore, MiddlewareFunc } from '@eggjs/core';
|
|
5
|
-
import { getSourceFile, isTimingFile } from '../../utils.js';
|
|
6
|
-
|
|
7
|
-
export default (_: unknown, app: EggCore): MiddlewareFunc => {
|
|
8
|
-
return async (ctx, next) => {
|
|
9
|
-
if (ctx.path !== '/__loader_trace__') {
|
|
10
|
-
return await next();
|
|
11
|
-
}
|
|
12
|
-
const template = await fs.readFile(getSourceFile('config/loader_trace.html'), 'utf8');
|
|
13
|
-
const data = await loadTimingData(app);
|
|
14
|
-
ctx.body = template.replace('{{placeholder}}', JSON.stringify(data));
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
async function loadTimingData(app: EggCore) {
|
|
19
|
-
const rundir = app.config.rundir;
|
|
20
|
-
const files = await fs.readdir(rundir);
|
|
21
|
-
const data: any[] = [];
|
|
22
|
-
for (const file of files) {
|
|
23
|
-
if (!isTimingFile(file)) continue;
|
|
24
|
-
const json = await readJSON(path.join(rundir, file));
|
|
25
|
-
const isAgent = /^agent/.test(file);
|
|
26
|
-
for (const item of json) {
|
|
27
|
-
if (isAgent) {
|
|
28
|
-
item.type = 'agent';
|
|
29
|
-
} else {
|
|
30
|
-
item.type = `app_${item.pid}`;
|
|
31
|
-
}
|
|
32
|
-
item.pid = String(item.pid);
|
|
33
|
-
item.range = [ item.start, item.end ];
|
|
34
|
-
item.title = `${item.type}(${item.index})`;
|
|
35
|
-
data.push(item);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return data;
|
|
39
|
-
}
|