@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.
@@ -1,3 +1,9 @@
1
1
  export declare class StackUtil {
2
- static getCalleeFromStack(withLine: boolean, stackIndex?: number): string;
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 { debuglog } from 'node:util';
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
- stackIndex = stackIndex === undefined ? 2 : stackIndex;
16
- const limit = Error.stackTraceLimit;
17
- const prep = Error.prepareStackTrace;
18
- Error.prepareStackTrace = prepareObjectStackTrace;
19
- Error.stackTraceLimit = 10;
20
- // capture the stack
21
- const obj = {
22
- stack: [],
23
- };
24
- Error.captureStackTrace(obj);
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('call stack: \n------------------------------------------\n%s\n------------------------------------------', obj.stack.map((callSite) => callSite.getFileName() ?? '<anonymous>').join('\n'));
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 = obj.stack[stackIndex];
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.getFileName() ?? '';
66
+ const fileName = callSite.scriptName;
33
67
  if (fileName.includes('/@oxc-project/runtime/') || fileName.includes('\\@oxc-project\\runtime\\')) {
34
- callSite = obj.stack[stackIndex + 1];
68
+ callSite = stacks[stackIndex + 1];
35
69
  }
36
70
  }
37
- let fileName = null;
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.getFileName();
75
+ fileName = callSite.scriptName;
42
76
  if (fileName?.startsWith('file://')) {
43
77
  // remove file://
44
78
  fileName = fileURLToPath(fileName);
45
79
  }
46
80
  }
47
- Error.prepareStackTrace = prep;
48
- Error.stackTraceLimit = limit;
49
- /* istanbul ignore if */
50
- if (!callSite || !fileName)
81
+ if (!callSite || !fileName) {
51
82
  return '<anonymous>';
52
- if (!withLine)
83
+ }
84
+ if (!withLine) {
53
85
  return fileName;
54
- return `${fileName}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
86
+ }
87
+ return `${fileName}:${callSite.lineNumber}:${callSite.columnNumber}`;
55
88
  }
56
89
  }
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhY2tVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YWNrVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFckMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7QUFFOUQ7OztHQUdHO0FBRUgsU0FBUyx1QkFBdUIsQ0FBQyxDQUFRLEVBQUUsS0FBd0I7SUFDakUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxPQUFPLFNBQVM7SUFDcEIsc0JBQXNCO0lBQ3RCLGdFQUFnRTtJQUNoRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsUUFBaUIsRUFBRSxVQUFtQjtRQUM5RCxVQUFVLEdBQUcsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFFckMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDO1FBQ2xELEtBQUssQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTNCLG9CQUFvQjtRQUNwQixNQUFNLEdBQUcsR0FBaUM7WUFDeEMsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBQ0YsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FDSCwwR0FBMEcsRUFDMUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQ2hGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxvRUFBb0U7UUFDcEUsMkdBQTJHO1FBQzNHLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQzlDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsRUFBRSxDQUFDO2dCQUNsRyxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQ25DLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYiwrQkFBK0I7WUFDL0IsZ0VBQWdFO1lBQ2hFLFFBQVEsR0FBRyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEMsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLGlCQUFpQjtnQkFDakIsUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxDQUFDO1FBQ0gsQ0FBQztRQUVELEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDL0IsS0FBSyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFFOUIsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxhQUFhLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUMvQixPQUFPLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztJQUNqRixDQUFDO0NBQ0YifQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhY2tVdGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YWNrVXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3pDLE9BQU8sSUFBSSxFQUFFLEVBQXVCLE1BQU0sV0FBVyxDQUFDO0FBRXRELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMscUNBQXFDLENBQUMsQ0FBQztBQUVuRTs7O0dBR0c7QUFFSCxTQUFTLHVCQUF1QixDQUFDLENBQVEsRUFBRSxLQUF3QjtJQUNqRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUNwQixzQkFBc0I7SUFDdEIsZ0VBQWdFO0lBQ2hFOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQWtCLEVBQUUsVUFBbUI7UUFDL0QsUUFBUSxHQUFHLFFBQVEsSUFBSSxLQUFLLENBQUM7UUFDN0IsVUFBVSxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksTUFBTSxHQUFxQixFQUFFLENBQUM7UUFDbEMsSUFBSSxPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDNUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ1osK0VBQStFO1lBQy9FLE1BQU0sa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztZQUNqRCxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztZQUNyRCxLQUFLLENBQUMsaUJBQWlCLEdBQUcsdUJBQXVCLENBQUM7WUFDbEQsS0FBSyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUM7WUFDbkMsTUFBTSxHQUFHLEdBQWlDO2dCQUN4QyxLQUFLLEVBQUUsRUFBRTthQUNWLENBQUM7WUFDRixLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0IsS0FBSyxDQUFDLGlCQUFpQixHQUFHLG9CQUFvQixDQUFDO1lBQy9DLEtBQUssQ0FBQyxlQUFlLEdBQUcsa0JBQWtCLENBQUM7WUFDM0MsS0FBSyxJQUFJLFFBQVEsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUM7b0JBQ1YsVUFBVSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFO29CQUN4QyxRQUFRLEVBQUUsUUFBUSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUU7b0JBQ3hDLFVBQVUsRUFBRSxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztvQkFDekMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDO29CQUM3QyxZQUFZLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUU7aUJBQy9DLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUNILHVIQUF1SCxFQUN2SCxNQUFNO2lCQUNILEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNoQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQztnQkFDdEQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxXQUFXLENBQUM7Z0JBQ3RELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxZQUFZLElBQUksV0FBVyxDQUFDO2dCQUMxRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxPQUFPLEdBQUcsUUFBUSxJQUFJLFVBQVUsSUFBSSxZQUFZLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUMzRyxDQUFDLENBQUM7aUJBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNkLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLG9FQUFvRTtRQUNwRSwyR0FBMkc7UUFDM0csSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7WUFDckMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xHLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYiwrQkFBK0I7WUFDL0IsZ0VBQWdFO1lBQ2hFLFFBQVEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQy9CLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxpQkFBaUI7Z0JBQ2pCLFFBQVEsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0IsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNkLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLEdBQUcsUUFBUSxJQUFJLFFBQVEsQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3ZFLENBQUM7Q0FDRiJ9
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.32",
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.32",
39
- "@eggjs/utils": "5.0.0-beta.32"
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.10",
45
+ "tsdown": "0.15.11",
46
46
  "unplugin-unused": "^0.5.4"
47
47
  },
48
48
  "publishConfig": {