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