@eggjs/development 4.0.0 → 4.0.1-beta.1
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
package/README.md
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
1
|
# @eggjs/development
|
|
2
2
|
|
|
3
3
|
[![NPM version][npm-image]][npm-url]
|
|
4
|
-
[](https://github.com/eggjs/egg-development/actions/workflows/nodejs.yml)
|
|
5
|
-
[![Test coverage][codecov-image]][codecov-url]
|
|
6
4
|
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
7
5
|
[![npm download][download-image]][download-url]
|
|
8
|
-
[](https://nodejs.org/en/download/)
|
|
9
7
|
[](https://makeapullrequest.com)
|
|
10
8
|
|
|
11
|
-
[npm-image]: https://img.shields.io/npm/v/
|
|
12
|
-
[npm-url]: https://npmjs.org/package/
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[download-image]: https://img.shields.io/npm/dm/egg-development.svg?style=flat-square
|
|
18
|
-
[download-url]: https://npmjs.org/package/egg-development
|
|
9
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/development.svg?style=flat-square
|
|
10
|
+
[npm-url]: https://npmjs.org/package/@eggjs/development
|
|
11
|
+
[snyk-image]: https://snyk.io/test/npm/@eggjs/development/badge.svg?style=flat-square
|
|
12
|
+
[snyk-url]: https://snyk.io/test/npm/@eggjs/development
|
|
13
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/development.svg?style=flat-square
|
|
14
|
+
[download-url]: https://npmjs.org/package/@eggjs/development
|
|
19
15
|
|
|
20
16
|
This is an egg plugin for local development, under development environment enabled by default, and closed under other environment.
|
|
21
17
|
|
|
@@ -27,7 +23,7 @@ This is an egg plugin for local development, under development environment enabl
|
|
|
27
23
|
|
|
28
24
|
## Configuration
|
|
29
25
|
|
|
30
|
-
see [config/config.default.ts](https://github.com/eggjs/egg
|
|
26
|
+
see [config/config.default.ts](https://github.com/eggjs/egg/blob/master/plugins/development/src/config/config.default.ts) for more detail.
|
|
31
27
|
|
|
32
28
|
## Features
|
|
33
29
|
|
|
@@ -82,6 +78,6 @@ Please open an issue [here](https://github.com/eggjs/egg/issues).
|
|
|
82
78
|
|
|
83
79
|
## Contributors
|
|
84
80
|
|
|
85
|
-
[](https://github.com/eggjs/egg/graphs/contributors)
|
|
86
82
|
|
|
87
83
|
Made with [contributors-img](https://contrib.rocks).
|
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Agent, ILifecycleBoot } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/agent.d.ts
|
|
4
|
+
declare class AgentBoot implements ILifecycleBoot {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(agent: Agent);
|
|
7
|
+
didLoad(): Promise<void>;
|
|
8
|
+
serverDidReady(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//#endregion
|
|
11
|
+
export { AgentBoot as default };
|
package/dist/agent.js
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { isTimingFile } from "./utils.js";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import debounce from "debounce";
|
|
5
|
+
import multimatch from "multimatch";
|
|
6
|
+
import { exists } from "utility";
|
|
7
|
+
|
|
8
|
+
//#region src/agent.ts
|
|
9
|
+
var AgentBoot = class {
|
|
10
|
+
#agent;
|
|
11
|
+
constructor(agent) {
|
|
12
|
+
this.#agent = agent;
|
|
13
|
+
}
|
|
14
|
+
async didLoad() {
|
|
15
|
+
const rundir = this.#agent.config.rundir;
|
|
16
|
+
if (!await exists(rundir)) return;
|
|
17
|
+
const files = await fs.readdir(rundir);
|
|
18
|
+
for (const file of files) {
|
|
19
|
+
if (!isTimingFile(file)) continue;
|
|
20
|
+
await fs.rm(path.join(rundir, file), {
|
|
21
|
+
force: true,
|
|
22
|
+
recursive: true
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async serverDidReady() {
|
|
27
|
+
const agent = this.#agent;
|
|
28
|
+
if (agent.options && Reflect.get(agent.options, "mode") === "single") return;
|
|
29
|
+
const logger = agent.logger;
|
|
30
|
+
const baseDir = agent.config.baseDir;
|
|
31
|
+
const config = agent.config.development;
|
|
32
|
+
let watchDirs = config.overrideDefault ? [] : [
|
|
33
|
+
"app",
|
|
34
|
+
"config",
|
|
35
|
+
"mocks",
|
|
36
|
+
"mocks_proxy",
|
|
37
|
+
"app.js"
|
|
38
|
+
];
|
|
39
|
+
watchDirs = watchDirs.concat(config.watchDirs).map((dir) => path.resolve(baseDir, dir));
|
|
40
|
+
let ignoreReloadFileDirs = config.overrideIgnore ? [] : [
|
|
41
|
+
"app/views",
|
|
42
|
+
"app/view",
|
|
43
|
+
"app/assets",
|
|
44
|
+
"app/public",
|
|
45
|
+
"app/web"
|
|
46
|
+
];
|
|
47
|
+
ignoreReloadFileDirs = ignoreReloadFileDirs.concat(config.ignoreDirs).map((dir) => path.resolve(baseDir, dir));
|
|
48
|
+
const reloadFile = debounce(function(info) {
|
|
49
|
+
logger.warn(`[agent:development] reload worker because ${info.path} ${info.event}`);
|
|
50
|
+
process.send({
|
|
51
|
+
to: "master",
|
|
52
|
+
action: "reload-worker"
|
|
53
|
+
});
|
|
54
|
+
}, 200);
|
|
55
|
+
/**
|
|
56
|
+
* reload app worker:
|
|
57
|
+
* [AgentWorker] - on file change
|
|
58
|
+
* |-> emit reload-worker
|
|
59
|
+
* [Master] - receive reload-worker event
|
|
60
|
+
* |-> TODO: Mark worker will die
|
|
61
|
+
* |-> Fork new worker
|
|
62
|
+
* |-> kill old worker
|
|
63
|
+
*
|
|
64
|
+
* @param {Object} info - changed fileInfo
|
|
65
|
+
*/
|
|
66
|
+
agent.watcher.watch(watchDirs, (info) => {
|
|
67
|
+
if (!config.reloadOnDebug) return;
|
|
68
|
+
if (isAssetsDir(info.path) || info.isDirectory) return;
|
|
69
|
+
if (config.reloadPattern && multimatch(info.path, config.reloadPattern).length === 0) return;
|
|
70
|
+
reloadFile(info);
|
|
71
|
+
});
|
|
72
|
+
function isAssetsDir(filepath) {
|
|
73
|
+
for (const ignorePath of ignoreReloadFileDirs) if (filepath.startsWith(ignorePath)) return true;
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
//#endregion
|
|
80
|
+
export { AgentBoot as default };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Application, MiddlewareFunc } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/app/middleware/egg_loader_trace.d.ts
|
|
4
|
+
declare function createEggLoaderTraceMiddleware(_options: unknown, app: Application): MiddlewareFunc;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { createEggLoaderTraceMiddleware as default };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { isTimingFile } from "../../utils.js";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import fs from "node:fs/promises";
|
|
4
|
+
import { readJSON } from "utility";
|
|
5
|
+
|
|
6
|
+
//#region src/app/middleware/egg_loader_trace.ts
|
|
7
|
+
function createEggLoaderTraceMiddleware(_options, app) {
|
|
8
|
+
return async (ctx, next) => {
|
|
9
|
+
if (ctx.path !== "/__loader_trace__") return await next();
|
|
10
|
+
const templatePath = path.join(import.meta.dirname, "loader_trace.html");
|
|
11
|
+
const template = await fs.readFile(templatePath, "utf8");
|
|
12
|
+
const data = await loadTimingData(app);
|
|
13
|
+
ctx.body = template.replace("{{placeholder}}", JSON.stringify(data));
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async function loadTimingData(app) {
|
|
17
|
+
const rundir = app.config.rundir;
|
|
18
|
+
const files = await fs.readdir(rundir);
|
|
19
|
+
const data = [];
|
|
20
|
+
for (const file of files) {
|
|
21
|
+
if (!isTimingFile(file)) continue;
|
|
22
|
+
const json = await readJSON(path.join(rundir, file));
|
|
23
|
+
const isAgent = file.startsWith("agent");
|
|
24
|
+
for (const item of json) {
|
|
25
|
+
if (isAgent) item.type = "agent";
|
|
26
|
+
else item.type = `app_${item.pid}`;
|
|
27
|
+
item.pid = String(item.pid);
|
|
28
|
+
item.range = [item.start, item.end];
|
|
29
|
+
item.title = `${item.type}(${item.index})`;
|
|
30
|
+
data.push(item);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return data;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//#endregion
|
|
37
|
+
export { createEggLoaderTraceMiddleware as default };
|
package/dist/app.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Application, ILifecycleBoot } from "egg";
|
|
2
|
+
|
|
3
|
+
//#region src/app.d.ts
|
|
4
|
+
declare class AppBoot implements ILifecycleBoot {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(app: Application);
|
|
7
|
+
configWillLoad(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { AppBoot as default };
|
package/dist/app.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/app.ts
|
|
2
|
+
var AppBoot = class {
|
|
3
|
+
#app;
|
|
4
|
+
constructor(app) {
|
|
5
|
+
this.#app = app;
|
|
6
|
+
if (app.config.development.fastReady) process.nextTick(() => this.#app.ready(true));
|
|
7
|
+
}
|
|
8
|
+
async configWillLoad() {
|
|
9
|
+
this.#app.config.coreMiddleware.push("eggLoaderTrace");
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
//#endregion
|
|
14
|
+
export { AppBoot as default };
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { DevelopmentConfig } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/config/config.default.d.ts
|
|
4
|
+
|
|
2
5
|
/**
|
|
3
6
|
* @member Config#development
|
|
4
7
|
* @property {Array} watchDirs - dirs needed watch, when files under these change, application will reload, use relative path
|
|
@@ -10,6 +13,7 @@ import type { DevelopmentConfig } from '../types.js';
|
|
|
10
13
|
* @property {Array|String} reloadPattern - whether to reload, use https://github.com/sindresorhus/multimatch
|
|
11
14
|
*/
|
|
12
15
|
declare const _default: {
|
|
13
|
-
|
|
16
|
+
development: DevelopmentConfig;
|
|
14
17
|
};
|
|
15
|
-
|
|
18
|
+
//#endregion
|
|
19
|
+
export { _default as default };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region src/config/config.default.ts
|
|
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
|
+
var config_default_default = { development: {
|
|
13
|
+
watchDirs: [],
|
|
14
|
+
ignoreDirs: [],
|
|
15
|
+
fastReady: false,
|
|
16
|
+
reloadOnDebug: true,
|
|
17
|
+
overrideDefault: false,
|
|
18
|
+
overrideIgnore: false,
|
|
19
|
+
reloadPattern: void 0
|
|
20
|
+
} };
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
export { config_default_default as default };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
interface DevelopmentConfig {
|
|
2
3
|
/**
|
|
3
4
|
* dirs needed watch, when files under these change, application will reload, use relative path
|
|
4
5
|
*/
|
|
@@ -28,10 +29,10 @@ export interface DevelopmentConfig {
|
|
|
28
29
|
*/
|
|
29
30
|
reloadPattern?: string[] | string;
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
-
declare module '@eggjs/core' {
|
|
33
|
-
// add EggAppConfig overrides types
|
|
32
|
+
declare module 'egg' {
|
|
34
33
|
interface EggAppConfig {
|
|
35
34
|
development: DevelopmentConfig;
|
|
36
35
|
}
|
|
37
36
|
}
|
|
37
|
+
//#endregion
|
|
38
|
+
export { DevelopmentConfig };
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { };
|
package/dist/utils.d.ts
ADDED
package/dist/utils.js
ADDED
package/package.json
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/development",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1-beta.1",
|
|
4
|
+
"description": "development tool for egg",
|
|
4
5
|
"publishConfig": {
|
|
5
6
|
"access": "public"
|
|
6
7
|
},
|
|
7
|
-
"
|
|
8
|
+
"type": "module",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/index.js",
|
|
11
|
+
"./agent": "./dist/agent.js",
|
|
12
|
+
"./app": "./dist/app.js",
|
|
13
|
+
"./app/middleware/egg_loader_trace": "./dist/app/middleware/egg_loader_trace.js",
|
|
14
|
+
"./config/config.default": "./dist/config/config.default.js",
|
|
15
|
+
"./types": "./dist/types.js",
|
|
16
|
+
"./utils": "./dist/utils.js",
|
|
17
|
+
"./package.json": "./package.json"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"types": "./dist/index.d.ts",
|
|
23
|
+
"main": "./dist/index.js",
|
|
24
|
+
"module": "./dist/index.js",
|
|
8
25
|
"eggPlugin": {
|
|
9
26
|
"name": "development",
|
|
10
27
|
"env": [
|
|
@@ -12,12 +29,7 @@
|
|
|
12
29
|
],
|
|
13
30
|
"dependencies": [
|
|
14
31
|
"watcher"
|
|
15
|
-
]
|
|
16
|
-
"exports": {
|
|
17
|
-
"import": "./dist/esm",
|
|
18
|
-
"require": "./dist/commonjs",
|
|
19
|
-
"typescript": "./src"
|
|
20
|
-
}
|
|
32
|
+
]
|
|
21
33
|
},
|
|
22
34
|
"keywords": [
|
|
23
35
|
"egg",
|
|
@@ -26,73 +38,40 @@
|
|
|
26
38
|
"eggPlugin"
|
|
27
39
|
],
|
|
28
40
|
"dependencies": {
|
|
29
|
-
"@eggjs/core": "^6.2.11",
|
|
30
41
|
"debounce": "^2.2.0",
|
|
31
|
-
"multimatch": "^
|
|
32
|
-
"utility": "^2.
|
|
42
|
+
"multimatch": "^7.0.0",
|
|
43
|
+
"utility": "^2.5.0"
|
|
44
|
+
},
|
|
45
|
+
"peerDependencies": {
|
|
46
|
+
"egg": "4.1.0-beta.7"
|
|
33
47
|
},
|
|
34
48
|
"devDependencies": {
|
|
35
|
-
"@
|
|
36
|
-
"@eggjs/bin": "7",
|
|
37
|
-
"@eggjs/mock": "6",
|
|
38
|
-
"@eggjs/supertest": "8",
|
|
39
|
-
"@eggjs/tsconfig": "1",
|
|
40
|
-
"@types/mocha": "10",
|
|
41
|
-
"@types/node": "22",
|
|
42
|
-
"egg": "beta",
|
|
43
|
-
"eslint": "8",
|
|
44
|
-
"eslint-config-egg": "14",
|
|
49
|
+
"@types/node": "24",
|
|
45
50
|
"rimraf": "^6.0.1",
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
51
|
+
"tsdown": "^0.15.0",
|
|
52
|
+
"typescript": "5.9.2",
|
|
53
|
+
"@eggjs/mock": "6.1.0-beta.7",
|
|
54
|
+
"@eggjs/supertest": "8.3.0-beta.7",
|
|
55
|
+
"@eggjs/tsconfig": "3.1.0-beta.7"
|
|
49
56
|
},
|
|
50
57
|
"engines": {
|
|
51
|
-
"node": ">=
|
|
52
|
-
},
|
|
53
|
-
"scripts": {
|
|
54
|
-
"lint": "eslint --cache src test --ext .ts",
|
|
55
|
-
"pretest": "npm run clean && npm run lint -- --fix",
|
|
56
|
-
"test": "egg-bin test",
|
|
57
|
-
"preci": "npm run clean && npm run lint",
|
|
58
|
-
"ci": "egg-bin cov",
|
|
59
|
-
"postci": "npm run prepublishOnly && npm run clean",
|
|
60
|
-
"clean": "rimraf dist",
|
|
61
|
-
"prepublishOnly": "tshy && tshy-after && attw --pack"
|
|
58
|
+
"node": ">= 20.19.0"
|
|
62
59
|
},
|
|
63
60
|
"repository": {
|
|
64
61
|
"type": "git",
|
|
65
|
-
"url": "git
|
|
62
|
+
"url": "git://github.com/eggjs/egg.git",
|
|
63
|
+
"directory": "plugins/development"
|
|
66
64
|
},
|
|
67
65
|
"bugs": "https://github.com/eggjs/egg/issues",
|
|
68
|
-
"homepage": "https://github.com/eggjs/development#readme",
|
|
66
|
+
"homepage": "https://github.com/eggjs/egg/tree/master/plugins/development#readme",
|
|
69
67
|
"author": "jtyjty99999",
|
|
70
68
|
"license": "MIT",
|
|
71
|
-
"
|
|
72
|
-
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
"import": {
|
|
81
|
-
"types": "./dist/esm/index.d.ts",
|
|
82
|
-
"default": "./dist/esm/index.js"
|
|
83
|
-
},
|
|
84
|
-
"require": {
|
|
85
|
-
"types": "./dist/commonjs/index.d.ts",
|
|
86
|
-
"default": "./dist/commonjs/index.js"
|
|
87
|
-
}
|
|
88
|
-
},
|
|
89
|
-
"./package.json": "./package.json"
|
|
90
|
-
},
|
|
91
|
-
"files": [
|
|
92
|
-
"dist",
|
|
93
|
-
"src"
|
|
94
|
-
],
|
|
95
|
-
"types": "./dist/commonjs/index.d.ts",
|
|
96
|
-
"main": "./dist/commonjs/index.js",
|
|
97
|
-
"module": "./dist/esm/index.js"
|
|
98
|
-
}
|
|
69
|
+
"scripts": {
|
|
70
|
+
"lint": "oxlint --type-aware",
|
|
71
|
+
"typecheck": "tsc --noEmit",
|
|
72
|
+
"pretest": "pnpm run clean",
|
|
73
|
+
"test": "vitest run",
|
|
74
|
+
"clean": "rimraf dist",
|
|
75
|
+
"build": "tsdown"
|
|
76
|
+
}
|
|
77
|
+
}
|
package/dist/commonjs/agent.d.ts
DELETED
package/dist/commonjs/agent.js
DELETED
|
@@ -1,98 +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
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
7
|
-
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
-
const debounce_1 = __importDefault(require("debounce"));
|
|
9
|
-
const multimatch_1 = __importDefault(require("multimatch"));
|
|
10
|
-
const utility_1 = require("utility");
|
|
11
|
-
const utils_js_1 = require("./utils.js");
|
|
12
|
-
class AgentBoot {
|
|
13
|
-
#agent;
|
|
14
|
-
constructor(agent) {
|
|
15
|
-
this.#agent = agent;
|
|
16
|
-
}
|
|
17
|
-
async didLoad() {
|
|
18
|
-
// clean all timing json
|
|
19
|
-
const rundir = this.#agent.config.rundir;
|
|
20
|
-
const stat = await (0, utility_1.exists)(rundir);
|
|
21
|
-
if (!stat)
|
|
22
|
-
return;
|
|
23
|
-
const files = await promises_1.default.readdir(rundir);
|
|
24
|
-
for (const file of files) {
|
|
25
|
-
if (!(0, utils_js_1.isTimingFile)(file))
|
|
26
|
-
continue;
|
|
27
|
-
await promises_1.default.rm(node_path_1.default.join(rundir, file), { force: true, recursive: true });
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async serverDidReady() {
|
|
31
|
-
const agent = this.#agent;
|
|
32
|
-
// single process mode don't watch and reload
|
|
33
|
-
if (agent.options && Reflect.get(agent.options, 'mode') === 'single') {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const logger = agent.logger;
|
|
37
|
-
const baseDir = agent.config.baseDir;
|
|
38
|
-
const config = agent.config.development;
|
|
39
|
-
let watchDirs = config.overrideDefault ? [] : [
|
|
40
|
-
'app',
|
|
41
|
-
'config',
|
|
42
|
-
'mocks',
|
|
43
|
-
'mocks_proxy',
|
|
44
|
-
'app.js',
|
|
45
|
-
];
|
|
46
|
-
watchDirs = watchDirs.concat(config.watchDirs).map(dir => node_path_1.default.resolve(baseDir, dir));
|
|
47
|
-
let ignoreReloadFileDirs = config.overrideIgnore ? [] : [
|
|
48
|
-
'app/views',
|
|
49
|
-
'app/view',
|
|
50
|
-
'app/assets',
|
|
51
|
-
'app/public',
|
|
52
|
-
'app/web',
|
|
53
|
-
];
|
|
54
|
-
ignoreReloadFileDirs = ignoreReloadFileDirs.concat(config.ignoreDirs).map(dir => node_path_1.default.resolve(baseDir, dir));
|
|
55
|
-
const reloadFile = (0, debounce_1.default)(function (info) {
|
|
56
|
-
logger.warn(`[agent:development] reload worker because ${info.path} ${info.event}`);
|
|
57
|
-
process.send({
|
|
58
|
-
to: 'master',
|
|
59
|
-
action: 'reload-worker',
|
|
60
|
-
});
|
|
61
|
-
}, 200);
|
|
62
|
-
// watch dirs to reload worker, will debounce 200ms
|
|
63
|
-
/**
|
|
64
|
-
* reload app worker:
|
|
65
|
-
* [AgentWorker] - on file change
|
|
66
|
-
* |-> emit reload-worker
|
|
67
|
-
* [Master] - receive reload-worker event
|
|
68
|
-
* |-> TODO: Mark worker will die
|
|
69
|
-
* |-> Fork new worker
|
|
70
|
-
* |-> kill old worker
|
|
71
|
-
*
|
|
72
|
-
* @param {Object} info - changed fileInfo
|
|
73
|
-
*/
|
|
74
|
-
agent.watcher.watch(watchDirs, info => {
|
|
75
|
-
if (!config.reloadOnDebug) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
if (isAssetsDir(info.path) || info.isDirectory) {
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
// don't reload if don't match
|
|
82
|
-
if (config.reloadPattern && (0, multimatch_1.default)(info.path, config.reloadPattern).length === 0) {
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
reloadFile(info);
|
|
86
|
-
});
|
|
87
|
-
function isAssetsDir(filepath) {
|
|
88
|
-
for (const ignorePath of ignoreReloadFileDirs) {
|
|
89
|
-
if (filepath.startsWith(ignorePath)) {
|
|
90
|
-
return true;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.default = AgentBoot;
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwwREFBNkI7QUFDN0IsZ0VBQWtDO0FBQ2xDLHdEQUFnQztBQUNoQyw0REFBb0M7QUFDcEMscUNBQWlDO0FBRWpDLHlDQUEwQztBQUUxQyxNQUFxQixTQUFTO0lBQzVCLE1BQU0sQ0FBVTtJQUVoQixZQUFZLEtBQWM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsd0JBQXdCO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsZ0JBQU0sRUFBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDbEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFBLHVCQUFZLEVBQUMsSUFBSSxDQUFDO2dCQUFFLFNBQVM7WUFDbEMsTUFBTSxrQkFBRSxDQUFDLEVBQUUsQ0FBQyxtQkFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQiw2Q0FBNkM7UUFDN0MsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FB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
|
|
@@ -1,44 +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
|
-
const node_path_1 = __importDefault(require("node:path"));
|
|
7
|
-
const promises_1 = __importDefault(require("node:fs/promises"));
|
|
8
|
-
const utility_1 = require("utility");
|
|
9
|
-
const utils_js_1 = require("../../utils.js");
|
|
10
|
-
exports.default = (_, app) => {
|
|
11
|
-
return async (ctx, next) => {
|
|
12
|
-
if (ctx.path !== '/__loader_trace__') {
|
|
13
|
-
return await next();
|
|
14
|
-
}
|
|
15
|
-
const template = await promises_1.default.readFile((0, utils_js_1.getSourceFile)('config/loader_trace.html'), 'utf8');
|
|
16
|
-
const data = await loadTimingData(app);
|
|
17
|
-
ctx.body = template.replace('{{placeholder}}', JSON.stringify(data));
|
|
18
|
-
};
|
|
19
|
-
};
|
|
20
|
-
async function loadTimingData(app) {
|
|
21
|
-
const rundir = app.config.rundir;
|
|
22
|
-
const files = await promises_1.default.readdir(rundir);
|
|
23
|
-
const data = [];
|
|
24
|
-
for (const file of files) {
|
|
25
|
-
if (!(0, utils_js_1.isTimingFile)(file))
|
|
26
|
-
continue;
|
|
27
|
-
const json = await (0, utility_1.readJSON)(node_path_1.default.join(rundir, file));
|
|
28
|
-
const isAgent = /^agent/.test(file);
|
|
29
|
-
for (const item of json) {
|
|
30
|
-
if (isAgent) {
|
|
31
|
-
item.type = 'agent';
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
item.type = `app_${item.pid}`;
|
|
35
|
-
}
|
|
36
|
-
item.pid = String(item.pid);
|
|
37
|
-
item.range = [item.start, item.end];
|
|
38
|
-
item.title = `${item.type}(${item.index})`;
|
|
39
|
-
data.push(item);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return data;
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdnX2xvYWRlcl90cmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvbWlkZGxld2FyZS9lZ2dfbG9hZGVyX3RyYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMERBQTZCO0FBQzdCLGdFQUFrQztBQUNsQyxxQ0FBbUM7QUFFbkMsNkNBQTZEO0FBRTdELGtCQUFlLENBQUMsQ0FBVSxFQUFFLEdBQVksRUFBa0IsRUFBRTtJQUMxRCxPQUFPLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDekIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFLENBQUM7WUFDckMsT0FBTyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLGtCQUFFLENBQUMsUUFBUSxDQUFDLElBQUEsd0JBQWEsRUFBQywwQkFBMEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsS0FBSyxVQUFVLGNBQWMsQ0FBQyxHQUFZO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sa0JBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsTUFBTSxJQUFJLEdBQVUsRUFBRSxDQUFDO0lBQ3ZCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUEsdUJBQVksRUFBQyxJQUFJLENBQUM7WUFBRSxTQUFTO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBQSxrQkFBUSxFQUFDLG1CQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO1lBQ3RCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQztZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
|
package/dist/commonjs/app.d.ts
DELETED
package/dist/commonjs/app.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class AppBoot {
|
|
4
|
-
#app;
|
|
5
|
-
constructor(app) {
|
|
6
|
-
this.#app = app;
|
|
7
|
-
// if true, then don't need to wait at local development mode
|
|
8
|
-
if (app.config.development.fastReady) {
|
|
9
|
-
process.nextTick(() => this.#app.ready(true));
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
async configWillLoad() {
|
|
13
|
-
this.#app.config.coreMiddleware.push('eggLoaderTrace');
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
exports.default = AppBoot;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQXFCLE9BQU87SUFDMUIsSUFBSSxDQUFVO0lBRWQsWUFBWSxHQUFZO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2hCLDZEQUE2RDtRQUM3RCxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6RCxDQUFDO0NBQ0Y7QUFkRCwwQkFjQyJ9
|