@eggjs/core 7.0.0-beta.20 → 7.0.0-beta.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base_context_class.d.ts +16 -0
- package/dist/base_context_class.js +37 -0
- package/dist/egg.d.ts +246 -0
- package/dist/egg.js +388 -0
- package/dist/index.d.ts +12 -977
- package/dist/index.js +12 -2425
- package/dist/lifecycle.d.ts +78 -0
- package/dist/lifecycle.js +306 -0
- package/dist/loader/context_loader.d.ts +35 -0
- package/dist/loader/context_loader.js +102 -0
- package/dist/loader/egg_loader.d.ts +368 -0
- package/dist/loader/egg_loader.js +1572 -0
- package/dist/loader/file_loader.d.ts +101 -0
- package/dist/loader/file_loader.js +249 -0
- package/dist/singleton.d.ts +29 -0
- package/dist/singleton.js +117 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.js +2 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/index.js +113 -0
- package/dist/utils/sequencify.d.ts +13 -0
- package/dist/utils/sequencify.js +60 -0
- package/dist/utils/timing.d.ts +21 -0
- package/dist/utils/timing.js +92 -0
- package/package.json +9 -9
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import { stat } from 'node:fs/promises';
|
|
5
|
+
import BuiltinModule from 'node:module';
|
|
6
|
+
import { importResolve, importModule } from '@eggjs/utils';
|
|
7
|
+
const debug = debuglog('egg/core/utils');
|
|
8
|
+
// Guard against poorly mocked module constructors.
|
|
9
|
+
const Module = typeof module !== 'undefined' && module.constructor.length > 1
|
|
10
|
+
? module.constructor
|
|
11
|
+
: /* istanbul ignore next */
|
|
12
|
+
BuiltinModule;
|
|
13
|
+
const extensions = Module._extensions;
|
|
14
|
+
const extensionNames = Object.keys(extensions).concat(['.cjs', '.mjs']);
|
|
15
|
+
debug('Module extensions: %j', extensionNames);
|
|
16
|
+
function getCalleeFromStack(withLine, stackIndex) {
|
|
17
|
+
stackIndex = stackIndex === undefined ? 2 : stackIndex;
|
|
18
|
+
const limit = Error.stackTraceLimit;
|
|
19
|
+
const prep = Error.prepareStackTrace;
|
|
20
|
+
Error.prepareStackTrace = prepareObjectStackTrace;
|
|
21
|
+
Error.stackTraceLimit = 5;
|
|
22
|
+
// capture the stack
|
|
23
|
+
const obj = {};
|
|
24
|
+
Error.captureStackTrace(obj);
|
|
25
|
+
let callSite = obj.stack[stackIndex];
|
|
26
|
+
let fileName = '';
|
|
27
|
+
if (callSite) {
|
|
28
|
+
// egg-mock will create a proxy
|
|
29
|
+
// https://github.com/eggjs/egg-mock/blob/master/lib/app.js#L174
|
|
30
|
+
fileName = callSite.getFileName();
|
|
31
|
+
/* istanbul ignore if */
|
|
32
|
+
if (fileName && fileName.endsWith('egg-mock/lib/app.js')) {
|
|
33
|
+
// TODO: add test
|
|
34
|
+
callSite = obj.stack[stackIndex + 1];
|
|
35
|
+
fileName = callSite.getFileName();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
Error.prepareStackTrace = prep;
|
|
39
|
+
Error.stackTraceLimit = limit;
|
|
40
|
+
if (!callSite || !fileName)
|
|
41
|
+
return '<anonymous>';
|
|
42
|
+
if (!withLine)
|
|
43
|
+
return fileName;
|
|
44
|
+
return `${fileName}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
|
|
45
|
+
}
|
|
46
|
+
export default {
|
|
47
|
+
deprecated(message) {
|
|
48
|
+
if (debug.enabled) {
|
|
49
|
+
console.trace('[@eggjs/core/deprecated] %s', message);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log('[@eggjs/core/deprecated] %s', message);
|
|
53
|
+
console.log('[@eggjs/core/deprecated] set NODE_DEBUG=@eggjs/core/utils can show call stack');
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
extensions,
|
|
57
|
+
extensionNames,
|
|
58
|
+
async existsPath(filepath) {
|
|
59
|
+
try {
|
|
60
|
+
await stat(filepath);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
async loadFile(filepath) {
|
|
68
|
+
debug('[loadFile:start] filepath: %s', filepath);
|
|
69
|
+
try {
|
|
70
|
+
// if not js module, just return content buffer
|
|
71
|
+
const extname = path.extname(filepath);
|
|
72
|
+
if (extname && !extensionNames.includes(extname) && extname !== '.ts') {
|
|
73
|
+
return fs.readFileSync(filepath);
|
|
74
|
+
}
|
|
75
|
+
const obj = await importModule(filepath, { importDefaultOnly: true });
|
|
76
|
+
return obj;
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
if (!(e instanceof Error)) {
|
|
80
|
+
// ts error: test/fixtures/apps/app-ts/app/extend/context.ts(5,17): error TS2339: Property 'url' does not exist on type 'Context'
|
|
81
|
+
console.trace(e);
|
|
82
|
+
throw e;
|
|
83
|
+
}
|
|
84
|
+
const err = new Error(`[egg/core] load file: ${filepath}, error: ${e.message}`);
|
|
85
|
+
err.cause = e;
|
|
86
|
+
debug('[loadFile] handle %s error: %s', filepath, e);
|
|
87
|
+
throw err;
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
resolvePath(filepath, options) {
|
|
91
|
+
return importResolve(filepath, options);
|
|
92
|
+
},
|
|
93
|
+
methods: ['head', 'options', 'get', 'put', 'patch', 'post', 'delete'],
|
|
94
|
+
async callFn(fn, args, ctx) {
|
|
95
|
+
args = args || [];
|
|
96
|
+
if (typeof fn !== 'function')
|
|
97
|
+
return;
|
|
98
|
+
return ctx ? fn.call(ctx, ...args) : fn(...args);
|
|
99
|
+
},
|
|
100
|
+
getCalleeFromStack,
|
|
101
|
+
getResolvedFilename(filepath, baseDir) {
|
|
102
|
+
const reg = /[/\\]/g;
|
|
103
|
+
return filepath.replace(baseDir + path.sep, '').replace(reg, '/');
|
|
104
|
+
},
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* Capture call site stack from v8.
|
|
108
|
+
* https://github.com/v8/v8/wiki/Stack-Trace-API
|
|
109
|
+
*/
|
|
110
|
+
function prepareObjectStackTrace(_obj, stack) {
|
|
111
|
+
return stack;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxPQUFPLGFBQWEsTUFBTSxhQUFhLENBQUM7QUFFeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFJekMsbURBQW1EO0FBQ25ELE1BQU0sTUFBTSxHQUNWLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO0lBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVztJQUNwQixDQUFDLENBQUMsMEJBQTBCO1FBQzFCLGFBQWEsQ0FBQztBQUVwQixNQUFNLFVBQVUsR0FBSSxNQUFjLENBQUMsV0FBVyxDQUFDO0FBQy9DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEUsS0FBSyxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBRS9DLFNBQVMsa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxVQUFtQjtJQUNqRSxVQUFVLEdBQUcsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUNwQyxNQUFN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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface SequencifyResult {
|
|
2
|
+
sequence: string[];
|
|
3
|
+
requires: Record<string, true>;
|
|
4
|
+
}
|
|
5
|
+
export interface SequencifyTask {
|
|
6
|
+
dependencies: string[];
|
|
7
|
+
optionalDependencies: string[];
|
|
8
|
+
}
|
|
9
|
+
export declare function sequencify(tasks: Record<string, SequencifyTask>, names: string[]): {
|
|
10
|
+
sequence: string[];
|
|
11
|
+
missingTasks: string[];
|
|
12
|
+
recursiveDependencies: string[];
|
|
13
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { debuglog } from 'node:util';
|
|
2
|
+
const debug = debuglog('egg/core/utils/sequencify');
|
|
3
|
+
function sequence(
|
|
4
|
+
// oxlint-disable-next-line max-params
|
|
5
|
+
tasks, names, result, missing, recursive, nest, optional, parent) {
|
|
6
|
+
for (const name of names) {
|
|
7
|
+
if (result.requires[name]) {
|
|
8
|
+
continue;
|
|
9
|
+
}
|
|
10
|
+
const node = tasks[name];
|
|
11
|
+
if (!node) {
|
|
12
|
+
if (optional === true) {
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
missing.push(name);
|
|
16
|
+
}
|
|
17
|
+
else if (nest.includes(name)) {
|
|
18
|
+
nest.push(name);
|
|
19
|
+
recursive.push(...nest.slice(0));
|
|
20
|
+
nest.pop();
|
|
21
|
+
}
|
|
22
|
+
else if (node.dependencies.length > 0 || node.optionalDependencies.length > 0) {
|
|
23
|
+
nest.push(name);
|
|
24
|
+
if (node.dependencies.length > 0) {
|
|
25
|
+
sequence(tasks, node.dependencies, result, missing, recursive, nest, optional, name);
|
|
26
|
+
}
|
|
27
|
+
if (node.optionalDependencies.length > 0) {
|
|
28
|
+
sequence(tasks, node.optionalDependencies, result, missing, recursive, nest, true, name);
|
|
29
|
+
}
|
|
30
|
+
nest.pop();
|
|
31
|
+
}
|
|
32
|
+
if (!optional) {
|
|
33
|
+
result.requires[name] = true;
|
|
34
|
+
debug('task: %s is enabled by %s', name, parent);
|
|
35
|
+
}
|
|
36
|
+
if (!result.sequence.includes(name)) {
|
|
37
|
+
result.sequence.push(name);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
// tasks: object with keys as task names
|
|
42
|
+
// names: array of task names
|
|
43
|
+
export function sequencify(tasks, names) {
|
|
44
|
+
const result = {
|
|
45
|
+
sequence: [],
|
|
46
|
+
requires: {},
|
|
47
|
+
}; // the final sequence
|
|
48
|
+
const missing = []; // missing tasks
|
|
49
|
+
const recursive = []; // recursive task dependencies
|
|
50
|
+
sequence(tasks, names, result, missing, recursive, [], false, 'app');
|
|
51
|
+
if (missing.length > 0 || recursive.length > 0) {
|
|
52
|
+
result.sequence = []; // results are incomplete at best, completely wrong at worst, remove them to avoid confusion
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
sequence: result.sequence.filter(item => result.requires[item]),
|
|
56
|
+
missingTasks: missing,
|
|
57
|
+
recursiveDependencies: recursive,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VxdWVuY2lmeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZXF1ZW5jaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFZcEQsU0FBUyxRQUFRO0FBQ2Ysc0NBQXNDO0FBQ3RDLEtBQXFDLEVBQ3JDLEtBQWUsRUFDZixNQUF3QixFQUN4QixPQUFpQixFQUNqQixTQUFtQixFQUNuQixJQUFjLEVBQ2QsUUFBaUIsRUFDakIsTUFBYztJQUVkLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDMUIsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1YsSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFNBQVM7WUFDWCxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNiLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkYsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2IsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdCLEtBQUssQ0FBQywyQkFBMkIsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQUVELHdDQUF3QztBQUN4Qyw2QkFBNkI7QUFDN0IsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFxQyxFQUFFLEtBQWU7SUFDL0UsTUFBTSxNQUFNLEdBQXFCO1FBQy9CLFFBQVEsRUFBRSxFQUFFO1FBQ1osUUFBUSxFQUFFLEVBQUU7S0FDYixDQUFDLENBQUMscUJBQXFCO0lBQ3hCLE1BQU0sT0FBTyxHQUFhLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQjtJQUM5QyxNQUFNLFNBQVMsR0FBYSxFQUFFLENBQUMsQ0FBQyw4QkFBOEI7SUFFOUQsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUVyRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyw0RkFBNEY7SUFDcEgsQ0FBQztJQUVELE9BQU87UUFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELFlBQVksRUFBRSxPQUFPO1FBQ3JCLHFCQUFxQixFQUFFLFNBQVM7S0FDakMsQ0FBQztBQUNKLENBQUMifQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface TimingItem {
|
|
2
|
+
name: string;
|
|
3
|
+
start: number;
|
|
4
|
+
end?: number;
|
|
5
|
+
duration?: number;
|
|
6
|
+
pid: number;
|
|
7
|
+
index: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class Timing {
|
|
10
|
+
#private;
|
|
11
|
+
constructor();
|
|
12
|
+
init(): void;
|
|
13
|
+
start(name?: string, start?: number): TimingItem | undefined;
|
|
14
|
+
end(name?: string): TimingItem | undefined;
|
|
15
|
+
enable(): void;
|
|
16
|
+
disable(): void;
|
|
17
|
+
clear(): void;
|
|
18
|
+
toJSON(): TimingItem[];
|
|
19
|
+
itemToString(timelineEnd: number, item: TimingItem, times: number): string;
|
|
20
|
+
toString(prefix?: string, width?: number): string;
|
|
21
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { EOL } from 'node:os';
|
|
2
|
+
import { debuglog } from 'node:util';
|
|
3
|
+
import assert from 'node:assert';
|
|
4
|
+
const debug = debuglog('egg/core/utils/timing');
|
|
5
|
+
export class Timing {
|
|
6
|
+
#enable;
|
|
7
|
+
#startTime;
|
|
8
|
+
#map;
|
|
9
|
+
#list;
|
|
10
|
+
constructor() {
|
|
11
|
+
this.#enable = true;
|
|
12
|
+
this.#map = new Map();
|
|
13
|
+
this.#list = [];
|
|
14
|
+
this.init();
|
|
15
|
+
}
|
|
16
|
+
init() {
|
|
17
|
+
// process start time
|
|
18
|
+
this.start('Process Start', Date.now() - Math.floor(process.uptime() * 1000));
|
|
19
|
+
this.end('Process Start');
|
|
20
|
+
if ('scriptStartTime' in process && typeof process.scriptStartTime === 'number') {
|
|
21
|
+
// js script start execute time
|
|
22
|
+
this.start('Script Start', process.scriptStartTime);
|
|
23
|
+
this.end('Script Start');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
start(name, start) {
|
|
27
|
+
if (!name || !this.#enable)
|
|
28
|
+
return;
|
|
29
|
+
if (this.#map.has(name)) {
|
|
30
|
+
this.end(name);
|
|
31
|
+
}
|
|
32
|
+
start = start || Date.now();
|
|
33
|
+
if (!this.#startTime) {
|
|
34
|
+
this.#startTime = start;
|
|
35
|
+
}
|
|
36
|
+
const item = {
|
|
37
|
+
name,
|
|
38
|
+
start,
|
|
39
|
+
pid: process.pid,
|
|
40
|
+
index: this.#list.length,
|
|
41
|
+
};
|
|
42
|
+
this.#map.set(name, item);
|
|
43
|
+
this.#list.push(item);
|
|
44
|
+
debug('start %j', item);
|
|
45
|
+
return item;
|
|
46
|
+
}
|
|
47
|
+
end(name) {
|
|
48
|
+
if (!name || !this.#enable)
|
|
49
|
+
return;
|
|
50
|
+
const item = this.#map.get(name);
|
|
51
|
+
assert(item, `should run timing.start('${name}') first`);
|
|
52
|
+
item.end = Date.now();
|
|
53
|
+
item.duration = item.end - item.start;
|
|
54
|
+
debug('end %j', item);
|
|
55
|
+
return item;
|
|
56
|
+
}
|
|
57
|
+
enable() {
|
|
58
|
+
this.#enable = true;
|
|
59
|
+
}
|
|
60
|
+
disable() {
|
|
61
|
+
this.#enable = false;
|
|
62
|
+
}
|
|
63
|
+
clear() {
|
|
64
|
+
this.#map.clear();
|
|
65
|
+
this.#list = [];
|
|
66
|
+
}
|
|
67
|
+
toJSON() {
|
|
68
|
+
return this.#list;
|
|
69
|
+
}
|
|
70
|
+
itemToString(timelineEnd, item, times) {
|
|
71
|
+
const isEnd = typeof item.duration === 'number';
|
|
72
|
+
const duration = isEnd ? item.duration : timelineEnd - item.start;
|
|
73
|
+
const offset = item.start - this.#startTime;
|
|
74
|
+
const status = `${duration}ms${isEnd ? '' : ' NOT_END'}`;
|
|
75
|
+
const timespan = Math.floor(Number((offset * times).toFixed(6)));
|
|
76
|
+
let timeline = Math.floor(Number((duration * times).toFixed(6)));
|
|
77
|
+
timeline = timeline > 0 ? timeline : 1; // make sure there is at least one unit
|
|
78
|
+
const message = `#${item.index} ${item.name}`;
|
|
79
|
+
return ' '.repeat(timespan) + '▇'.repeat(timeline) + ` [${status}] - ${message}`;
|
|
80
|
+
}
|
|
81
|
+
toString(prefix = 'egg start timeline:', width = 50) {
|
|
82
|
+
const timelineEnd = Date.now();
|
|
83
|
+
const timelineDuration = timelineEnd - this.#startTime;
|
|
84
|
+
let times = 1;
|
|
85
|
+
if (timelineDuration > width) {
|
|
86
|
+
times = width / timelineDuration;
|
|
87
|
+
}
|
|
88
|
+
// follow https://github.com/node-modules/time-profile/blob/master/lib/profiler.js#L88
|
|
89
|
+
return prefix + EOL + this.#list.map(item => this.itemToString(timelineEnd, item, times)).join(EOL);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3RpbWluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxNQUFNLE1BQU0sYUFBYSxDQUFDO0FBRWpDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0FBV2hELE1BQU0sT0FBTyxNQUFNO0lBQ2pCLE9BQU8sQ0FBVTtJQUNqQixVQUFVLENBQVM7SUFDbkIsSUFBSSxDQUEwQjtJQUM5QixLQUFLLENBQWU7SUFDcEI7UUFDRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUk7UUFDRixxQkFBcUI7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUxQixJQUFJLGlCQUFpQixJQUFJLE9BQU8sSUFBSSxPQUFPLE9BQU8sQ0FBQyxlQUFlLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEYsK0JBQStCO1lBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLElBQWEsRUFBRSxLQUFjO1FBQ2pDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFbkMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakIsQ0FBQztRQUVELEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUFlO1lBQ3ZCLElBQUk7WUFDSixLQUFLO1lBQ0wsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO1lBQ2hCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUFhO1FBQ2YsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsSUFBSSxFQUFFLDRCQUE0QixJQUFJLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3RDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxZQUFZLENBQUMsV0FBbUIsRUFBRSxJQUFnQixFQUFFLEtBQWE7UUFDL0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQztRQUNoRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxRQUFtQixDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxRQUFRLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDakUsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxRQUFRLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7UUFDL0UsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxLQUFLLE1BQU0sT0FBTyxPQUFPLEVBQUUsQ0FBQztJQUNuRixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsRUFBRSxLQUFLLEdBQUcsRUFBRTtRQUNqRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN2RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLGdCQUFnQixHQUFHLEtBQUssRUFBRSxDQUFDO1lBQzdCLEtBQUssR0FBRyxLQUFLLEdBQUcsZ0JBQWdCLENBQUM7UUFDbkMsQ0FBQztRQUNELHNGQUFzRjtRQUN0RixPQUFPLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEcsQ0FBQztDQUNGIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/core",
|
|
3
|
-
"version": "7.0.0-beta.
|
|
3
|
+
"version": "7.0.0-beta.22",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"ready-callback": "^4.0.0",
|
|
46
46
|
"tsconfig-paths": "^4.2.0",
|
|
47
47
|
"utility": "^2.5.0",
|
|
48
|
-
"@eggjs/koa": "3.1.0-beta.
|
|
49
|
-
"@eggjs/
|
|
50
|
-
"@eggjs/
|
|
51
|
-
"@eggjs/
|
|
48
|
+
"@eggjs/koa": "3.1.0-beta.22",
|
|
49
|
+
"@eggjs/router": "4.0.0-beta.22",
|
|
50
|
+
"@eggjs/extend2": "5.0.0-beta.22",
|
|
51
|
+
"@eggjs/utils": "5.0.0-beta.22"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@types/js-yaml": "4",
|
|
@@ -62,12 +62,12 @@
|
|
|
62
62
|
"tsdown": "^0.15.4",
|
|
63
63
|
"typescript": "^5.9.3",
|
|
64
64
|
"urllib": "^4.8.2",
|
|
65
|
-
"@eggjs/
|
|
66
|
-
"@eggjs/
|
|
67
|
-
"@eggjs/
|
|
65
|
+
"@eggjs/mock": "7.0.0-beta.22",
|
|
66
|
+
"@eggjs/supertest": "9.0.0-beta.22",
|
|
67
|
+
"@eggjs/tsconfig": "3.1.0-beta.22"
|
|
68
68
|
},
|
|
69
69
|
"scripts": {
|
|
70
|
-
"build": "tsdown",
|
|
70
|
+
"build": "tsdown && rimraf dist && tsc -b --clean && tsc",
|
|
71
71
|
"lint": "oxlint",
|
|
72
72
|
"typecheck": "tsc --noEmit",
|
|
73
73
|
"test": "vitest run"
|