@skrillex1224/playwright-toolkit 2.1.39 → 2.1.41

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.
@@ -0,0 +1,758 @@
1
+ // src/logger.js
2
+ var formatLine = (prefix, icon, message) => {
3
+ const parts = [];
4
+ if (prefix) parts.push(`[${prefix}]`);
5
+ if (icon) parts.push(icon);
6
+ if (message) parts.push(message);
7
+ return parts.join(" ").trim();
8
+ };
9
+ var fallbackLog = {
10
+ info: (...args) => console.log(...args),
11
+ warning: (...args) => console.warn ? console.warn(...args) : console.log(...args),
12
+ error: (...args) => console.error(...args),
13
+ debug: (...args) => console.debug ? console.debug(...args) : console.log(...args)
14
+ };
15
+ var resolveLogMethod = (logger, name) => {
16
+ if (logger && typeof logger[name] === "function") {
17
+ return logger[name].bind(logger);
18
+ }
19
+ if (name === "warning" && logger && typeof logger.warn === "function") {
20
+ return logger.warn.bind(logger);
21
+ }
22
+ return fallbackLog[name];
23
+ };
24
+ var defaultLogger = null;
25
+ var setDefaultLogger = (logger) => {
26
+ defaultLogger = logger;
27
+ };
28
+ var resolveLogger = (logger) => {
29
+ if (logger && typeof logger.info === "function") {
30
+ return logger;
31
+ }
32
+ if (defaultLogger && typeof defaultLogger.info === "function") {
33
+ return defaultLogger;
34
+ }
35
+ return fallbackLog;
36
+ };
37
+ var ANSI = {
38
+ reset: "\x1B[0m",
39
+ gray: "\x1B[90m",
40
+ red: "\x1B[31m",
41
+ green: "\x1B[32m",
42
+ yellow: "\x1B[33m",
43
+ blue: "\x1B[34m",
44
+ cyan: "\x1B[36m"
45
+ };
46
+ var stripAnsi = (input) => {
47
+ if (!input) return "";
48
+ return String(input).replace(/\x1b\[[0-9;]*m/g, "");
49
+ };
50
+ var colorize = (text, color) => {
51
+ if (!text || !color) return text;
52
+ return `${color}${text}${ANSI.reset}`;
53
+ };
54
+ var createBaseLogger = (prefix = "", logger) => {
55
+ const name = prefix ? String(prefix) : "";
56
+ const targetLogger = resolveLogger(logger);
57
+ const info = resolveLogMethod(targetLogger, "info");
58
+ const warning = resolveLogMethod(targetLogger, "warning");
59
+ const error = resolveLogMethod(targetLogger, "error");
60
+ const debug = resolveLogMethod(targetLogger, "debug");
61
+ return {
62
+ info: (message) => info(colorize(formatLine(name, "\u{1F4D6}", message), ANSI.cyan)),
63
+ success: (message) => info(colorize(formatLine(name, "\u2705", message), ANSI.green)),
64
+ warning: (message) => warning(colorize(formatLine(name, "\u26A0\uFE0F", message), ANSI.yellow)),
65
+ warn: (message) => warning(colorize(formatLine(name, "\u26A0\uFE0F", message), ANSI.yellow)),
66
+ error: (message) => error(colorize(formatLine(name, "\u274C", message), ANSI.red)),
67
+ debug: (message) => debug(colorize(formatLine(name, "\u{1F539}", message), ANSI.gray)),
68
+ start: (message) => info(colorize(formatLine(name, "\u{1F537}", message), ANSI.blue))
69
+ };
70
+ };
71
+ var STEP_PREFIX = "\u6B65\u9AA4:";
72
+ var STEP_SEPARATOR = " | ";
73
+ var STEP_EMOJIS = [
74
+ { match: "\u4EFB\u52A1", emoji: "\u{1F9ED}" },
75
+ { match: "\u8FD0\u884C\u6A21\u5F0F", emoji: "\u{1F9E9}" },
76
+ { match: "\u767B\u5F55", emoji: "\u{1F510}" },
77
+ { match: "\u73AF\u5883", emoji: "\u{1F9EA}" },
78
+ { match: "\u8F93\u5165", emoji: "\u2328\uFE0F" },
79
+ { match: "\u53D1\u9001", emoji: "\u{1F4E4}" },
80
+ { match: "\u54CD\u5E94\u76D1\u542C", emoji: "\u{1F4E1}" },
81
+ { match: "\u7B49\u5F85\u54CD\u5E94", emoji: "\u23F3" },
82
+ { match: "\u6D41\u5F0F", emoji: "\u{1F9F5}" },
83
+ { match: "\u5F15\u7528", emoji: "\u{1F4CE}" },
84
+ { match: "\u622A\u56FE", emoji: "\u{1F5BC}\uFE0F" },
85
+ { match: "\u5206\u4EAB\u94FE\u63A5", emoji: "\u{1F517}" },
86
+ { match: "\u6570\u636E\u63A8\u9001", emoji: "\u{1F4E6}" },
87
+ { match: "\u5F39\u7A97", emoji: "\u{1FA9F}" }
88
+ ];
89
+ var STATUS_EMOJIS = [
90
+ { match: "\u5F00\u59CB", emoji: "\u{1F680}" },
91
+ { match: "\u5B8C\u6210", emoji: "\u2705" },
92
+ { match: "\u6210\u529F", emoji: "\u2705" },
93
+ { match: "\u5931\u8D25", emoji: "\u274C" },
94
+ { match: "\u8DF3\u8FC7", emoji: "\u23ED\uFE0F" },
95
+ { match: "\u8D85\u65F6", emoji: "\u23F1\uFE0F" },
96
+ { match: "\u91CD\u8BD5", emoji: "\u{1F501}" },
97
+ { match: "\u7ED3\u675F", emoji: "\u{1F3C1}" },
98
+ { match: "\u5DF2\u914D\u7F6E", emoji: "\u{1F9F7}" },
99
+ { match: "\u5DF2\u68C0\u6D4B", emoji: "\u{1F50E}" }
100
+ ];
101
+ var toErrorMessage = (error) => {
102
+ if (!error) return "";
103
+ if (error instanceof Error) return error.message;
104
+ if (typeof error === "string") return error;
105
+ try {
106
+ return JSON.stringify(error);
107
+ } catch {
108
+ return String(error);
109
+ }
110
+ };
111
+ var decorateLabel = (label, mappings) => {
112
+ if (!label) return "";
113
+ const mapping = mappings.find((item) => label.includes(item.match));
114
+ if (!mapping) return label;
115
+ return `${mapping.emoji} ${label}`;
116
+ };
117
+ var normalizeSnippet = (snippet, maxLen = 120) => {
118
+ if (!snippet) return "";
119
+ const text = String(snippet).replace(/\s+/g, " ").trim();
120
+ if (!text) return "";
121
+ const cleaned = text.replace(/"/g, "'");
122
+ if (cleaned.length <= maxLen) return cleaned;
123
+ return `${cleaned.slice(0, maxLen)}...`;
124
+ };
125
+ var LOG_TAG_PREFIX = "[#log:";
126
+ var LOG_TAG_SUFFIX = "]";
127
+ var buildLogTag = (key) => `${LOG_TAG_PREFIX}${key}${LOG_TAG_SUFFIX}`;
128
+ var escapeRegExp = (value) => String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
129
+ var buildStepPattern = (step, status) => {
130
+ if (!step) return null;
131
+ let pattern = `\u6B65\u9AA4: .*${escapeRegExp(step)}`;
132
+ if (status) {
133
+ pattern += `.*${escapeRegExp(status)}`;
134
+ }
135
+ return new RegExp(pattern);
136
+ };
137
+ var buildDefinitionPatterns = (definition) => {
138
+ const patterns = [new RegExp(`\\[#log:${escapeRegExp(definition.key)}\\]`)];
139
+ const fallback = buildStepPattern(definition.step, definition.status);
140
+ if (fallback) patterns.push(fallback);
141
+ if (Array.isArray(definition.extraPatterns)) {
142
+ patterns.push(...definition.extraPatterns);
143
+ }
144
+ return patterns;
145
+ };
146
+ var ATTENTION_RANK = {
147
+ low: 1,
148
+ medium: 2,
149
+ high: 3,
150
+ critical: 4
151
+ };
152
+ var DEFAULT_ATTENTION_RANK = ATTENTION_RANK.high;
153
+ var LOG_DEFINITIONS = [
154
+ {
155
+ key: "task_start",
156
+ method: "taskStart",
157
+ label: "\u4EFB\u52A1\u5F00\u59CB",
158
+ group: "\u4EFB\u52A1",
159
+ step: "\u4EFB\u52A1",
160
+ status: "\u5F00\u59CB",
161
+ level: "start",
162
+ attention: "low",
163
+ buildDetails: (url) => [url ? `url=${url}` : ""]
164
+ },
165
+ {
166
+ key: "task_success",
167
+ method: "taskSuccess",
168
+ label: "\u4EFB\u52A1\u5B8C\u6210",
169
+ group: "\u4EFB\u52A1",
170
+ step: "\u4EFB\u52A1",
171
+ status: "\u5B8C\u6210",
172
+ level: "success",
173
+ attention: "high"
174
+ },
175
+ {
176
+ key: "task_fail",
177
+ method: "taskFail",
178
+ label: "\u4EFB\u52A1\u5931\u8D25",
179
+ group: "\u4EFB\u52A1",
180
+ step: "\u4EFB\u52A1",
181
+ status: "\u5931\u8D25",
182
+ level: "error",
183
+ attention: "critical",
184
+ buildDetails: (url, err) => [
185
+ url ? `url=${url}` : "",
186
+ err ? `err=${toErrorMessage(err)}` : ""
187
+ ]
188
+ },
189
+ {
190
+ key: "runtime_headless",
191
+ method: "runtimeHeadless",
192
+ label: "\u8FD0\u884C\u6A21\u5F0F\u5F3A\u5236\u65E0\u5934",
193
+ group: "\u8FD0\u884C\u6A21\u5F0F",
194
+ step: "\u8FD0\u884C\u6A21\u5F0F",
195
+ status: "Apify \u73AF\u5883\u5F3A\u5236\u65E0\u5934",
196
+ level: "warning",
197
+ attention: "medium"
198
+ },
199
+ {
200
+ key: "login_inject_success",
201
+ method: "loginInjectSuccess",
202
+ label: "\u767B\u5F55\u6001\u6CE8\u5165\u6210\u529F",
203
+ group: "\u767B\u5F55",
204
+ step: "\u767B\u5F55\u6001\u6CE8\u5165",
205
+ status: "\u6210\u529F",
206
+ level: "success",
207
+ attention: "medium",
208
+ buildDetails: (detail) => [detail ? `detail=${detail}` : ""]
209
+ },
210
+ {
211
+ key: "login_inject_skip",
212
+ method: "loginInjectSkip",
213
+ label: "\u767B\u5F55\u6001\u6CE8\u5165\u8DF3\u8FC7",
214
+ group: "\u767B\u5F55",
215
+ step: "\u767B\u5F55\u6001\u6CE8\u5165",
216
+ status: "\u8DF3\u8FC7",
217
+ level: "warning",
218
+ attention: "medium",
219
+ buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ""]
220
+ },
221
+ {
222
+ key: "login_inject_fail",
223
+ method: "loginInjectFail",
224
+ label: "\u767B\u5F55\u6001\u6CE8\u5165\u5931\u8D25",
225
+ group: "\u767B\u5F55",
226
+ step: "\u767B\u5F55\u6001\u6CE8\u5165",
227
+ status: "\u5931\u8D25",
228
+ level: "error",
229
+ attention: "high",
230
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
231
+ },
232
+ {
233
+ key: "login_verify_success",
234
+ method: "loginVerifySuccess",
235
+ label: "\u767B\u5F55\u9A8C\u8BC1\u6210\u529F",
236
+ group: "\u767B\u5F55",
237
+ step: "\u767B\u5F55\u9A8C\u8BC1",
238
+ status: "\u6210\u529F",
239
+ level: "success",
240
+ attention: "high",
241
+ buildDetails: (detail) => [detail ? `detail=${detail}` : ""]
242
+ },
243
+ {
244
+ key: "login_verify_skip",
245
+ method: "loginVerifySkip",
246
+ label: "\u767B\u5F55\u9A8C\u8BC1\u8DF3\u8FC7",
247
+ group: "\u767B\u5F55",
248
+ step: "\u767B\u5F55\u9A8C\u8BC1",
249
+ status: "\u8DF3\u8FC7",
250
+ level: "warning",
251
+ attention: "medium",
252
+ buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ""]
253
+ },
254
+ {
255
+ key: "login_verify_fail",
256
+ method: "loginVerifyFail",
257
+ label: "\u767B\u5F55\u9A8C\u8BC1\u5931\u8D25",
258
+ group: "\u767B\u5F55",
259
+ step: "\u767B\u5F55\u9A8C\u8BC1",
260
+ status: "\u5931\u8D25",
261
+ level: "error",
262
+ attention: "critical",
263
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
264
+ },
265
+ {
266
+ key: "env_check_success",
267
+ method: "envCheckSuccess",
268
+ label: "\u73AF\u5883\u68C0\u67E5\u6210\u529F",
269
+ group: "\u73AF\u5883",
270
+ step: "\u73AF\u5883\u68C0\u67E5",
271
+ status: "\u6210\u529F",
272
+ level: "success",
273
+ attention: "medium",
274
+ buildDetails: (detail) => [detail ? `detail=${detail}` : ""]
275
+ },
276
+ {
277
+ key: "env_check_fail",
278
+ method: "envCheckFail",
279
+ label: "\u73AF\u5883\u68C0\u67E5\u5931\u8D25",
280
+ group: "\u73AF\u5883",
281
+ step: "\u73AF\u5883\u68C0\u67E5",
282
+ status: "\u5931\u8D25",
283
+ level: "error",
284
+ attention: "high",
285
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
286
+ },
287
+ {
288
+ key: "input_query_start",
289
+ method: "inputQuery",
290
+ label: "\u8F93\u5165\u67E5\u8BE2\u5F00\u59CB",
291
+ group: "\u8F93\u5165",
292
+ step: "\u8F93\u5165\u67E5\u8BE2",
293
+ status: "\u5F00\u59CB",
294
+ level: "start",
295
+ attention: "low",
296
+ buildDetails: (query) => [query ? `query=${query}` : ""]
297
+ },
298
+ {
299
+ key: "send_action",
300
+ method: "sendAction",
301
+ label: "\u53D1\u9001\u8BF7\u6C42",
302
+ group: "\u53D1\u9001",
303
+ step: "\u53D1\u9001\u8BF7\u6C42",
304
+ status: "\u70B9\u51FB\u53D1\u9001",
305
+ level: "info",
306
+ attention: "low"
307
+ },
308
+ {
309
+ key: "response_listen_start",
310
+ method: "responseListenStart",
311
+ label: "\u54CD\u5E94\u76D1\u542C\u5F00\u59CB",
312
+ group: "\u54CD\u5E94\u76D1\u542C",
313
+ step: "\u54CD\u5E94\u76D1\u542C",
314
+ status: "\u5F00\u59CB",
315
+ level: "start",
316
+ attention: "low",
317
+ buildDetails: (label, timeoutSec) => [
318
+ label ? `\u76EE\u6807=${label}` : "",
319
+ timeoutSec ? `timeout=${timeoutSec}s` : ""
320
+ ]
321
+ },
322
+ {
323
+ key: "response_listen_ready",
324
+ method: "responseListenReady",
325
+ label: "\u54CD\u5E94\u76D1\u542C\u5DF2\u914D\u7F6E",
326
+ group: "\u54CD\u5E94\u76D1\u542C",
327
+ step: "\u54CD\u5E94\u76D1\u542C",
328
+ status: "\u5DF2\u914D\u7F6E",
329
+ level: "info",
330
+ attention: "medium",
331
+ buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ""]
332
+ },
333
+ {
334
+ key: "response_listen_detected",
335
+ method: "responseListenDetected",
336
+ label: "\u54CD\u5E94\u76D1\u542C\u5DF2\u68C0\u6D4B",
337
+ group: "\u54CD\u5E94\u76D1\u542C",
338
+ step: "\u54CD\u5E94\u76D1\u542C",
339
+ status: "\u5DF2\u68C0\u6D4B",
340
+ level: "success",
341
+ attention: "medium",
342
+ buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ""]
343
+ },
344
+ {
345
+ key: "response_listen_timeout",
346
+ method: "responseListenTimeout",
347
+ label: "\u54CD\u5E94\u76D1\u542C\u8D85\u65F6",
348
+ group: "\u54CD\u5E94\u76D1\u542C",
349
+ step: "\u54CD\u5E94\u76D1\u542C",
350
+ status: "\u8D85\u65F6",
351
+ level: "error",
352
+ attention: "high",
353
+ buildDetails: (label, err) => [
354
+ label ? `\u76EE\u6807=${label}` : "",
355
+ err ? `err=${toErrorMessage(err)}` : ""
356
+ ]
357
+ },
358
+ {
359
+ key: "response_listen_end",
360
+ method: "responseListenEnd",
361
+ label: "\u54CD\u5E94\u76D1\u542C\u7ED3\u675F",
362
+ group: "\u54CD\u5E94\u76D1\u542C",
363
+ step: "\u54CD\u5E94\u76D1\u542C",
364
+ status: "\u7ED3\u675F",
365
+ level: "info",
366
+ attention: "low",
367
+ buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ""]
368
+ },
369
+ {
370
+ key: "response_wait_start",
371
+ method: "responseWaitStart",
372
+ label: "\u7B49\u5F85\u54CD\u5E94\u5F00\u59CB",
373
+ group: "\u7B49\u5F85\u54CD\u5E94",
374
+ step: "\u7B49\u5F85\u54CD\u5E94",
375
+ status: "\u5F00\u59CB",
376
+ level: "start",
377
+ attention: "low",
378
+ buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ""]
379
+ },
380
+ {
381
+ key: "response_wait_success",
382
+ method: "responseWaitSuccess",
383
+ label: "\u7B49\u5F85\u54CD\u5E94\u5B8C\u6210",
384
+ group: "\u7B49\u5F85\u54CD\u5E94",
385
+ step: "\u7B49\u5F85\u54CD\u5E94",
386
+ status: "\u5B8C\u6210",
387
+ level: "success",
388
+ attention: "medium",
389
+ buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ""]
390
+ },
391
+ {
392
+ key: "response_wait_fail",
393
+ method: "responseWaitFail",
394
+ label: "\u7B49\u5F85\u54CD\u5E94\u5931\u8D25",
395
+ group: "\u7B49\u5F85\u54CD\u5E94",
396
+ step: "\u7B49\u5F85\u54CD\u5E94",
397
+ status: "\u5931\u8D25",
398
+ level: "warning",
399
+ attention: "high",
400
+ buildDetails: (label, err) => [
401
+ label ? `\u76EE\u6807=${label}` : "",
402
+ err ? `err=${toErrorMessage(err)}` : ""
403
+ ]
404
+ },
405
+ {
406
+ key: "response_wait_retry",
407
+ method: "responseWaitRetry",
408
+ label: "\u7B49\u5F85\u54CD\u5E94\u91CD\u8BD5",
409
+ group: "\u7B49\u5F85\u54CD\u5E94",
410
+ step: "\u7B49\u5F85\u54CD\u5E94",
411
+ status: "\u91CD\u8BD5",
412
+ level: "warning",
413
+ attention: "medium",
414
+ buildDetails: (label, attempt) => [
415
+ label ? `\u76EE\u6807=${label}` : "",
416
+ attempt !== void 0 ? `\u5C1D\u8BD5=${attempt}` : ""
417
+ ]
418
+ },
419
+ {
420
+ key: "stream_chunk",
421
+ method: "streamChunk",
422
+ label: "\u6D41\u5F0F\u7247\u6BB5",
423
+ group: "\u6D41\u5F0F",
424
+ step: "\u6D41\u5F0F\u7247\u6BB5",
425
+ status: "",
426
+ level: "info",
427
+ attention: "low",
428
+ throttleKey: "stream-chunk",
429
+ throttleMs: 2e3,
430
+ buildDetails: (length, snippet) => [
431
+ length !== void 0 ? `len=${length}` : "",
432
+ snippet ? `preview="${normalizeSnippet(snippet)}"` : ""
433
+ ]
434
+ },
435
+ {
436
+ key: "stream_events_parsed",
437
+ method: "streamEventsParsed",
438
+ label: "\u6D41\u5F0F\u4E8B\u4EF6\u89E3\u6790\u5B8C\u6210",
439
+ group: "\u6D41\u5F0F",
440
+ step: "\u6D41\u5F0F\u4E8B\u4EF6\u89E3\u6790",
441
+ status: "\u5B8C\u6210",
442
+ level: "info",
443
+ attention: "low",
444
+ throttleKey: "stream-events",
445
+ throttleMs: 4e3,
446
+ buildDetails: (count) => [count !== void 0 ? `count=${count}` : ""]
447
+ },
448
+ {
449
+ key: "stream_complete_event",
450
+ method: "streamCompleteEvent",
451
+ label: "\u6D41\u5F0F\u5B8C\u6210\u4E8B\u4EF6\u6355\u83B7",
452
+ group: "\u6D41\u5F0F",
453
+ step: "\u6D41\u5F0F\u4E8B\u4EF6",
454
+ status: "\u5B8C\u6210\u4E8B\u4EF6\u5DF2\u6355\u83B7",
455
+ level: "success",
456
+ attention: "medium"
457
+ },
458
+ {
459
+ key: "stream_end",
460
+ method: "streamEnd",
461
+ label: "\u6D41\u5F0F\u54CD\u5E94\u7ED3\u675F",
462
+ group: "\u6D41\u5F0F",
463
+ step: "\u6D41\u5F0F\u54CD\u5E94",
464
+ status: "\u7ED3\u675F",
465
+ level: "info",
466
+ attention: "low"
467
+ },
468
+ {
469
+ key: "reference_expand_start",
470
+ method: "referenceExpandStart",
471
+ label: "\u5F15\u7528\u5C55\u5F00\u5F00\u59CB",
472
+ group: "\u5F15\u7528",
473
+ step: "\u5F15\u7528\u5C55\u5F00",
474
+ status: "\u5F00\u59CB",
475
+ level: "start",
476
+ attention: "low",
477
+ buildDetails: (label) => [label ? `\u76EE\u6807=${label}` : ""]
478
+ },
479
+ {
480
+ key: "reference_expand_fail",
481
+ method: "referenceExpandFail",
482
+ label: "\u5F15\u7528\u5C55\u5F00\u5931\u8D25",
483
+ group: "\u5F15\u7528",
484
+ step: "\u5F15\u7528\u5C55\u5F00",
485
+ status: "\u5931\u8D25",
486
+ level: "warning",
487
+ attention: "medium",
488
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
489
+ },
490
+ {
491
+ key: "screenshot_start",
492
+ method: "screenshotStart",
493
+ label: "\u622A\u56FE\u5F00\u59CB",
494
+ group: "\u622A\u56FE",
495
+ step: "\u622A\u56FE",
496
+ status: "\u5F00\u59CB",
497
+ level: "start",
498
+ attention: "low"
499
+ },
500
+ {
501
+ key: "screenshot_success",
502
+ method: "screenshotSuccess",
503
+ label: "\u622A\u56FE\u6210\u529F",
504
+ group: "\u622A\u56FE",
505
+ step: "\u622A\u56FE",
506
+ status: "\u6210\u529F",
507
+ level: "success",
508
+ attention: "high"
509
+ },
510
+ {
511
+ key: "screenshot_fail",
512
+ method: "screenshotFail",
513
+ label: "\u622A\u56FE\u5931\u8D25",
514
+ group: "\u622A\u56FE",
515
+ step: "\u622A\u56FE",
516
+ status: "\u5931\u8D25",
517
+ level: "warning",
518
+ attention: "high",
519
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
520
+ },
521
+ {
522
+ key: "share_start",
523
+ method: "shareStart",
524
+ label: "\u5206\u4EAB\u94FE\u63A5\u5F00\u59CB",
525
+ group: "\u5206\u4EAB",
526
+ step: "\u5206\u4EAB\u94FE\u63A5",
527
+ status: "\u5F00\u59CB",
528
+ level: "start",
529
+ attention: "low"
530
+ },
531
+ {
532
+ key: "share_progress",
533
+ method: "shareProgress",
534
+ label: "\u5206\u4EAB\u94FE\u63A5\u6B65\u9AA4",
535
+ group: "\u5206\u4EAB",
536
+ step: "\u5206\u4EAB\u94FE\u63A5",
537
+ status: "\u6B65\u9AA4",
538
+ level: "info",
539
+ attention: "low",
540
+ buildDetails: (label) => [label ? `\u6B65\u9AA4=${label}` : ""]
541
+ },
542
+ {
543
+ key: "share_success",
544
+ method: "shareSuccess",
545
+ label: "\u5206\u4EAB\u94FE\u63A5\u6210\u529F",
546
+ group: "\u5206\u4EAB",
547
+ step: "\u5206\u4EAB\u94FE\u63A5",
548
+ status: "\u6210\u529F",
549
+ level: "success",
550
+ attention: "high",
551
+ buildDetails: (link) => [link ? `\u94FE\u63A5=${link}` : ""]
552
+ },
553
+ {
554
+ key: "share_fail",
555
+ method: "shareFail",
556
+ label: "\u5206\u4EAB\u94FE\u63A5\u5931\u8D25",
557
+ group: "\u5206\u4EAB",
558
+ step: "\u5206\u4EAB\u94FE\u63A5",
559
+ status: "\u5931\u8D25",
560
+ level: "warning",
561
+ attention: "high",
562
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
563
+ },
564
+ {
565
+ key: "share_skip",
566
+ method: "shareSkip",
567
+ label: "\u5206\u4EAB\u94FE\u63A5\u8DF3\u8FC7",
568
+ group: "\u5206\u4EAB",
569
+ step: "\u5206\u4EAB\u94FE\u63A5",
570
+ status: "\u8DF3\u8FC7",
571
+ level: "warning",
572
+ attention: "medium",
573
+ buildDetails: (reason) => [reason ? `\u539F\u56E0=${reason}` : ""]
574
+ },
575
+ {
576
+ key: "data_push_success",
577
+ method: "dataPushSuccess",
578
+ label: "\u6570\u636E\u63A8\u9001\u6210\u529F",
579
+ group: "\u6570\u636E\u63A8\u9001",
580
+ step: "\u6570\u636E\u63A8\u9001",
581
+ status: "\u6210\u529F",
582
+ level: "success",
583
+ attention: "medium",
584
+ buildDetails: (label) => [label ? `\u8BF4\u660E=${label}` : ""]
585
+ },
586
+ {
587
+ key: "data_push_fail",
588
+ method: "dataPushFail",
589
+ label: "\u6570\u636E\u63A8\u9001\u5931\u8D25",
590
+ group: "\u6570\u636E\u63A8\u9001",
591
+ step: "\u6570\u636E\u63A8\u9001",
592
+ status: "\u5931\u8D25",
593
+ level: "error",
594
+ attention: "high",
595
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
596
+ },
597
+ {
598
+ key: "popup_detected",
599
+ method: "popupDetected",
600
+ label: "\u5F39\u7A97\u68C0\u6D4B",
601
+ group: "\u5F39\u7A97",
602
+ step: "\u5F39\u7A97\u5904\u7406",
603
+ status: "\u68C0\u6D4B\u5230\u906E\u7F69",
604
+ level: "warning",
605
+ attention: "medium",
606
+ buildDetails: (detail) => [detail ? `detail=${detail}` : ""]
607
+ },
608
+ {
609
+ key: "popup_close_attempt",
610
+ method: "popupCloseAttempt",
611
+ label: "\u5F39\u7A97\u5173\u95ED\u5C1D\u8BD5",
612
+ group: "\u5F39\u7A97",
613
+ step: "\u5F39\u7A97\u5904\u7406",
614
+ status: "\u5C1D\u8BD5\u5173\u95ED",
615
+ level: "info",
616
+ attention: "low",
617
+ buildDetails: (detail) => [detail ? `detail=${detail}` : ""]
618
+ },
619
+ {
620
+ key: "popup_close_success",
621
+ method: "popupCloseSuccess",
622
+ label: "\u5F39\u7A97\u5173\u95ED\u5B8C\u6210",
623
+ group: "\u5F39\u7A97",
624
+ step: "\u5F39\u7A97\u5904\u7406",
625
+ status: "\u5173\u95ED\u5B8C\u6210",
626
+ level: "success",
627
+ attention: "medium"
628
+ },
629
+ {
630
+ key: "popup_close_fail",
631
+ method: "popupCloseFail",
632
+ label: "\u5F39\u7A97\u5173\u95ED\u5931\u8D25",
633
+ group: "\u5F39\u7A97",
634
+ step: "\u5F39\u7A97\u5904\u7406",
635
+ status: "\u5173\u95ED\u5931\u8D25",
636
+ level: "warning",
637
+ attention: "medium",
638
+ buildDetails: (err) => [err ? `err=${toErrorMessage(err)}` : ""]
639
+ }
640
+ ];
641
+ var LOG_TEMPLATES = LOG_DEFINITIONS.map((definition) => {
642
+ const attention = definition.attention || "medium";
643
+ const attentionRank = ATTENTION_RANK[attention] || ATTENTION_RANK.medium;
644
+ const defaultSelected = attentionRank >= DEFAULT_ATTENTION_RANK;
645
+ return {
646
+ key: definition.key,
647
+ label: definition.label,
648
+ group: definition.group,
649
+ attention,
650
+ patterns: buildDefinitionPatterns(definition),
651
+ defaultSelected
652
+ };
653
+ });
654
+ var buildStepLine = (step, status, details = []) => {
655
+ const parts = [];
656
+ const decoratedStep = step ? decorateLabel(step, STEP_EMOJIS) : "";
657
+ const base = decoratedStep ? `${STEP_PREFIX} ${decoratedStep}` : STEP_PREFIX;
658
+ parts.push(base.trim());
659
+ if (status) parts.push(decorateLabel(status, STATUS_EMOJIS));
660
+ const detailParts = details.filter(Boolean);
661
+ if (detailParts.length > 0) {
662
+ parts.push(...detailParts);
663
+ }
664
+ return parts.join(STEP_SEPARATOR);
665
+ };
666
+ var createThrottle = () => {
667
+ const lastMap = /* @__PURE__ */ new Map();
668
+ return (key, intervalMs, fn) => {
669
+ const now = Date.now();
670
+ const last = lastMap.get(key) || 0;
671
+ if (now - last >= intervalMs) {
672
+ lastMap.set(key, now);
673
+ fn();
674
+ }
675
+ };
676
+ };
677
+ var createTemplateLogger = (baseLogger = createBaseLogger()) => {
678
+ const throttle = createThrottle();
679
+ const info = (line) => baseLogger.info(line);
680
+ const success = (line) => baseLogger.success(line);
681
+ const warning = (line) => baseLogger.warning(line);
682
+ const error = (line) => baseLogger.error(line);
683
+ const debug = (line) => baseLogger.debug(line);
684
+ const start = (line) => baseLogger.start(line);
685
+ const stepInfo = (step, status, details = []) => info(buildStepLine(step, status, details));
686
+ const stepSuccess = (step, status, details = []) => success(buildStepLine(step, status, details));
687
+ const stepWarn = (step, status, details = []) => warning(buildStepLine(step, status, details));
688
+ const stepError = (step, status, details = []) => error(buildStepLine(step, status, details));
689
+ const stepStart = (step, status, details = []) => start(buildStepLine(step, status, details));
690
+ const stepHandlers = {
691
+ info: stepInfo,
692
+ success: stepSuccess,
693
+ warning: stepWarn,
694
+ error: stepError,
695
+ start: stepStart
696
+ };
697
+ const logFromDefinition = (definition, details = []) => {
698
+ const handler = stepHandlers[definition.level] || stepInfo;
699
+ const payload = [...details, buildLogTag(definition.key)];
700
+ const emit = () => handler(definition.step, definition.status, payload);
701
+ if (definition.throttleMs) {
702
+ throttle(definition.throttleKey || definition.key, definition.throttleMs, emit);
703
+ return;
704
+ }
705
+ emit();
706
+ };
707
+ const definitionMethods = {};
708
+ LOG_DEFINITIONS.forEach((definition) => {
709
+ if (!definition.method) return;
710
+ definitionMethods[definition.method] = (...args) => {
711
+ const details = definition.buildDetails ? definition.buildDetails(...args) : [];
712
+ logFromDefinition(definition, details);
713
+ };
714
+ });
715
+ return {
716
+ step: (step, status, details, level = "info") => {
717
+ if (level === "error") return stepError(step, status, details);
718
+ if (level === "warn" || level === "warning") return stepWarn(step, status, details);
719
+ if (level === "start") return stepStart(step, status, details);
720
+ if (level === "success") return stepSuccess(step, status, details);
721
+ return stepInfo(step, status, details);
722
+ },
723
+ info: (message) => info(message),
724
+ success: (message) => success(message),
725
+ warning: (message) => warning(message),
726
+ warn: (message) => warning(message),
727
+ error: (message) => error(message),
728
+ debug: (message) => debug(message),
729
+ start: (message) => start(message),
730
+ ...definitionMethods
731
+ };
732
+ };
733
+ var getDefaultBaseLogger = () => createBaseLogger("", defaultLogger);
734
+ var Logger = {
735
+ setLogger: (logger) => setDefaultLogger(logger),
736
+ info: (message) => getDefaultBaseLogger().info(message),
737
+ success: (message) => getDefaultBaseLogger().success(message),
738
+ warning: (message) => getDefaultBaseLogger().warning(message),
739
+ warn: (message) => getDefaultBaseLogger().warning(message),
740
+ error: (message) => getDefaultBaseLogger().error(message),
741
+ debug: (message) => getDefaultBaseLogger().debug(message),
742
+ start: (message) => getDefaultBaseLogger().start(message),
743
+ useTemplate: (logger) => createTemplateLogger(createBaseLogger("", logger || defaultLogger))
744
+ };
745
+
746
+ // entrys/browser.js
747
+ var usePlaywrightToolKit = () => {
748
+ throw new Error("usePlaywrightToolKit \u4EC5\u652F\u6301\u5728 Node \u73AF\u5883\u4E2D\u4F7F\u7528\u3002");
749
+ };
750
+ var browser = { Logger, LOG_TEMPLATES, stripAnsi };
751
+ export {
752
+ LOG_TEMPLATES,
753
+ Logger,
754
+ browser,
755
+ stripAnsi,
756
+ usePlaywrightToolKit
757
+ };
758
+ //# sourceMappingURL=browser.js.map