@eggjs/tegg-common-util 4.0.0-beta.32 → 4.0.0-beta.34
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/StackUtil.d.ts +7 -1
- package/dist/StackUtil.js +58 -25
- package/package.json +4 -4
package/dist/StackUtil.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
export declare class StackUtil {
|
|
2
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Get the callee file path from the stack.
|
|
4
|
+
* @param withLine - Whether to include the line number and column number in the result. Default is false.
|
|
5
|
+
* @param stackIndex - The index of the stack frame to get. Default is 2.
|
|
6
|
+
* @returns The callee file path from the stack.
|
|
7
|
+
*/
|
|
8
|
+
static getCalleeFromStack(withLine?: boolean, stackIndex?: number): string;
|
|
3
9
|
}
|
package/dist/StackUtil.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url';
|
|
2
|
-
import {
|
|
3
|
-
const debug = debuglog('egg/tegg/core/common-util/StackUtil');
|
|
2
|
+
import util, {} from 'node:util';
|
|
3
|
+
const debug = util.debuglog('egg/tegg/core/common-util/StackUtil');
|
|
4
4
|
/**
|
|
5
5
|
* Capture call site stack from v8.
|
|
6
6
|
* https://github.com/v8/v8/wiki/Stack-Trace-API
|
|
@@ -11,47 +11,80 @@ function prepareObjectStackTrace(_, stack) {
|
|
|
11
11
|
export class StackUtil {
|
|
12
12
|
// from egg-core/utils
|
|
13
13
|
// https://github.com/eggjs/core/blob/5.x/lib/utils/index.js#L51
|
|
14
|
+
/**
|
|
15
|
+
* Get the callee file path from the stack.
|
|
16
|
+
* @param withLine - Whether to include the line number and column number in the result. Default is false.
|
|
17
|
+
* @param stackIndex - The index of the stack frame to get. Default is 2.
|
|
18
|
+
* @returns The callee file path from the stack.
|
|
19
|
+
*/
|
|
14
20
|
static getCalleeFromStack(withLine, stackIndex) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
withLine = withLine ?? false;
|
|
22
|
+
stackIndex = stackIndex ?? 2;
|
|
23
|
+
const frameCount = 10;
|
|
24
|
+
let stacks = [];
|
|
25
|
+
if (typeof util.getCallSites === 'function') {
|
|
26
|
+
stacks = util.getCallSites(frameCount);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
stacks = [];
|
|
30
|
+
// capture the stack with raw Error.stackTraceLimit and Error.prepareStackTrace
|
|
31
|
+
const rawStackTraceLimit = Error.stackTraceLimit;
|
|
32
|
+
const rawPrepareStackTrace = Error.prepareStackTrace;
|
|
33
|
+
Error.prepareStackTrace = prepareObjectStackTrace;
|
|
34
|
+
Error.stackTraceLimit = frameCount;
|
|
35
|
+
const obj = {
|
|
36
|
+
stack: [],
|
|
37
|
+
};
|
|
38
|
+
Error.captureStackTrace(obj);
|
|
39
|
+
Error.prepareStackTrace = rawPrepareStackTrace;
|
|
40
|
+
Error.stackTraceLimit = rawStackTraceLimit;
|
|
41
|
+
for (let callSite of obj.stack) {
|
|
42
|
+
stacks.push({
|
|
43
|
+
scriptName: callSite.getFileName() ?? '',
|
|
44
|
+
scriptId: callSite.getScriptHash() ?? '',
|
|
45
|
+
lineNumber: callSite.getLineNumber() ?? 1,
|
|
46
|
+
columnNumber: callSite.getColumnNumber() ?? 1,
|
|
47
|
+
functionName: callSite.getFunctionName() ?? '',
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
25
51
|
if (debug.enabled) {
|
|
26
|
-
debug('
|
|
52
|
+
debug('util.getCallSites stack: \n------------------------------------------\n%s\n------------------------------------------', stacks
|
|
53
|
+
.map((callSite) => {
|
|
54
|
+
const fileName = callSite.scriptName ?? '<anonymous>';
|
|
55
|
+
const lineNumber = callSite.lineNumber ?? '<unknown>';
|
|
56
|
+
const columnNumber = callSite.columnNumber ?? '<unknown>';
|
|
57
|
+
const functionName = callSite.functionName;
|
|
58
|
+
return `${fileName}:${lineNumber}:${columnNumber}:${functionName ? `${functionName}()` : '<anonymous>'}`;
|
|
59
|
+
})
|
|
60
|
+
.join('\n'));
|
|
27
61
|
}
|
|
28
|
-
let callSite =
|
|
62
|
+
let callSite = stacks[stackIndex];
|
|
29
63
|
// skip the @oxc-project/runtime/src/helpers/decorate.js stack frame
|
|
30
64
|
// node_modules/.pnpm/@oxc-project+runtime@0.92.0/node_modules/@oxc-project/runtime/src/helpers/decorate.js
|
|
31
65
|
if (callSite) {
|
|
32
|
-
const fileName = callSite.
|
|
66
|
+
const fileName = callSite.scriptName;
|
|
33
67
|
if (fileName.includes('/@oxc-project/runtime/') || fileName.includes('\\@oxc-project\\runtime\\')) {
|
|
34
|
-
callSite =
|
|
68
|
+
callSite = stacks[stackIndex + 1];
|
|
35
69
|
}
|
|
36
70
|
}
|
|
37
|
-
let fileName =
|
|
71
|
+
let fileName = '';
|
|
38
72
|
if (callSite) {
|
|
39
73
|
// egg-mock will create a proxy
|
|
40
74
|
// https://github.com/eggjs/egg-mock/blob/master/lib/app.js#L174
|
|
41
|
-
fileName = callSite.
|
|
75
|
+
fileName = callSite.scriptName;
|
|
42
76
|
if (fileName?.startsWith('file://')) {
|
|
43
77
|
// remove file://
|
|
44
78
|
fileName = fileURLToPath(fileName);
|
|
45
79
|
}
|
|
46
80
|
}
|
|
47
|
-
|
|
48
|
-
Error.stackTraceLimit = limit;
|
|
49
|
-
/* istanbul ignore if */
|
|
50
|
-
if (!callSite || !fileName)
|
|
81
|
+
if (!callSite || !fileName) {
|
|
51
82
|
return '<anonymous>';
|
|
52
|
-
|
|
83
|
+
}
|
|
84
|
+
if (!withLine) {
|
|
53
85
|
return fileName;
|
|
54
|
-
|
|
86
|
+
}
|
|
87
|
+
return `${fileName}:${callSite.lineNumber}:${callSite.columnNumber}`;
|
|
55
88
|
}
|
|
56
89
|
}
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhY2tVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YWNrVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sSUFBSSxFQUFFLEVBQXVCLE1BQU0sV0FBVyxDQUFDO0FBRXRELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUVuRTs7O0dBR0c7QUFFSCxTQUFTLHVCQUF1QixDQUFDLENBQVEsRUFBRSxLQUF3QjtJQUNqRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUNwQixzQkFBc0I7SUFDdEIsZ0VBQWdFO0lBQ2hFOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQWtCLEVBQUUsVUFBbUI7UUFDL0QsUUFBUSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUM7UUFDN0IsVUFBVSxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksTUFBTSxHQUFxQixFQUFFLENBQUM7UUFDbEMsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDNUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ1osK0VBQStFO1lBQy9FLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUNqRCxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNyRCxLQUFLLENBQUMsaUJBQWlCLEdBQUcsdUJBQXVCLENBQUM7WUFDbEQsS0FBSyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7WUFDbkMs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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/tegg-common-util",
|
|
3
3
|
"description": "common util for tegg",
|
|
4
|
-
"version": "4.0.0-beta.
|
|
4
|
+
"version": "4.0.0-beta.34",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"egg",
|
|
7
7
|
"typescript",
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"extend2": "^4.0.0",
|
|
36
36
|
"globby": "^11.0.2",
|
|
37
37
|
"js-yaml": "^4.1.0",
|
|
38
|
-
"@eggjs/tegg-types": "4.0.0-beta.
|
|
39
|
-
"@eggjs/utils": "5.0.0-beta.
|
|
38
|
+
"@eggjs/tegg-types": "4.0.0-beta.34",
|
|
39
|
+
"@eggjs/utils": "5.0.0-beta.34"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
42
|
"@types/js-yaml": "4",
|
|
43
43
|
"@types/node": "^24.9.1",
|
|
44
44
|
"typescript": "^5.9.3",
|
|
45
|
-
"tsdown": "0.15.
|
|
45
|
+
"tsdown": "0.15.11",
|
|
46
46
|
"unplugin-unused": "^0.5.4"
|
|
47
47
|
},
|
|
48
48
|
"publishConfig": {
|