ray-logger-core 0.0.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/collectors/console.d.ts +9 -0
- package/collectors/console.d.ts.map +1 -0
- package/collectors/console.js +51 -0
- package/collectors/console.js.map +1 -0
- package/collectors/cookie.d.ts +9 -0
- package/collectors/cookie.d.ts.map +1 -0
- package/collectors/cookie.js +162 -0
- package/collectors/cookie.js.map +1 -0
- package/collectors/error.d.ts +8 -0
- package/collectors/error.d.ts.map +1 -0
- package/collectors/error.js +47 -0
- package/collectors/error.js.map +1 -0
- package/collectors/network/fetch.d.ts +9 -0
- package/collectors/network/fetch.d.ts.map +1 -0
- package/collectors/network/fetch.js +182 -0
- package/collectors/network/fetch.js.map +1 -0
- package/collectors/network/xhr.d.ts +8 -0
- package/collectors/network/xhr.d.ts.map +1 -0
- package/collectors/network/xhr.js +187 -0
- package/collectors/network/xhr.js.map +1 -0
- package/collectors/rrweb.d.ts +8 -0
- package/collectors/rrweb.d.ts.map +1 -0
- package/collectors/rrweb.js +41 -0
- package/collectors/rrweb.js.map +1 -0
- package/collectors/storage.d.ts +9 -0
- package/collectors/storage.d.ts.map +1 -0
- package/collectors/storage.js +139 -0
- package/collectors/storage.js.map +1 -0
- package/collectors/types.d.ts +2 -0
- package/collectors/types.d.ts.map +1 -0
- package/collectors/types.js +2 -0
- package/collectors/types.js.map +1 -0
- package/controller.d.ts +22 -0
- package/controller.d.ts.map +1 -0
- package/controller.js +218 -0
- package/controller.js.map +1 -0
- package/index.d.ts +10 -0
- package/index.d.ts.map +1 -0
- package/index.js +1559 -0
- package/index.js.map +1 -0
- package/package.json +20 -0
- package/session.d.ts +13 -0
- package/session.d.ts.map +1 -0
- package/session.js +77 -0
- package/session.js.map +1 -0
- package/storage/idb.d.ts +40 -0
- package/storage/idb.d.ts.map +1 -0
- package/storage/idb.js +182 -0
- package/storage/idb.js.map +1 -0
- package/timeline.d.ts +23 -0
- package/timeline.d.ts.map +1 -0
- package/timeline.js +64 -0
- package/timeline.js.map +1 -0
- package/types.d.ts +181 -0
- package/types.d.ts.map +1 -0
- package/types.js +28 -0
- package/types.js.map +1 -0
- package/utils/console-stack.d.ts +12 -0
- package/utils/console-stack.d.ts.map +1 -0
- package/utils/console-stack.js +141 -0
- package/utils/console-stack.js.map +1 -0
- package/utils/serialize.d.ts +4 -0
- package/utils/serialize.d.ts.map +1 -0
- package/utils/serialize.js +57 -0
- package/utils/serialize.js.map +1 -0
package/types.d.ts
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
export declare const PACKAGE_NAME: "@ray-web-logger/core";
|
|
2
|
+
export declare const SESSION_EXPORT_SCHEMA_VERSION: 1;
|
|
3
|
+
export declare const DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES = 1048576;
|
|
4
|
+
export declare const DEFAULT_RRWEB_CHECKOUT_EVERY_NMS = 30000;
|
|
5
|
+
export declare const DEFAULT_INDEXED_DB_NAME = "ray-web-logger-webLogger";
|
|
6
|
+
export declare const DEFAULT_SESSION_STORAGE_KEY = "__web_logger_session__";
|
|
7
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
8
|
+
export type JsonValue = JsonPrimitive | JsonValue[] | {
|
|
9
|
+
[key: string]: JsonValue;
|
|
10
|
+
};
|
|
11
|
+
export type SerializedValue = JsonValue | {
|
|
12
|
+
type: 'unserializable' | 'circular';
|
|
13
|
+
reason: string;
|
|
14
|
+
preview?: string;
|
|
15
|
+
};
|
|
16
|
+
export interface SessionExport {
|
|
17
|
+
schemaVersion: number;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
persistentSessionId?: string;
|
|
20
|
+
exportedAt: string;
|
|
21
|
+
export?: {
|
|
22
|
+
kind: 'full' | 'since';
|
|
23
|
+
sinceMs?: number;
|
|
24
|
+
rrwebAnchorSeq?: number;
|
|
25
|
+
includesRrwebBaseline?: boolean;
|
|
26
|
+
replayableStandalone?: boolean;
|
|
27
|
+
};
|
|
28
|
+
events: WebLoggerEvent[];
|
|
29
|
+
}
|
|
30
|
+
export type WebLoggerEvent = BaseWebLoggerEvent & ({
|
|
31
|
+
type: 'console';
|
|
32
|
+
payload: ConsolePayload;
|
|
33
|
+
} | {
|
|
34
|
+
type: 'error';
|
|
35
|
+
payload: ErrorPayload;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'network';
|
|
38
|
+
payload: NetworkPayload;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'rrweb';
|
|
41
|
+
payload: RrwebPayload;
|
|
42
|
+
} | {
|
|
43
|
+
type: 'storage';
|
|
44
|
+
payload: StoragePayload;
|
|
45
|
+
} | {
|
|
46
|
+
type: 'cookie';
|
|
47
|
+
payload: CookiePayload;
|
|
48
|
+
});
|
|
49
|
+
export interface BaseWebLoggerEvent {
|
|
50
|
+
sessionId: string;
|
|
51
|
+
seq: number;
|
|
52
|
+
timestamp: number;
|
|
53
|
+
}
|
|
54
|
+
/** 与规格 DevTools 对齐的 `console.*` 方法名;采集时写入 `ConsolePayload.level`,宿主无实现则跳过 patch。 */
|
|
55
|
+
export declare const CONSOLE_CAPTURE_METHODS: readonly ["debug", "log", "info", "warn", "error", "trace", "dir", "dirxml", "table", "group", "groupCollapsed", "groupEnd", "assert", "count", "countReset", "time", "timeLog", "timeEnd"];
|
|
56
|
+
export type ConsoleCaptureMethod = (typeof CONSOLE_CAPTURE_METHODS)[number];
|
|
57
|
+
/**
|
|
58
|
+
* Console 的一条栈帧或可单独展示的**业务调用点**(对标 DevTools 右侧「`文件:行`」)。
|
|
59
|
+
* 字段均为可选,便于渐进 rollout、宿主差异与隐私裁剪(详见 ADR-0002)。
|
|
60
|
+
*/
|
|
61
|
+
export interface ConsoleStackFrame {
|
|
62
|
+
/** 展示用短名(如 URL 的 basename) */
|
|
63
|
+
file?: string;
|
|
64
|
+
/** 脚本完整 URL / 路径;敏感场景可由配置省略或哈希化 */
|
|
65
|
+
url?: string;
|
|
66
|
+
line?: number;
|
|
67
|
+
column?: number;
|
|
68
|
+
functionName?: string;
|
|
69
|
+
}
|
|
70
|
+
export interface ConsolePayload {
|
|
71
|
+
level: ConsoleCaptureMethod | string;
|
|
72
|
+
args: SerializedValue[];
|
|
73
|
+
/**
|
|
74
|
+
* **用户**调用 `console.*` 的**首要**定位:采集侧应跳过本 SDK patch 帧与宿主 `console` 内建帧后再取第一帧。
|
|
75
|
+
* 回放用于行内右侧主链(对标 Chrome)。
|
|
76
|
+
*/
|
|
77
|
+
callSite?: ConsoleStackFrame;
|
|
78
|
+
/** 原始栈字符串;如 `console.trace()`、或未解析为多帧时的兜底 */
|
|
79
|
+
stack?: string;
|
|
80
|
+
/** 结构化多帧;`trace` 等可整表展示;`callSite` 可与 `stackFrames[0]` 对齐或单独给出 */
|
|
81
|
+
stackFrames?: ConsoleStackFrame[];
|
|
82
|
+
}
|
|
83
|
+
export interface ErrorPayload {
|
|
84
|
+
message: string;
|
|
85
|
+
stack?: string;
|
|
86
|
+
source?: string;
|
|
87
|
+
}
|
|
88
|
+
export type NetworkPayload = NetworkPayloadSuccess | NetworkPayloadFailed;
|
|
89
|
+
export interface NetworkPayloadBase {
|
|
90
|
+
url: string;
|
|
91
|
+
method: string;
|
|
92
|
+
durationMs?: number;
|
|
93
|
+
bodySkippedReason?: string;
|
|
94
|
+
}
|
|
95
|
+
export interface NetworkPayloadSuccess extends NetworkPayloadBase {
|
|
96
|
+
outcome: 'success';
|
|
97
|
+
status: number;
|
|
98
|
+
durationMs: number;
|
|
99
|
+
requestHeaders?: Record<string, string>;
|
|
100
|
+
responseHeaders?: Record<string, string>;
|
|
101
|
+
requestBody?: string | null;
|
|
102
|
+
responseBody?: string | null;
|
|
103
|
+
}
|
|
104
|
+
export interface NetworkPayloadFailed extends NetworkPayloadBase {
|
|
105
|
+
outcome: 'failed';
|
|
106
|
+
error: {
|
|
107
|
+
message: string;
|
|
108
|
+
name?: string;
|
|
109
|
+
code?: string | number;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 与 rrweb@2.0.0-alpha.20 对齐的最小事件子集。
|
|
114
|
+
* 保留原生 data 字段,不在 core 中改写 rrweb 事件语义。
|
|
115
|
+
*/
|
|
116
|
+
export interface RrwebEvent {
|
|
117
|
+
type: number;
|
|
118
|
+
timestamp: number;
|
|
119
|
+
data?: unknown;
|
|
120
|
+
}
|
|
121
|
+
export interface RrwebPayload {
|
|
122
|
+
rrwebEvent: RrwebEvent;
|
|
123
|
+
}
|
|
124
|
+
export interface StoragePayload {
|
|
125
|
+
area: 'local' | 'session';
|
|
126
|
+
op: 'set' | 'remove' | 'clear' | 'snapshot' | string;
|
|
127
|
+
key?: string;
|
|
128
|
+
value?: string | null;
|
|
129
|
+
entries?: Record<string, string>;
|
|
130
|
+
skipped?: StorageSnapshotSkippedItem[];
|
|
131
|
+
}
|
|
132
|
+
export interface CookiePayload {
|
|
133
|
+
name?: string;
|
|
134
|
+
value?: string;
|
|
135
|
+
op: 'set' | 'delete' | 'snapshot' | string;
|
|
136
|
+
domain?: string;
|
|
137
|
+
expires?: string;
|
|
138
|
+
maxAge?: string;
|
|
139
|
+
cookies?: CookieSnapshotItem[];
|
|
140
|
+
skipped?: CookieSnapshotSkippedItem[];
|
|
141
|
+
}
|
|
142
|
+
export interface StorageSnapshotSkippedItem {
|
|
143
|
+
key: string;
|
|
144
|
+
reason: 'disallowed' | string;
|
|
145
|
+
}
|
|
146
|
+
export interface CookieSnapshotItem {
|
|
147
|
+
name: string;
|
|
148
|
+
value: string;
|
|
149
|
+
}
|
|
150
|
+
export interface CookieSnapshotSkippedItem {
|
|
151
|
+
name: string;
|
|
152
|
+
reason: 'disallowed' | string;
|
|
153
|
+
}
|
|
154
|
+
export interface WebLoggerConfig {
|
|
155
|
+
enableRecordResponseBody?: boolean;
|
|
156
|
+
enableRecordRequestBody?: boolean;
|
|
157
|
+
disallowRecordSearches?: string[];
|
|
158
|
+
enableRecordRequestHeaders?: boolean;
|
|
159
|
+
enableRecordResponseHeaders?: boolean;
|
|
160
|
+
disallowRecordRequestHeaders?: string[];
|
|
161
|
+
disallowRecordResponseHeaders?: string[];
|
|
162
|
+
disallowRecordStorageKeys?: string[];
|
|
163
|
+
disallowRecordCookieKeys?: string[];
|
|
164
|
+
memoryFlushThresholdBytes?: number;
|
|
165
|
+
sessionStorageKey?: string;
|
|
166
|
+
recordConsoleCallSite?: boolean;
|
|
167
|
+
rrwebCheckoutEveryNms?: number;
|
|
168
|
+
}
|
|
169
|
+
export interface WebLoggerController {
|
|
170
|
+
readonly sessionId: string;
|
|
171
|
+
readonly persistentSessionId?: string;
|
|
172
|
+
record(event: NewWebLoggerEvent): WebLoggerEvent;
|
|
173
|
+
flushToIdb(): Promise<void>;
|
|
174
|
+
exportFull(): Promise<SessionExport>;
|
|
175
|
+
exportSince(sinceMs: number): Promise<SessionExport>;
|
|
176
|
+
destroy(): void;
|
|
177
|
+
}
|
|
178
|
+
export type NewWebLoggerEvent = Omit<WebLoggerEvent, 'sessionId' | 'seq' | 'timestamp'> & {
|
|
179
|
+
timestamp?: number;
|
|
180
|
+
};
|
|
181
|
+
//# sourceMappingURL=types.d.ts.map
|
package/types.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/types.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const PACKAGE_NAME = '@ray-web-logger/core';
|
|
2
|
+
export const SESSION_EXPORT_SCHEMA_VERSION = 1;
|
|
3
|
+
export const DEFAULT_MEMORY_FLUSH_THRESHOLD_BYTES = 1_048_576;
|
|
4
|
+
export const DEFAULT_RRWEB_CHECKOUT_EVERY_NMS = 30_000;
|
|
5
|
+
export const DEFAULT_INDEXED_DB_NAME = 'ray-web-logger-webLogger';
|
|
6
|
+
export const DEFAULT_SESSION_STORAGE_KEY = '__web_logger_session__';
|
|
7
|
+
/** 与规格 DevTools 对齐的 `console.*` 方法名;采集时写入 `ConsolePayload.level`,宿主无实现则跳过 patch。 */
|
|
8
|
+
export const CONSOLE_CAPTURE_METHODS = [
|
|
9
|
+
'debug',
|
|
10
|
+
'log',
|
|
11
|
+
'info',
|
|
12
|
+
'warn',
|
|
13
|
+
'error',
|
|
14
|
+
'trace',
|
|
15
|
+
'dir',
|
|
16
|
+
'dirxml',
|
|
17
|
+
'table',
|
|
18
|
+
'group',
|
|
19
|
+
'groupCollapsed',
|
|
20
|
+
'groupEnd',
|
|
21
|
+
'assert',
|
|
22
|
+
'count',
|
|
23
|
+
'countReset',
|
|
24
|
+
'time',
|
|
25
|
+
'timeLog',
|
|
26
|
+
'timeEnd',
|
|
27
|
+
];
|
|
28
|
+
//# sourceMappingURL=types.js.map
|
package/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,sBAA+B,CAAC;AAC5D,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAU,CAAC;AACxD,MAAM,CAAC,MAAM,oCAAoC,GAAG,SAAS,CAAC;AAC9D,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,0BAA0B,CAAC;AAClE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AA4CpE,oFAAoF;AACpF,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,KAAK;IACL,QAAQ;IACR,OAAO;IACP,OAAO;IACP,gBAAgB;IAChB,UAAU;IACV,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,MAAM;IACN,SAAS;IACT,SAAS;CACD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ConsoleCaptureMethod, ConsoleStackFrame } from '../types';
|
|
2
|
+
export interface ConsoleStackCaptureOptions {
|
|
3
|
+
stack: string | undefined;
|
|
4
|
+
method: ConsoleCaptureMethod;
|
|
5
|
+
}
|
|
6
|
+
/** 从同步 `new Error().stack` 推导 `ConsolePayload` 中与调用位置相关的可选字段(非 trace 不写 `stack/stackFrames`,控制体积)。 */
|
|
7
|
+
export declare function deriveConsoleLocationFields(options: ConsoleStackCaptureOptions): {
|
|
8
|
+
callSite?: ConsoleStackFrame;
|
|
9
|
+
stack?: string;
|
|
10
|
+
stackFrames?: ConsoleStackFrame[];
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=console-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-stack.d.ts","sourceRoot":"","sources":["../../src/utils/console-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAexE,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,sGAAsG;AACtG,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,0BAA0B,GAAG;IAChF,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC,CAkCA"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/** Collector 与其它 web-logger 内部帧需在展示前跳过 */
|
|
2
|
+
const INTERNAL_STACK_MARKERS = [
|
|
3
|
+
'/collectors/console',
|
|
4
|
+
'\\collectors\\console',
|
|
5
|
+
'collectors/console.ts',
|
|
6
|
+
'collectors\\console.ts',
|
|
7
|
+
'collectors/console.js',
|
|
8
|
+
'collectors\\console.js',
|
|
9
|
+
'@ray-web-logger/core',
|
|
10
|
+
'packages/core/src/collectors/console',
|
|
11
|
+
'packages\\core\\src\\collectors\\console',
|
|
12
|
+
];
|
|
13
|
+
/** 从同步 `new Error().stack` 推导 `ConsolePayload` 中与调用位置相关的可选字段(非 trace 不写 `stack/stackFrames`,控制体积)。 */
|
|
14
|
+
export function deriveConsoleLocationFields(options) {
|
|
15
|
+
const { stack, method } = options;
|
|
16
|
+
if (!stack?.trim()) {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
const rawLines = splitStackLines(stack);
|
|
20
|
+
const parsedFrames = [];
|
|
21
|
+
for (const raw of rawLines) {
|
|
22
|
+
if (!raw.trim()) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const frame = parseStackLine(raw);
|
|
26
|
+
if (frame.url !== undefined || frame.line !== undefined || frame.file !== undefined) {
|
|
27
|
+
parsedFrames.push({ raw, frame });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const userFrames = dropInternalPrefix(parsedFrames);
|
|
31
|
+
if (userFrames.length === 0) {
|
|
32
|
+
return method === 'trace' ? { stack } : {};
|
|
33
|
+
}
|
|
34
|
+
const callSite = normalizeFrame(userFrames[0].frame);
|
|
35
|
+
if (method !== 'trace') {
|
|
36
|
+
return { callSite };
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
callSite,
|
|
40
|
+
stack,
|
|
41
|
+
stackFrames: userFrames.map((f) => normalizeFrame(f.frame)),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function splitStackLines(stack) {
|
|
45
|
+
return stack.split(/\r?\n/);
|
|
46
|
+
}
|
|
47
|
+
function parseStackLine(line) {
|
|
48
|
+
const trimmed = line.trim();
|
|
49
|
+
const ff = /^(.+?)@(.+):(\d+):(\d+)$/.exec(trimmed);
|
|
50
|
+
if (ff && !trimmed.startsWith('at ')) {
|
|
51
|
+
const url = ff[2];
|
|
52
|
+
return {
|
|
53
|
+
functionName: ff[1] || undefined,
|
|
54
|
+
url,
|
|
55
|
+
line: Number(ff[3]),
|
|
56
|
+
column: Number(ff[4]),
|
|
57
|
+
file: basenameFromUrl(url),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
const parenOpen = trimmed.lastIndexOf('(');
|
|
61
|
+
const parenClose = trimmed.lastIndexOf(')');
|
|
62
|
+
if (trimmed.startsWith('at ') && parenOpen !== -1 && parenClose > parenOpen) {
|
|
63
|
+
const inside = trimmed.slice(parenOpen + 1, parenClose);
|
|
64
|
+
const loc = parseUrlLineColumn(inside);
|
|
65
|
+
if (loc) {
|
|
66
|
+
const head = trimmed.slice(3, parenOpen).trim();
|
|
67
|
+
return {
|
|
68
|
+
functionName: head || undefined,
|
|
69
|
+
url: loc.url,
|
|
70
|
+
line: loc.line,
|
|
71
|
+
column: loc.column,
|
|
72
|
+
file: basenameFromUrl(loc.url),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (trimmed.startsWith('at ')) {
|
|
77
|
+
const rest = trimmed.slice(3).trim();
|
|
78
|
+
const loc = parseUrlLineColumn(rest);
|
|
79
|
+
if (loc) {
|
|
80
|
+
return {
|
|
81
|
+
url: loc.url,
|
|
82
|
+
line: loc.line,
|
|
83
|
+
column: loc.column,
|
|
84
|
+
file: basenameFromUrl(loc.url),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return {};
|
|
89
|
+
}
|
|
90
|
+
function parseUrlLineColumn(s) {
|
|
91
|
+
const m = /^(.*):(\d+):(\d+)$/.exec(s);
|
|
92
|
+
if (!m) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
return { url: m[1], line: Number(m[2]), column: Number(m[3]) };
|
|
96
|
+
}
|
|
97
|
+
function basenameFromUrl(url) {
|
|
98
|
+
const trimmed = url.trim();
|
|
99
|
+
if (!trimmed || trimmed === '(native)') {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
try {
|
|
103
|
+
const u = new URL(trimmed);
|
|
104
|
+
const seg = u.pathname.split('/').filter(Boolean);
|
|
105
|
+
return seg[seg.length - 1] || trimmed;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
const parts = trimmed.split(/[/\\]/);
|
|
109
|
+
const last = parts[parts.length - 1];
|
|
110
|
+
return last || trimmed;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
function isInternalFrame(raw, frame) {
|
|
114
|
+
if (raw.includes('(native)')) {
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
const blob = `${raw} ${frame.url ?? ''}`;
|
|
118
|
+
for (const marker of INTERNAL_STACK_MARKERS) {
|
|
119
|
+
if (blob.includes(marker)) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
function dropInternalPrefix(frames) {
|
|
126
|
+
let i = 0;
|
|
127
|
+
while (i < frames.length && isInternalFrame(frames[i].raw, frames[i].frame)) {
|
|
128
|
+
i += 1;
|
|
129
|
+
}
|
|
130
|
+
return frames.slice(i);
|
|
131
|
+
}
|
|
132
|
+
function normalizeFrame(frame) {
|
|
133
|
+
const url = frame.url;
|
|
134
|
+
const file = frame.file ?? (url ? basenameFromUrl(url) : undefined);
|
|
135
|
+
return {
|
|
136
|
+
...frame,
|
|
137
|
+
file,
|
|
138
|
+
...(url ? { url } : {}),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=console-stack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-stack.js","sourceRoot":"","sources":["../../src/utils/console-stack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../src/utils/serialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,eAAe,EAAE,MAAM,UAAU,CAAC;AAM3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CAE9D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,eAAe,EAAE,CAEzE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
const MAX_DEPTH = 5;
|
|
2
|
+
const MAX_ARRAY_ITEMS = 50;
|
|
3
|
+
const MAX_OBJECT_KEYS = 50;
|
|
4
|
+
export function serializeValue(value) {
|
|
5
|
+
return serializeUnknown(value, new WeakSet(), 0);
|
|
6
|
+
}
|
|
7
|
+
export function serializeArgs(args) {
|
|
8
|
+
return args.map((arg) => serializeValue(arg));
|
|
9
|
+
}
|
|
10
|
+
function serializeUnknown(value, seen, depth) {
|
|
11
|
+
if (value === null ||
|
|
12
|
+
typeof value === 'string' ||
|
|
13
|
+
typeof value === 'number' ||
|
|
14
|
+
typeof value === 'boolean') {
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
if (typeof value === 'undefined') {
|
|
18
|
+
return { type: 'unserializable', reason: 'undefined' };
|
|
19
|
+
}
|
|
20
|
+
if (typeof value === 'bigint') {
|
|
21
|
+
return { type: 'unserializable', reason: 'bigint', preview: value.toString() };
|
|
22
|
+
}
|
|
23
|
+
if (typeof value === 'symbol' || typeof value === 'function') {
|
|
24
|
+
return { type: 'unserializable', reason: typeof value, preview: String(value) };
|
|
25
|
+
}
|
|
26
|
+
if (depth >= MAX_DEPTH) {
|
|
27
|
+
return { type: 'unserializable', reason: 'max-depth', preview: previewValue(value) };
|
|
28
|
+
}
|
|
29
|
+
if (seen.has(value)) {
|
|
30
|
+
return { type: 'circular', reason: 'circular-reference', preview: previewValue(value) };
|
|
31
|
+
}
|
|
32
|
+
seen.add(value);
|
|
33
|
+
if (value instanceof Error) {
|
|
34
|
+
return {
|
|
35
|
+
name: value.name,
|
|
36
|
+
message: value.message,
|
|
37
|
+
stack: value.stack ?? null,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (Array.isArray(value)) {
|
|
41
|
+
return value.slice(0, MAX_ARRAY_ITEMS).map((item) => serializeUnknown(item, seen, depth + 1));
|
|
42
|
+
}
|
|
43
|
+
const result = {};
|
|
44
|
+
for (const key of Object.keys(value).slice(0, MAX_OBJECT_KEYS)) {
|
|
45
|
+
result[key] = serializeUnknown(value[key], seen, depth + 1);
|
|
46
|
+
}
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
function previewValue(value) {
|
|
50
|
+
try {
|
|
51
|
+
return String(value);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return Object.prototype.toString.call(value);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../src/utils/serialize.ts"],"names":[],"mappings":"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"}
|