@skrillex1224/playwright-toolkit 2.1.46 → 2.1.47

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
@@ -2308,8 +2308,11 @@ var Mutation = {
2308
2308
  * @param {Object} [options] - 配置选项
2309
2309
  * @param {number} [options.stableTime] - 无变化持续时间后 resolve (毫秒, 默认: 5000)
2310
2310
  * @param {number} [options.timeout] - 整体超时时间 (毫秒, 默认: 60000)
2311
- * @param {Function} [options.onMutation] - 变化时的回调钩子 (mutationCount: number) => void
2312
- * @returns {Promise<{ mutationCount: number, stableTime: number }>} - 返回变化次数和稳定时长
2311
+ * @param {Function} [options.onMutation] - 变化时的回调钩子
2312
+ * 签名: ({ mutationCount, innerHTML, innerText }) => any
2313
+ * 返回 null/undefined: 正常重置稳定计时
2314
+ * 返回其他值: 暂停稳定计时(timeout 仍然生效)
2315
+ * @returns {Promise<{ mutationCount: number, stableTime: number, wasPaused: boolean }>}
2313
2316
  */
2314
2317
  async waitForStable(page, selectors, options = {}) {
2315
2318
  const selectorList = Array.isArray(selectors) ? selectors : [selectors];
@@ -2317,25 +2320,28 @@ var Mutation = {
2317
2320
  const timeout = options.timeout ?? 6e4;
2318
2321
  const onMutation = options.onMutation;
2319
2322
  logger9.start("waitForStable", `\u76D1\u63A7 ${selectorList.length} \u4E2A\u9009\u62E9\u5668, \u7A33\u5B9A\u65F6\u95F4=${stableTime}ms`);
2320
- const eventName = generateKey("pk_mut_evt");
2321
2323
  const callbackName = generateKey("pk_mut_cb");
2322
2324
  if (onMutation) {
2323
2325
  try {
2324
- await page.exposeFunction(callbackName, (count) => {
2326
+ await page.exposeFunction(callbackName, async (context) => {
2325
2327
  try {
2326
- onMutation(count);
2328
+ const result2 = await onMutation(context);
2329
+ return result2 === null || result2 === void 0 ? "__CONTINUE__" : "__PAUSE__";
2327
2330
  } catch (e) {
2331
+ return "__CONTINUE__";
2328
2332
  }
2329
2333
  });
2330
2334
  } catch (e) {
2331
2335
  }
2332
2336
  }
2333
2337
  const result = await page.evaluate(
2334
- async ({ selectorList: selectorList2, stableTime: stableTime2, timeout: timeout2, eventName: eventName2, callbackName: callbackName2, hasCallback }) => {
2338
+ async ({ selectorList: selectorList2, stableTime: stableTime2, timeout: timeout2, callbackName: callbackName2, hasCallback }) => {
2335
2339
  return new Promise((resolve, reject) => {
2336
2340
  let mutationCount = 0;
2337
2341
  let stableTimer = null;
2338
2342
  let timeoutTimer = null;
2343
+ let isPaused = false;
2344
+ let wasPaused = false;
2339
2345
  const observers = [];
2340
2346
  const cleanup = () => {
2341
2347
  observers.forEach((obs) => obs.disconnect());
@@ -2344,24 +2350,53 @@ var Mutation = {
2344
2350
  };
2345
2351
  const resetStableTimer = () => {
2346
2352
  if (stableTimer) clearTimeout(stableTimer);
2353
+ if (isPaused) return;
2347
2354
  stableTimer = setTimeout(() => {
2348
2355
  cleanup();
2349
- resolve({ mutationCount, stableTime: stableTime2 });
2356
+ resolve({ mutationCount, stableTime: stableTime2, wasPaused });
2350
2357
  }, stableTime2);
2351
2358
  };
2359
+ const pauseStableTimer = () => {
2360
+ if (stableTimer) {
2361
+ clearTimeout(stableTimer);
2362
+ stableTimer = null;
2363
+ }
2364
+ isPaused = true;
2365
+ wasPaused = true;
2366
+ };
2367
+ const resumeStableTimer = () => {
2368
+ isPaused = false;
2369
+ resetStableTimer();
2370
+ };
2352
2371
  timeoutTimer = setTimeout(() => {
2353
2372
  cleanup();
2354
- reject(new Error(`waitForStable \u8D85\u65F6 (${timeout2}ms), \u5DF2\u68C0\u6D4B\u5230 ${mutationCount} \u6B21\u53D8\u5316`));
2373
+ reject(new Error(`waitForStable \u8D85\u65F6 (${timeout2}ms), \u5DF2\u68C0\u6D4B\u5230 ${mutationCount} \u6B21\u53D8\u5316, isPaused=${isPaused}`));
2355
2374
  }, timeout2);
2356
2375
  selectorList2.forEach((selector) => {
2357
2376
  const elements = document.querySelectorAll(selector);
2358
2377
  elements.forEach((element) => {
2359
- const observer = new MutationObserver((mutations) => {
2378
+ const observer = new MutationObserver(async (mutations) => {
2360
2379
  mutationCount += mutations.length;
2361
2380
  if (hasCallback && window[callbackName2]) {
2362
- window[callbackName2](mutationCount);
2381
+ const innerHTML = element.innerHTML || "";
2382
+ const innerText = element.innerText || element.textContent || "";
2383
+ try {
2384
+ const signal = await window[callbackName2]({
2385
+ mutationCount,
2386
+ innerHTML,
2387
+ innerText
2388
+ });
2389
+ if (signal === "__PAUSE__") {
2390
+ pauseStableTimer();
2391
+ } else {
2392
+ resumeStableTimer();
2393
+ }
2394
+ } catch (e) {
2395
+ resumeStableTimer();
2396
+ }
2397
+ } else {
2398
+ resetStableTimer();
2363
2399
  }
2364
- resetStableTimer();
2365
2400
  });
2366
2401
  observer.observe(element, {
2367
2402
  childList: true,
@@ -2374,15 +2409,38 @@ var Mutation = {
2374
2409
  });
2375
2410
  if (observers.length === 0) {
2376
2411
  cleanup();
2377
- resolve({ mutationCount: 0, stableTime: 0 });
2412
+ resolve({ mutationCount: 0, stableTime: 0, wasPaused: false });
2378
2413
  return;
2379
2414
  }
2380
- resetStableTimer();
2415
+ const runInitialCheck = async () => {
2416
+ if (hasCallback && window[callbackName2]) {
2417
+ const firstSelector = selectorList2[0];
2418
+ const firstElement = document.querySelector(firstSelector);
2419
+ if (firstElement) {
2420
+ const innerHTML = firstElement.innerHTML || "";
2421
+ const innerText = firstElement.innerText || firstElement.textContent || "";
2422
+ try {
2423
+ const signal = await window[callbackName2]({
2424
+ mutationCount: 0,
2425
+ innerHTML,
2426
+ innerText
2427
+ });
2428
+ if (signal === "__PAUSE__") {
2429
+ pauseStableTimer();
2430
+ return;
2431
+ }
2432
+ } catch (e) {
2433
+ }
2434
+ }
2435
+ }
2436
+ resetStableTimer();
2437
+ };
2438
+ runInitialCheck();
2381
2439
  });
2382
2440
  },
2383
- { selectorList, stableTime, timeout, eventName, callbackName, hasCallback: !!onMutation }
2441
+ { selectorList, stableTime, timeout, callbackName, hasCallback: !!onMutation }
2384
2442
  );
2385
- logger9.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316`);
2443
+ logger9.success("waitForStable", `DOM \u7A33\u5B9A, \u603B\u5171 ${result.mutationCount} \u6B21\u53D8\u5316${result.wasPaused ? ", \u66FE\u6682\u505C\u8BA1\u65F6" : ""}`);
2386
2444
  return result;
2387
2445
  },
2388
2446
  /**