@skrillex1224/playwright-toolkit 2.1.38 → 2.1.40

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