@skrillex1224/playwright-toolkit 2.1.96 → 2.1.97

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
@@ -1331,15 +1331,17 @@ var Sse = {
1331
1331
  * @param {function(Error, function): void} [options.onTimeout] - (error, reject) => void
1332
1332
  * @param {number} [options.initialTimeout=90000] - 初始数据接收超时 (ms),默认 90s
1333
1333
  * @param {number} [options.timeout=180000] - 整体请求超时时间 (ms),默认 180s
1334
- * @returns {[Promise<any>, function(): void]} - 返回 [promise, cancel] 元组,promise 为流数据,cancel 为取消监听的函数
1334
+ * @param {boolean} [options.autoUnroute=true] - resolve/reject 后是否自动取消拦截
1335
+ * @returns {Promise<any>} - 返回 Promise,当流满足条件时 resolve
1335
1336
  */
1336
- intercept(page, urlPattern, options = {}) {
1337
+ async intercept(page, urlPattern, options = {}) {
1337
1338
  const {
1338
1339
  onData,
1339
1340
  onEnd,
1340
1341
  onTimeout,
1341
1342
  initialTimeout = 9e4,
1342
- overallTimeout = 18e4
1343
+ overallTimeout = 18e4,
1344
+ autoUnroute = true
1343
1345
  } = options;
1344
1346
  let initialTimer = null;
1345
1347
  let overallTimer = null;
@@ -1350,15 +1352,31 @@ var Sse = {
1350
1352
  initialTimer = null;
1351
1353
  overallTimer = null;
1352
1354
  };
1353
- let routeHandler = null;
1354
- let isCancelled = false;
1355
1355
  const workPromise = new Promise((resolve, reject) => {
1356
- routeHandler = async (route) => {
1357
- if (isCancelled) {
1358
- route.continue().catch(() => {
1359
- });
1360
- return;
1361
- }
1356
+ let finished = false;
1357
+ let unrouteRequested = false;
1358
+ const safeUnroute = () => {
1359
+ if (!autoUnroute) return;
1360
+ if (unrouteRequested) return;
1361
+ unrouteRequested = true;
1362
+ page.unroute(urlPattern, routeHandler).catch(() => {
1363
+ });
1364
+ };
1365
+ const safeResolve = (value) => {
1366
+ if (finished) return;
1367
+ finished = true;
1368
+ clearAllTimers();
1369
+ safeUnroute();
1370
+ resolve(value);
1371
+ };
1372
+ const safeReject2 = (error) => {
1373
+ if (finished) return;
1374
+ finished = true;
1375
+ clearAllTimers();
1376
+ safeUnroute();
1377
+ reject(error);
1378
+ };
1379
+ const routeHandler = async (route) => {
1362
1380
  const request = route.request();
1363
1381
  logger8.info(`[MITM] \u5DF2\u62E6\u622A\u8BF7\u6C42: ${request.url()}`);
1364
1382
  try {
@@ -1392,7 +1410,7 @@ var Sse = {
1392
1410
  accumulatedText += textChunk;
1393
1411
  if (onData) {
1394
1412
  try {
1395
- onData(textChunk, resolve, accumulatedText);
1413
+ onData(textChunk, safeResolve, accumulatedText);
1396
1414
  } catch (e) {
1397
1415
  logger8.fail(`onData \u9519\u8BEF`, e);
1398
1416
  }
@@ -1403,12 +1421,12 @@ var Sse = {
1403
1421
  clearAllTimers();
1404
1422
  if (onEnd) {
1405
1423
  try {
1406
- onEnd(accumulatedText, resolve);
1424
+ onEnd(accumulatedText, safeResolve);
1407
1425
  } catch (e) {
1408
1426
  logger8.fail(`onEnd \u9519\u8BEF`, e);
1409
1427
  }
1410
1428
  } else if (!onData) {
1411
- resolve(accumulatedText);
1429
+ safeResolve(accumulatedText);
1412
1430
  }
1413
1431
  route.fulfill({
1414
1432
  status: res.statusCode,
@@ -1422,7 +1440,7 @@ var Sse = {
1422
1440
  clearAllTimers();
1423
1441
  route.abort().catch(() => {
1424
1442
  });
1425
- reject(e);
1443
+ safeReject2(e);
1426
1444
  });
1427
1445
  if (postData) req.write(postData);
1428
1446
  req.end();
@@ -1430,10 +1448,10 @@ var Sse = {
1430
1448
  clearAllTimers();
1431
1449
  route.continue().catch(() => {
1432
1450
  });
1433
- reject(e);
1451
+ safeReject2(e);
1434
1452
  }
1435
1453
  };
1436
- page.route(urlPattern, routeHandler).catch(reject);
1454
+ page.route(urlPattern, routeHandler).catch(safeReject2);
1437
1455
  });
1438
1456
  const timeoutPromise = new Promise((_, reject) => {
1439
1457
  initialTimer = setTimeout(() => {
@@ -1446,12 +1464,12 @@ var Sse = {
1446
1464
  clearAllTimers();
1447
1465
  if (onTimeout) {
1448
1466
  try {
1449
- onTimeout(error, reject);
1467
+ onTimeout(error, (err) => safeReject(err));
1450
1468
  } catch (e) {
1451
- reject(e);
1469
+ safeReject(e);
1452
1470
  }
1453
1471
  } else {
1454
- reject(error);
1472
+ safeReject(error);
1455
1473
  }
1456
1474
  }
1457
1475
  }, initialTimeout);
@@ -1464,12 +1482,12 @@ var Sse = {
1464
1482
  clearAllTimers();
1465
1483
  if (onTimeout) {
1466
1484
  try {
1467
- onTimeout(error, reject);
1485
+ onTimeout(error, (err) => safeReject(err));
1468
1486
  } catch (e) {
1469
- reject(e);
1487
+ safeReject(e);
1470
1488
  }
1471
1489
  } else {
1472
- reject(error);
1490
+ safeReject(error);
1473
1491
  }
1474
1492
  }, overallTimeout);
1475
1493
  });
@@ -1480,20 +1498,7 @@ var Sse = {
1480
1498
  const racePromise = Promise.race([workPromise, timeoutPromise]);
1481
1499
  racePromise.catch(() => {
1482
1500
  });
1483
- const cancel = async () => {
1484
- if (isCancelled) return;
1485
- isCancelled = true;
1486
- clearAllTimers();
1487
- if (routeHandler) {
1488
- try {
1489
- await page.unroute(urlPattern, routeHandler);
1490
- logger8.info("[MITM] \u5DF2\u53D6\u6D88 SSE \u6D41\u76D1\u542C");
1491
- } catch (e) {
1492
- logger8.debug("[MITM] \u53D6\u6D88\u76D1\u542C\u65F6\u51FA\u9519\uFF08\u53EF\u80FD\u5DF2\u53D6\u6D88\uFF09");
1493
- }
1494
- }
1495
- };
1496
- return [racePromise, cancel];
1501
+ return racePromise;
1497
1502
  }
1498
1503
  };
1499
1504